diff --git a/.claude/pipeline_state.json b/.claude/pipeline_state.json new file mode 100644 index 0000000000000000000000000000000000000000..21b94fdddb53113c7db5d9eb6cfc0c0927c78809 --- /dev/null +++ b/.claude/pipeline_state.json @@ -0,0 +1,48 @@ +{ + "current_stage": "evaluation_complete", + "model_version": "v7", + "teacher_model": "Qwen/Qwen2.5-Coder-14B-Instruct-AWQ", + "teacher_server": "vllm @ 192.168.13.21:8081", + "student_model": "unsloth/Llama-3.1-8B-Instruct", + "previous_version": { + "version": "v6", + "pairs": 171, + "train_split": 145, + "eval_split": 26, + "structural_score": 0.97, + "perfect_scores": "19/26", + "adapter_path": "models/codewraith-lora-8b-v6/", + "hf_repo": "slenk/codewraith-lora-8b", + "status": "complete" + }, + "current_run": { + "output_file": "data/training_pairs_v7.jsonl", + "pairs_generated": 231, + "failures": 19, + "total_source_files": 250, + "train_split": 197, + "eval_split": 34, + "structural_score": 0.97, + "perfect_scores": "25/34", + "good_scores": "29/34", + "training_loss": 0.12, + "adapter_path": "models/codewraith-lora-8b-v7/", + "status": "evaluation_complete", + "notes": "v7 matches v6 structural score (0.97) with 35% more training data. 4 low scores (0.50) likely Python 2 source files. Ready for upload and deployment." + }, + "running_pids": [], + "last_progress": "evaluation complete", + "timestamp": "2026-04-16T00:15:00-04:00", + "next_steps": [ + "Upload v7 adapter to HF Hub (slenk/codewraith-lora-8b)", + "Update README with v7 results", + "Redeploy HF Space with v7 adapter" + ], + "known_constraints": { + "vram": "32GB (RTX 5090)", + "32b_max_context": 4096, + "14b_max_context": 16384, + "generation_command": "uv run --extra ml python3 -c \"from codewraith.teacher.generator import generate_dataset; generate_dataset('data/source_files', 'data/training_pairs_v7.jsonl', model='Qwen/Qwen2.5-Coder-14B-Instruct-AWQ', backend='vllm')\"", + "vllm_command": "uv run --extra ml python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-Coder-14B-Instruct-AWQ --port 8081 --max-model-len 16384 --gpu-memory-utilization 0.90 --host 0.0.0.0" + } +} diff --git a/.claude/scheduled_tasks.lock b/.claude/scheduled_tasks.lock new file mode 100644 index 0000000000000000000000000000000000000000..51c3000b30240505a1c1ae07244555da4ac9451f --- /dev/null +++ b/.claude/scheduled_tasks.lock @@ -0,0 +1 @@ +{"sessionId":"65720353-dd32-4bab-971c-cca9aacd06fe","pid":74275,"acquiredAt":1776308286647} \ No newline at end of file diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000000000000000000000000000000000000..7c8f90f9b67cdb8b9d28c20b86e70ed069999f4f --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,64 @@ +{ + "permissions": { + "allow": [ + "Bash(bash:*)", + "Bash([ -f \"$HOME/.claude/CLAUDE.md\" ])", + "Bash(node:*)", + "Bash(chmod 755:*)", + "Bash(npm view:*)", + "Bash(npm install:*)", + "Bash(command -v omc)", + "Bash(omc --version)", + "Bash(claude mcp:*)", + "mcp__plugin_oh-my-claudecode_t__state_write", + "mcp__plugin_oh-my-claudecode_t__state_clear", + "Bash(command -v libreoffice)", + "Bash(libreoffice --headless --convert-to txt \"/mnt/c/Users/derek/Downloads/Final Project Rubric.odt\" --outdir /tmp)", + "Read(//tmp/**)", + "Bash(command -v pandoc)", + "Bash(pandoc \"/mnt/c/Users/derek/Downloads/Final Project Rubric.odt\" -t plain)", + "Bash(uv sync:*)", + "Bash(uv run:*)", + "Bash(git add:*)", + "Bash(curl -s http://127.0.0.1:11434/api/tags)", + "Bash(python3 -c \"import sys,json; data=json.load\\(sys.stdin\\); [print\\(m['name']\\) for m in data.get\\('models',[]\\)]\")", + "Bash(curl -s http://127.0.0.1:11434/api/generate -d '{\"model\":\"codewraith-teacher\",\"keep_alive\":0}')", + "Bash(curl -s http://127.0.0.1:11434/api/generate -d '{\"model\":\"qwen3:30b-a3b\",\"keep_alive\":0}')", + "Bash(command -v chub)", + "WebSearch", + "mcp__context7__resolve-library-id", + "mcp__context7__query-docs", + "Bash(git commit:*)", + "Bash(nvidia-smi:*)", + "Bash(curl -s --max-time 10 http://127.0.0.1:11434/api/generate -d '{\"model\":\"qwen3:30b-a3b\",\"prompt\":\"Say hello\",\"stream\":false,\"options\":{\"num_ctx\":512}}')", + "Bash(curl -s --max-time 10 http://127.0.0.1:11434/api/generate -d '{\"model\":\"qwen3:30b-a3b\",\"keep_alive\":0}')", + "Bash(pip index:*)", + "Bash(curl -s https://pypi.org/pypi/gradio/json)", + "Bash(python3 -c \"import sys,json; print\\('Latest:', json.load\\(sys.stdin\\)['info']['version']\\)\")", + "Bash(pkill -f \"codewraith.teacher.generator\")", + "Bash(curl -s --max-time 10 http://127.0.0.1:11434/api/tags)", + "Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); print\\('Ollama OK:', len\\(d.get\\('models',[]\\)\\), 'models'\\)\")", + "Bash(curl -s http://127.0.0.1:11434/api/generate -d '{\"model\":\"gemma4:26b\",\"keep_alive\":0}')", + "Bash(du -sh /home/slenk/dev/CodeWraith/*/)", + "Bash(du -sh /home/slenk/dev/CodeWraith/data/*.json)", + "Bash(du -sh /home/slenk/dev/CodeWraith/.*)", + "Bash(git:*)", + "Bash(du -sh /home/slenk/dev/CodeWraith/data/chromadb/ /home/slenk/dev/CodeWraith/data/*.jsonl)", + "Bash(hf upload:*)", + "Bash(hf whoami:*)", + "Bash(hf auth:*)", + "Bash(hf spaces:*)", + "Bash(python:*)", + "Bash(python3:*)", + "WebFetch(domain:ollama.com)", + "Bash(curl -s http://127.0.0.1:11434/api/generate -d '{\"model\":\"qwen2.5-coder:32b-instruct-q6_K\",\"prompt\":\"Say hello\",\"stream\":false,\"options\":{\"num_ctx\":256}}')", + "Bash(HF_TOKEN=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 hf upload:*)", + "Bash(curl -s http://127.0.0.1:8081/health)", + "Bash(curl -s http://192.168.13.21:8081/v1/chat/completions -H 'Content-Type: application/json' -d '{:*)", + "Bash(curl:*)", + "Bash(chmod +x .venv/bin/pytest)", + "Bash(awk '{print $2}')", + "Bash(ls /home/slenk/dev/CodeWraith/data/source_files/*.py)" + ] + } +} diff --git a/.gitattributes b/.gitattributes index 7ba91dd027f7a78dabe63c6d067890e8108a67b8..124c1e9a6c53ec35cdd90a14265acca236be852a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -34,3 +34,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text data/chromadb/chroma.sqlite3 filter=lfs diff=lfs merge=lfs -text +Final[[:space:]]Project[[:space:]]Rubric.odt filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..5fa3ad77d26133411b64d39c88c5ff0ee2674b5e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,28 @@ +name: Test, Format, and Lint + +on: + push: + branches: [ "**" ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v6 + + - name: Setup uv + uses: astral-sh/setup-uv@v7 + + - name: Install dependencies + run: | + uv sync --extra dev + + - name: Run Format and Lint Checks + run: | + uv run ruff check src/ tests/ + uv run ruff format --check src/ tests/ + + - name: Run tests + run: | + uv run pytest --cov=src --cov-fail-under=80 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..521213a094db40b3ecbbefb2202e883108f51b2c --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,29 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files + exclude: '^uv\.lock$' + - id: check-json + - id: check-xml + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.14.11 + hooks: + - id: ruff + - id: ruff-format + + - repo: local + hooks: + - id: pytest + name: pytest + entry: uv run pytest --cov=src --cov-fail-under=80 tests + language: system + types: [python] + pass_filenames: false + always_run: true diff --git a/.pytest_cache/.gitignore b/.pytest_cache/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..bc1a1f6167d09c909aad37280b760bb715d0f1da --- /dev/null +++ b/.pytest_cache/.gitignore @@ -0,0 +1,2 @@ +# Created by pytest automatically. +* diff --git a/.pytest_cache/CACHEDIR.TAG b/.pytest_cache/CACHEDIR.TAG new file mode 100644 index 0000000000000000000000000000000000000000..fce15ad7eaa74e5682b644c84efb75334c112f95 --- /dev/null +++ b/.pytest_cache/CACHEDIR.TAG @@ -0,0 +1,4 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by pytest. +# For information about cache directory tags, see: +# https://bford.info/cachedir/spec.html diff --git a/.pytest_cache/README.md b/.pytest_cache/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b89018ced91c0a8af7f3f23ce8901870da89f3a0 --- /dev/null +++ b/.pytest_cache/README.md @@ -0,0 +1,8 @@ +# pytest cache directory # + +This directory contains data from the pytest's cache plugin, +which provides the `--lf` and `--ff` options, as well as the `cache` fixture. + +**Do not** commit this to version control. + +See [the docs](https://docs.pytest.org/en/stable/how-to/cache.html) for more information. diff --git a/.pytest_cache/v/cache/lastfailed b/.pytest_cache/v/cache/lastfailed new file mode 100644 index 0000000000000000000000000000000000000000..9e26dfeeb6e641a33dae4961196235bdb965b21b --- /dev/null +++ b/.pytest_cache/v/cache/lastfailed @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.pytest_cache/v/cache/nodeids b/.pytest_cache/v/cache/nodeids new file mode 100644 index 0000000000000000000000000000000000000000..c14f00e91ce9c8b2bf91aa8773ece9123c50ac6c --- /dev/null +++ b/.pytest_cache/v/cache/nodeids @@ -0,0 +1,58 @@ +[ + "tests/test_regressions.py::TestFlattenField::test_dict_joins_values", + "tests/test_regressions.py::TestFlattenField::test_dict_with_none_values_skipped", + "tests/test_regressions.py::TestFlattenField::test_empty_string_returns_empty", + "tests/test_regressions.py::TestFlattenField::test_list_of_dicts", + "tests/test_regressions.py::TestFlattenField::test_list_of_strings", + "tests/test_regressions.py::TestFlattenField::test_none_returns_empty", + "tests/test_regressions.py::TestFlattenField::test_string_passthrough", + "tests/test_regressions.py::TestFunctionSeparators::test_no_separator_before_first_function", + "tests/test_regressions.py::TestFunctionSeparators::test_separator_between_functions", + "tests/test_regressions.py::TestFunctionSeparators::test_single_function_no_separator", + "tests/test_regressions.py::TestFunctionSpecPolymorphicFields::test_raises_as_dict", + "tests/test_regressions.py::TestFunctionSpecPolymorphicFields::test_raises_as_list_of_dicts", + "tests/test_regressions.py::TestFunctionSpecPolymorphicFields::test_raises_as_none", + "tests/test_regressions.py::TestFunctionSpecPolymorphicFields::test_returns_as_dict", + "tests/test_regressions.py::TestFunctionSpecPolymorphicFields::test_returns_as_list_of_dicts", + "tests/test_regressions.py::TestFunctionSpecPolymorphicFields::test_returns_as_none", + "tests/test_regressions.py::TestVLLMMaxTokensConfig::test_query_vllm_uses_4096_max_tokens", + "tests/test_student/test_evaluate.py::test_argument_coverage", + "tests/test_student/test_evaluate.py::test_empty_spec", + "tests/test_student/test_evaluate.py::test_has_structure_plain_text", + "tests/test_student/test_evaluate.py::test_has_structure_with_markdown", + "tests/test_student/test_evaluate.py::test_missing_class", + "tests/test_student/test_evaluate.py::test_missing_function", + "tests/test_student/test_evaluate.py::test_perfect_score", + "tests/test_student/test_evaluate.py::test_syntax_error_source", + "tests/test_student/test_trainer.py::test_lora_config_defaults", + "tests/test_student/test_trainer.py::test_models_dict", + "tests/test_student/test_trainer.py::test_push_to_hub_requires_model", + "tests/test_student/test_trainer.py::test_system_message", + "tests/test_teacher/test_clean_dataset.py::test_filters_null_output", + "tests/test_teacher/test_clean_dataset.py::test_filters_too_long", + "tests/test_teacher/test_clean_dataset.py::test_filters_too_short", + "tests/test_teacher/test_clean_dataset.py::test_keeps_valid_entries", + "tests/test_teacher/test_clean_dataset.py::test_rejected_file_has_reasons", + "tests/test_teacher/test_collect.py::test_count_lines", + "tests/test_teacher/test_collect.py::test_file_hash_deterministic", + "tests/test_teacher/test_collect.py::test_file_hash_different", + "tests/test_teacher/test_collect.py::test_has_functions_or_classes_indented", + "tests/test_teacher/test_collect.py::test_has_functions_or_classes_with_class", + "tests/test_teacher/test_collect.py::test_has_functions_or_classes_with_function", + "tests/test_teacher/test_collect.py::test_has_functions_or_classes_with_neither", + "tests/test_teacher/test_generator.py::test_load_completed_empty_file", + "tests/test_teacher/test_generator.py::test_load_completed_nonexistent", + "tests/test_teacher/test_generator.py::test_load_completed_skips_entries_without_source_file", + "tests/test_teacher/test_generator.py::test_load_completed_with_entries", + "tests/test_verifier/test_ast_checker.py::test_extract_class_info", + "tests/test_verifier/test_ast_checker.py::test_extract_function_signatures", + "tests/test_verifier/test_ast_checker.py::test_validate_signatures_match", + "tests/test_verifier/test_ast_checker.py::test_validate_signatures_mismatch", + "tests/test_verifier/test_judge.py::test_parse_direct_json", + "tests/test_verifier/test_judge.py::test_parse_empty_string", + "tests/test_verifier/test_judge.py::test_parse_invalid_json", + "tests/test_verifier/test_judge.py::test_parse_json_embedded_in_text", + "tests/test_verifier/test_judge.py::test_parse_json_in_code_fence", + "tests/test_verifier/test_judge.py::test_parse_json_in_plain_fence", + "tests/test_verifier/test_judge.py::test_parse_nested_json" +] \ No newline at end of file diff --git a/.ruff_cache/.gitignore b/.ruff_cache/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b100327770759f0efb7859fe78aca4801d69ed61 --- /dev/null +++ b/.ruff_cache/.gitignore @@ -0,0 +1,2 @@ +# Automatically created by ruff. +* diff --git a/.ruff_cache/0.14.11/10353388469511876764 b/.ruff_cache/0.14.11/10353388469511876764 new file mode 100644 index 0000000000000000000000000000000000000000..2073e12a7278c9c7cd7c1f49ea988124db916ca9 Binary files /dev/null and b/.ruff_cache/0.14.11/10353388469511876764 differ diff --git a/.ruff_cache/0.14.11/13241530885439384270 b/.ruff_cache/0.14.11/13241530885439384270 new file mode 100644 index 0000000000000000000000000000000000000000..a32889e035d687d2ea801cb3b1162ab45ba129e7 Binary files /dev/null and b/.ruff_cache/0.14.11/13241530885439384270 differ diff --git a/.ruff_cache/0.14.11/15588448742999807618 b/.ruff_cache/0.14.11/15588448742999807618 new file mode 100644 index 0000000000000000000000000000000000000000..e85725aa857891a48bb8c079d1e8bd103dff382a Binary files /dev/null and b/.ruff_cache/0.14.11/15588448742999807618 differ diff --git a/.ruff_cache/0.14.11/16909963377101005444 b/.ruff_cache/0.14.11/16909963377101005444 new file mode 100644 index 0000000000000000000000000000000000000000..b1aa510787692b3a11c9cd0c60e518e97f0cf0d7 Binary files /dev/null and b/.ruff_cache/0.14.11/16909963377101005444 differ diff --git a/.ruff_cache/0.14.11/1739102192644247459 b/.ruff_cache/0.14.11/1739102192644247459 new file mode 100644 index 0000000000000000000000000000000000000000..f32ede804cde2f04d20122319e04a24b17476037 Binary files /dev/null and b/.ruff_cache/0.14.11/1739102192644247459 differ diff --git a/.ruff_cache/0.14.11/2164407392135946080 b/.ruff_cache/0.14.11/2164407392135946080 new file mode 100644 index 0000000000000000000000000000000000000000..4c0304dc4afbb4e08e054b89a177483b1915addc Binary files /dev/null and b/.ruff_cache/0.14.11/2164407392135946080 differ diff --git a/.ruff_cache/0.14.11/3894487969124666669 b/.ruff_cache/0.14.11/3894487969124666669 new file mode 100644 index 0000000000000000000000000000000000000000..6216e7073178e34a0cad06b915accd7ca746804d Binary files /dev/null and b/.ruff_cache/0.14.11/3894487969124666669 differ diff --git a/.ruff_cache/0.14.11/4150897988697354825 b/.ruff_cache/0.14.11/4150897988697354825 new file mode 100644 index 0000000000000000000000000000000000000000..e3a9487ed7cffcd2487bfc52f8fa0e9825b51869 Binary files /dev/null and b/.ruff_cache/0.14.11/4150897988697354825 differ diff --git a/.ruff_cache/0.14.11/4355628838106937123 b/.ruff_cache/0.14.11/4355628838106937123 new file mode 100644 index 0000000000000000000000000000000000000000..df077237addc10aac109768c3c89b068460d7735 Binary files /dev/null and b/.ruff_cache/0.14.11/4355628838106937123 differ diff --git a/.ruff_cache/0.14.11/5959195261246591303 b/.ruff_cache/0.14.11/5959195261246591303 new file mode 100644 index 0000000000000000000000000000000000000000..6cd3b6061125e900e52ff27a5dd1d3ba29184cf1 Binary files /dev/null and b/.ruff_cache/0.14.11/5959195261246591303 differ diff --git a/.ruff_cache/0.14.11/7470470446486951261 b/.ruff_cache/0.14.11/7470470446486951261 new file mode 100644 index 0000000000000000000000000000000000000000..32b6268b44d182913540aa5535f85420aec7ad7e Binary files /dev/null and b/.ruff_cache/0.14.11/7470470446486951261 differ diff --git a/.ruff_cache/0.14.11/7805097287912496176 b/.ruff_cache/0.14.11/7805097287912496176 new file mode 100644 index 0000000000000000000000000000000000000000..684b61cb6d92cb375c6a308709490b2465001ac6 Binary files /dev/null and b/.ruff_cache/0.14.11/7805097287912496176 differ diff --git a/.ruff_cache/0.15.10/12264003023071563180 b/.ruff_cache/0.15.10/12264003023071563180 new file mode 100644 index 0000000000000000000000000000000000000000..ed6ad92542663bda14d059b26762b851c8efc1a5 Binary files /dev/null and b/.ruff_cache/0.15.10/12264003023071563180 differ diff --git a/.ruff_cache/0.15.10/12707412386835734272 b/.ruff_cache/0.15.10/12707412386835734272 new file mode 100644 index 0000000000000000000000000000000000000000..45b46716cc7c042fccb1e693b781b34ca72564c0 Binary files /dev/null and b/.ruff_cache/0.15.10/12707412386835734272 differ diff --git a/.ruff_cache/0.15.10/14255674844609017079 b/.ruff_cache/0.15.10/14255674844609017079 new file mode 100644 index 0000000000000000000000000000000000000000..76613626ff64239a1a12b4c4d33cd6fbb3f4a772 Binary files /dev/null and b/.ruff_cache/0.15.10/14255674844609017079 differ diff --git a/.ruff_cache/0.15.10/14515759316653052378 b/.ruff_cache/0.15.10/14515759316653052378 new file mode 100644 index 0000000000000000000000000000000000000000..2068091423abb77505c190251c936cd9e1942486 Binary files /dev/null and b/.ruff_cache/0.15.10/14515759316653052378 differ diff --git a/.ruff_cache/0.15.10/1490264962946858478 b/.ruff_cache/0.15.10/1490264962946858478 new file mode 100644 index 0000000000000000000000000000000000000000..168e7158644960f7b17e5ba3273752962e64aa9f Binary files /dev/null and b/.ruff_cache/0.15.10/1490264962946858478 differ diff --git a/.ruff_cache/0.15.10/15830732279563417379 b/.ruff_cache/0.15.10/15830732279563417379 new file mode 100644 index 0000000000000000000000000000000000000000..57296c79c5b323f4c65b23308c7ab8d82c2c24c1 Binary files /dev/null and b/.ruff_cache/0.15.10/15830732279563417379 differ diff --git a/.ruff_cache/0.15.10/16585459526495690818 b/.ruff_cache/0.15.10/16585459526495690818 new file mode 100644 index 0000000000000000000000000000000000000000..ab7b7722c75e03b0bb3ba3b15cbaa6a1edf103a8 Binary files /dev/null and b/.ruff_cache/0.15.10/16585459526495690818 differ diff --git a/.ruff_cache/0.15.10/17140885238503855112 b/.ruff_cache/0.15.10/17140885238503855112 new file mode 100644 index 0000000000000000000000000000000000000000..b21858d8accda86092172246f14ffeb86406b913 Binary files /dev/null and b/.ruff_cache/0.15.10/17140885238503855112 differ diff --git a/.ruff_cache/0.15.10/17258540645676314702 b/.ruff_cache/0.15.10/17258540645676314702 new file mode 100644 index 0000000000000000000000000000000000000000..cd13d00d583dabf7661fb8d89f17a05eca28d28a Binary files /dev/null and b/.ruff_cache/0.15.10/17258540645676314702 differ diff --git a/.ruff_cache/0.15.10/3600153915928311247 b/.ruff_cache/0.15.10/3600153915928311247 new file mode 100644 index 0000000000000000000000000000000000000000..d66e58bd4f18d889ec912c472b0fb79a75f47695 Binary files /dev/null and b/.ruff_cache/0.15.10/3600153915928311247 differ diff --git a/.ruff_cache/0.15.10/4777661366283320788 b/.ruff_cache/0.15.10/4777661366283320788 new file mode 100644 index 0000000000000000000000000000000000000000..62be2e891617680d3e7ce79c53062bd446e96d78 Binary files /dev/null and b/.ruff_cache/0.15.10/4777661366283320788 differ diff --git a/.ruff_cache/0.15.10/8194725524321540937 b/.ruff_cache/0.15.10/8194725524321540937 new file mode 100644 index 0000000000000000000000000000000000000000..91ebc65e5d03d4ab8bc64eefc6b0ffdb5d2f1dc2 Binary files /dev/null and b/.ruff_cache/0.15.10/8194725524321540937 differ diff --git a/.ruff_cache/0.15.10/9372251181401831964 b/.ruff_cache/0.15.10/9372251181401831964 new file mode 100644 index 0000000000000000000000000000000000000000..47e4462aeba3fc2f3a19d4276432c4b804d57791 Binary files /dev/null and b/.ruff_cache/0.15.10/9372251181401831964 differ diff --git a/.ruff_cache/CACHEDIR.TAG b/.ruff_cache/CACHEDIR.TAG new file mode 100644 index 0000000000000000000000000000000000000000..bc1ecb967a482524e7736038de0df6e08f9ee452 --- /dev/null +++ b/.ruff_cache/CACHEDIR.TAG @@ -0,0 +1 @@ +Signature: 8a477f597d28d172789f06886806bc55 \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000000000000000000000000000000000..b72849d395e7969c49f7e53662357e3c4f8f6cb1 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,28 @@ +# CodeWraith + +Module-to-Spec Transformer -- fine-tuned LLM that generates technical specifications from Python source code. + +## Pipeline State + +Read `.claude/pipeline_state.json` at session start to know where the ML pipeline left off. Update it after completing any pipeline stage (generation, cleaning, training, evaluation, upload). + +## Process Monitoring + +- When monitoring long-running processes (vLLM serving, dataset generation, model training, uploads), check status at **5-minute intervals minimum**. Do NOT poll more frequently unless explicitly asked. +- Before killing any long-running process, **always confirm with the user first**. Never assume a process is stuck without evidence of zero progress over multiple checks. +- For HuggingFace uploads of large models (>10GB), prefer `hf upload` CLI over Python `push_to_hub()`. The CLI handles resumption better. + +## Environment + +- Python 3.12, managed with `uv` +- Use `uv sync` / `uv run`, never `uv pip install` +- Tests: `uv run pytest` +- Lint: `uv run ruff check` +- GPU: NVIDIA RTX 5090 (32GB VRAM) +- Teacher models served via vLLM at 192.168.13.21:8081 + +## Commits + +- Use Angular/Conventional Commits format +- No Co-Authored-By lines +- Commit at every meaningful milestone diff --git a/Final Project Rubric.odt b/Final Project Rubric.odt new file mode 100644 index 0000000000000000000000000000000000000000..9a015ebcf488ea40d2540b1891449b37dda38a0d --- /dev/null +++ b/Final Project Rubric.odt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0adb49313b481e0771de5fca861649823b8c56220a59ded7146d0d1d5283d60 +size 3241527 diff --git a/Final Project Rubric.odt:Zone.Identifier b/Final Project Rubric.odt:Zone.Identifier new file mode 100644 index 0000000000000000000000000000000000000000..d3bc66c806090863aca4e2b40c37d17c23e48994 Binary files /dev/null and b/Final Project Rubric.odt:Zone.Identifier differ diff --git a/Modelfile.teacher b/Modelfile.teacher new file mode 100644 index 0000000000000000000000000000000000000000..978316901b92a898d18651fa1b897eb303bc3015 --- /dev/null +++ b/Modelfile.teacher @@ -0,0 +1,4 @@ +FROM llama3.1:70b-instruct-q4_K_M + +PARAMETER num_ctx 4096 +PARAMETER num_gpu 99 diff --git a/README.md b/README.md index de3239c89e4a1a8ad69f7dd46946023590bd19ad..f3d4cede78be45b7008c286bd72288b30b4180c2 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,8 @@ CodeWraith uses a teacher-student architecture: a large model generates gold-sta ``` ┌─────────────┐ Python Source ──> │ Teacher │ ──> Training Pairs (code -> spec) - │ Qwen3 30B │ │ - │ (Ollama) │ │ + │ LLM via │ │ + │ vLLM/Ollama │ │ └─────────────┘ │ ▼ ┌─────────────┐ ┌─────────────┐ @@ -41,8 +41,8 @@ CodeWraith uses a teacher-student architecture: a large model generates gold-sta │ ▼ ┌─────────────┐ - │ Gradio App │ - │ HF Spaces │ + │ Gradio App │ <── RAG Retriever + │ HF Spaces │ (ChromaDB) └─────────────┘ ``` @@ -50,10 +50,10 @@ CodeWraith uses a teacher-student architecture: a large model generates gold-sta | Component | Directory | Purpose | |-----------|-----------|---------| -| **Teacher** | `src/codewraith/teacher/` | Generates synthetic training pairs using Qwen3 30B via Ollama | +| **Teacher** | `src/codewraith/teacher/` | Generates synthetic training pairs using a large LLM via vLLM (JSON-constrained) or Ollama | | **Verifier** | `src/codewraith/verifier/` | AST-based structural validation + LLM-as-Judge semantic audit | | **Student** | `src/codewraith/student/` | LoRA fine-tuning via Unsloth, evaluation pipeline | -| **App** | `src/codewraith/app/` | Gradio web interface deployed on HuggingFace Spaces | +| **App** | `src/codewraith/app/` | Gradio web interface with RAG retrieval, deployed on HuggingFace Spaces | ## Verification Pipeline @@ -61,6 +61,29 @@ CodeWraith uses a teacher-student architecture: a large model generates gold-sta 2. **Semantic Audit**: LLM-as-a-Judge evaluates completeness, accuracy, hallucination, and detail (scored 0-10 each) 3. **Round-trip Consistency**: Tests whether an LLM can reconstruct the module's function/class signatures from the spec alone +## Sampling & Inference + +The inference pipeline uses **nucleus sampling** (top-p) combined with temperature scaling to balance output quality and diversity: + +| Parameter | Default | Range | Purpose | +|-----------|---------|-------|---------| +| **Temperature** | 0.7 | 0.0 - 2.0 | Controls randomness. Lower values (0.1-0.3) produce more deterministic, structured output. Higher values increase diversity but risk incoherence. | +| **Top-p** | 0.9 | 0.0 - 1.0 | Nucleus sampling threshold. At each step, only tokens whose cumulative probability mass falls within the top-p fraction are considered. 0.9 retains the top 90% probability mass, filtering out low-likelihood tokens. | +| **Max Tokens** | 2048 | 256 - 8192 | Maximum generation length. Technical specs for typical modules run 500-1500 tokens; larger modules may need 4096+. | + +**Why nucleus sampling over beam search?** Spec generation benefits from controlled creativity -- mermaid diagrams and natural language descriptions need some variation, while function signatures need precision. Nucleus sampling with moderate temperature (0.7) gives the model freedom in prose while the fine-tuning keeps structured elements accurate. For maximum precision, users can lower temperature to 0.1-0.3. + +## Retrieval-Augmented Generation (RAG) + +At inference time, the app optionally retrieves similar code-spec pairs from a ChromaDB vector index to provide few-shot context: + +1. **Indexing**: All training pairs are embedded using `sentence-transformers` and stored in ChromaDB (193 pairs) +2. **Retrieval**: When a user submits code, the retriever finds the 3 most similar source files by cosine similarity +3. **Augmentation**: Retrieved examples are prepended to the user's input as context, giving the model concrete formatting examples +4. **Auto-truncation**: If RAG context pushes the input beyond 6000 tokens, it is automatically dropped to prevent context overflow + +RAG improves output consistency, especially for formatting patterns like mermaid diagrams and markdown tables that the model may not reliably produce from fine-tuning alone. + ## Quick Start ### Prerequisites @@ -80,13 +103,10 @@ cd CodeWraith uv venv uv sync -# Install ML dependencies (datasets, transformers, dspy) +# Install ML dependencies (transformers, unsloth, vllm, etc.) uv sync --extra ml -# Install training dependencies (unsloth, peft, trl) -uv sync --extra ml --extra training - -# Install app dependencies (gradio) +# Install app dependencies (gradio, chromadb) uv sync --extra app # Install everything @@ -119,23 +139,29 @@ into `data/source_files/`. Resumable if interrupted. ### Step 2: Optimize Prompt with DSPy Uses DSPy's BootstrapFewShot optimizer to find the best prompt for spec generation. -Requires Ollama running with `qwen3:30b-a3b`. +Requires Ollama running with the configured teacher model. ```bash -# Pull the teacher model -ollama pull qwen3:30b-a3b - # Run optimization uv run --extra ml python3 -m codewraith.teacher.optimize ``` Saves the optimized generator to `data/optimized_generator.json`. +Falls back to raw Ollama generation if DSPy optimization is unavailable or returns null. ### Step 3: Generate Training Data -Generate specs for all collected source files using the optimized prompt. +Generate specs for all collected source files. Two backends are available: ```bash +# vLLM backend (recommended) -- JSON-constrained output for consistent structure +# Requires vLLM server running with a code-specialized model +uv run --extra ml python3 -c " +from codewraith.teacher.generator import generate_dataset +generate_dataset('data/source_files', 'data/training_pairs.jsonl', backend='vllm') +" + +# Ollama backend -- raw generation, uses DSPy-optimized prompt if available uv run --extra ml python3 -c " from codewraith.teacher.generator import generate_dataset generate_dataset('data/source_files', 'data/training_pairs.jsonl') @@ -158,10 +184,10 @@ Fine-tune with Unsloth + LoRA. Supports both 3B and 8B models. ```bash # Train Llama 3.2 3B (fast, ~3-4 minutes) -uv run --extra ml --extra training python3 -m codewraith.student.trainer 3b +uv run --extra ml python3 -m codewraith.student.trainer 3b # Train Llama 3.1 8B (better quality, ~8-10 minutes) -uv run --extra ml --extra training python3 -m codewraith.student.trainer 8b +uv run --extra ml python3 -m codewraith.student.trainer 8b ``` Adapters are saved to `models/codewraith-lora-{3b,8b}/`. @@ -172,10 +198,10 @@ Run evaluation comparing structural accuracy across models. ```bash # Evaluate 3B -uv run --extra ml --extra training python3 -m codewraith.student.evaluate 3b +uv run --extra ml python3 -m codewraith.student.evaluate 3b # Evaluate 8B -uv run --extra ml --extra training python3 -m codewraith.student.evaluate 8b +uv run --extra ml python3 -m codewraith.student.evaluate 8b ``` Generates `data/eval_report.md` with comparison metrics. @@ -183,7 +209,7 @@ Generates `data/eval_report.md` with comparison metrics. ### Step 7: Run Gradio App ```bash -uv run --extra ml --extra training --extra app python3 -m codewraith.app.main +uv run --extra ml --extra app python3 -m codewraith.app.main ``` Auto-detects the best available adapter (prefers 8B over 3B). @@ -193,73 +219,147 @@ Opens a web UI with code input, sampling parameter controls, and live spec gener ```bash # Push adapter to HuggingFace Hub -uv run --extra ml --extra training python3 -c " +uv run --extra ml python3 -c " from codewraith.student.trainer import load_base_model, push_to_hub from peft import PeftModel -model, tokenizer = load_base_model('3b') -model = PeftModel.from_pretrained(model, './models/codewraith-lora-3b') -push_to_hub(model, tokenizer, 'your-username/codewraith-lora-3b') +model, tokenizer = load_base_model('8b') +model = PeftModel.from_pretrained(model, './models/codewraith-lora-8b') +push_to_hub(model, tokenizer, 'slenk/codewraith-lora-8b') " + +# Upload app to HuggingFace Spaces (uses .hfignore to exclude large files) +hf upload slenk/codewraith . . --repo-type space \ + --exclude "models/*" --exclude ".venv/*" --exclude "adapter/*" \ + --exclude ".git/*" --exclude "tests/*" --exclude "scripts/*" ``` +The Space downloads the LoRA adapter from HF Hub at startup, so model weights +are not included in the Space repository. A `.hfignore` file is provided to +exclude development artifacts from uploads. + +## Model Evolution + +The project iterated through multiple teacher models and training configurations to find the best combination: + +| Version | Teacher Model | Student | Key Finding | +|---------|--------------|---------|-------------| +| v1 | Llama 3.1 70B (Q4) | 3B, 8B | Baseline. Functional specs but inconsistent formatting. | +| v2 | Llama 3.1 70B (Q4) | 3B, 8B | Improved hyperparameters (r=32, 8192 context, 4 epochs). 8B reached 0.89 structural score. | +| v3 | Qwen3 30B-A3B (MoE) | 3B, 8B | Better structured output -- tables, type annotations, cleaner markdown. 3B chosen as primary (0.92 structural). | +| v4 | Gemma 4 26B | 3B, 8B | Higher structural scores (8B: 0.95, 100% class coverage). Wordier prose but weaker return type coverage (67%). 8B selected as deployed model. | +| v5 | Qwen2.5-Coder 32B (Q6) | 8B | Code-specialized teacher for more precise, structured specifications. | +| v6 | Qwen2.5-Coder 32B (AWQ) via vLLM | 8B | JSON-constrained generation via vLLM ensures consistent spec structure. 171 pairs, 0.97 structural score. | +| v7 | Qwen2.5-Coder 14B (AWQ) via vLLM | 8B | Smaller teacher with 16384 context recovers large files. 231 pairs (+35%), 0.97 structural score maintained. | + +Each iteration preserved previous model adapters for comparison. The teacher model +has the largest impact on output quality -- a code-specialized teacher (Qwen2.5-Coder) +is expected to produce more precise function signatures and structured formatting than +general-purpose models. + ## Evaluation Results -Models trained with 8192 context, LoRA r=32, 4 epochs, dropout=0.05. -Training data generated by Gemma 4 26B teacher model with DSPy-optimized prompts. -Evaluated on 28 held-out examples (proper train/eval split, no data leakage). +### v7 -- Current (Qwen2.5-Coder 14B AWQ via vLLM) + +Models trained with 4096 context, LoRA r=16, 3 epochs. +Training data generated by Qwen2.5-Coder-14B-Instruct-AWQ via vLLM with JSON-constrained output. +Evaluated on 34 held-out examples (197 train / 34 eval split from 231 total pairs). -### Llama 3.1 8B (CodeWraith-8b) -- Deployed Model +#### Llama 3.1 8B (CodeWraith-8b-v7) | Metric | Score | |--------|-------| -| Avg Structural Score | 0.95 | -| Function Coverage | 90% | +| Avg Structural Score | 0.97 | +| Function Coverage | 97% | | Class Coverage | 100% | -| Argument Coverage | 94% | -| Return Type Coverage | 67% | -| Perfect Scores | 22/28 | -| Good Scores (>=80%) | 25/28 | -| Avg Inference Time | 28s | -| Training Loss | 0.59 | +| Argument Coverage | 95% | +| Return Type Coverage | 90% | +| Perfect Scores | 25/34 | +| Good Scores (>=80%) | 29/34 | +| Training Loss | 0.12 | + +**Key change from v6:** Switched from the 32B teacher (limited to 4096 context on 32GB VRAM) +to the 14B teacher with 16384 context. This recovered 60 additional training pairs from source +files that previously exceeded the context window, increasing the dataset by 35%. Structural +score held steady at 0.97 with the larger eval set. Four low scores (0.50) traced to Python 2 +syntax in source files, not model output issues. + +### v6 -- Previous (Qwen2.5-Coder 32B AWQ via vLLM) + +Models trained with 8192 context, LoRA r=32, 3 epochs, dropout=0.05. +Training data generated by Qwen2.5-Coder-32B-Instruct-AWQ via vLLM with JSON-constrained output. +Evaluated on 26 held-out examples (145 train / 26 eval split from 171 total pairs). + +#### Llama 3.1 8B (CodeWraith-8b-v6) + +| Metric | Score | +|--------|-------| +| Avg Structural Score | 0.97 | +| Perfect Scores | 19/26 | +| Good Scores (>=80%) | 22/26 | -### Llama 3.2 3B (CodeWraith-3b) +### v5 -- Previous (Qwen2.5-Coder 32B via Ollama) + +Models trained with 8192 context, LoRA r=32, 4 epochs, dropout=0.05. +Training data generated by Qwen2.5-Coder 32B (Q6 quantization) via Ollama. +Evaluated on 37 held-out examples (proper train/eval split, no data leakage). + +#### Llama 3.1 8B (CodeWraith-8b-v5) | Metric | Score | |--------|-------| -| Avg Structural Score | 0.91 | -| Function Coverage | 86% | -| Class Coverage | 96% | -| Argument Coverage | 93% | -| Return Type Coverage | 67% | -| Perfect Scores | 19/28 | -| Good Scores (>=80%) | 24/28 | -| Avg Inference Time | 26s | -| Training Loss | 0.76 | +| Avg Structural Score | 0.99 | +| Function Coverage | 97% | +| Class Coverage | 100% | +| Argument Coverage | 99% | +| Return Type Coverage | 100% | +| Perfect Scores | 29/37 | +| Good Scores (>=80%) | 36/37 | +| Training Loss | 0.33 | + +### v4 -- Previous (Gemma 4 26B Teacher) + +Evaluated on 28 held-out examples. + +#### Llama 3.1 8B (CodeWraith-8b-v4) + +| Metric | v4 | v5 | Change | +|--------|-----|-----|--------| +| Structural Score | 0.95 | 0.99 | +0.04 | +| Function Coverage | 90% | 97% | +7% | +| Class Coverage | 100% | 100% | -- | +| Argument Coverage | 94% | 99% | +5% | +| Return Type Coverage | 67% | 100% | +33% | +| Perfect Scores | 78% | 78% | -- | +| Good Scores (>=80%) | 89% | 97% | +8% | +| Training Loss | 0.59 | 0.33 | -44% | ### Analysis -The 8B model was selected for deployment because: -- Higher overall structural score (0.95 vs 0.91) -- Perfect class coverage (100% vs 96%) -- More perfect scores (22/28 vs 19/28) -- Higher quality training data from Gemma 4 26B teacher enabled the larger model to shine +The v5 model using a **code-specialized teacher** (Qwen2.5-Coder 32B) dramatically +improved over v4's general-purpose teacher (Gemma 4 26B): -Training data was generated using Gemma 4 26B as the teacher model (replacing Qwen3 30B), -producing higher quality specs with better structured Markdown and mermaid diagrams. -DSPy BootstrapFewShot was used to optimize the generation prompt. +- **Return type coverage recovered from 67% to 100%** -- the v4 regression was caused + by Gemma producing prose descriptions instead of precise type annotations +- **Training loss dropped 44%** -- the code-specialized teacher produces more consistent, + structured output that the student model learns more efficiently +- **97% good scores** -- only 1 of 37 examples scored below 80% +- The code-specialized teacher generates more precise function signatures and parameter + types, which directly translates to higher AST verification scores ### HuggingFace Models -- Deployed (8B): https://huggingface.co/slenk/codewraith-lora-8b -- Alternative (3B): https://huggingface.co/slenk/codewraith-lora-3b +- Deployed (8B LoRA adapter): https://huggingface.co/slenk/codewraith-lora-8b +- Merged (8B standalone): https://huggingface.co/slenk/codewraith-merged-8b +- Alternative (3B LoRA adapter): https://huggingface.co/slenk/codewraith-lora-3b ## Environment -- **Teacher model**: Gemma 4 26B via Ollama at `127.0.0.1:11434` +- **Teacher model**: Configurable via Ollama at `127.0.0.1:11434` (tested with Llama 70B, Qwen3 30B, Gemma 4 26B, Qwen2.5-Coder 32B) - **Student models**: Llama 3.2 3B / Llama 3.1 8B fine-tuned with LoRA via Unsloth - **Prompt optimization**: DSPy BootstrapFewShot with AST checker as metric -- **Deployment**: Gradio on HuggingFace Spaces -- **Hardware**: NVIDIA RTX 5090 (32GB VRAM) +- **RAG retrieval**: ChromaDB + sentence-transformers for few-shot context at inference +- **Deployment**: Gradio on HuggingFace Spaces with ZeroGPU (A10G) +- **Hardware (local)**: NVIDIA RTX 5090 (32GB VRAM) ## Project Structure @@ -272,8 +372,9 @@ CodeWraith/ │ ├── teacher/ │ │ ├── collect.py # HF dataset collection │ │ ├── optimize.py # DSPy prompt optimization -│ │ ├── generator.py # Training data generation +│ │ ├── generator.py # Training data generation (Ollama + vLLM backends) │ │ └── clean_dataset.py # Dataset filtering +│ ├── spec_schema.py # Pydantic ModuleSpec schema + markdown renderer │ ├── verifier/ │ │ ├── ast_checker.py # AST structural validation │ │ └── judge.py # LLM-as-Judge semantic audit @@ -281,19 +382,17 @@ CodeWraith/ │ │ ├── trainer.py # Unsloth + LoRA fine-tuning │ │ └── evaluate.py # Model evaluation pipeline │ └── app/ -│ └── main.py # Gradio inference UI -├── data/ # Training data, eval sets, reports -├── models/ # Saved LoRA adapters -└── tests/ # Test suite (96% coverage) +│ ├── main.py # Gradio inference UI +│ └── retriever.py # RAG retrieval from ChromaDB +├── app.py # HF Spaces entry point +├── data/ +│ ├── chromadb/ # Vector index for RAG retrieval +│ ├── source_files/ # Collected Python source files +│ ├── training_pairs*.jsonl # Generated training data (per version) +│ └── eval_report*.md # Evaluation reports +├── models/ # Local LoRA adapters (gitignored, hosted on HF Hub) + +├── scripts/ +│ └── retrain.py # Full retrain pipeline +└── tests/ # Test suite ``` - -## Rubric Alignment - -| Rubric Section | Points | Implementation | -|---------------|--------|----------------| -| Model Functionality (training + LoRA + eval) | 20 | `student/trainer.py`, `student/evaluate.py`, 3B vs 8B comparison | -| Innovation & Creativity | 20 | Teacher-student architecture, DSPy prompt optimization, AST verification pipeline | -| Environment Setup (deployment) | 15 | `app/main.py`, Gradio on HF Spaces | -| Inference Pipeline (sampling) | 15 | `app/main.py` with temperature/top_p/max_tokens controls | -| Technical Documentation | 15 | This README, evaluation reports, docstrings | -| Demo & Presentation | 15 | Live Gradio app as interactive demo | diff --git a/data/eval_report.md b/data/eval_report.md new file mode 100644 index 0000000000000000000000000000000000000000..9eb9433423da6bdd67fc687a9b3315cc9d865943 --- /dev/null +++ b/data/eval_report.md @@ -0,0 +1,20 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-8b (Llama-3.1-8B-Instruct) | +|--------|-----| +| Avg Structural Score | 0.95 | +| Function Coverage | 0.92 | +| Class Coverage | 0.81 | +| Argument Coverage | 1.00 | +| Return Type Coverage | 0.89 | +| Good Scores (>=80%) | 26 | +| Avg Inference Time (s) | 20.79 | + +## CodeWraith-8b (Llama-3.1-8B-Instruct) + +- Examples evaluated: 30 +- Valid (parseable): 29 +- Perfect scores: 17 +- Total inference time: 623.6s diff --git a/data/eval_report_3b_v2.md b/data/eval_report_3b_v2.md new file mode 100644 index 0000000000000000000000000000000000000000..4375265281657b8caf482fc7dfb71976ad7934c6 --- /dev/null +++ b/data/eval_report_3b_v2.md @@ -0,0 +1,20 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-3b-v2 (Llama-3.2-3B-Instruct) | +|--------|-----| +| Avg Structural Score | 0.93 | +| Function Coverage | 0.84 | +| Class Coverage | 0.97 | +| Argument Coverage | 0.91 | +| Return Type Coverage | 0.97 | +| Good Scores (>=80%) | 25 | +| Avg Inference Time (s) | 20.01 | + +## CodeWraith-3b-v2 (Llama-3.2-3B-Instruct) + +- Examples evaluated: 31 +- Valid (parseable): 28 +- Perfect scores: 15 +- Total inference time: 620.2s diff --git a/data/eval_report_3b_v3.md b/data/eval_report_3b_v3.md new file mode 100644 index 0000000000000000000000000000000000000000..7325da9cb620c672d924e41c4e357c16d19c25f1 --- /dev/null +++ b/data/eval_report_3b_v3.md @@ -0,0 +1,20 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-3b (Llama-3.2-3B-Instruct) | +|--------|-----| +| Avg Structural Score | 0.92 | +| Function Coverage | 0.83 | +| Class Coverage | 0.92 | +| Argument Coverage | 0.93 | +| Return Type Coverage | 0.84 | +| Good Scores (>=80%) | 24 | +| Avg Inference Time (s) | 20.01 | + +## CodeWraith-3b (Llama-3.2-3B-Instruct) + +- Examples evaluated: 31 +- Valid (parseable): 28 +- Perfect scores: 13 +- Total inference time: 620.2s diff --git a/data/eval_report_3b_v4.md b/data/eval_report_3b_v4.md new file mode 100644 index 0000000000000000000000000000000000000000..f62bef45693474c54926b264587acdc53d16dad9 --- /dev/null +++ b/data/eval_report_3b_v4.md @@ -0,0 +1,20 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-3b (Llama-3.2-3B-Instruct) | +|--------|-----| +| Avg Structural Score | 0.91 | +| Function Coverage | 0.86 | +| Class Coverage | 0.96 | +| Argument Coverage | 0.93 | +| Return Type Coverage | 0.67 | +| Good Scores (>=80%) | 24 | +| Avg Inference Time (s) | 25.57 | + +## CodeWraith-3b (Llama-3.2-3B-Instruct) + +- Examples evaluated: 28 +- Valid (parseable): 27 +- Perfect scores: 19 +- Total inference time: 715.9s diff --git a/data/eval_report_8b_v2.md b/data/eval_report_8b_v2.md new file mode 100644 index 0000000000000000000000000000000000000000..7d7b0383a7273c2e6de2e14ddebf55f88e5a0921 --- /dev/null +++ b/data/eval_report_8b_v2.md @@ -0,0 +1,20 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-8b-v2 (Llama-3.1-8B-Instruct) | +|--------|-----| +| Avg Structural Score | 0.92 | +| Function Coverage | 0.85 | +| Class Coverage | 0.84 | +| Argument Coverage | 0.93 | +| Return Type Coverage | 0.97 | +| Good Scores (>=80%) | 24 | +| Avg Inference Time (s) | 21.91 | + +## CodeWraith-8b-v2 (Llama-3.1-8B-Instruct) + +- Examples evaluated: 31 +- Valid (parseable): 28 +- Perfect scores: 15 +- Total inference time: 679.2s diff --git a/data/eval_report_8b_v4.md b/data/eval_report_8b_v4.md new file mode 100644 index 0000000000000000000000000000000000000000..952f098639ff8dc8c51d6c1c99f26d595341acd9 --- /dev/null +++ b/data/eval_report_8b_v4.md @@ -0,0 +1,20 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-8b (Llama-3.1-8B-Instruct) | +|--------|-----| +| Avg Structural Score | 0.95 | +| Function Coverage | 0.90 | +| Class Coverage | 1.00 | +| Argument Coverage | 0.94 | +| Return Type Coverage | 0.67 | +| Good Scores (>=80%) | 25 | +| Avg Inference Time (s) | 27.57 | + +## CodeWraith-8b (Llama-3.1-8B-Instruct) + +- Examples evaluated: 28 +- Valid (parseable): 27 +- Perfect scores: 22 +- Total inference time: 772.1s diff --git a/data/eval_report_8b_v5.md b/data/eval_report_8b_v5.md new file mode 100644 index 0000000000000000000000000000000000000000..b42bb4119f9766559df2472aa12724944dbd41c3 --- /dev/null +++ b/data/eval_report_8b_v5.md @@ -0,0 +1,20 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-8b-v5 (Llama-3.1-8B-Instruct) | +|--------|-----| +| Avg Structural Score | 0.99 | +| Function Coverage | 0.97 | +| Class Coverage | 1.00 | +| Argument Coverage | 0.99 | +| Return Type Coverage | 1.00 | +| Good Scores (>=80%) | 36 | +| Avg Inference Time (s) | 25.29 | + +## CodeWraith-8b-v5 (Llama-3.1-8B-Instruct) + +- Examples evaluated: 37 +- Valid (parseable): 36 +- Perfect scores: 29 +- Total inference time: 935.9s diff --git a/data/eval_report_8b_v6.md b/data/eval_report_8b_v6.md new file mode 100644 index 0000000000000000000000000000000000000000..93b7057f0204ea976d1344dc894835082c843912 --- /dev/null +++ b/data/eval_report_8b_v6.md @@ -0,0 +1,20 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-8b (Llama-3.1-8B-Instruct) | +|--------|-----| +| Avg Structural Score | 0.97 | +| Function Coverage | 0.94 | +| Class Coverage | 0.90 | +| Argument Coverage | 1.00 | +| Return Type Coverage | N/A | +| Good Scores (>=80%) | 22 | +| Avg Inference Time (s) | 10.88 | + +## CodeWraith-8b (Llama-3.1-8B-Instruct) + +- Examples evaluated: 26 +- Valid (parseable): 23 +- Perfect scores: 19 +- Total inference time: 283.0s diff --git a/data/eval_report_8b_v7.md b/data/eval_report_8b_v7.md new file mode 100644 index 0000000000000000000000000000000000000000..daaca518553142d356408ddc35b0760ccb3f81d2 --- /dev/null +++ b/data/eval_report_8b_v7.md @@ -0,0 +1,20 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-8b (Llama-3.1-8B-Instruct) | +|--------|-----| +| Avg Structural Score | 0.97 | +| Function Coverage | 0.97 | +| Class Coverage | 1.00 | +| Argument Coverage | 0.95 | +| Return Type Coverage | 0.90 | +| Good Scores (>=80%) | 29 | +| Avg Inference Time (s) | 15.84 | + +## CodeWraith-8b (Llama-3.1-8B-Instruct) + +- Examples evaluated: 34 +- Valid (parseable): 30 +- Perfect scores: 25 +- Total inference time: 538.5s diff --git a/data/eval_report_comparison_v2.md b/data/eval_report_comparison_v2.md new file mode 100644 index 0000000000000000000000000000000000000000..53d2b5e4c1a79744c014d177345520430da3bc14 --- /dev/null +++ b/data/eval_report_comparison_v2.md @@ -0,0 +1,27 @@ +# CodeWraith Model Evaluation Report + +## Summary + +| Metric | CodeWraith-3b-v2 (Llama-3.2-3B-Instruct) | CodeWraith-8b-v2 (Llama-3.1-8B-Instruct) | +|--------|-----|-----| +| Avg Structural Score | 0.93 | 0.92 | +| Function Coverage | 0.84 | 0.85 | +| Class Coverage | 0.97 | 0.84 | +| Argument Coverage | 0.91 | 0.93 | +| Return Type Coverage | 0.97 | 0.97 | +| Good Scores (>=80%) | 25 | 24 | +| Avg Inference Time (s) | 20.01 | 21.91 | + +## CodeWraith-3b-v2 (Llama-3.2-3B-Instruct) + +- Examples evaluated: 31 +- Valid (parseable): 28 +- Perfect scores: 15 +- Total inference time: 620.2s + +## CodeWraith-8b-v2 (Llama-3.1-8B-Instruct) + +- Examples evaluated: 31 +- Valid (parseable): 28 +- Perfect scores: 15 +- Total inference time: 679.2s diff --git a/data/eval_results_3b.json b/data/eval_results_3b.json new file mode 100644 index 0000000000000000000000000000000000000000..28ed09bf56aaa63993f62cb0f54f59393c0428e0 --- /dev/null +++ b/data/eval_results_3b.json @@ -0,0 +1,395 @@ +{ + "metrics": { + "model": "CodeWraith-3b (Llama-3.2-3B-Instruct)", + "num_examples": 28, + "num_valid": 27, + "avg_structural_score": 0.9148271576169591, + "perfect_scores": 19, + "good_scores": 24, + "avg_inference_time": 25.568465062550136, + "total_time": 715.9170217514038, + "avg_function_coverage": 0.8610007639419405, + "avg_class_coverage": 0.9555555555555556, + "avg_argument_coverage": 0.9283557570312287, + "avg_return_type_coverage": 0.6666666666666666 + }, + "per_example": [ + { + "source_file": "messy/bd581f14cf48.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3290, + "reference_length": 3607, + "inference_time": 20.868906259536743 + }, + { + "source_file": "clean/3dcb1d7b4a12.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 7951, + "reference_length": 5881, + "inference_time": 44.38811230659485 + }, + { + "source_file": "clean/06e16975d4ac.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3563, + "reference_length": 2468, + "inference_time": 17.876902103424072 + }, + { + "source_file": "messy/94b2f20c5850.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2879, + "reference_length": 4012, + "inference_time": 17.086252689361572 + }, + { + "source_file": "messy/b374790e8e34.py", + "scores": { + "function_coverage": 0.75, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9375 + }, + "prediction_length": 4747, + "reference_length": 4683, + "inference_time": 24.646522045135498 + }, + { + "source_file": "clean/4600f935ed1d.py", + "scores": { + "function_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3706, + "reference_length": 2101, + "inference_time": 17.650084018707275 + }, + { + "source_file": "clean/d199807b678d.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3473, + "reference_length": 3896, + "inference_time": 20.227165460586548 + }, + { + "source_file": "clean/46e001660b82.py", + "scores": { + "function_coverage": 0.14285714285714285, + "argument_coverage": 0.36363636363636365, + "has_structure": 0.0, + "parseable": true, + "overall": 0.16883116883116886 + }, + "prediction_length": 7753, + "reference_length": 566, + "inference_time": 46.384787797927856 + }, + { + "source_file": "messy/273a3f8a3b29.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2771, + "reference_length": 4024, + "inference_time": 14.286058187484741 + }, + { + "source_file": "clean/c2a7bf304f8a.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4124, + "reference_length": 5151, + "inference_time": 25.00935935974121 + }, + { + "source_file": "clean/1be285af847d.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2977, + "reference_length": 3016, + "inference_time": 13.655282497406006 + }, + { + "source_file": "messy/e74dec1c1520.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 6736, + "reference_length": 6355, + "inference_time": 36.76592135429382 + }, + { + "source_file": "clean/615ca63ee16d.py", + "scores": { + "function_coverage": 0.7272727272727273, + "class_coverage": 1.0, + "argument_coverage": 0.7777777777777778, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8762626262626263 + }, + "prediction_length": 8408, + "reference_length": 3434, + "inference_time": 41.89173746109009 + }, + { + "source_file": "messy/a7af7e6fe3a5.py", + "scores": { + "function_coverage": 0.06666666666666667, + "argument_coverage": 0.33962264150943394, + "return_type_coverage": 0.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.35157232704402513 + }, + "prediction_length": 7925, + "reference_length": 4043, + "inference_time": 48.157960653305054 + }, + { + "source_file": "messy/b1bc55044f1a.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4944, + "reference_length": 4325, + "inference_time": 23.324952125549316 + }, + { + "source_file": "clean/4df191fa5942.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 2531, + "reference_length": 3110, + "inference_time": 11.76628828048706 + }, + { + "source_file": "messy/9d4e5f709420.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3622, + "reference_length": 4905, + "inference_time": 20.453138828277588 + }, + { + "source_file": "clean/88b8d70f4fe4.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3921, + "reference_length": 2026, + "inference_time": 20.940979480743408 + }, + { + "source_file": "messy/4543867f9f05.py", + "scores": { + "function_coverage": 0.6666666666666666, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9166666666666666 + }, + "prediction_length": 3203, + "reference_length": 4209, + "inference_time": 15.503760814666748 + }, + { + "source_file": "clean/5b0bb172c22d.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3115, + "reference_length": 3073, + "inference_time": 18.117590188980103 + }, + { + "source_file": "clean/23b30f008578.py", + "scores": { + "function_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2693, + "reference_length": 4927, + "inference_time": 13.62615442276001 + }, + { + "source_file": "clean/9bb4c0bf7227.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3462, + "reference_length": 4779, + "inference_time": 16.623833179473877 + }, + { + "source_file": "clean/fe35435938f5.py", + "scores": { + "function_coverage": 0.5714285714285714, + "argument_coverage": 0.9583333333333334, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8432539682539683 + }, + "prediction_length": 5900, + "reference_length": 2022, + "inference_time": 33.54556345939636 + }, + { + "source_file": "clean/d2e8b7aa1e82.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 5208, + "reference_length": 5141, + "inference_time": 26.93407130241394 + }, + { + "source_file": "clean/b6939d391a23.py", + "scores": { + "function_coverage": 0.9411764705882353, + "class_coverage": 1.0, + "argument_coverage": 0.96, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9752941176470589 + }, + "prediction_length": 7874, + "reference_length": 6450, + "inference_time": 40.9023551940918 + }, + { + "source_file": "clean/c953b65d83d5.py", + "scores": { + "function_coverage": 0.38095238095238093, + "class_coverage": 0.3333333333333333, + "argument_coverage": 0.8095238095238095, + "has_structure": 1.0, + "parseable": true, + "overall": 0.6309523809523809 + }, + "prediction_length": 9292, + "reference_length": 8957, + "inference_time": 45.998045206069946 + }, + { + "source_file": "clean/8a13f8afeb71.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2917, + "reference_length": 2271, + "inference_time": 16.089794397354126 + }, + { + "source_file": "messy/2cf5b37f3314.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4376, + "reference_length": 5243, + "inference_time": 23.19544267654419 + } + ] +} \ No newline at end of file diff --git a/data/eval_results_3b_v2.json b/data/eval_results_3b_v2.json new file mode 100644 index 0000000000000000000000000000000000000000..0fb94e0a3b9aa20589a2f90f770d068ee497a58a --- /dev/null +++ b/data/eval_results_3b_v2.json @@ -0,0 +1,434 @@ +{ + "metrics": { + "model": "CodeWraith-3b-v2 (Llama-3.2-3B-Instruct)", + "num_examples": 31, + "num_valid": 28, + "avg_structural_score": 0.9349173785126699, + "perfect_scores": 15, + "good_scores": 25, + "avg_inference_time": 20.007101074341804, + "total_time": 620.220133304596, + "avg_function_coverage": 0.8438498225377107, + "avg_class_coverage": 0.9736842105263158, + "avg_argument_coverage": 0.9082270670505964, + "avg_return_type_coverage": 0.9714285714285713 + }, + "per_example": [ + { + "source_file": "clean/4bc9509376c0.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2844, + "reference_length": 3384, + "inference_time": 18.0885272026062 + }, + { + "source_file": "clean/1e7e10bc6571.py", + "scores": { + "function_coverage": 0.8, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.95 + }, + "prediction_length": 4926, + "reference_length": 2578, + "inference_time": 29.220056772232056 + }, + { + "source_file": "clean/03a9ee616ef3.py", + "scores": { + "function_coverage": 0.4444444444444444, + "class_coverage": 1.0, + "argument_coverage": 0.16666666666666666, + "has_structure": 1.0, + "parseable": true, + "overall": 0.6527777777777778 + }, + "prediction_length": 3503, + "reference_length": 6998, + "inference_time": 20.247114658355713 + }, + { + "source_file": "messy/0ccd89c328c2.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 2863, + "reference_length": 2655, + "inference_time": 14.904531478881836 + }, + { + "source_file": "clean/83b5f3fff612.py", + "scores": { + "function_coverage": 0.4, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.85 + }, + "prediction_length": 3495, + "reference_length": 2520, + "inference_time": 23.264450073242188 + }, + { + "source_file": "clean/0f721ae1b9ad.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3473, + "reference_length": 3470, + "inference_time": 23.27858591079712 + }, + { + "source_file": "clean/859980c575e3.py", + "scores": { + "function_coverage": 0.5, + "class_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.875 + }, + "prediction_length": 3255, + "reference_length": 2112, + "inference_time": 13.077555179595947 + }, + { + "source_file": "clean/3dcb1d7b4a12.py", + "scores": { + "function_coverage": 0.875, + "class_coverage": 0.5, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.875 + }, + "prediction_length": 5091, + "reference_length": 3288, + "inference_time": 29.730497360229492 + }, + { + "source_file": "clean/6bc6fb7ee908.py", + "scores": { + "function_coverage": 0.5, + "class_coverage": 1.0, + "argument_coverage": 0.7333333333333333, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8083333333333333 + }, + "prediction_length": 4773, + "reference_length": 2824, + "inference_time": 28.070369243621826 + }, + { + "source_file": "messy/1ea06667316a.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2857, + "reference_length": 2513, + "inference_time": 16.786190271377563 + }, + { + "source_file": "clean/830d0ef964f3.py", + "scores": { + "function_coverage": 0.5555555555555556, + "class_coverage": 1.0, + "argument_coverage": 0.9411764705882353, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8741830065359477 + }, + "prediction_length": 4630, + "reference_length": 5902, + "inference_time": 24.956990003585815 + }, + { + "source_file": "clean/9dc2299143fb.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3830, + "reference_length": 2788, + "inference_time": 21.43935513496399 + }, + { + "source_file": "clean/bf74c86796e4.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 3348, + "reference_length": 2904, + "inference_time": 15.760165691375732 + }, + { + "source_file": "messy/e74dec1c1520.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 0.8571428571428571, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9714285714285713 + }, + "prediction_length": 5344, + "reference_length": 3551, + "inference_time": 29.408547401428223 + }, + { + "source_file": "clean/4df191fa5942.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 1601, + "reference_length": 1844, + "inference_time": 10.143949031829834 + }, + { + "source_file": "messy/a2d7a4633b12.py", + "scores": { + "function_coverage": 0.8571428571428571, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9642857142857143 + }, + "prediction_length": 3715, + "reference_length": 4189, + "inference_time": 20.434860467910767 + }, + { + "source_file": "clean/eecf4b89e18a.py", + "scores": { + "function_coverage": 0.6956521739130435, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9239130434782609 + }, + "prediction_length": 3652, + "reference_length": 3237, + "inference_time": 23.721028327941895 + }, + { + "source_file": "clean/5b0bb172c22d.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1728, + "reference_length": 2284, + "inference_time": 10.692550897598267 + }, + { + "source_file": "clean/210e6fb50260.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2573, + "reference_length": 2550, + "inference_time": 16.10159707069397 + }, + { + "source_file": "messy/fe6dc7d06e56.py", + "scores": { + "function_coverage": 0.5, + "class_coverage": 1.0, + "argument_coverage": 0.5, + "has_structure": 1.0, + "parseable": true, + "overall": 0.75 + }, + "prediction_length": 3201, + "reference_length": 4839, + "inference_time": 17.795408964157104 + }, + { + "source_file": "clean/07c7264a775f.py", + "scores": { + "function_coverage": 0.875, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9583333333333334 + }, + "prediction_length": 2866, + "reference_length": 2674, + "inference_time": 14.786346435546875 + }, + { + "source_file": "messy/273a3f8a3b29.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2540, + "reference_length": 3253, + "inference_time": 13.740688800811768 + }, + { + "source_file": "messy/6f869b875813.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3033, + "reference_length": 3420, + "inference_time": 16.89442777633667 + }, + { + "source_file": "clean/569e9c198e62.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3779, + "reference_length": 2881, + "inference_time": 20.661334991455078 + }, + { + "source_file": "messy/0bdbe88d7d1a.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3082, + "reference_length": 4393, + "inference_time": 18.825385332107544 + }, + { + "source_file": "messy/8bf1ff66eee0.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3235, + "reference_length": 4216, + "inference_time": 18.384609699249268 + }, + { + "source_file": "messy/a60733716488.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4713, + "reference_length": 2329, + "inference_time": 29.785675764083862 + }, + { + "source_file": "messy/76c274773ccc.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2810, + "reference_length": 3840, + "inference_time": 17.719330310821533 + }, + { + "source_file": "messy/1d8649714119.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4883, + "reference_length": 2552, + "inference_time": 25.8785502910614 + }, + { + "source_file": "messy/acda636b4109.py", + "scores": { + "function_coverage": 0.625, + "class_coverage": 1.0, + "argument_coverage": 0.2727272727272727, + "has_structure": 1.0, + "parseable": true, + "overall": 0.7244318181818181 + }, + "prediction_length": 2875, + "reference_length": 3593, + "inference_time": 16.34171986579895 + }, + { + "source_file": "clean/08a5bdeb757f.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4286, + "reference_length": 4991, + "inference_time": 20.07973289489746 + } + ] +} \ No newline at end of file diff --git a/data/eval_results_8b.json b/data/eval_results_8b.json new file mode 100644 index 0000000000000000000000000000000000000000..89122d0618efc02a43bbe825115e3cb3f1d11f3f --- /dev/null +++ b/data/eval_results_8b.json @@ -0,0 +1,467 @@ +{ + "metrics": { + "model": "CodeWraith-8b (Llama-3.1-8B-Instruct)", + "num_examples": 34, + "num_valid": 30, + "avg_structural_score": 0.9743944335950103, + "perfect_scores": 25, + "good_scores": 29, + "avg_inference_time": 15.83769550042994, + "total_time": 538.4816470146179, + "avg_function_coverage": 0.967473492690884, + "avg_class_coverage": 1.0, + "avg_argument_coverage": 0.9503461908547044, + "avg_return_type_coverage": 0.8958333333333334 + }, + "per_example": [ + { + "source_file": "clean/4a39c8df7306.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2140, + "reference_length": 2522, + "inference_time": 13.502389669418335 + }, + { + "source_file": "clean/c2a7bf304f8a.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 0.125, + "has_structure": 1.0, + "parseable": true, + "overall": 0.7083333333333334 + }, + "prediction_length": 1248, + "reference_length": 1088, + "inference_time": 7.844483852386475 + }, + { + "source_file": "clean/12ad51890456.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2453, + "reference_length": 4169, + "inference_time": 13.246246099472046 + }, + { + "source_file": "messy/0ccd89c328c2.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 1145, + "reference_length": 1040, + "inference_time": 7.990505933761597 + }, + { + "source_file": "messy/b00f9623a040.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2486, + "reference_length": 2747, + "inference_time": 16.43922233581543 + }, + { + "source_file": "messy/9b7afe9a1073.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1580, + "reference_length": 1344, + "inference_time": 7.293461322784424 + }, + { + "source_file": "clean/f4d08a001f37.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2042, + "reference_length": 1612, + "inference_time": 12.504977941513062 + }, + { + "source_file": "messy/a7af7e6fe3a5.py", + "scores": { + "function_coverage": 0.8666666666666667, + "argument_coverage": 0.9811320754716981, + "return_type_coverage": 0.875, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9306996855345913 + }, + "prediction_length": 8540, + "reference_length": 11357, + "inference_time": 57.655240058898926 + }, + { + "source_file": "clean/8e35b9de52d2.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1623, + "reference_length": 2017, + "inference_time": 8.847191333770752 + }, + { + "source_file": "messy/6b7c7bb0171b.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3419, + "reference_length": 2094, + "inference_time": 24.11143946647644 + }, + { + "source_file": "clean/4b09fed9dd71.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 954, + "reference_length": 997, + "inference_time": 4.0132458209991455 + }, + { + "source_file": "clean/360a872fc6e5.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1408, + "reference_length": 1410, + "inference_time": 8.463055849075317 + }, + { + "source_file": "messy/94b2f20c5850.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1119, + "reference_length": 1221, + "inference_time": 7.522489070892334 + }, + { + "source_file": "messy/d228d40c6d8c.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1660, + "reference_length": 1696, + "inference_time": 11.12440800666809 + }, + { + "source_file": "messy/64b2adeeef54.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 1168, + "reference_length": 1435, + "inference_time": 5.375532627105713 + }, + { + "source_file": "messy/720c79fe24bb.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4890, + "reference_length": 3326, + "inference_time": 30.165298223495483 + }, + { + "source_file": "clean/830d0ef964f3.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4725, + "reference_length": 5559, + "inference_time": 29.389700174331665 + }, + { + "source_file": "messy/a59e8dc4ffa1.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2232, + "reference_length": 1061, + "inference_time": 15.1986985206604 + }, + { + "source_file": "clean/de966bcba616.py", + "scores": { + "function_coverage": 0.391304347826087, + "class_coverage": 1.0, + "argument_coverage": 0.7804878048780488, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8343584305408271 + }, + "prediction_length": 8474, + "reference_length": 6379, + "inference_time": 52.93989539146423 + }, + { + "source_file": "clean/c2337dc8cffc.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1542, + "reference_length": 1247, + "inference_time": 7.4634623527526855 + }, + { + "source_file": "messy/10b43d2d1e3a.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2596, + "reference_length": 2846, + "inference_time": 17.287745714187622 + }, + { + "source_file": "clean/06e16975d4ac.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2145, + "reference_length": 1688, + "inference_time": 10.59754467010498 + }, + { + "source_file": "messy/e8a7155bfbec.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2774, + "reference_length": 3266, + "inference_time": 17.90034508705139 + }, + { + "source_file": "messy/666f4c354670.py", + "scores": { + "function_coverage": 0.9090909090909091, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 0.5, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8818181818181818 + }, + "prediction_length": 3159, + "reference_length": 3131, + "inference_time": 18.022941827774048 + }, + { + "source_file": "clean/bc59895adba1.py", + "scores": { + "function_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1060, + "reference_length": 1379, + "inference_time": 7.125420570373535 + }, + { + "source_file": "messy/e74dec1c1520.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3774, + "reference_length": 4486, + "inference_time": 22.132354497909546 + }, + { + "source_file": "clean/8a13f8afeb71.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1185, + "reference_length": 1913, + "inference_time": 7.342715501785278 + }, + { + "source_file": "clean/a94fea8369fc.py", + "scores": { + "function_coverage": 0.8571428571428571, + "argument_coverage": 0.7727272727272727, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8766233766233765 + }, + "prediction_length": 2851, + "reference_length": 3149, + "inference_time": 15.59646987915039 + }, + { + "source_file": "clean/bf74c86796e4.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 1698, + "reference_length": 1501, + "inference_time": 11.013347148895264 + }, + { + "source_file": "clean/6968fa78ff3c.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 3131, + "reference_length": 2558, + "inference_time": 18.22009539604187 + }, + { + "source_file": "clean/2d1c1112bd6d.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1113, + "reference_length": 1237, + "inference_time": 7.454645156860352 + }, + { + "source_file": "clean/9b31cca2e395.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3187, + "reference_length": 2124, + "inference_time": 21.071300506591797 + }, + { + "source_file": "clean/88b8d70f4fe4.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2533, + "reference_length": 2161, + "inference_time": 15.911052703857422 + }, + { + "source_file": "clean/1b8bec287901.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1654, + "reference_length": 1775, + "inference_time": 7.71472430229187 + } + ] +} diff --git a/data/eval_results_8b_v2.json b/data/eval_results_8b_v2.json new file mode 100644 index 0000000000000000000000000000000000000000..d6684810f7f35c8649384f983f504235c6c25a7f --- /dev/null +++ b/data/eval_results_8b_v2.json @@ -0,0 +1,434 @@ +{ + "metrics": { + "model": "CodeWraith-8b-v2 (Llama-3.1-8B-Instruct)", + "num_examples": 31, + "num_valid": 28, + "avg_structural_score": 0.9199616404532828, + "perfect_scores": 15, + "good_scores": 24, + "avg_inference_time": 21.908129569022886, + "total_time": 679.1520166397095, + "avg_function_coverage": 0.8487331164349798, + "avg_class_coverage": 0.8421052631578947, + "avg_argument_coverage": 0.9281404869640164, + "avg_return_type_coverage": 0.9714285714285713 + }, + "per_example": [ + { + "source_file": "clean/4bc9509376c0.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 5858, + "reference_length": 3384, + "inference_time": 27.2649405002594 + }, + { + "source_file": "clean/1e7e10bc6571.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3479, + "reference_length": 2578, + "inference_time": 23.819497108459473 + }, + { + "source_file": "clean/03a9ee616ef3.py", + "scores": { + "function_coverage": 0.5555555555555556, + "class_coverage": 0.0, + "argument_coverage": 0.5, + "has_structure": 1.0, + "parseable": true, + "overall": 0.5138888888888888 + }, + "prediction_length": 2609, + "reference_length": 6998, + "inference_time": 17.608966827392578 + }, + { + "source_file": "messy/0ccd89c328c2.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 2239, + "reference_length": 2655, + "inference_time": 15.687925338745117 + }, + { + "source_file": "clean/83b5f3fff612.py", + "scores": { + "function_coverage": 0.4, + "class_coverage": 1.0, + "argument_coverage": 0.8333333333333334, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8083333333333333 + }, + "prediction_length": 4949, + "reference_length": 2520, + "inference_time": 24.682470560073853 + }, + { + "source_file": "clean/0f721ae1b9ad.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2880, + "reference_length": 3470, + "inference_time": 20.674485683441162 + }, + { + "source_file": "clean/859980c575e3.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2612, + "reference_length": 2112, + "inference_time": 17.795993089675903 + }, + { + "source_file": "clean/3dcb1d7b4a12.py", + "scores": { + "function_coverage": 0.875, + "class_coverage": 0.1, + "argument_coverage": 0.8571428571428571, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.7664285714285715 + }, + "prediction_length": 2927, + "reference_length": 3288, + "inference_time": 19.569356203079224 + }, + { + "source_file": "clean/6bc6fb7ee908.py", + "scores": { + "function_coverage": 0.6, + "class_coverage": 1.0, + "argument_coverage": 0.6666666666666666, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8166666666666667 + }, + "prediction_length": 3505, + "reference_length": 2824, + "inference_time": 20.122586011886597 + }, + { + "source_file": "messy/1ea06667316a.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3162, + "reference_length": 2513, + "inference_time": 19.400817394256592 + }, + { + "source_file": "clean/830d0ef964f3.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 0.9411764705882353, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9852941176470589 + }, + "prediction_length": 3115, + "reference_length": 5902, + "inference_time": 21.291579246520996 + }, + { + "source_file": "clean/9dc2299143fb.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2591, + "reference_length": 2788, + "inference_time": 16.241718769073486 + }, + { + "source_file": "clean/bf74c86796e4.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 3653, + "reference_length": 2904, + "inference_time": 20.073659896850586 + }, + { + "source_file": "messy/e74dec1c1520.py", + "scores": { + "function_coverage": 0.8571428571428571, + "class_coverage": 1.0, + "argument_coverage": 0.8333333333333334, + "return_type_coverage": 0.8571428571428571, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9095238095238095 + }, + "prediction_length": 4965, + "reference_length": 3551, + "inference_time": 36.057464361190796 + }, + { + "source_file": "clean/4df191fa5942.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 1864, + "reference_length": 1844, + "inference_time": 12.269999504089355 + }, + { + "source_file": "messy/a2d7a4633b12.py", + "scores": { + "function_coverage": 0.8571428571428571, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9642857142857143 + }, + "prediction_length": 6880, + "reference_length": 4189, + "inference_time": 29.761359691619873 + }, + { + "source_file": "clean/eecf4b89e18a.py", + "scores": { + "function_coverage": 0.7391304347826086, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9347826086956521 + }, + "prediction_length": 4187, + "reference_length": 3237, + "inference_time": 26.844980716705322 + }, + { + "source_file": "clean/5b0bb172c22d.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2321, + "reference_length": 2284, + "inference_time": 14.376977443695068 + }, + { + "source_file": "clean/210e6fb50260.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2049, + "reference_length": 2550, + "inference_time": 13.274568796157837 + }, + { + "source_file": "messy/fe6dc7d06e56.py", + "scores": { + "function_coverage": 0.0, + "class_coverage": 1.0, + "argument_coverage": 0.5, + "has_structure": 1.0, + "parseable": true, + "overall": 0.625 + }, + "prediction_length": 3919, + "reference_length": 4839, + "inference_time": 19.380743503570557 + }, + { + "source_file": "clean/07c7264a775f.py", + "scores": { + "function_coverage": 0.875, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9583333333333334 + }, + "prediction_length": 3636, + "reference_length": 2674, + "inference_time": 19.849429607391357 + }, + { + "source_file": "messy/273a3f8a3b29.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 1914, + "reference_length": 3253, + "inference_time": 13.395134925842285 + }, + { + "source_file": "messy/6f869b875813.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3092, + "reference_length": 3420, + "inference_time": 20.314209938049316 + }, + { + "source_file": "clean/569e9c198e62.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 0.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.75 + }, + "prediction_length": 3506, + "reference_length": 2881, + "inference_time": 20.47663974761963 + }, + { + "source_file": "messy/0bdbe88d7d1a.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3266, + "reference_length": 4393, + "inference_time": 26.921948671340942 + }, + { + "source_file": "messy/8bf1ff66eee0.py", + "scores": { + "function_coverage": 0.5555555555555556, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8888888888888888 + }, + "prediction_length": 2708, + "reference_length": 4216, + "inference_time": 18.472944974899292 + }, + { + "source_file": "messy/a60733716488.py", + "scores": { + "function_coverage": 0.45, + "class_coverage": 0.9, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8375 + }, + "prediction_length": 7126, + "reference_length": 2329, + "inference_time": 56.12669610977173 + }, + { + "source_file": "messy/76c274773ccc.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2170, + "reference_length": 3840, + "inference_time": 17.253268718719482 + }, + { + "source_file": "messy/1d8649714119.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3031, + "reference_length": 2552, + "inference_time": 21.40690016746521 + }, + { + "source_file": "messy/acda636b4109.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3424, + "reference_length": 3593, + "inference_time": 25.26692247390747 + }, + { + "source_file": "clean/08a5bdeb757f.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3132, + "reference_length": 4991, + "inference_time": 23.467830657958984 + } + ] +} \ No newline at end of file diff --git a/data/eval_results_8b_v5.json b/data/eval_results_8b_v5.json new file mode 100644 index 0000000000000000000000000000000000000000..598adcda3cd026dae35d4b8b681597dbd47b5265 --- /dev/null +++ b/data/eval_results_8b_v5.json @@ -0,0 +1,507 @@ +{ + "metrics": { + "model": "CodeWraith-8b-v5 (Llama-3.1-8B-Instruct)", + "num_examples": 37, + "num_valid": 36, + "avg_structural_score": 0.9877113373947525, + "perfect_scores": 29, + "good_scores": 36, + "avg_inference_time": 25.293824969111263, + "total_time": 935.8715238571167, + "avg_function_coverage": 0.965521978021978, + "avg_class_coverage": 1.0, + "avg_argument_coverage": 0.9894483794265929, + "avg_return_type_coverage": 1.0 + }, + "per_example": [ + { + "source_file": "clean/4600f935ed1d.py", + "scores": { + "function_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3039, + "reference_length": 2880, + "inference_time": 18.591609954833984 + }, + { + "source_file": "clean/71e2ec05a4ce.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4092, + "reference_length": 3616, + "inference_time": 21.81563091278076 + }, + { + "source_file": "messy/e444a542540d.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 7575, + "reference_length": 4374, + "inference_time": 47.71123433113098 + }, + { + "source_file": "clean/cdb08f4d273a.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3446, + "reference_length": 3614, + "inference_time": 21.064913511276245 + }, + { + "source_file": "clean/ca94c5502737.py", + "scores": { + "function_coverage": 0.6153846153846154, + "argument_coverage": 0.9523809523809523, + "has_structure": 1.0, + "parseable": true, + "overall": 0.8559218559218559 + }, + "prediction_length": 8648, + "reference_length": 6735, + "inference_time": 54.13129162788391 + }, + { + "source_file": "messy/1c73481ac309.py", + "scores": { + "function_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3096, + "reference_length": 1718, + "inference_time": 15.332524538040161 + }, + { + "source_file": "clean/12581ac99721.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4418, + "reference_length": 4130, + "inference_time": 38.43903708457947 + }, + { + "source_file": "clean/a2576bff34ae.py", + "scores": { + "function_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2490, + "reference_length": 2440, + "inference_time": 14.69094467163086 + }, + { + "source_file": "messy/666f4c354670.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "return_type_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4816, + "reference_length": 4536, + "inference_time": 29.665302991867065 + }, + { + "source_file": "clean/bf74c86796e4.py", + "scores": { + "overall": 0.5, + "parseable": false + }, + "prediction_length": 3227, + "reference_length": 4026, + "inference_time": 20.119393587112427 + }, + { + "source_file": "clean/07c7264a775f.py", + "scores": { + "function_coverage": 0.875, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9583333333333334 + }, + "prediction_length": 6493, + "reference_length": 5133, + "inference_time": 36.57983469963074 + }, + { + "source_file": "clean/4e132b54cd4a.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3174, + "reference_length": 4065, + "inference_time": 20.479403257369995 + }, + { + "source_file": "clean/7645f390c515.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3679, + "reference_length": 2559, + "inference_time": 18.84472107887268 + }, + { + "source_file": "messy/9c892371385d.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4995, + "reference_length": 5041, + "inference_time": 35.20069479942322 + }, + { + "source_file": "messy/98c5f29240b9.py", + "scores": { + "function_coverage": 0.875, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.96875 + }, + "prediction_length": 5949, + "reference_length": 6841, + "inference_time": 34.81227779388428 + }, + { + "source_file": "clean/88b8d70f4fe4.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3785, + "reference_length": 3958, + "inference_time": 21.514402627944946 + }, + { + "source_file": "messy/73c72bfbe73b.py", + "scores": { + "function_coverage": 0.8076923076923077, + "class_coverage": 1.0, + "argument_coverage": 0.9411764705882353, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9372171945701357 + }, + "prediction_length": 4787, + "reference_length": 5624, + "inference_time": 28.55956482887268 + }, + { + "source_file": "clean/23b30f008578.py", + "scores": { + "function_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3345, + "reference_length": 3367, + "inference_time": 20.1626718044281 + }, + { + "source_file": "clean/d4a9d78d0281.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 7764, + "reference_length": 8236, + "inference_time": 43.4171040058136 + }, + { + "source_file": "clean/a3060596bc92.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2724, + "reference_length": 3016, + "inference_time": 15.7329843044281 + }, + { + "source_file": "messy/6f869b875813.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2930, + "reference_length": 3217, + "inference_time": 17.04488444328308 + }, + { + "source_file": "messy/e8a7155bfbec.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4835, + "reference_length": 4014, + "inference_time": 28.13184118270874 + }, + { + "source_file": "clean/5ffc696dc345.py", + "scores": { + "function_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4035, + "reference_length": 4605, + "inference_time": 23.935144186019897 + }, + { + "source_file": "clean/319db52d59c7.py", + "scores": { + "function_coverage": 0.9285714285714286, + "class_coverage": 1.0, + "argument_coverage": 0.8518518518518519, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9451058201058201 + }, + "prediction_length": 4992, + "reference_length": 7164, + "inference_time": 29.12249255180359 + }, + { + "source_file": "clean/d3728f31c0db.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3722, + "reference_length": 3077, + "inference_time": 23.72391390800476 + }, + { + "source_file": "messy/1a534773f649.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3613, + "reference_length": 2682, + "inference_time": 21.959770441055298 + }, + { + "source_file": "messy/273a3f8a3b29.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2903, + "reference_length": 3326, + "inference_time": 15.395075559616089 + }, + { + "source_file": "clean/46e001660b82.py", + "scores": { + "function_coverage": 0.8571428571428571, + "argument_coverage": 0.9696969696969697, + "has_structure": 1.0, + "parseable": true, + "overall": 0.9422799422799423 + }, + "prediction_length": 5109, + "reference_length": 4027, + "inference_time": 34.29022479057312 + }, + { + "source_file": "messy/04e23b0b5d08.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 4639, + "reference_length": 4653, + "inference_time": 25.926616668701172 + }, + { + "source_file": "messy/afc593ff8c4c.py", + "scores": { + "function_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 5742, + "reference_length": 4162, + "inference_time": 36.24571490287781 + }, + { + "source_file": "clean/60ccb349f496.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3714, + "reference_length": 2891, + "inference_time": 20.234167098999023 + }, + { + "source_file": "clean/d199807b678d.py", + "scores": { + "function_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2547, + "reference_length": 3783, + "inference_time": 15.620551347732544 + }, + { + "source_file": "clean/d2e8b7aa1e82.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3310, + "reference_length": 3348, + "inference_time": 18.21688151359558 + }, + { + "source_file": "messy/20afb8e5092a.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2232, + "reference_length": 3277, + "inference_time": 10.995202779769897 + }, + { + "source_file": "clean/d3c7051a19d9.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 3051, + "reference_length": 3097, + "inference_time": 19.41274380683899 + }, + { + "source_file": "messy/6d62ae4e17f6.py", + "scores": { + "function_coverage": 1.0, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 1.0 + }, + "prediction_length": 2944, + "reference_length": 3356, + "inference_time": 17.790547370910645 + }, + { + "source_file": "clean/83b5f3fff612.py", + "scores": { + "function_coverage": 0.8, + "class_coverage": 1.0, + "argument_coverage": 1.0, + "has_structure": 1.0, + "parseable": true, + "overall": 0.95 + }, + "prediction_length": 3536, + "reference_length": 4406, + "inference_time": 20.960208892822266 + } + ] +} diff --git a/data/source_files/clean/035f1addafef.py b/data/source_files/clean/035f1addafef.py new file mode 100644 index 0000000000000000000000000000000000000000..0a7c17bb65b9c51d7ea399323ecb512289bae204 --- /dev/null +++ b/data/source_files/clean/035f1addafef.py @@ -0,0 +1,176 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumigen. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from ... import _utilities +from ... import meta as _meta + +__all__ = [ + 'LeaseSpecArgs', + 'LeaseArgs', +] + +@pulumi.input_type +class LeaseSpecArgs: + def __init__(__self__, *, + acquire_time: Optional[pulumi.Input[str]] = None, + holder_identity: Optional[pulumi.Input[str]] = None, + lease_duration_seconds: Optional[pulumi.Input[int]] = None, + lease_transitions: Optional[pulumi.Input[int]] = None, + renew_time: Optional[pulumi.Input[str]] = None): + """ + LeaseSpec is a specification of a Lease. + :param pulumi.Input[str] acquire_time: acquireTime is a time when the current lease was acquired. + :param pulumi.Input[str] holder_identity: holderIdentity contains the identity of the holder of a current lease. + :param pulumi.Input[int] lease_duration_seconds: leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime. + :param pulumi.Input[int] lease_transitions: leaseTransitions is the number of transitions of a lease between holders. + :param pulumi.Input[str] renew_time: renewTime is a time when the current holder of a lease has last updated the lease. + """ + if acquire_time is not None: + pulumi.set(__self__, "acquire_time", acquire_time) + if holder_identity is not None: + pulumi.set(__self__, "holder_identity", holder_identity) + if lease_duration_seconds is not None: + pulumi.set(__self__, "lease_duration_seconds", lease_duration_seconds) + if lease_transitions is not None: + pulumi.set(__self__, "lease_transitions", lease_transitions) + if renew_time is not None: + pulumi.set(__self__, "renew_time", renew_time) + + @property + @pulumi.getter(name="acquireTime") + def acquire_time(self) -> Optional[pulumi.Input[str]]: + """ + acquireTime is a time when the current lease was acquired. + """ + return pulumi.get(self, "acquire_time") + + @acquire_time.setter + def acquire_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "acquire_time", value) + + @property + @pulumi.getter(name="holderIdentity") + def holder_identity(self) -> Optional[pulumi.Input[str]]: + """ + holderIdentity contains the identity of the holder of a current lease. + """ + return pulumi.get(self, "holder_identity") + + @holder_identity.setter + def holder_identity(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "holder_identity", value) + + @property + @pulumi.getter(name="leaseDurationSeconds") + def lease_duration_seconds(self) -> Optional[pulumi.Input[int]]: + """ + leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime. + """ + return pulumi.get(self, "lease_duration_seconds") + + @lease_duration_seconds.setter + def lease_duration_seconds(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "lease_duration_seconds", value) + + @property + @pulumi.getter(name="leaseTransitions") + def lease_transitions(self) -> Optional[pulumi.Input[int]]: + """ + leaseTransitions is the number of transitions of a lease between holders. + """ + return pulumi.get(self, "lease_transitions") + + @lease_transitions.setter + def lease_transitions(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "lease_transitions", value) + + @property + @pulumi.getter(name="renewTime") + def renew_time(self) -> Optional[pulumi.Input[str]]: + """ + renewTime is a time when the current holder of a lease has last updated the lease. + """ + return pulumi.get(self, "renew_time") + + @renew_time.setter + def renew_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "renew_time", value) + + +@pulumi.input_type +class LeaseArgs: + def __init__(__self__, *, + api_version: Optional[pulumi.Input[str]] = None, + kind: Optional[pulumi.Input[str]] = None, + metadata: Optional[pulumi.Input['_meta.v1.ObjectMetaArgs']] = None, + spec: Optional[pulumi.Input['LeaseSpecArgs']] = None): + """ + Lease defines a lease concept. + :param pulumi.Input[str] api_version: APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + :param pulumi.Input[str] kind: Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + :param pulumi.Input['_meta.v1.ObjectMetaArgs'] metadata: More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + :param pulumi.Input['LeaseSpecArgs'] spec: Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + """ + if api_version is not None: + pulumi.set(__self__, "api_version", 'coordination.k8s.io/v1') + if kind is not None: + pulumi.set(__self__, "kind", 'Lease') + if metadata is not None: + pulumi.set(__self__, "metadata", metadata) + if spec is not None: + pulumi.set(__self__, "spec", spec) + + @property + @pulumi.getter(name="apiVersion") + def api_version(self) -> Optional[pulumi.Input[str]]: + """ + APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + """ + return pulumi.get(self, "api_version") + + @api_version.setter + def api_version(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "api_version", value) + + @property + @pulumi.getter + def kind(self) -> Optional[pulumi.Input[str]]: + """ + Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + """ + return pulumi.get(self, "kind") + + @kind.setter + def kind(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "kind", value) + + @property + @pulumi.getter + def metadata(self) -> Optional[pulumi.Input['_meta.v1.ObjectMetaArgs']]: + """ + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + """ + return pulumi.get(self, "metadata") + + @metadata.setter + def metadata(self, value: Optional[pulumi.Input['_meta.v1.ObjectMetaArgs']]): + pulumi.set(self, "metadata", value) + + @property + @pulumi.getter + def spec(self) -> Optional[pulumi.Input['LeaseSpecArgs']]: + """ + Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + """ + return pulumi.get(self, "spec") + + @spec.setter + def spec(self, value: Optional[pulumi.Input['LeaseSpecArgs']]): + pulumi.set(self, "spec", value) + + diff --git a/data/source_files/clean/03a9ee616ef3.py b/data/source_files/clean/03a9ee616ef3.py new file mode 100644 index 0000000000000000000000000000000000000000..d9c1c1059c5b91f27882844cb4c3becda27ebd7c --- /dev/null +++ b/data/source_files/clean/03a9ee616ef3.py @@ -0,0 +1,196 @@ +# +# Copyright (c) 2021 The GPflux Contributors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import abc + +import numpy as np +import pytest +import tensorflow as tf +import tensorflow_probability as tfp + +from gpflow.kullback_leiblers import gauss_kl + +from gpflux.encoders import DirectlyParameterizedNormalDiag +from gpflux.layers import LatentVariableLayer, LayerWithObservations, TrackableLayer + +tf.keras.backend.set_floatx("float64") + +############ +# Utilities +############ + + +def _zero_one_normal_prior(w_dim): + """ N(0, I) prior """ + return tfp.distributions.MultivariateNormalDiag(loc=np.zeros(w_dim), scale_diag=np.ones(w_dim)) + + +def get_distributions_with_w_dim(): + distributions = [] + for d in [1, 5]: + + mean = np.zeros(d) + scale_tri_l = np.eye(d) + mvn = tfp.distributions.MultivariateNormalTriL(mean, scale_tri_l) + + std = np.ones(d) + mvn_diag = tfp.distributions.MultivariateNormalDiag(mean, std) + + distributions.append((mvn, d)) + distributions.append((mvn_diag, d)) + return distributions + + +############ +# Tests +############ + + +@pytest.mark.parametrize("distribution, w_dim", get_distributions_with_w_dim()) +def test_local_kls(distribution, w_dim): + lv = LatentVariableLayer(encoder=None, prior=distribution) + + # test kl is 0 when posteriors == priors + posterior = distribution + assert lv._local_kls(posterior) == 0 + + # test kl > 0 when posteriors != priors + batch_size = 10 + params = distribution.parameters + posterior_params = { + k: [v + 0.5 for _ in range(batch_size)] + for k, v in params.items() + if isinstance(v, np.ndarray) + } + posterior = lv.distribution_class(**posterior_params) + local_kls = lv._local_kls(posterior) + assert np.all(local_kls > 0) + assert local_kls.shape == (batch_size,) + + +@pytest.mark.parametrize("w_dim", [1, 5]) +def test_local_kl_gpflow_consistency(w_dim): + num_data = 400 + means = np.random.randn(num_data, w_dim) + encoder = DirectlyParameterizedNormalDiag(num_data, w_dim, means) + + lv = LatentVariableLayer(encoder=encoder, prior=_zero_one_normal_prior(w_dim)) + posteriors = lv._inference_posteriors( + [np.random.randn(num_data, 3), np.random.randn(num_data, 2)] + ) + + q_mu = posteriors.parameters["loc"] + q_sqrt = posteriors.parameters["scale_diag"] + + gpflow_local_kls = gauss_kl(q_mu, q_sqrt) + tfp_local_kls = tf.reduce_sum(lv._local_kls(posteriors)) + + np.testing.assert_allclose(tfp_local_kls, gpflow_local_kls, rtol=1e-10) + + +class ArrayMatcher: + def __init__(self, expected): + self.expected = expected + + def __eq__(self, actual): + return np.allclose(actual, self.expected, equal_nan=True) + + +@pytest.mark.parametrize("w_dim", [1, 5]) +def test_latent_variable_layer_losses(mocker, w_dim): + num_data, x_dim, y_dim = 43, 3, 1 + + prior_shape = (w_dim,) + posteriors_shape = (num_data, w_dim) + + prior = tfp.distributions.MultivariateNormalDiag( + loc=np.random.randn(*prior_shape), + scale_diag=np.random.randn(*prior_shape) ** 2, + ) + posteriors = tfp.distributions.MultivariateNormalDiag( + loc=np.random.randn(*posteriors_shape), + scale_diag=np.random.randn(*posteriors_shape) ** 2, + ) + + encoder = mocker.Mock(return_value=(posteriors.loc, posteriors.scale.diag)) + + lv = LatentVariableLayer(encoder=encoder, prior=prior) + + inputs = np.full((num_data, x_dim), np.nan) + targets = np.full((num_data, y_dim), np.nan) + observations = [inputs, targets] + encoder_inputs = np.concatenate(observations, axis=-1) + + _ = lv(inputs) + encoder.assert_not_called() + assert lv.losses == [0.0] + + _ = lv(inputs, observations=observations, training=True) + + # assert_called_once_with uses == for comparison which fails on arrays + encoder.assert_called_once_with(ArrayMatcher(encoder_inputs), training=True) + + expected_loss = [tf.reduce_mean(posteriors.kl_divergence(prior))] + np.testing.assert_equal(lv.losses, expected_loss) # also checks shapes match + + +@pytest.mark.parametrize("w_dim", [1, 5]) +@pytest.mark.parametrize("seed2", [None, 42]) +def test_latent_variable_layer_samples(mocker, test_data, w_dim, seed2): + seed = 123 + + inputs, targets = test_data + num_data, x_dim = inputs.shape + + prior_shape = (w_dim,) + posteriors_shape = (num_data, w_dim) + + prior = tfp.distributions.MultivariateNormalDiag( + loc=np.random.randn(*prior_shape), + scale_diag=np.random.randn(*prior_shape) ** 2, + ) + posteriors = tfp.distributions.MultivariateNormalDiag( + loc=np.random.randn(*posteriors_shape), + scale_diag=np.random.randn(*posteriors_shape) ** 2, + ) + + encoder = mocker.Mock(return_value=(posteriors.loc, posteriors.scale.diag)) + + lv = LatentVariableLayer(prior=prior, encoder=encoder) + + tf.random.set_seed(seed) + sample_prior = lv(inputs, seed=seed2) + tf.random.set_seed(seed) + prior_expected = np.concatenate([inputs, prior.sample(num_data, seed=seed2)], axis=-1) + np.testing.assert_array_equal(sample_prior, prior_expected) + + tf.random.set_seed(seed) + sample_posterior = lv(inputs, observations=[inputs, targets], training=True, seed=seed2) + tf.random.set_seed(seed) + posterior_expected = np.concatenate([inputs, posteriors.sample(seed=seed2)], axis=-1) + np.testing.assert_array_equal(sample_posterior, posterior_expected) + + +def test_no_tensorflow_metaclass_overwritten(): + """ + LayerWithObservations is a subclass of tf.keras.layers.Layer (via TrackableLayer); + this test ensures that TrackableLayer does not have a metaclass, and hence by adding + the ABCMeta to LayerWithObservations we are not accidentally removing some required + TensorFlow magic metaclass. + """ + assert LayerWithObservations.__bases__ == (TrackableLayer,) + assert type(TrackableLayer) is type + assert type(LayerWithObservations) is abc.ABCMeta diff --git a/data/source_files/clean/06e16975d4ac.py b/data/source_files/clean/06e16975d4ac.py new file mode 100644 index 0000000000000000000000000000000000000000..8ace9182901a299fe90834f06095914657f35b9c --- /dev/null +++ b/data/source_files/clean/06e16975d4ac.py @@ -0,0 +1,184 @@ +import logging +logging.basicConfig( + format='%(asctime)s - %(levelname)s - %(name)s - %(message)s', + datefmt='%Y/%m/%d %H:%M:%S', + level=logging.INFO, + ) +logger = logging.getLogger("Main") + +import os,random +import numpy as np +import torch +from processing import convert_examples_to_features, read_squad_examples +from processing import ChineseFullTokenizer +from pytorch_pretrained_bert.my_modeling import BertConfig +from optimization import BERTAdam +import config +from utils import read_and_convert, divide_parameters +from modeling import BertForQASimple, BertForQASimpleAdaptorTraining +from textbrewer import DistillationConfig, TrainingConfig, BasicTrainer +from torch.utils.data import TensorDataset, DataLoader, RandomSampler +from functools import partial + +from train_eval import predict + +def args_check(args): + if os.path.exists(args.output_dir) and os.listdir(args.output_dir): + logger.warning("Output directory () already exists and is not empty.") + if args.gradient_accumulation_steps < 1: + raise ValueError("Invalid gradient_accumulation_steps parameter: {}, should be >= 1".format( + args.gradient_accumulation_steps)) + + if not args.do_train and not args.do_predict: + raise ValueError("At least one of `do_train` or `do_predict` must be True.") + + if args.local_rank == -1 or args.no_cuda: + device = torch.device("cuda" if torch.cuda.is_available() and not args.no_cuda else "cpu") + n_gpu = torch.cuda.device_count() if not args.no_cuda else 0 + else: + device = torch.device("cuda", args.local_rank) + n_gpu = 1 + torch.distributed.init_process_group(backend='nccl') + logger.info("device %s n_gpu %d distributed training %r", device, n_gpu, bool(args.local_rank != -1)) + args.n_gpu = n_gpu + args.device = device + return device, n_gpu + +def main(): + #parse arguments + config.parse() + args = config.args + for k,v in vars(args).items(): + logger.info(f"{k}:{v}") + #set seeds + torch.manual_seed(args.random_seed) + torch.cuda.manual_seed_all(args.random_seed) + np.random.seed(args.random_seed) + random.seed(args.random_seed) + + #arguments check + device, n_gpu = args_check(args) + os.makedirs(args.output_dir, exist_ok=True) + forward_batch_size = int(args.train_batch_size / args.gradient_accumulation_steps) + args.forward_batch_size = forward_batch_size + + #load bert config + bert_config_S = BertConfig.from_json_file(args.bert_config_file_S) + assert args.max_seq_length <= bert_config_S.max_position_embeddings + + #read data + train_examples = None + train_features = None + eval_examples = None + eval_features = None + num_train_steps = None + + tokenizer = ChineseFullTokenizer(vocab_file=args.vocab_file, do_lower_case=args.do_lower_case) + convert_fn = partial(convert_examples_to_features, + tokenizer=tokenizer, + max_seq_length=args.max_seq_length, + doc_stride=args.doc_stride, + max_query_length=args.max_query_length) + if args.do_train: + train_examples,train_features = read_and_convert(args.train_file,is_training=True, do_lower_case=args.do_lower_case, + read_fn=read_squad_examples,convert_fn=convert_fn) + if args.fake_file_1: + fake_examples1,fake_features1 = read_and_convert(args.fake_file_1,is_training=True, do_lower_case=args.do_lower_case, + read_fn=read_squad_examples,convert_fn=convert_fn) + train_examples += fake_examples1 + train_features += fake_features1 + if args.fake_file_2: + fake_examples2, fake_features2 = read_and_convert(args.fake_file_2,is_training=True, do_lower_case=args.do_lower_case, + read_fn=read_squad_examples,convert_fn=convert_fn) + train_examples += fake_examples2 + train_features += fake_features2 + + num_train_steps = int(len(train_features)/args.train_batch_size) * args.num_train_epochs + + if args.do_predict: + eval_examples,eval_features = read_and_convert(args.predict_file,is_training=False, do_lower_case=args.do_lower_case, + read_fn=read_squad_examples,convert_fn=convert_fn) + + #Build Model and load checkpoint + model_S = BertForQASimple(bert_config_S,args) + #Load student + if args.load_model_type=='bert': + assert args.init_checkpoint_S is not None + state_dict_S = torch.load(args.init_checkpoint_S, map_location='cpu') + state_weight = {k[5:]:v for k,v in state_dict_S.items() if k.startswith('bert.')} + missing_keys,_ = model_S.bert.load_state_dict(state_weight,strict=False) + assert len(missing_keys)==0 + elif args.load_model_type=='all': + assert args.tuned_checkpoint_S is not None + state_dict_S = torch.load(args.tuned_checkpoint_S,map_location='cpu') + model_S.load_state_dict(state_dict_S) + else: + logger.info("Model is randomly initialized.") + model_S.to(device) + + if args.local_rank != -1 or n_gpu > 1: + if args.local_rank != -1: + raise NotImplementedError + elif n_gpu > 1: + model_S = torch.nn.DataParallel(model_S) #,output_device=n_gpu-1) + + if args.do_train: + #parameters + params = list(model_S.named_parameters()) + all_trainable_params = divide_parameters(params, lr=args.learning_rate) + logger.info("Length of all_trainable_params: %d", len(all_trainable_params)) + + + optimizer = BERTAdam(all_trainable_params,lr=args.learning_rate, + warmup=args.warmup_proportion,t_total=num_train_steps,schedule=args.schedule, + s_opt1=args.s_opt1, s_opt2=args.s_opt2, s_opt3=args.s_opt3) + + logger.info("***** Running training *****") + logger.info(" Num orig examples = %d", len(train_examples)) + logger.info(" Num split examples = %d", len(train_features)) + logger.info(" Forward batch size = %d", forward_batch_size) + logger.info(" Num backward steps = %d", num_train_steps) + + ########### DISTILLATION ########### + train_config = TrainingConfig( + gradient_accumulation_steps = args.gradient_accumulation_steps, + ckpt_frequency = args.ckpt_frequency, + log_dir = args.output_dir, + output_dir = args.output_dir, + device = args.device) + + distiller = BasicTrainer(train_config = train_config, + model = model_S, + adaptor = BertForQASimpleAdaptorTraining) + + all_input_ids = torch.tensor([f.input_ids for f in train_features], dtype=torch.long) + all_input_mask = torch.tensor([f.input_mask for f in train_features], dtype=torch.long) + all_doc_mask = torch.tensor([f.doc_mask for f in train_features], dtype=torch.float) + all_segment_ids = torch.tensor([f.segment_ids for f in train_features], dtype=torch.long) + all_start_positions = torch.tensor([f.start_position for f in train_features], dtype=torch.long) + all_end_positions = torch.tensor([f.end_position for f in train_features], dtype=torch.long) + + train_dataset = TensorDataset(all_input_ids, all_segment_ids, all_input_mask, all_doc_mask, + all_start_positions, all_end_positions) + if args.local_rank == -1: + train_sampler = RandomSampler(train_dataset) + else: + raise NotImplementedError + train_dataloader = DataLoader(train_dataset, sampler=train_sampler, batch_size=args.forward_batch_size,drop_last=True) + callback_func = partial(predict, + eval_examples=eval_examples, + eval_features=eval_features, + args=args) + with distiller: + distiller.train(optimizer, scheduler=None, dataloader=train_dataloader, + num_epochs=args.num_train_epochs, callback=callback_func) + + if not args.do_train and args.do_predict: + res = predict(model_S,eval_examples,eval_features,step=0,args=args) + print (res) + + + + +if __name__ == "__main__": + main() diff --git a/data/source_files/clean/07c7264a775f.py b/data/source_files/clean/07c7264a775f.py new file mode 100644 index 0000000000000000000000000000000000000000..d4a08e8d4977972540a2be8547db892cc6d2f3ab --- /dev/null +++ b/data/source_files/clean/07c7264a775f.py @@ -0,0 +1,174 @@ +import pytest +import numpy as np +from numpy.testing import assert_allclose + +from keras import backend as K +from keras import activations + + +def get_standard_values(): + ''' + These are just a set of floats used for testing the activation + functions, and are useful in multiple tests. + ''' + return np.array([[0, 0.1, 0.5, 0.9, 1.0]], dtype=K.floatx()) + + +def test_softmax(): + ''' + Test using a reference implementation of softmax + ''' + def softmax(values): + m = np.max(values) + e = np.exp(values - m) + return e / np.sum(e) + + x = K.placeholder(ndim=2) + f = K.function([x], [activations.softmax(x)]) + test_values = get_standard_values() + + result = f([test_values])[0] + expected = softmax(test_values) + assert_allclose(result, expected, rtol=1e-05) + + +def test_time_distributed_softmax(): + x = K.placeholder(shape=(1, 1, 5)) + f = K.function([x], [activations.softmax(x)]) + test_values = get_standard_values() + test_values = np.reshape(test_values, (1, 1, np.size(test_values))) + f([test_values])[0] + + +def test_softplus(): + ''' + Test using a reference softplus implementation + ''' + def softplus(x): + return np.log(np.ones_like(x) + np.exp(x)) + + x = K.placeholder(ndim=2) + f = K.function([x], [activations.softplus(x)]) + test_values = get_standard_values() + + result = f([test_values])[0] + expected = softplus(test_values) + assert_allclose(result, expected, rtol=1e-05) + + +def test_softsign(): + ''' + Test using a reference softsign implementation + ''' + def softsign(x): + return np.divide(x, np.ones_like(x) + np.absolute(x)) + + x = K.placeholder(ndim=2) + f = K.function([x], [activations.softsign(x)]) + test_values = get_standard_values() + + result = f([test_values])[0] + expected = softsign(test_values) + assert_allclose(result, expected, rtol=1e-05) + + +def test_sigmoid(): + ''' + Test using a numerically stable reference sigmoid implementation + ''' + def ref_sigmoid(x): + if x >= 0: + return 1 / (1 + np.exp(-x)) + else: + z = np.exp(x) + return z / (1 + z) + sigmoid = np.vectorize(ref_sigmoid) + + x = K.placeholder(ndim=2) + f = K.function([x], [activations.sigmoid(x)]) + test_values = get_standard_values() + + result = f([test_values])[0] + expected = sigmoid(test_values) + assert_allclose(result, expected, rtol=1e-05) + + +def test_hard_sigmoid(): + ''' + Test using a reference hard sigmoid implementation + ''' + def ref_hard_sigmoid(x): + ''' + Reference hard sigmoid with slope and shift values from theano, see + https://github.com/Theano/Theano/blob/master/theano/tensor/nnet/sigm.py + ''' + x = (x * 0.2) + 0.5 + z = 0.0 if x <= 0 else (1.0 if x >= 1 else x) + return z + hard_sigmoid = np.vectorize(ref_hard_sigmoid) + + x = K.placeholder(ndim=2) + f = K.function([x], [activations.hard_sigmoid(x)]) + test_values = get_standard_values() + + result = f([test_values])[0] + expected = hard_sigmoid(test_values) + assert_allclose(result, expected, rtol=1e-05) + + +def test_relu(): + ''' + Relu implementation doesn't depend on the value being + a theano variable. Testing ints, floats and theano tensors. + ''' + x = K.placeholder(ndim=2) + f = K.function([x], [activations.relu(x)]) + + test_values = get_standard_values() + result = f([test_values])[0] + + # because no negatives in test values + assert_allclose(result, test_values, rtol=1e-05) + + +def test_elu(): + x = K.placeholder(ndim=2) + f = K.function([x], [activations.elu(x, 0.5)]) + + test_values = get_standard_values() + result = f([test_values])[0] + + # because no negatives in test values + assert_allclose(result, test_values, rtol=1e-05) + + negative_values = np.array([[-1, -2]], dtype=K.floatx()) + result = f([negative_values])[0] + true_result = (np.exp(negative_values) - 1) / 2 + + assert_allclose(result, true_result) + + +def test_tanh(): + test_values = get_standard_values() + + x = K.placeholder(ndim=2) + exp = activations.tanh(x) + f = K.function([x], [exp]) + + result = f([test_values])[0] + expected = np.tanh(test_values) + assert_allclose(result, expected, rtol=1e-05) + + +def test_linear(): + ''' + This function does no input validation, it just returns the thing + that was passed in. + ''' + xs = [1, 5, True, None, 'foo'] + for x in xs: + assert(x == activations.linear(x)) + + +if __name__ == '__main__': + pytest.main([__file__]) diff --git a/data/source_files/clean/08a5bdeb757f.py b/data/source_files/clean/08a5bdeb757f.py new file mode 100644 index 0000000000000000000000000000000000000000..0ad9fee81c50ef01672c1f7b553d66bc07bc9155 --- /dev/null +++ b/data/source_files/clean/08a5bdeb757f.py @@ -0,0 +1,102 @@ +"""Python interfaces to DGL farthest point sampler.""" +from dgl._ffi.base import DGLError +import numpy as np +from .._ffi.function import _init_api +from .. import backend as F +from .. import ndarray as nd + + +def _farthest_point_sampler(data, batch_size, sample_points, dist, start_idx, result): + r"""Farthest Point Sampler + + Parameters + ---------- + data : tensor + A tensor of shape (N, d) where N is the number of points and d is the dimension. + batch_size : int + The number of batches in the ``data``. N should be divisible by batch_size. + sample_points : int + The number of points to sample in each batch. + dist : tensor + Pre-allocated tensor of shape (N, ) for to-sample distance. + start_idx : tensor of int + Pre-allocated tensor of shape (batch_size, ) for the starting sample in each batch. + result : tensor of int + Pre-allocated tensor of shape (sample_points * batch_size, ) for the sampled index. + + Returns + ------- + No return value. The input variable ``result`` will be overwriten with sampled indices. + + """ + assert F.shape(data)[0] >= sample_points * batch_size + assert F.shape(data)[0] % batch_size == 0 + + _CAPI_FarthestPointSampler(F.zerocopy_to_dgl_ndarray(data), + batch_size, sample_points, + F.zerocopy_to_dgl_ndarray(dist), + F.zerocopy_to_dgl_ndarray(start_idx), + F.zerocopy_to_dgl_ndarray(result)) + + +def _neighbor_matching(graph_idx, num_nodes, edge_weights=None, relabel_idx=True): + """ + Description + ----------- + The neighbor matching procedure of edge coarsening used in + `Metis `__ + and + `Graclus `__ + for homogeneous graph coarsening. This procedure keeps picking an unmarked + vertex and matching it with one its unmarked neighbors (that maximizes its + edge weight) until no match can be done. + + If no edge weight is given, this procedure will randomly pick neighbor for each + vertex. + + The GPU implementation is based on `A GPU Algorithm for Greedy Graph Matching + `__ + + NOTE: The input graph must be bi-directed (undirected) graph. Call :obj:`dgl.to_bidirected` + if you are not sure your graph is bi-directed. + + Parameters + ---------- + graph : HeteroGraphIndex + The input homogeneous graph. + num_nodes : int + The number of nodes in this homogeneous graph. + edge_weight : tensor, optional + The edge weight tensor holding non-negative scalar weight for each edge. + default: :obj:`None` + relabel_idx : bool, optional + If true, relabel resulting node labels to have consecutive node ids. + default: :obj:`True` + + Returns + ------- + a 1-D tensor + A vector with each element that indicates the cluster ID of a vertex. + """ + edge_weight_capi = nd.NULL["int64"] + if edge_weights is not None: + edge_weight_capi = F.zerocopy_to_dgl_ndarray(edge_weights) + node_label = F.full_1d( + num_nodes, -1, getattr(F, graph_idx.dtype), F.to_backend_ctx(graph_idx.ctx)) + node_label_capi = F.zerocopy_to_dgl_ndarray_for_write(node_label) + _CAPI_NeighborMatching(graph_idx, edge_weight_capi, node_label_capi) + if F.reduce_sum(node_label < 0).item() != 0: + raise DGLError("Find unmatched node") + + # reorder node id + # TODO: actually we can add `return_inverse` option for `unique` + # function in backend for efficiency. + if relabel_idx: + node_label_np = F.zerocopy_to_numpy(node_label) + _, node_label_np = np.unique(node_label_np, return_inverse=True) + return F.tensor(node_label_np) + else: + return node_label + + +_init_api('dgl.geometry', __name__) diff --git a/data/source_files/clean/0952f49d1c2e.py b/data/source_files/clean/0952f49d1c2e.py new file mode 100644 index 0000000000000000000000000000000000000000..0a10152195fb9a20741a86fb44035860fed300f4 --- /dev/null +++ b/data/source_files/clean/0952f49d1c2e.py @@ -0,0 +1,352 @@ +from CommonServerPython import * + +''' IMPORTS ''' + +import re +import requests + +# Disable insecure warnings +requests.packages.urllib3.disable_warnings() + +''' GLOBALS/PARAMS ''' + +VENDOR = 'Have I Been Pwned? V2' +MAX_RETRY_ALLOWED = demisto.params().get('max_retry_time', -1) +API_KEY = demisto.params().get('api_key') +USE_SSL = not demisto.params().get('insecure', False) + +BASE_URL = 'https://haveibeenpwned.com/api/v3' +HEADERS = { + 'hibp-api-key': API_KEY, + 'user-agent': 'DBOT-API', + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} + +DEFAULT_DBOT_SCORE_EMAIL = 2 if demisto.params().get('default_dbot_score_email') == 'SUSPICIOUS' else 3 +DEFAULT_DBOT_SCORE_DOMAIN = 2 if demisto.params().get('default_dbot_score_domain') == 'SUSPICIOUS' else 3 + +SUFFIXES = { + "email": '/breachedaccount/', + "domain": '/breaches?domain=', + "username": '/breachedaccount/', + "paste": '/pasteaccount/', + "email_truncate_verified": '?truncateResponse=false&includeUnverified=true', + "domain_truncate_verified": '&truncateResponse=false&includeUnverified=true', + "username_truncate_verified": '?truncateResponse=false&includeUnverified=true' +} + +RETRIES_END_TIME = datetime.min + +''' HELPER FUNCTIONS ''' + + +def http_request(method, url_suffix, params=None, data=None): + while True: + res = requests.request( + method, + BASE_URL + url_suffix, + verify=USE_SSL, + params=params, + data=data, + headers=HEADERS + ) + + if res.status_code != 429: + # Rate limit response code + break + + if datetime.now() > RETRIES_END_TIME: + return_error('Max retry time has exceeded.') + + wait_regex = re.search(r'\d+', res.json()['message']) + if wait_regex: + wait_amount = wait_regex.group() + else: + demisto.error('failed extracting wait time will use default (5). Res body: {}'.format(res.text)) + wait_amount = 5 + if datetime.now() + timedelta(seconds=int(wait_amount)) > RETRIES_END_TIME: + return_error('Max retry time has exceeded.') + time.sleep(int(wait_amount)) + + if res.status_code == 404: + return None + if not res.status_code == 200: + if not res.status_code == 401: + demisto.error( + 'Error in API call to Pwned Integration [%d]. Full text: %s' % (res.status_code, res.text)) + return_error('Error in API call to Pwned Integration [%d] - %s' % (res.status_code, res.reason)) + return None + + return res.json() + + +def html_description_to_human_readable(breach_description): + """ + Converting from html description to hr + :param breach_description: Description of breach from API response + :return: Description string that altered HTML urls to clickable urls + for better readability in war-room + """ + html_link_pattern = re.compile('(.+?)') + patterns_found = html_link_pattern.findall(breach_description) + for link in patterns_found: + html_actual_address = link[0] + html_readable_name = link[2] + link_from_desc = '[' + html_readable_name + ']' + '(' + html_actual_address + ')' + breach_description = re.sub(html_link_pattern, link_from_desc, breach_description, count=1) + return breach_description + + +def data_to_markdown(query_type, query_arg, api_res, api_paste_res=None): + records_found = False + + md = '### Have I Been Pwned query for ' + query_type.lower() + ': *' + query_arg + '*\n' + + if api_res: + records_found = True + for breach in api_res: + verified_breach = 'Verified' if breach['IsVerified'] else 'Unverified' + md += '#### ' + breach['Title'] + ' (' + breach['Domain'] + '): ' + str(breach['PwnCount']) + \ + ' records breached [' + verified_breach + ' breach]\n' + md += 'Date: **' + breach['BreachDate'] + '**\n\n' + md += html_description_to_human_readable(breach['Description']) + '\n' + md += 'Data breached: **' + ','.join(breach['DataClasses']) + '**\n' + + if api_paste_res: + records_found = True + pastes_list = [] + for paste_breach in api_paste_res: + paste_entry = \ + { + 'Source': paste_breach['Source'], + 'Title': paste_breach['Title'], + 'ID': paste_breach['Id'], + 'Date': '', + 'Amount of emails in paste': str(paste_breach['EmailCount']) + } + + if paste_breach['Date']: + paste_entry['Date'] = paste_breach['Date'].split('T')[0] + + pastes_list.append(paste_entry) + + md += tableToMarkdown('The email address was found in the following "Pastes":', + pastes_list, + ['ID', 'Title', 'Date', 'Source', 'Amount of emails in paste']) + + if not records_found: + md += 'No records found' + + return md + + +def create_dbot_score_dictionary(indicator_value, indicator_type, dbot_score): + return { + 'Indicator': indicator_value, + 'Type': indicator_type, + 'Vendor': VENDOR, + 'Score': dbot_score + } + + +def create_context_entry(context_type, context_main_value, comp_sites, comp_pastes, malicious_score): + context_dict = dict() # dict + + if context_type == 'email': + context_dict['Address'] = context_main_value + else: + context_dict['Name'] = context_main_value + + context_dict['Pwned-V2'] = { + 'Compromised': { + 'Vendor': VENDOR, + 'Reporters': ', '.join(comp_sites + comp_pastes) + } + } + + if malicious_score == 3: + context_dict['Malicious'] = add_malicious_to_context(context_type) + + return context_dict + + +def add_malicious_to_context(malicious_type): + return { + 'Vendor': VENDOR, + 'Description': 'The ' + malicious_type + ' has been compromised' + } + + +def email_to_entry_context(email, api_email_res, api_paste_res): + dbot_score = 0 + comp_email = dict() # type: dict + comp_sites = sorted([item['Title'] for item in api_email_res]) + comp_pastes = sorted(set(item['Source'] for item in api_paste_res)) + + if len(comp_sites) > 0: + dbot_score = DEFAULT_DBOT_SCORE_EMAIL + email_context = create_context_entry('email', email, comp_sites, comp_pastes, DEFAULT_DBOT_SCORE_EMAIL) + comp_email[outputPaths['email']] = email_context + + comp_email['DBotScore'] = create_dbot_score_dictionary(email, 'email', dbot_score) + + return comp_email + + +def domain_to_entry_context(domain, api_res): + comp_sites = [item['Title'] for item in api_res] + comp_sites = sorted(comp_sites) + comp_domain = dict() # type: dict + dbot_score = 0 + + if len(comp_sites) > 0: + dbot_score = DEFAULT_DBOT_SCORE_DOMAIN + domain_context = create_context_entry('domain', domain, comp_sites, [], DEFAULT_DBOT_SCORE_DOMAIN) + comp_domain[outputPaths['domain']] = domain_context + + comp_domain['DBotScore'] = create_dbot_score_dictionary(domain, 'domain', dbot_score) + + return comp_domain + + +def set_retry_end_time(): + global RETRIES_END_TIME + if MAX_RETRY_ALLOWED != -1: + RETRIES_END_TIME = datetime.now() + timedelta(seconds=int(MAX_RETRY_ALLOWED)) + + +''' COMMANDS + REQUESTS FUNCTIONS ''' + + +def test_module(args_dict): + """ + If the http request was successful the test will return OK + :return: 3 arrays of outputs + """ + http_request('GET', SUFFIXES.get("username", '') + 'test') + return ['ok'], [None], [None] + + +def pwned_email_command(args_dict): + """ + Executing the pwned request for emails list, in order to support list input, the function returns 3 lists of outputs + :param args_dict: the demisto argument - in this case the email list is needed + :return: 3 arrays of outputs + """ + email_list = argToList(args_dict.get('email', '')) + api_email_res_list, api_paste_res_list = pwned_email(email_list) + + md_list = [] + ec_list = [] + + for email, api_email_res, api_paste_res in zip(email_list, api_email_res_list, api_paste_res_list): + md_list.append(data_to_markdown('Email', email, api_email_res, api_paste_res)) + ec_list.append(email_to_entry_context(email, api_email_res or [], api_paste_res or [])) + return md_list, ec_list, api_email_res_list + + +def pwned_email(email_list): + """ + Executing the http requests + :param email_list: the email list that needed for the http requests + :return: 2 arrays of http requests outputs + """ + api_email_res_list = [] + api_paste_res_list = [] + + for email in email_list: + email_suffix = SUFFIXES.get("email") + email + SUFFIXES.get("email_truncate_verified") + paste_suffix = SUFFIXES.get("paste") + email + api_email_res_list.append(http_request('GET', url_suffix=email_suffix)) + api_paste_res_list.append(http_request('GET', url_suffix=paste_suffix)) + + return api_email_res_list, api_paste_res_list + + +def pwned_domain_command(args_dict): + """ + Executing the pwned request for domains list, in order to support list input, the function returns 3 lists of + outputs + :param args_dict: the demisto argument - in this case the domain list is needed + :return: 3 arrays of outputs + """ + domain_list = argToList(args_dict.get('domain', '')) + api_res_list = pwned_domain(domain_list) + + md_list = [] + ec_list = [] + + for domain, api_res in zip(domain_list, api_res_list): + md_list.append(data_to_markdown('Domain', domain, api_res)) + ec_list.append(domain_to_entry_context(domain, api_res or [])) + return md_list, ec_list, api_res_list + + +def pwned_domain(domain_list): + """ + Executing the http request + :param domain_list: the domains list that needed for the http requests + :return: an array of http requests outputs + """ + api_res_list = [] + for domain in domain_list: + suffix = SUFFIXES.get("domain") + domain + SUFFIXES.get("domain_truncate_verified") + api_res_list.append(http_request('GET', url_suffix=suffix)) + return api_res_list + + +def pwned_username_command(args_dict): + """ + Executing the pwned request for usernames list, in order to support list input, the function returns 3 lists of + outputs + :param args_dict: the demisto argument - in this case the username list is needed + :return: 3 arrays of outputs + """ + username_list = argToList(args_dict.get('username', '')) + api_res_list = pwned_username(username_list) + + md_list = [] + ec_list = [] + + for username, api_res in zip(username_list, api_res_list): + md_list.append(data_to_markdown('Username', username, api_res)) + ec_list.append(domain_to_entry_context(username, api_res or [])) + return md_list, ec_list, api_res_list + + +def pwned_username(username_list): + """ + Executing the http request + :param username_list: the username list that needed for the http requests + :return: an array of http requests outputs + """ + api_res_list = [] + for username in username_list: + suffix = SUFFIXES.get("username") + username + SUFFIXES.get("username_truncate_verified") + api_res_list.append(http_request('GET', url_suffix=suffix)) + return api_res_list + + +command = demisto.command() +LOG('Command being called is: {}'.format(command)) +try: + handle_proxy() + set_retry_end_time() + commands = { + 'test-module': test_module, + 'email': pwned_email_command, + 'pwned-email': pwned_email_command, + 'domain': pwned_domain_command, + 'pwned-domain': pwned_domain_command, + 'pwned-username': pwned_username_command + } + + if command in commands: + md_list, ec_list, api_email_res_list = commands[command](demisto.args()) + for md, ec, api_paste_res in zip(md_list, ec_list, api_email_res_list): + return_outputs(md, ec, api_paste_res) + +# Log exceptions +except Exception as e: + return_error(str(e)) diff --git a/data/source_files/clean/0b4d66d202fe.py b/data/source_files/clean/0b4d66d202fe.py new file mode 100644 index 0000000000000000000000000000000000000000..86f3b70aa2f3c882bdd1f178d6aa80fab1793aab --- /dev/null +++ b/data/source_files/clean/0b4d66d202fe.py @@ -0,0 +1,175 @@ +# -*- coding: utf-8 -*- + +from scipy import stats + +import numpy as np +import warnings + +from ...compat import check_is_fitted, pmdarima as pm_compat +from .base import BaseEndogTransformer + +__all__ = ['BoxCoxEndogTransformer'] + + +class BoxCoxEndogTransformer(BaseEndogTransformer): + r"""Apply the Box-Cox transformation to an endogenous array + + The Box-Cox transformation is applied to non-normal data to coerce it more + towards a normal distribution. It's specified as:: + + (((y + lam2) ** lam1) - 1) / lam1, if lmbda != 0, else + log(y + lam2) + + Parameters + ---------- + lmbda : float or None, optional (default=None) + The lambda value for the Box-Cox transformation, if known. If not + specified, it will be estimated via MLE. + + lmbda2 : float, optional (default=0.) + The value to add to ``y`` to make it non-negative. If, after adding + ``lmbda2``, there are still negative values, a ValueError will be + raised. + + neg_action : str, optional (default="raise") + How to respond if any values in ``y <= 0`` after adding ``lmbda2``. + One of ('raise', 'warn', 'ignore'). If anything other than 'raise', + values <= 0 will be truncated to the value of ``floor``. + + floor : float, optional (default=1e-16) + A positive value that truncate values to if there are values in ``y`` + that are zero or negative and ``neg_action`` is not 'raise'. Note that + if values are truncated, invertibility will not be preserved, and the + transformed array may not be perfectly inverse-transformed. + """ + def __init__(self, lmbda=None, lmbda2=0, neg_action="raise", floor=1e-16): + + self.lmbda = lmbda + self.lmbda2 = lmbda2 + self.neg_action = neg_action + self.floor = floor + + def fit(self, y, X=None, **kwargs): # TODO: kwargs go away + """Fit the transformer + + Learns the value of ``lmbda``, if not specified in the constructor. + If defined in the constructor, is not re-learned. + + Parameters + ---------- + y : array-like or None, shape=(n_samples,) + The endogenous (time-series) array. + + X : array-like or None, shape=(n_samples, n_features), optional + The exogenous array of additional covariates. Not used for + endogenous transformers. Default is None, and non-None values will + serve as pass-through arrays. + """ + lam1 = self.lmbda + lam2 = self.lmbda2 + + # Temporary shim until we remove `exogenous` support completely + X, _ = pm_compat.get_X(X, **kwargs) + + if lam2 < 0: + raise ValueError("lmbda2 must be a non-negative scalar value") + + if lam1 is None: + y, _ = self._check_y_X(y, X) + _, lam1 = stats.boxcox(y + lam2, lmbda=None, alpha=None) + + self.lam1_ = lam1 + self.lam2_ = lam2 + return self + + def transform(self, y, X=None, **kwargs): + """Transform the new array + + Apply the Box-Cox transformation to the array after learning the + lambda parameter. + + Parameters + ---------- + y : array-like or None, shape=(n_samples,) + The endogenous (time-series) array. + + X : array-like or None, shape=(n_samples, n_features), optional + The exogenous array of additional covariates. Not used for + endogenous transformers. Default is None, and non-None values will + serve as pass-through arrays. + + Returns + ------- + y_transform : array-like or None + The Box-Cox transformed y array + + X : array-like or None + The X array + """ + check_is_fitted(self, "lam1_") + + # Temporary shim until we remove `exogenous` support completely + X, _ = pm_compat.get_X(X, **kwargs) + + lam1 = self.lam1_ + lam2 = self.lam2_ + + y, exog = self._check_y_X(y, X) + y += lam2 + + neg_mask = y <= 0. + if neg_mask.any(): + action = self.neg_action + msg = "Negative or zero values present in y" + if action == "raise": + raise ValueError(msg) + elif action == "warn": + warnings.warn(msg, UserWarning) + y[neg_mask] = self.floor + + if lam1 == 0: + return np.log(y), exog + return (y ** lam1 - 1) / lam1, exog + + def inverse_transform(self, y, X=None, **kwargs): # TODO: kwargs go away + """Inverse transform a transformed array + + Inverse the Box-Cox transformation on the transformed array. Note that + if truncation happened in the ``transform`` method, invertibility will + not be preserved, and the transformed array may not be perfectly + inverse-transformed. + + Parameters + ---------- + y : array-like or None, shape=(n_samples,) + The transformed endogenous (time-series) array. + + X : array-like or None, shape=(n_samples, n_features), optional + The exogenous array of additional covariates. Not used for + endogenous transformers. Default is None, and non-None values will + serve as pass-through arrays. + + Returns + ------- + y : array-like or None + The inverse-transformed y array + + X : array-like or None + The inverse-transformed X array + """ + check_is_fitted(self, "lam1_") + + # Temporary shim until we remove `exogenous` support completely + X, _ = pm_compat.get_X(X, **kwargs) + + lam1 = self.lam1_ + lam2 = self.lam2_ + + y, exog = self._check_y_X(y, X) + if lam1 == 0: + return np.exp(y) - lam2, exog + + numer = y * lam1 # remove denominator + numer += 1. # add 1 back to it + de_exp = numer ** (1. / lam1) # de-exponentiate + return de_exp - lam2, exog diff --git a/data/source_files/clean/0f721ae1b9ad.py b/data/source_files/clean/0f721ae1b9ad.py new file mode 100644 index 0000000000000000000000000000000000000000..86b6adb997cbd21ec9e8e9a5843dcd2235408ae3 --- /dev/null +++ b/data/source_files/clean/0f721ae1b9ad.py @@ -0,0 +1,87 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# pylint: disable=invalid-name + +"""Compute and schedule for add, multiply, subtract slice op + +Please note the following assumptions made by the implementation: + +1) The inputs will be multiple of crouton layout except for the axis that needs broadcasting.""" + +from tvm import te +from tvm import tir +from tvm import topi +from ..utils import get_layout_transform_fn + + +def add_broadcast_compute(input_a, input_b): + """Call the add op from topi""" + return topi.add(input_a, input_b) + + +def subtract_broadcast_compute(input_a, input_b): + """Call the subtract op from topi""" + return topi.subtract(input_a, input_b) + + +def multiply_broadcast_compute(input_a, input_b): + """Call the multiply op from topi""" + return topi.multiply(input_a, input_b) + + +def tir_broadcast_schedule( + out_m, + input_a, + input_b, + output_layout: str, + input_a_layout: str, + input_b_layout: str, + op_name: str, +): + """Schedule for input and output layout nhwc-8h2w32c2w-2d considering broadcast""" + func = te.create_prim_func([input_a, input_b, out_m]) + + s = tir.Schedule(func) + + block_dict = {"add": "T_add", "subtract": "T_subtract", "multiply": "T_multiply"} + + block = s.get_block(block_dict[op_name]) + + if input_a_layout == "nhwc-8h2w32c2w-2d": + input_a_transformed_layout = get_layout_transform_fn(input_a_layout) + s.transform_layout(block, buffer=("read", 0), index_map=input_a_transformed_layout) + + if input_b_layout == "nhwc-8h2w32c2w-2d": + input_b_transformed_layout = get_layout_transform_fn(input_b_layout) + s.transform_layout(block, buffer=("read", 1), index_map=input_b_transformed_layout) + + output_transformed_layout = get_layout_transform_fn(output_layout) + s.transform_layout(block, buffer=("write", 0), index_map=output_transformed_layout) + + n, h, w, c = s.get_loops(block) + + h_o, h_i = s.split(h, [None, 8]) + w_o, w_i = s.split(w, [None, 4]) + c_o, c_i = s.split(c, [None, 32]) + wio, wii = s.split(w_i, [None, 2]) + + s.reorder(n, h_o, w_o, c_o, h_i, wio, c_i, wii) + + fused = s.fuse(c_i, wii) + s.vectorize(fused) + + return s diff --git a/data/source_files/clean/1156729f8e7e.py b/data/source_files/clean/1156729f8e7e.py new file mode 100644 index 0000000000000000000000000000000000000000..8a507bf3c4b912bd7ed181d618b52de6b0f464f2 --- /dev/null +++ b/data/source_files/clean/1156729f8e7e.py @@ -0,0 +1,85 @@ +import logging +from collections import Counter +from django.core.management.base import BaseCommand +from django.db.models import Q + +from TWLight.applications.models import Application +from TWLight.resources.models import Partner +from TWLight.applications.signals import Reminder +from TWLight.users.models import Editor + +logger = logging.getLogger(__name__) + + +class Command(BaseCommand): + def handle(self, *args, **options): + # This is not DRY. Originally, this pulled the queryset from + # TWLight.applications.views.ListApplicationsView.get_queryset(). + # But that now expects a request object. So, we did a copy/paste. + # We're actually getting apps with a status of PENDING or QUESTION + # or APPROVED, and their corresponding user preferences being True + # for partners with a status of AVAILABLE. + all_apps = ( + Application.objects.filter( + Q( + partner__coordinator__editor__user__userprofile__pending_app_reminders=True + ) + & Q(status=Application.PENDING) + | Q( + partner__coordinator__editor__user__userprofile__discussion_app_reminders=True + ) + & Q(status=Application.QUESTION) + | Q( + partner__coordinator__editor__user__userprofile__approved_app_reminders=True + ) + & Q(status=Application.APPROVED), + partner__status__in=[Partner.AVAILABLE], + editor__isnull=False, + ) + .exclude(editor__user__groups__name="restricted") + .order_by("status", "partner", "date_created") + ) + # A deduplicated dict of coordinators from the pending app queryset, along + # with a count of how many total pending apps they have + coordinators = Counter( + all_apps.values_list( + "partner__coordinator__editor", + "partner__coordinator__email", + "partner__coordinator__editor__user__userprofile__lang", + ) + ) + + for coordinator, count in list(coordinators.items()): + try: + # We create a dictionary with the three status codes + # we'd want to send emails for, and their corresponding + # counts. + app_status_and_count = { + Application.PENDING: all_apps.filter( + status=Application.PENDING, + partner__coordinator__editor=coordinator[0], + ).count(), + Application.QUESTION: all_apps.filter( + status=Application.QUESTION, + partner__coordinator__editor=coordinator[0], + ).count(), + Application.APPROVED: all_apps.filter( + status=Application.APPROVED, + partner__coordinator__editor=coordinator[0], + ).count(), + } + editor = Editor.objects.get(id=coordinator[0]) + except Editor.DoesNotExist: + logger.info( + "Editor {} does not exist; skipping.".format(coordinator[0]) + ) + break + # Only bother with the signal if we have a coordinator email. + if coordinator[1]: + Reminder.coordinator_reminder.send( + sender=self.__class__, + app_status_and_count=app_status_and_count, + coordinator_wp_username=editor.wp_username, + coordinator_email=coordinator[1], + coordinator_lang=coordinator[2], + ) diff --git a/data/source_files/clean/12581ac99721.py b/data/source_files/clean/12581ac99721.py new file mode 100644 index 0000000000000000000000000000000000000000..8a678b6dfe1f80688ee851169cd059181b03b309 --- /dev/null +++ b/data/source_files/clean/12581ac99721.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python +# +# Electrum - lightweight Bitcoin client +# Copyright (C) 2015 Thomas Voegtlin +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# Check DNSSEC trust chain. +# Todo: verify expiration dates +# +# Based on +# http://backreference.org/2010/11/17/dnssec-verification-with-dig/ +# https://github.com/rthalley/dnspython/blob/master/tests/test_dnssec.py + + +import dns +import dns.name +import dns.query +import dns.dnssec +import dns.message +import dns.resolver +import dns.rdatatype +import dns.rdtypes.ANY.NS +import dns.rdtypes.ANY.CNAME +import dns.rdtypes.ANY.DLV +import dns.rdtypes.ANY.DNSKEY +import dns.rdtypes.ANY.DS +import dns.rdtypes.ANY.NSEC +import dns.rdtypes.ANY.NSEC3 +import dns.rdtypes.ANY.NSEC3PARAM +import dns.rdtypes.ANY.RRSIG +import dns.rdtypes.ANY.SOA +import dns.rdtypes.ANY.TXT +import dns.rdtypes.IN.A +import dns.rdtypes.IN.AAAA + +from .logging import get_logger + + +_logger = get_logger(__name__) + + +# hard-coded trust anchors (root KSKs) +trust_anchors = [ + # KSK-2017: + dns.rrset.from_text('.', 1 , 'IN', 'DNSKEY', '257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU='), + # KSK-2010: + dns.rrset.from_text('.', 15202, 'IN', 'DNSKEY', '257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0='), +] + + +def _check_query(ns, sub, _type, keys): + q = dns.message.make_query(sub, _type, want_dnssec=True) + response = dns.query.tcp(q, ns, timeout=5) + assert response.rcode() == 0, 'No answer' + answer = response.answer + assert len(answer) != 0, ('No DNS record found', sub, _type) + assert len(answer) != 1, ('No DNSSEC record found', sub, _type) + if answer[0].rdtype == dns.rdatatype.RRSIG: + rrsig, rrset = answer + elif answer[1].rdtype == dns.rdatatype.RRSIG: + rrset, rrsig = answer + else: + raise Exception('No signature set in record') + if keys is None: + keys = {dns.name.from_text(sub):rrset} + dns.dnssec.validate(rrset, rrsig, keys) + return rrset + + +def _get_and_validate(ns, url, _type): + # get trusted root key + root_rrset = None + for dnskey_rr in trust_anchors: + try: + # Check if there is a valid signature for the root dnskey + root_rrset = _check_query(ns, '', dns.rdatatype.DNSKEY, {dns.name.root: dnskey_rr}) + break + except dns.dnssec.ValidationFailure: + # It's OK as long as one key validates + continue + if not root_rrset: + raise dns.dnssec.ValidationFailure('None of the trust anchors found in DNS') + keys = {dns.name.root: root_rrset} + # top-down verification + parts = url.split('.') + for i in range(len(parts), 0, -1): + sub = '.'.join(parts[i-1:]) + name = dns.name.from_text(sub) + # If server is authoritative, don't fetch DNSKEY + query = dns.message.make_query(sub, dns.rdatatype.NS) + response = dns.query.udp(query, ns, 3) + assert response.rcode() == dns.rcode.NOERROR, "query error" + rrset = response.authority[0] if len(response.authority) > 0 else response.answer[0] + rr = rrset[0] + if rr.rdtype == dns.rdatatype.SOA: + continue + # get DNSKEY (self-signed) + rrset = _check_query(ns, sub, dns.rdatatype.DNSKEY, None) + # get DS (signed by parent) + ds_rrset = _check_query(ns, sub, dns.rdatatype.DS, keys) + # verify that a signed DS validates DNSKEY + for ds in ds_rrset: + for dnskey in rrset: + htype = 'SHA256' if ds.digest_type == 2 else 'SHA1' + good_ds = dns.dnssec.make_ds(name, dnskey, htype) + if ds == good_ds: + break + else: + continue + break + else: + raise Exception("DS does not match DNSKEY") + # set key for next iteration + keys = {name: rrset} + # get TXT record (signed by zone) + rrset = _check_query(ns, url, _type, keys) + return rrset + + +def query(url, rtype): + # 8.8.8.8 is Google's public DNS server + nameservers = ['8.8.8.8'] + ns = nameservers[0] + try: + out = _get_and_validate(ns, url, rtype) + validated = True + except Exception as e: + _logger.info(f"DNSSEC error: {repr(e)}") + out = dns.resolver.resolve(url, rtype) + validated = False + return out, validated diff --git a/data/source_files/clean/12ad51890456.py b/data/source_files/clean/12ad51890456.py new file mode 100644 index 0000000000000000000000000000000000000000..7c8673116b02c8c1dd21b123ad5da8653dbefe4c --- /dev/null +++ b/data/source_files/clean/12ad51890456.py @@ -0,0 +1,94 @@ +#! usr/bin/env python3 +# -*- coding:utf-8 -*- +""" +@Author:Kaiyin Zhou +Usage: +node_embeddings = tf.random.normal(shape=(5, 3)) +adjacency_lists = [ + tf.constant([[0, 1], [2, 4], [2, 4]], dtype=tf.int32), + tf.constant([[0, 1], [2, 4], [2, 4]], dtype=tf.int32) + ] +layer = RGraphConvolution(out_features=12) +x = layer(GNNInput(node_embeddings, adjacency_lists)) +""" +import tensorflow as tf + +from nlpgnn.gnn.messagepassing import MessagePassing + + +class RGraphConvolution(MessagePassing): + def __init__(self, + out_features, + epsion=1e-7, + aggr="sum", + normalize=True, + kernel_initializer='glorot_uniform', + bias_initializer='zeros', + use_bias=True, + **kwargs): + super(RGraphConvolution, self).__init__(aggr, **kwargs) + self.kernel_initializer = tf.keras.initializers.get(kernel_initializer) + self.bias_initializer = tf.keras.initializers.get(bias_initializer) + self.use_bias = use_bias + self.normalize = normalize + self.out_features = out_features + self.epsion = epsion + + def build(self, input_shapes): + node_embedding_shapes = input_shapes.node_embeddings + adjacency_list_shapes = input_shapes.adjacency_lists + num_edge_type = len(adjacency_list_shapes) + in_features = node_embedding_shapes[-1] + self._edge_type_weights = [] + self._edge_type_bias = [] + for i in range(num_edge_type): + weight = self.add_weight( + shape=(in_features, self.out_features), + initializer=self.kernel_initializer, + name='wt_{}'.format(i), + ) + self._edge_type_weights.append(weight) + if self.use_bias: + self.bias = self.add_weight( + shape=(self.out_features), + initializer=self.bias_initializer, + name='b', + ) + else: + self.bias = None + + self.weight_o = self.add_weight( + shape=(in_features, self.out_features), + initializer=self.kernel_initializer, + name='wo', + ) + self.built = True + + def message_function(self, edge_source_states, + edge_target_states, + num_incoming_to_node_per_message, + num_outing_to_node_per_message, + edge_type_idx): + """ + :param edge_source_states: [M,H] + :param edge_target_states: [M,H] + :param num_incoming_to_node_per_message:[M] + :param edge_type_idx: + :param training: + :return: + """ + weight_r = self._edge_type_weights[edge_type_idx] + messages = tf.linalg.matmul(edge_source_states, weight_r) + if self.normalize: + messages = ( + tf.expand_dims(1.0 / (tf.cast(num_incoming_to_node_per_message, + tf.float32) + self.epsion), axis=-1) * messages + ) + return messages + + def call(self, inputs): + aggr_out = self.propagate(inputs) # message_passing + update + aggr_out += tf.linalg.matmul(inputs.node_embeddings, self.weight_o) + if self.bias is not None: + aggr_out += self.bias + return aggr_out diff --git a/data/source_files/clean/146408d91490.py b/data/source_files/clean/146408d91490.py new file mode 100644 index 0000000000000000000000000000000000000000..6aad74ee52655f68220f799efaffcbccdd0748ad --- /dev/null +++ b/data/source_files/clean/146408d91490.py @@ -0,0 +1,150 @@ +""" Checkpoint Saver + +Track top-n training checkpoints and maintain recovery checkpoints on specified intervals. + +Hacked together by / Copyright 2020 Ross Wightman +""" + +import glob +import operator +import os +import logging + +import torch + +from .model import unwrap_model, get_state_dict + + +_logger = logging.getLogger(__name__) + + +class CheckpointSaver: + def __init__( + self, + model, + optimizer, + args=None, + model_ema=None, + amp_scaler=None, + checkpoint_prefix='checkpoint', + recovery_prefix='recovery', + checkpoint_dir='', + recovery_dir='', + decreasing=False, + max_history=10, + unwrap_fn=unwrap_model): + + # objects to save state_dicts of + self.model = model + self.optimizer = optimizer + self.args = args + self.model_ema = model_ema + self.amp_scaler = amp_scaler + + # state + self.checkpoint_files = [] # (filename, metric) tuples in order of decreasing betterness + self.best_epoch = None + self.best_metric = None + self.curr_recovery_file = '' + self.last_recovery_file = '' + + # config + self.checkpoint_dir = checkpoint_dir + self.recovery_dir = recovery_dir + self.save_prefix = checkpoint_prefix + self.recovery_prefix = recovery_prefix + self.extension = '.pth.tar' + self.decreasing = decreasing # a lower metric is better if True + self.cmp = operator.lt if decreasing else operator.gt # True if lhs better than rhs + self.max_history = max_history + self.unwrap_fn = unwrap_fn + assert self.max_history >= 1 + + def save_checkpoint(self, epoch, metric=None): + assert epoch >= 0 + tmp_save_path = os.path.join(self.checkpoint_dir, 'tmp' + self.extension) + last_save_path = os.path.join(self.checkpoint_dir, 'last' + self.extension) + self._save(tmp_save_path, epoch, metric) + if os.path.exists(last_save_path): + os.unlink(last_save_path) # required for Windows support. + os.rename(tmp_save_path, last_save_path) + worst_file = self.checkpoint_files[-1] if self.checkpoint_files else None + if (len(self.checkpoint_files) < self.max_history + or metric is None or self.cmp(metric, worst_file[1])): + if len(self.checkpoint_files) >= self.max_history: + self._cleanup_checkpoints(1) + filename = '-'.join([self.save_prefix, str(epoch)]) + self.extension + save_path = os.path.join(self.checkpoint_dir, filename) + os.link(last_save_path, save_path) + self.checkpoint_files.append((save_path, metric)) + self.checkpoint_files = sorted( + self.checkpoint_files, key=lambda x: x[1], + reverse=not self.decreasing) # sort in descending order if a lower metric is not better + + checkpoints_str = "Current checkpoints:\n" + for c in self.checkpoint_files: + checkpoints_str += ' {}\n'.format(c) + _logger.info(checkpoints_str) + + if metric is not None and (self.best_metric is None or self.cmp(metric, self.best_metric)): + self.best_epoch = epoch + self.best_metric = metric + best_save_path = os.path.join(self.checkpoint_dir, 'model_best' + self.extension) + if os.path.exists(best_save_path): + os.unlink(best_save_path) + os.link(last_save_path, best_save_path) + + return (None, None) if self.best_metric is None else (self.best_metric, self.best_epoch) + + def _save(self, save_path, epoch, metric=None): + save_state = { + 'epoch': epoch, + 'arch': type(self.model).__name__.lower(), + 'state_dict': get_state_dict(self.model, self.unwrap_fn), + 'optimizer': self.optimizer.state_dict(), + 'version': 2, # version < 2 increments epoch before save + } + if self.args is not None: + save_state['arch'] = self.args.model + save_state['args'] = self.args + if self.amp_scaler is not None: + save_state[self.amp_scaler.state_dict_key] = self.amp_scaler.state_dict() + if self.model_ema is not None: + save_state['state_dict_ema'] = get_state_dict(self.model_ema, self.unwrap_fn) + if metric is not None: + save_state['metric'] = metric + torch.save(save_state, save_path) + + def _cleanup_checkpoints(self, trim=0): + trim = min(len(self.checkpoint_files), trim) + delete_index = self.max_history - trim + if delete_index < 0 or len(self.checkpoint_files) <= delete_index: + return + to_delete = self.checkpoint_files[delete_index:] + for d in to_delete: + try: + _logger.debug("Cleaning checkpoint: {}".format(d)) + os.remove(d[0]) + except Exception as e: + _logger.error("Exception '{}' while deleting checkpoint".format(e)) + self.checkpoint_files = self.checkpoint_files[:delete_index] + + def save_recovery(self, epoch, batch_idx=0): + assert epoch >= 0 + filename = '-'.join([self.recovery_prefix, str(epoch), str(batch_idx)]) + self.extension + save_path = os.path.join(self.recovery_dir, filename) + self._save(save_path, epoch) + if os.path.exists(self.last_recovery_file): + try: + _logger.debug("Cleaning recovery: {}".format(self.last_recovery_file)) + os.remove(self.last_recovery_file) + except Exception as e: + _logger.error("Exception '{}' while removing {}".format(e, self.last_recovery_file)) + self.last_recovery_file = self.curr_recovery_file + self.curr_recovery_file = save_path + + def find_recovery(self): + recovery_path = os.path.join(self.recovery_dir, self.recovery_prefix) + files = glob.glob(recovery_path + '*' + self.extension) + files = sorted(files) + return files[0] if len(files) else '' diff --git a/data/source_files/clean/1558dac1b3f9.py b/data/source_files/clean/1558dac1b3f9.py new file mode 100644 index 0000000000000000000000000000000000000000..81229a54be34a90af845ce0b0f142321ea5ad691 --- /dev/null +++ b/data/source_files/clean/1558dac1b3f9.py @@ -0,0 +1,260 @@ +# coding: utf-8 +from __future__ import unicode_literals + +import re + +from .adobepass import AdobePassIE +from ..compat import compat_str +from ..utils import ( + fix_xml_ampersands, + xpath_text, + int_or_none, + determine_ext, + float_or_none, + parse_duration, + xpath_attr, + update_url_query, + ExtractorError, + strip_or_none, + url_or_none, +) + + +class TurnerBaseIE(AdobePassIE): + _AKAMAI_SPE_TOKEN_CACHE = {} + + def _extract_timestamp(self, video_data): + return int_or_none(xpath_attr(video_data, 'dateCreated', 'uts')) + + def _add_akamai_spe_token(self, tokenizer_src, video_url, content_id, ap_data, custom_tokenizer_query=None): + secure_path = self._search_regex(r'https?://[^/]+(.+/)', video_url, 'secure path') + '*' + token = self._AKAMAI_SPE_TOKEN_CACHE.get(secure_path) + if not token: + query = { + 'path': secure_path, + } + if custom_tokenizer_query: + query.update(custom_tokenizer_query) + else: + query['videoId'] = content_id + if ap_data.get('auth_required'): + query['accessToken'] = self._extract_mvpd_auth(ap_data['url'], content_id, ap_data['site_name'], ap_data['site_name']) + auth = self._download_xml( + tokenizer_src, content_id, query=query) + error_msg = xpath_text(auth, 'error/msg') + if error_msg: + raise ExtractorError(error_msg, expected=True) + token = xpath_text(auth, 'token') + if not token: + return video_url + self._AKAMAI_SPE_TOKEN_CACHE[secure_path] = token + return video_url + '?hdnea=' + token + + def _extract_cvp_info(self, data_src, video_id, path_data={}, ap_data={}, fatal=False): + video_data = self._download_xml( + data_src, video_id, + transform_source=lambda s: fix_xml_ampersands(s).strip(), + fatal=fatal) + if not video_data: + return {} + video_id = video_data.attrib['id'] + title = xpath_text(video_data, 'headline', fatal=True) + content_id = xpath_text(video_data, 'contentId') or video_id + # rtmp_src = xpath_text(video_data, 'akamai/src') + # if rtmp_src: + # split_rtmp_src = rtmp_src.split(',') + # if len(split_rtmp_src) == 2: + # rtmp_src = split_rtmp_src[1] + # aifp = xpath_text(video_data, 'akamai/aifp', default='') + + urls = [] + formats = [] + thumbnails = [] + subtitles = {} + rex = re.compile( + r'(?P[0-9]+)x(?P[0-9]+)(?:_(?P[0-9]+))?') + # Possible formats locations: files/file, files/groupFiles/files + # and maybe others + for video_file in video_data.findall('.//file'): + video_url = url_or_none(video_file.text.strip()) + if not video_url: + continue + ext = determine_ext(video_url) + if video_url.startswith('/mp4:protected/'): + continue + # TODO Correct extraction for these files + # protected_path_data = path_data.get('protected') + # if not protected_path_data or not rtmp_src: + # continue + # protected_path = self._search_regex( + # r'/mp4:(.+)\.[a-z0-9]', video_url, 'secure path') + # auth = self._download_webpage( + # protected_path_data['tokenizer_src'], query={ + # 'path': protected_path, + # 'videoId': content_id, + # 'aifp': aifp, + # }) + # token = xpath_text(auth, 'token') + # if not token: + # continue + # video_url = rtmp_src + video_url + '?' + token + elif video_url.startswith('/secure/'): + secure_path_data = path_data.get('secure') + if not secure_path_data: + continue + video_url = self._add_akamai_spe_token( + secure_path_data['tokenizer_src'], + secure_path_data['media_src'] + video_url, + content_id, ap_data) + elif not re.match('https?://', video_url): + base_path_data = path_data.get(ext, path_data.get('default', {})) + media_src = base_path_data.get('media_src') + if not media_src: + continue + video_url = media_src + video_url + if video_url in urls: + continue + urls.append(video_url) + format_id = video_file.get('bitrate') + if ext in ('scc', 'srt', 'vtt'): + subtitles.setdefault('en', []).append({ + 'ext': ext, + 'url': video_url, + }) + elif ext == 'png': + thumbnails.append({ + 'id': format_id, + 'url': video_url, + }) + elif ext == 'smil': + formats.extend(self._extract_smil_formats( + video_url, video_id, fatal=False)) + elif re.match(r'https?://[^/]+\.akamaihd\.net/[iz]/', video_url): + formats.extend(self._extract_akamai_formats( + video_url, video_id, { + 'hds': path_data.get('f4m', {}).get('host'), + # nba.cdn.turner.com, ht.cdn.turner.com, ht2.cdn.turner.com + # ht3.cdn.turner.com, i.cdn.turner.com, s.cdn.turner.com + # ssl.cdn.turner.com + 'http': 'pmd.cdn.turner.com', + })) + elif ext == 'm3u8': + m3u8_formats = self._extract_m3u8_formats( + video_url, video_id, 'mp4', + m3u8_id=format_id or 'hls', fatal=False) + if '/secure/' in video_url and '?hdnea=' in video_url: + for f in m3u8_formats: + f['_seekable'] = False + formats.extend(m3u8_formats) + elif ext == 'f4m': + formats.extend(self._extract_f4m_formats( + update_url_query(video_url, {'hdcore': '3.7.0'}), + video_id, f4m_id=format_id or 'hds', fatal=False)) + else: + f = { + 'format_id': format_id, + 'url': video_url, + 'ext': ext, + } + mobj = rex.search(video_url) + if mobj: + f.update({ + 'width': int(mobj.group('width')), + 'height': int(mobj.group('height')), + 'tbr': int_or_none(mobj.group('bitrate')), + }) + elif isinstance(format_id, compat_str): + if format_id.isdigit(): + f['tbr'] = int(format_id) + else: + mobj = re.match(r'ios_(audio|[0-9]+)$', format_id) + if mobj: + if mobj.group(1) == 'audio': + f.update({ + 'vcodec': 'none', + 'ext': 'm4a', + }) + else: + f['tbr'] = int(mobj.group(1)) + formats.append(f) + self._sort_formats(formats) + + for source in video_data.findall('closedCaptions/source'): + for track in source.findall('track'): + track_url = url_or_none(track.get('url')) + if not track_url or track_url.endswith('/big'): + continue + lang = track.get('lang') or track.get('label') or 'en' + subtitles.setdefault(lang, []).append({ + 'url': track_url, + 'ext': { + 'scc': 'scc', + 'webvtt': 'vtt', + 'smptett': 'tt', + }.get(source.get('format')) + }) + + thumbnails.extend({ + 'id': image.get('cut') or image.get('name'), + 'url': image.text, + 'width': int_or_none(image.get('width')), + 'height': int_or_none(image.get('height')), + } for image in video_data.findall('images/image')) + + is_live = xpath_text(video_data, 'isLive') == 'true' + + return { + 'id': video_id, + 'title': self._live_title(title) if is_live else title, + 'formats': formats, + 'subtitles': subtitles, + 'thumbnails': thumbnails, + 'thumbnail': xpath_text(video_data, 'poster'), + 'description': strip_or_none(xpath_text(video_data, 'description')), + 'duration': parse_duration(xpath_text(video_data, 'length') or xpath_text(video_data, 'trt')), + 'timestamp': self._extract_timestamp(video_data), + 'upload_date': xpath_attr(video_data, 'metas', 'version'), + 'series': xpath_text(video_data, 'showTitle'), + 'season_number': int_or_none(xpath_text(video_data, 'seasonNumber')), + 'episode_number': int_or_none(xpath_text(video_data, 'episodeNumber')), + 'is_live': is_live, + } + + def _extract_ngtv_info(self, media_id, tokenizer_query, ap_data=None): + streams_data = self._download_json( + 'http://medium.ngtv.io/media/%s/tv' % media_id, + media_id)['media']['tv'] + duration = None + chapters = [] + formats = [] + for supported_type in ('unprotected', 'bulkaes'): + stream_data = streams_data.get(supported_type, {}) + m3u8_url = stream_data.get('secureUrl') or stream_data.get('url') + if not m3u8_url: + continue + if stream_data.get('playlistProtection') == 'spe': + m3u8_url = self._add_akamai_spe_token( + 'http://token.ngtv.io/token/token_spe', + m3u8_url, media_id, ap_data or {}, tokenizer_query) + formats.extend(self._extract_m3u8_formats( + m3u8_url, media_id, 'mp4', m3u8_id='hls', fatal=False)) + + duration = float_or_none(stream_data.get('totalRuntime')) + + if not chapters: + for chapter in stream_data.get('contentSegments', []): + start_time = float_or_none(chapter.get('start')) + chapter_duration = float_or_none(chapter.get('duration')) + if start_time is None or chapter_duration is None: + continue + chapters.append({ + 'start_time': start_time, + 'end_time': start_time + chapter_duration, + }) + self._sort_formats(formats) + + return { + 'formats': formats, + 'chapters': chapters, + 'duration': duration, + } diff --git a/data/source_files/clean/19b684020dbe.py b/data/source_files/clean/19b684020dbe.py new file mode 100644 index 0000000000000000000000000000000000000000..6b0b0bbc4a2a5899aadcf7804e822911158b0d28 --- /dev/null +++ b/data/source_files/clean/19b684020dbe.py @@ -0,0 +1,245 @@ +""" +""" + +# Created on 2015.08.19 +# +# Author: Giovanni Cannata +# +# Copyright 2015 - 2018 Giovanni Cannata +# +# This file is part of ldap3. +# +# ldap3 is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ldap3 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with ldap3 in the COPYING and COPYING.LESSER files. +# If not, see . + +from pyasn1 import __version__ as pyasn1_version +from pyasn1.codec.ber import decoder # for usage in other modules +from pyasn1.codec.ber.encoder import Encoder # for monkeypatching of boolean value +from ..core.results import RESULT_CODES +from ..utils.conv import to_unicode +from ..protocol.convert import referrals_to_list + +CLASSES = {(False, False): 0, # Universal + (False, True): 1, # Application + (True, False): 2, # Context + (True, True): 3} # Private + + +# Monkeypatching of pyasn1 for encoding Boolean with the value 0xFF for TRUE +# THIS IS NOT PART OF THE FAST BER DECODER +if pyasn1_version == 'xxx0.2.3': + from pyasn1.codec.ber.encoder import tagMap, BooleanEncoder, encode + from pyasn1.type.univ import Boolean + from pyasn1.compat.octets import ints2octs + class BooleanCEREncoder(BooleanEncoder): + _true = ints2octs((255,)) + + tagMap[Boolean.tagSet] = BooleanCEREncoder() +else: + from pyasn1.codec.ber.encoder import tagMap, typeMap, AbstractItemEncoder + from pyasn1.type.univ import Boolean + from copy import deepcopy + + class LDAPBooleanEncoder(AbstractItemEncoder): + supportIndefLenMode = False + if pyasn1_version <= '0.2.3': + from pyasn1.compat.octets import ints2octs + _true = ints2octs((255,)) + _false = ints2octs((0,)) + def encodeValue(self, encodeFun, value, defMode, maxChunkSize): + return value and self._true or self._false, 0 + elif pyasn1_version <= '0.3.1': + def encodeValue(self, encodeFun, value, defMode, maxChunkSize): + return value and (255,) or (0,), False, False + elif pyasn1_version <= '0.3.4': + def encodeValue(self, encodeFun, value, defMode, maxChunkSize, ifNotEmpty=False): + return value and (255,) or (0,), False, False + elif pyasn1_version <= '0.3.7': + def encodeValue(self, value, encodeFun, **options): + return value and (255,) or (0,), False, False + else: + def encodeValue(self, value, asn1Spec, encodeFun, **options): + return value and (255,) or (0,), False, False + + customTagMap = deepcopy(tagMap) + customTypeMap = deepcopy(typeMap) + customTagMap[Boolean.tagSet] = LDAPBooleanEncoder() + customTypeMap[Boolean.typeId] = LDAPBooleanEncoder() + + encode = Encoder(customTagMap, customTypeMap) +# end of monkey patching + +# a fast BER decoder for LDAP responses only +def compute_ber_size(data): + """ + Compute size according to BER definite length rules + Returns size of value and value offset + """ + + if data[1] <= 127: # BER definite length - short form. Highest bit of byte 1 is 0, message length is in the last 7 bits - Value can be up to 127 bytes long + return data[1], 2 + else: # BER definite length - long form. Highest bit of byte 1 is 1, last 7 bits counts the number of following octets containing the value length + bytes_length = data[1] - 128 + value_length = 0 + cont = bytes_length + for byte in data[2: 2 + bytes_length]: + cont -= 1 + value_length += byte * (256 ** cont) + return value_length, bytes_length + 2 + + +def decode_message_fast(message): + ber_len, ber_value_offset = compute_ber_size(get_bytes(message[:10])) # get start of sequence, at maximum 3 bytes for length + decoded = decode_sequence(message, ber_value_offset, ber_len + ber_value_offset, LDAP_MESSAGE_CONTEXT) + return { + 'messageID': decoded[0][3], + 'protocolOp': decoded[1][2], + 'payload': decoded[1][3], + 'controls': decoded[2][3] if len(decoded) == 3 else None + } + + +def decode_sequence(message, start, stop, context_decoders=None): + decoded = [] + while start < stop: + octet = get_byte(message[start]) + ber_class = CLASSES[(bool(octet & 0b10000000), bool(octet & 0b01000000))] + ber_constructed = bool(octet & 0b00100000) + ber_type = octet & 0b00011111 + ber_decoder = DECODERS[(ber_class, octet & 0b00011111)] if ber_class < 2 else None + ber_len, ber_value_offset = compute_ber_size(get_bytes(message[start: start + 10])) + start += ber_value_offset + if ber_decoder: + value = ber_decoder(message, start, start + ber_len, context_decoders) # call value decode function + else: + # try: + value = context_decoders[ber_type](message, start, start + ber_len) # call value decode function for context class + # except KeyError: + # if ber_type == 3: # Referral in result + # value = decode_sequence(message, start, start + ber_len) + # else: + # raise # re-raise, should never happen + decoded.append((ber_class, ber_constructed, ber_type, value)) + start += ber_len + + return decoded + + +def decode_integer(message, start, stop, context_decoders=None): + first = message[start] + value = -1 if get_byte(first) & 0x80 else 0 + for octet in message[start: stop]: + value = value << 8 | get_byte(octet) + + return value + + +def decode_octet_string(message, start, stop, context_decoders=None): + return message[start: stop] + + +def decode_boolean(message, start, stop, context_decoders=None): + return False if message[start: stop] == 0 else True + + +def decode_bind_response(message, start, stop, context_decoders=None): + return decode_sequence(message, start, stop, BIND_RESPONSE_CONTEXT) + + +def decode_extended_response(message, start, stop, context_decoders=None): + return decode_sequence(message, start, stop, EXTENDED_RESPONSE_CONTEXT) + + +def decode_intermediate_response(message, start, stop, context_decoders=None): + return decode_sequence(message, start, stop, INTERMEDIATE_RESPONSE_CONTEXT) + + +def decode_controls(message, start, stop, context_decoders=None): + return decode_sequence(message, start, stop, CONTROLS_CONTEXT) + + +def ldap_result_to_dict_fast(response): + response_dict = dict() + response_dict['result'] = int(response[0][3]) # resultCode + response_dict['description'] = RESULT_CODES[response_dict['result']] + response_dict['dn'] = to_unicode(response[1][3], from_server=True) # matchedDN + response_dict['message'] = to_unicode(response[2][3], from_server=True) # diagnosticMessage + if len(response) == 4: + response_dict['referrals'] = referrals_to_list([to_unicode(referral[3], from_server=True) for referral in response[3][3]]) # referrals + else: + response_dict['referrals'] = None + + return response_dict + + +###### + +if str is not bytes: # Python 3 + def get_byte(x): + return x + + def get_bytes(x): + return x +else: # Python 2 + def get_byte(x): + return ord(x) + + def get_bytes(x): + return bytearray(x) + +DECODERS = { + # Universal + (0, 1): decode_boolean, # Boolean + (0, 2): decode_integer, # Integer + (0, 4): decode_octet_string, # Octet String + (0, 10): decode_integer, # Enumerated + (0, 16): decode_sequence, # Sequence + (0, 17): decode_sequence, # Set + # Application + (1, 1): decode_bind_response, # Bind response + (1, 4): decode_sequence, # Search result entry + (1, 5): decode_sequence, # Search result done + (1, 7): decode_sequence, # Modify response + (1, 9): decode_sequence, # Add response + (1, 11): decode_sequence, # Delete response + (1, 13): decode_sequence, # ModifyDN response + (1, 15): decode_sequence, # Compare response + (1, 19): decode_sequence, # Search result reference + (1, 24): decode_extended_response, # Extended response + (1, 25): decode_intermediate_response, # intermediate response + (2, 3): decode_octet_string # +} + +BIND_RESPONSE_CONTEXT = { + 7: decode_octet_string # SaslCredentials +} + +EXTENDED_RESPONSE_CONTEXT = { + 10: decode_octet_string, # ResponseName + 11: decode_octet_string # Response Value +} + +INTERMEDIATE_RESPONSE_CONTEXT = { + 0: decode_octet_string, # IntermediateResponseName + 1: decode_octet_string # IntermediateResponseValue +} + +LDAP_MESSAGE_CONTEXT = { + 0: decode_controls, # Controls + 3: decode_sequence # Referral +} + +CONTROLS_CONTEXT = { + 0: decode_sequence # Control +} diff --git a/data/source_files/clean/1b8bec287901.py b/data/source_files/clean/1b8bec287901.py new file mode 100644 index 0000000000000000000000000000000000000000..0adf4b5bea842a306db59cff9711a1e6a19b7ae0 --- /dev/null +++ b/data/source_files/clean/1b8bec287901.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# ----------------------------------------------------------------------------- +# (C) British Crown Copyright 2017-2021 Met Office. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * 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. +# +# * 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. +""" Tests of precipitation_type utilities""" + +import numpy as np +import pytest +from iris.exceptions import CoordinateNotFoundError + +from improver.metadata.constants import FLOAT_DTYPE +from improver.precipitation_type.utilities import make_shower_condition_cube +from improver.synthetic_data.set_up_test_cubes import set_up_probability_cube + + +def set_up_test_cube(n_thresholds=1): + """Set up a cube testing shower condition conversion""" + thresholds = np.arange(n_thresholds) + shape = [2, 2] + shape = [n_thresholds, *shape] if n_thresholds > 0 else shape + data = np.ones(shape, dtype=FLOAT_DTYPE) + cube = set_up_probability_cube( + data, + thresholds, + variable_name="texture_of_cloud_area_fraction", + threshold_units=1, + spatial_grid="equalarea", + ) + return cube + + +def test_basic(): + """Test that with a valid input the cube is transformed into a shower + condition cube.""" + + cube = set_up_test_cube() + result = make_shower_condition_cube(cube) + threshold_coord = result.coord(var_name="threshold") + + assert result.name() == "probability_of_shower_condition_above_threshold" + assert result.dtype == FLOAT_DTYPE + assert (result.data == cube.data).all() + assert threshold_coord.name() == "shower_condition" + assert threshold_coord.units == 1 + + +def test_no_threshold_coord(): + """Test an exception is raised if the proxy diagnostic cube does not have + a threshold coordinate.""" + + cube = set_up_test_cube() + cube.remove_coord("texture_of_cloud_area_fraction") + + expected = "Input has no threshold coordinate and cannot be used" + with pytest.raises(CoordinateNotFoundError, match=expected): + make_shower_condition_cube(cube) + + +def test_multi_valued_threshold_coord(): + """Test an exception is raised if the proxy diagnostic cube has a multi + valued threshold coordinate.""" + + cube = set_up_test_cube(n_thresholds=2) + + expected = "Expected a single valued threshold coordinate.*" + with pytest.raises(ValueError, match=expected): + make_shower_condition_cube(cube) diff --git a/data/source_files/clean/1be285af847d.py b/data/source_files/clean/1be285af847d.py new file mode 100644 index 0000000000000000000000000000000000000000..76eaa983d4b2d01d9a4e9daae5b69684ff9a0e05 --- /dev/null +++ b/data/source_files/clean/1be285af847d.py @@ -0,0 +1,45 @@ +import os +import unittest + +import torch +import torch.distributed as dist +from torch.multiprocessing import Process +import torch.nn as nn + +from machina.optims import DistributedAdamW + + +def init_processes(rank, world_size, + function, backend='tcp'): + os.environ['MASTER_ADDR'] = '127.0.0.1' + os.environ['MASTER_PORT'] = '29500' + dist.init_process_group(backend, rank=rank, + world_size=world_size) + function(rank, world_size) + + +class TestDistributedAdamW(unittest.TestCase): + + def test_step(self): + + def _run(rank, world_size): + model = nn.Linear(10, 1) + optimizer = DistributedAdamW( + model.parameters()) + + optimizer.zero_grad() + loss = model(torch.ones(10).float()) + loss.backward() + optimizer.step() + + processes = [] + world_size = 4 + for rank in range(world_size): + p = Process(target=init_processes, + args=(rank, + world_size, + _run)) + p.start() + processes.append(p) + for p in processes: + p.join() diff --git a/data/source_files/clean/1d7b2e162edc.py b/data/source_files/clean/1d7b2e162edc.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7777964dadf66bcb5c8207f5f26c1301e49cee --- /dev/null +++ b/data/source_files/clean/1d7b2e162edc.py @@ -0,0 +1,141 @@ +from libsaas import http, parsers +from libsaas.services import base + +from libsaas.services.twilio import resource + + +class ApplicationsBase(resource.TwilioResource): + + path = 'Applications' + + +class Application(ApplicationsBase): + + def create(self, *args, **kwargs): + raise base.MethodNotSupported() + + +class Applications(ApplicationsBase): + + @base.apimethod + def get(self, FriendlyName=None, Page=None, PageSize=None, AfterSid=None): + """ + Fetch the Applications belonging to an account. + + :var FriendlyName: Only return the Account resources with friendly + names that exactly match this name. + :vartype FriendlyName: str + + :var Page: The current page number. Zero-indexed, so the first page + is 0. + :vartype Page: int + + :var PageSize: How many resources to return in each list page. + The default is 50, and the maximum is 1000. + :vartype PageSize: int + + :var AfterSid: The last Sid returned in the previous page, used to + avoid listing duplicated resources if new ones are created while + paging. + :vartype AfterSid: str + """ + params = resource.get_params(None, locals()) + request = http.Request('GET', self.get_url(), params) + + return request, parsers.parse_json + + def update(self, *args, **kwargs): + raise base.MethodNotSupported() + + def delete(self, *args, **kwargs): + raise base.MethodNotSupported() + + +class ConnectAppsBase(resource.TwilioResource): + + path = 'ConnectApps' + + def create(self, *args, **kwargs): + raise base.MethodNotSupported() + + def delete(self, *args, **kwargs): + raise base.MethodNotSupported() + + +class ConnectApp(ConnectAppsBase): + + pass + + +class ConnectApps(ConnectAppsBase): + + @base.apimethod + def get(self, Page=None, PageSize=None, AfterSid=None): + """ + Fetch the Connect Apps belonging to an account. + + :var Page: The current page number. Zero-indexed, so the first page + is 0. + :vartype Page: int + + :var PageSize: How many resources to return in each list page. + The default is 50, and the maximum is 1000. + :vartype PageSize: int + + :var AfterSid: The last Sid returned in the previous page, used to + avoid listing duplicated resources if new ones are created while + paging. + :vartype AfterSid: str + """ + params = resource.get_params(None, locals()) + request = http.Request('GET', self.get_url(), params) + + return request, parsers.parse_json + + def update(self, *args, **kwargs): + raise base.MethodNotSupported() + + +class AuthorizedConnectAppsBase(resource.TwilioResource): + + path = 'AuthorizedConnectApps' + + def create(self, *args, **kwargs): + raise base.MethodNotSupported() + + def update(self, *args, **kwargs): + raise base.MethodNotSupported() + + def delete(self, *args, **kwargs): + raise base.MethodNotSupported() + + +class AuthorizedConnectApp(AuthorizedConnectAppsBase): + + pass + + +class AuthorizedConnectApps(AuthorizedConnectAppsBase): + + @base.apimethod + def get(self, Page=None, PageSize=None, AfterSid=None): + """ + Fetch the Authorized Connect Apps belonging to an account. + + :var Page: The current page number. Zero-indexed, so the first page + is 0. + :vartype Page: int + + :var PageSize: How many resources to return in each list page. + The default is 50, and the maximum is 1000. + :vartype PageSize: int + + :var AfterSid: The last Sid returned in the previous page, used to + avoid listing duplicated resources if new ones are created while + paging. + :vartype AfterSid: str + """ + params = resource.get_params(None, locals()) + request = http.Request('GET', self.get_url(), params) + + return request, parsers.parse_json diff --git a/data/source_files/clean/1e4f4a0023d8.py b/data/source_files/clean/1e4f4a0023d8.py new file mode 100644 index 0000000000000000000000000000000000000000..8628a8ccf18c32191b9cace42141414df8e8de89 --- /dev/null +++ b/data/source_files/clean/1e4f4a0023d8.py @@ -0,0 +1,199 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2008-2013 LOGILAB S.A. (Paris, FRANCE). +# http://www.logilab.fr/ -- mailto:contact@logilab.fr +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +"""Utilities for creating VCG and Dot diagrams""" + +from logilab.common.vcgutils import VCGPrinter +from logilab.common.graph import DotBackend + +from pylint.pyreverse.utils import is_exception + +class DiagramWriter(object): + """base class for writing project diagrams + """ + def __init__(self, config, styles): + self.config = config + self.pkg_edges, self.inh_edges, self.imp_edges, self.ass_edges = styles + self.printer = None # defined in set_printer + + def write(self, diadefs): + """write files for according to + """ + for diagram in diadefs: + basename = diagram.title.strip().replace(' ', '_') + file_name = '%s.%s' % (basename, self.config.output_format) + self.set_printer(file_name, basename) + if diagram.TYPE == 'class': + self.write_classes(diagram) + else: + self.write_packages(diagram) + self.close_graph() + + def write_packages(self, diagram): + """write a package diagram""" + # sorted to get predictable (hence testable) results + for i, obj in enumerate(sorted(diagram.modules(), key=lambda x: x.title)): + self.printer.emit_node(i, label=self.get_title(obj), shape='box') + obj.fig_id = i + # package dependencies + for rel in diagram.get_relationships('depends'): + self.printer.emit_edge(rel.from_object.fig_id, rel.to_object.fig_id, + **self.pkg_edges) + + def write_classes(self, diagram): + """write a class diagram""" + # sorted to get predictable (hence testable) results + for i, obj in enumerate(sorted(diagram.objects, key=lambda x: x.title)): + self.printer.emit_node(i, **self.get_values(obj)) + obj.fig_id = i + # inheritance links + for rel in diagram.get_relationships('specialization'): + self.printer.emit_edge(rel.from_object.fig_id, rel.to_object.fig_id, + **self.inh_edges) + # implementation links + for rel in diagram.get_relationships('implements'): + self.printer.emit_edge(rel.from_object.fig_id, rel.to_object.fig_id, + **self.imp_edges) + # generate associations + for rel in diagram.get_relationships('association'): + self.printer.emit_edge(rel.from_object.fig_id, rel.to_object.fig_id, + label=rel.name, **self.ass_edges) + + def set_printer(self, file_name, basename): + """set printer""" + raise NotImplementedError + + def get_title(self, obj): + """get project title""" + raise NotImplementedError + + def get_values(self, obj): + """get label and shape for classes.""" + raise NotImplementedError + + def close_graph(self): + """finalize the graph""" + raise NotImplementedError + + +class DotWriter(DiagramWriter): + """write dot graphs from a diagram definition and a project + """ + + def __init__(self, config): + styles = [dict(arrowtail='none', arrowhead="open"), + dict(arrowtail='none', arrowhead='empty'), + dict(arrowtail='node', arrowhead='empty', style='dashed'), + dict(fontcolor='green', arrowtail='none', + arrowhead='diamond', style='solid'), + ] + DiagramWriter.__init__(self, config, styles) + + def set_printer(self, file_name, basename): + """initialize DotWriter and add options for layout. + """ + layout = dict(rankdir="BT") + self.printer = DotBackend(basename, additionnal_param=layout) + self.file_name = file_name + + def get_title(self, obj): + """get project title""" + return obj.title + + def get_values(self, obj): + """get label and shape for classes. + + The label contains all attributes and methods + """ + label = obj.title + if obj.shape == 'interface': + label = u'«interface»\\n%s' % label + if not self.config.only_classnames: + label = r'%s|%s\l|' % (label, r'\l'.join(obj.attrs)) + for func in obj.methods: + label = r'%s%s()\l' % (label, func.name) + label = '{%s}' % label + if is_exception(obj.node): + return dict(fontcolor='red', label=label, shape='record') + return dict(label=label, shape='record') + + def close_graph(self): + """print the dot graph into """ + self.printer.generate(self.file_name) + + +class VCGWriter(DiagramWriter): + """write vcg graphs from a diagram definition and a project + """ + def __init__(self, config): + styles = [dict(arrowstyle='solid', backarrowstyle='none', + backarrowsize=0), + dict(arrowstyle='solid', backarrowstyle='none', + backarrowsize=10), + dict(arrowstyle='solid', backarrowstyle='none', + linestyle='dotted', backarrowsize=10), + dict(arrowstyle='solid', backarrowstyle='none', + textcolor='green'), + ] + DiagramWriter.__init__(self, config, styles) + + def set_printer(self, file_name, basename): + """initialize VCGWriter for a UML graph""" + self.graph_file = open(file_name, 'w+') + self.printer = VCGPrinter(self.graph_file) + self.printer.open_graph(title=basename, layoutalgorithm='dfs', + late_edge_labels='yes', port_sharing='no', + manhattan_edges='yes') + self.printer.emit_node = self.printer.node + self.printer.emit_edge = self.printer.edge + + def get_title(self, obj): + """get project title in vcg format""" + return r'\fb%s\fn' % obj.title + + def get_values(self, obj): + """get label and shape for classes. + + The label contains all attributes and methods + """ + if is_exception(obj.node): + label = r'\fb\f09%s\fn' % obj.title + else: + label = r'\fb%s\fn' % obj.title + if obj.shape == 'interface': + shape = 'ellipse' + else: + shape = 'box' + if not self.config.only_classnames: + attrs = obj.attrs + methods = [func.name for func in obj.methods] + # box width for UML like diagram + maxlen = max(len(name) for name in [obj.title] + methods + attrs) + line = '_' * (maxlen + 2) + label = r'%s\n\f%s' % (label, line) + for attr in attrs: + label = r'%s\n\f08%s' % (label, attr) + if attrs: + label = r'%s\n\f%s' % (label, line) + for func in methods: + label = r'%s\n\f10%s()' % (label, func) + return dict(label=label, shape=shape) + + def close_graph(self): + """close graph and file""" + self.printer.close_graph() + self.graph_file.close() + diff --git a/data/source_files/clean/1e7e10bc6571.py b/data/source_files/clean/1e7e10bc6571.py new file mode 100644 index 0000000000000000000000000000000000000000..86fca5740e3caf795c7b7090059ab5992cec0e59 --- /dev/null +++ b/data/source_files/clean/1e7e10bc6571.py @@ -0,0 +1,226 @@ +import warnings +from collections import OrderedDict +from distutils.version import LooseVersion +from functools import partial +from inspect import isclass +from typing import Callable, Optional, Dict, Union + +import numpy as np +import torch +import tqdm +from torch import Tensor, nn +from torch.nn import functional as F + +from adv_lib.distances.lp_norms import l0_distances, l1_distances, l2_distances, linf_distances +from adv_lib.utils import ForwardCounter, BackwardCounter, predict_inputs + + +def generate_random_targets(labels: Tensor, num_classes: int) -> Tensor: + """ + Generates one random target in (num_classes - 1) possibilities for each label that is different from the original + label. + + Parameters + ---------- + labels: Tensor + Original labels. Generated targets will be different from labels. + num_classes: int + Number of classes to generate the random targets from. + + Returns + ------- + targets: Tensor + Random target for each label. Has the same shape as labels. + + """ + random = torch.rand(len(labels), num_classes, device=labels.device, dtype=torch.float) + random.scatter_(1, labels.unsqueeze(-1), 0) + return random.argmax(1) + + +def get_all_targets(labels: Tensor, num_classes: int): + """ + Generates all possible targets that are different from the original labels. + + Parameters + ---------- + labels: Tensor + Original labels. Generated targets will be different from labels. + num_classes: int + Number of classes to generate the random targets from. + + Returns + ------- + targets: Tensor + Random targets for each label. shape: (len(labels), num_classes - 1). + + """ + all_possible_targets = torch.zeros(len(labels), num_classes - 1, dtype=torch.long) + all_classes = set(range(num_classes)) + for i in range(len(labels)): + this_label = labels[i].item() + other_labels = list(all_classes.difference({this_label})) + all_possible_targets[i] = torch.tensor(other_labels) + + return all_possible_targets + + +def run_attack(model: nn.Module, + inputs: Tensor, + labels: Tensor, + attack: Callable, + targets: Optional[Tensor] = None, + batch_size: Optional[int] = None) -> dict: + device = next(model.parameters()).device + to_device = lambda tensor: tensor.to(device) + targeted, adv_labels = False, labels + if targets is not None: + targeted, adv_labels = True, targets + batch_size = batch_size or len(inputs) + + # run attack only on non already adversarial samples + already_adv = [] + chunks = [tensor.split(batch_size) for tensor in [inputs, adv_labels]] + for (inputs_chunk, label_chunk) in zip(*chunks): + batch_chunk_d, label_chunk_d = [to_device(tensor) for tensor in [inputs_chunk, label_chunk]] + preds = model(batch_chunk_d).argmax(1) + is_adv = (preds == label_chunk_d) if targeted else (preds != label_chunk_d) + already_adv.append(is_adv.cpu()) + not_adv = ~torch.cat(already_adv, 0) + + start, end = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True) + forward_counter, backward_counter = ForwardCounter(), BackwardCounter() + model.register_forward_pre_hook(forward_counter) + if LooseVersion(torch.__version__) >= LooseVersion('1.8'): + model.register_full_backward_hook(backward_counter) + else: + model.register_backward_hook(backward_counter) + average_forwards, average_backwards = [], [] # number of forward and backward calls per sample + advs_chunks = [] + chunks = [tensor.split(batch_size) for tensor in [inputs[not_adv], adv_labels[not_adv]]] + total_time = 0 + for (inputs_chunk, label_chunk) in tqdm.tqdm(zip(*chunks), ncols=80, total=len(chunks[0])): + batch_chunk_d, label_chunk_d = [to_device(tensor.clone()) for tensor in [inputs_chunk, label_chunk]] + + start.record() + advs_chunk_d = attack(model, batch_chunk_d, label_chunk_d, targeted=targeted) + + # performance monitoring + end.record() + torch.cuda.synchronize() + total_time += (start.elapsed_time(end)) / 1000 # times for cuda Events are in milliseconds + average_forwards.append(forward_counter.num_samples_called / len(batch_chunk_d)) + average_backwards.append(backward_counter.num_samples_called / len(batch_chunk_d)) + forward_counter.reset(), backward_counter.reset() + + advs_chunks.append(advs_chunk_d.cpu()) + if isinstance(attack, partial) and (callback := attack.keywords.get('callback')) is not None: + callback.reset_windows() + + adv_inputs = inputs.clone() + adv_inputs[not_adv] = torch.cat(advs_chunks, 0) + + data = { + 'inputs': inputs, + 'labels': labels, + 'targets': adv_labels if targeted else None, + 'adv_inputs': adv_inputs, + 'time': total_time, + 'num_forwards': sum(average_forwards) / len(chunks[0]), + 'num_backwards': sum(average_backwards) / len(chunks[0]), + } + + return data + + +_default_metrics = OrderedDict([ + ('linf', linf_distances), + ('l0', l0_distances), + ('l1', l1_distances), + ('l2', l2_distances), +]) + + +def compute_attack_metrics(model: nn.Module, + attack_data: Dict[str, Union[Tensor, float]], + batch_size: Optional[int] = None, + metrics: Dict[str, Callable] = _default_metrics) -> Dict[str, Union[Tensor, float]]: + inputs, labels, targets, adv_inputs = map(attack_data.get, ['inputs', 'labels', 'targets', 'adv_inputs']) + if adv_inputs.min() < 0 or adv_inputs.max() > 1: + warnings.warn('Values of produced adversarials are not in the [0, 1] range -> Clipping to [0, 1].') + adv_inputs.clamp_(min=0, max=1) + device = next(model.parameters()).device + to_device = lambda tensor: tensor.to(device) + + batch_size = batch_size or len(inputs) + chunks = [tensor.split(batch_size) for tensor in [inputs, labels, adv_inputs]] + all_predictions = [[] for _ in range(6)] + distances = {k: [] for k in metrics.keys()} + metrics = {k: v().to(device) if (isclass(v.func) if isinstance(v, partial) else False) else v for k, v in + metrics.items()} + + append = lambda list, data: list.append(data.cpu()) + for inputs_chunk, labels_chunk, adv_chunk in zip(*chunks): + inputs_chunk, adv_chunk = map(to_device, [inputs_chunk, adv_chunk]) + clean_preds, adv_preds = [predict_inputs(model, chunk.to(device)) for chunk in [inputs_chunk, adv_chunk]] + list(map(append, all_predictions, [*clean_preds, *adv_preds])) + for metric, metric_func in metrics.items(): + distances[metric].append(metric_func(adv_chunk, inputs_chunk).detach().cpu()) + + logits, probs, preds, logits_adv, probs_adv, preds_adv = [torch.cat(l) for l in all_predictions] + for metric in metrics.keys(): + distances[metric] = torch.cat(distances[metric], 0) + + accuracy_orig = (preds == labels).float().mean().item() + if targets is not None: + success = (preds_adv == targets) + labels = targets + else: + success = (preds_adv != labels) + + prob_orig = probs.gather(1, labels.unsqueeze(1)).squeeze(1) + prob_adv = probs_adv.gather(1, labels.unsqueeze(1)).squeeze(1) + labels_infhot = torch.zeros_like(logits_adv).scatter_(1, labels.unsqueeze(1), float('inf')) + real = logits_adv.gather(1, labels.unsqueeze(1)).squeeze(1) + other = (logits_adv - labels_infhot).max(1).values + diff_vs_max_adv = (real - other) + nll = F.cross_entropy(logits, labels, reduction='none') + nll_adv = F.cross_entropy(logits_adv, labels, reduction='none') + + data = { + 'time': attack_data['time'], + 'num_forwards': attack_data['num_forwards'], + 'num_backwards': attack_data['num_backwards'], + 'targeted': targets is not None, + 'preds': preds, + 'adv_preds': preds_adv, + 'accuracy_orig': accuracy_orig, + 'success': success, + 'probs_orig': prob_orig, + 'probs_adv': prob_adv, + 'logit_diff_adv': diff_vs_max_adv, + 'nll': nll, + 'nll_adv': nll_adv, + 'distances': distances, + } + + return data + + +def print_metrics(metrics: dict) -> None: + np.set_printoptions(formatter={'float': '{:0.3f}'.format}, threshold=16, edgeitems=3, + linewidth=120) # To print arrays with less precision + print('Original accuracy: {:.2%}'.format(metrics['accuracy_orig'])) + print('Attack done in: {:.2f}s with {:.4g} forwards and {:.4g} backwards.'.format( + metrics['time'], metrics['num_forwards'], metrics['num_backwards'])) + success = metrics['success'].numpy() + fail = bool(success.mean() != 1) + print('Attack success: {:.2%}'.format(success.mean()) + fail * ' - {}'.format(success)) + for distance, values in metrics['distances'].items(): + data = values.numpy() + print('{}: {} - Average: {:.3f} - Median: {:.3f}'.format(distance, data, data.mean(), np.median(data)) + + fail * ' | Avg over success: {:.3f}'.format(data[success].mean())) + attack_type = 'targets' if metrics['targeted'] else 'correct' + print('Logit({} class) - max_Logit(other classes): {} - Average: {:.2f}'.format( + attack_type, metrics['logit_diff_adv'].numpy(), metrics['logit_diff_adv'].numpy().mean())) + print('NLL of target/pred class: {:.3f}'.format(metrics['nll_adv'].numpy().mean())) diff --git a/data/source_files/clean/1f0bd927f4f7.py b/data/source_files/clean/1f0bd927f4f7.py new file mode 100644 index 0000000000000000000000000000000000000000..86609708c6740fc5dcff69f746034012abb3d227 --- /dev/null +++ b/data/source_files/clean/1f0bd927f4f7.py @@ -0,0 +1,56 @@ +import numpy as np +from theano import function +import theano.tensor as T + +def make_vector(): + """ + Returns a new Theano vector. + """ + + return T.vector() + +def make_matrix(): + """ + Returns a new Theano matrix. + """ + + return T.matrix() + +def elemwise_mul(a, b): + """ + a: A theano matrix + b: A theano matrix + Returns the elementwise product of a and b + """ + + return a * b + +def matrix_vector_mul(a, b): + """ + a: A theano matrix + b: A theano vector + Returns the matrix-vector product of a and b + """ + + return T.dot(a, b) + +if __name__ == "__main__": + a = make_vector() + b = make_vector() + c = elemwise_mul(a, b) + d = make_matrix() + e = matrix_vector_mul(d, c) + + f = function([a, b, d], e) + + rng = np.random.RandomState([1, 2, 3]) + a_value = rng.randn(5).astype(a.dtype) + b_value = rng.rand(5).astype(b.dtype) + c_value = a_value * b_value + d_value = rng.randn(5, 5).astype(d.dtype) + expected = np.dot(d_value, c_value) + + actual = f(a_value, b_value, d_value) + + assert np.allclose(actual, expected) + print "SUCCESS!" diff --git a/data/source_files/clean/210e6fb50260.py b/data/source_files/clean/210e6fb50260.py new file mode 100644 index 0000000000000000000000000000000000000000..6a8199a221f44d9fef4df3ccc6d623b0243a377c --- /dev/null +++ b/data/source_files/clean/210e6fb50260.py @@ -0,0 +1,32 @@ +# Copyright (c) 2021 GradsFlow. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import torch + +from gradsflow.models import Model + + +class DummyModel(Model): + def __init__(self): + learner = torch.nn.Linear(1, 4) + super().__init__(learner) + + def backward(self, loss: torch.Tensor): + return None + + def train_step(self, batch): + return {"loss": torch.as_tensor(1), "metrics": {"accuracy": 1}} + + def val_step(self, batch): + return {"loss": torch.as_tensor(1), "metrics": {"accuracy": 1}} diff --git a/data/source_files/clean/23b30f008578.py b/data/source_files/clean/23b30f008578.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7922d582e70ee076c3374be8cdb74d33423c9b --- /dev/null +++ b/data/source_files/clean/23b30f008578.py @@ -0,0 +1,39 @@ +from vyper import ast as vy_ast + + +def test_output_class(): + old_node = vy_ast.parse_to_ast("foo = 42") + new_node = vy_ast.Int.from_node(old_node, value=666) + + assert isinstance(new_node, vy_ast.Int) + + +def test_source(): + old_node = vy_ast.parse_to_ast("foo = 42") + new_node = vy_ast.Int.from_node(old_node, value=666) + + assert old_node.src == new_node.src + assert old_node.node_source_code == new_node.node_source_code + + +def test_kwargs(): + old_node = vy_ast.parse_to_ast("42").body[0].value + new_node = vy_ast.Int.from_node(old_node, value=666) + + assert old_node.value == 42 + assert new_node.value == 666 + + +def test_compare_nodes(): + old_node = vy_ast.parse_to_ast("foo = 42") + new_node = vy_ast.Int.from_node(old_node, value=666) + + assert not vy_ast.compare_nodes(old_node, new_node) + + +def test_new_node_has_no_parent(): + old_node = vy_ast.parse_to_ast("foo = 42") + new_node = vy_ast.Int.from_node(old_node, value=666) + + assert new_node._parent is None + assert new_node._depth == 0 diff --git a/data/source_files/clean/268c7513da60.py b/data/source_files/clean/268c7513da60.py new file mode 100644 index 0000000000000000000000000000000000000000..86b2f2b4446116811cbd5f27739dd93c92634c93 --- /dev/null +++ b/data/source_files/clean/268c7513da60.py @@ -0,0 +1,201 @@ +import base64 +from google.protobuf import json_format +from importlib import import_module +import json +import numpy as np +import os +import sys + +from mmdnn.conversion.caffe.errors import ConversionError +from mmdnn.conversion.caffe.common_graph import fetch_attr_value +from mmdnn.conversion.caffe.utils import get_lower_case, get_upper_case, get_real_name + + +class JsonFormatter(object): + '''Dumpt a DL graph into a Json file.''' + + def __init__(self, graph): + self.graph_def = graph.as_graph_def() + + def dump(self, json_path): + json_txt = json_format.MessageToJson(self.graph_def) + parsed = json.loads(json_txt) + formatted = json.dumps(parsed, indent=4, sort_keys=True) + with open(json_path, 'w') as f: + f.write(formatted) + + +class PyWriter(object): + '''Dumpt a DL graph into a Python script.''' + + def __init__(self, graph, data, target): + self.graph = graph + self.data = data + self.tab = ' ' * 4 + self.prefix = '' + target = target.lower() + if target == 'tensorflow': + self.target = target + self.net = 'TensorFlowNetwork' + elif target == 'keras': + self.target = target + self.net = 'KerasNetwork' + elif target == 'caffe': + self.target = target + self.net = 'CaffeNetwork' + else: + raise ConversionError('Target %s is not supported yet.' % target) + + def indent(self): + self.prefix += self.tab + + def outdent(self): + self.prefix = self.prefix[:-len(self.tab)] + + def statement(self, s): + return self.prefix + s + '\n' + + def emit_imports(self): + return self.statement('from dlconv.%s import %s\n' % (self.target, self.net)) + + def emit_class_def(self, name): + return self.statement('class %s(%s):' % (name, self.net)) + + def emit_setup_def(self): + return self.statement('def setup(self):') + + def emit_node(self, node): + '''Emits the Python source for this node.''' + + def pair(key, value): + return '%s=%s' % (key, value) + args = [] + for input in node.input: + input = input.strip().split(':') + name = ''.join(input[:-1]) + idx = int(input[-1]) + assert name in self.graph.node_dict + parent = self.graph.get_node(name) + args.append(parent.output[idx]) + #FIXME: + output = [node.output[0]] + # output = node.output + for k, v in node.attr: + if k == 'cell_type': + args.append(pair(k, "'" + fetch_attr_value(v) + "'")) + else: + args.append(pair(k, fetch_attr_value(v))) + args.append(pair('name', "'" + node.name + "'")) # Set the node name + args = ', '.join(args) + return self.statement('%s = self.%s(%s)' % (', '.join(output), node.op, args)) + + def dump(self, code_output_dir): + if not os.path.exists(code_output_dir): + os.makedirs(code_output_dir) + file_name = get_lower_case(self.graph.name) + code_output_path = os.path.join(code_output_dir, file_name + '.py') + data_output_path = os.path.join(code_output_dir, file_name + '.npy') + with open(code_output_path, 'w') as f: + f.write(self.emit()) + with open(data_output_path, 'wb') as f: + np.save(f, self.data) + return code_output_path, data_output_path + + def emit(self): + # Decompose DAG into chains + chains = [] + for node in self.graph.topologically_sorted(): + attach_to_chain = None + if len(node.input) == 1: + parent = get_real_name(node.input[0]) + for chain in chains: + if chain[-1].name == parent: # Node is part of an existing chain. + attach_to_chain = chain + break + if attach_to_chain is None: # Start a new chain for this node. + attach_to_chain = [] + chains.append(attach_to_chain) + attach_to_chain.append(node) + + # Generate Python code line by line + source = self.emit_imports() + source += self.emit_class_def(self.graph.name) + self.indent() + source += self.emit_setup_def() + self.indent() + blocks = [] + for chain in chains: + b = '' + for node in chain: + b += self.emit_node(node) + blocks.append(b[:-1]) + source += '\n\n'.join(blocks) + return source + + +class ModelSaver(object): + + def __init__(self, code_output_path, data_output_path): + self.code_output_path = code_output_path + self.data_output_path = data_output_path + + def dump(self, model_output_dir): + '''Return the file path containing graph in generated model files.''' + if not os.path.exists(model_output_dir): + os.makedirs(model_output_dir) + sys.path.append(os.path.dirname(self.code_output_path)) + file_name = os.path.splitext(os.path.basename(self.code_output_path))[0] + module = import_module(file_name) + class_name = get_upper_case(file_name) + net = getattr(module, class_name) + return net.dump(self.data_output_path, model_output_dir) + + +class GraphDrawer(object): + + def __init__(self, toolkit, meta_path): + self.toolkit = toolkit.lower() + self.meta_path = meta_path + + def dump(self, graph_path): + if self.toolkit == 'tensorflow': + from dlconv.tensorflow.visualizer import TensorFlowVisualizer + if self._is_web_page(graph_path): + TensorFlowVisualizer(self.meta_path).dump_html(graph_path) + else: + raise NotImplementedError('Image format or %s is unsupported!' % graph_path) + elif self.toolkit == 'keras': + from dlconv.keras.visualizer import KerasVisualizer + png_path, html_path = (None, None) + if graph_path.endswith('.png'): + png_path = graph_path + elif self._is_web_page(graph_path): + png_path = graph_path + ".png" + html_path = graph_path + else: + raise NotImplementedError('Image format or %s is unsupported!' % graph_path) + KerasVisualizer(self.meta_path).dump_png(png_path) + if html_path: + self._png_to_html(png_path, html_path) + os.remove(png_path) + else: + raise NotImplementedError('Visualization of %s is unsupported!' % self.toolkit) + + def _is_web_page(self, path): + return path.split('.')[-1] in ('html', 'htm') + + def _png_to_html(self, png_path, html_path): + with open(png_path, "rb") as f: + encoded = base64.b64encode(f.read()).decode('utf-8') + source = """ + + + + Keras + + + Model Graph + +""".format(base64_str=encoded) + with open(html_path, 'w', encoding='utf-8') as f: + f.write(source) \ No newline at end of file diff --git a/data/source_files/clean/26e2cb035967.py b/data/source_files/clean/26e2cb035967.py new file mode 100644 index 0000000000000000000000000000000000000000..0aecc3617c0fed4d5c58d568836e4b90d9b9886f --- /dev/null +++ b/data/source_files/clean/26e2cb035967.py @@ -0,0 +1,51 @@ +""" +Copyright (c) 2018-2022 Intel Corporation + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +import numpy as np +from .postprocessor import PostprocessorWithSpecificTargets +from ..representation import BrainTumorSegmentationAnnotation, BrainTumorSegmentationPrediction +from ..config import NumberField, ConfigError + + +class ClipSegmentationMask(PostprocessorWithSpecificTargets): + __provider__ = 'clip_segmentation_mask' + + annotation_types = (BrainTumorSegmentationAnnotation, ) + prediction_types = (BrainTumorSegmentationPrediction, ) + + @classmethod + def parameters(cls): + parameters = super().parameters() + parameters.update({ + 'min_value': NumberField(value_type=int, min_value=0, optional=True, default=0, description="Min value"), + 'max_value': NumberField(value_type=int, description="Max value") + }) + return parameters + + def configure(self): + self.min_value = self.get_value_from_config('min_value') + self.max_value = self.get_value_from_config('max_value') + if self.max_value < self.min_value: + raise ConfigError('max_value should be greater than min_value') + + def process_image(self, annotation, prediction): + for target in annotation: + target.mask = np.clip(target.mask, a_min=self.min_value, a_max=self.max_value) + + for target in prediction: + target.mask = np.clip(target.mask, a_min=self.min_value, a_max=self.max_value) + + return annotation, prediction diff --git a/data/source_files/clean/2d1c1112bd6d.py b/data/source_files/clean/2d1c1112bd6d.py new file mode 100644 index 0000000000000000000000000000000000000000..6a9fd697438b33b3c4d1fb77bd83291ab92dfcca --- /dev/null +++ b/data/source_files/clean/2d1c1112bd6d.py @@ -0,0 +1,65 @@ +import os + +import pytest +import torch + +from hivemind import RemoteExpert +from hivemind.moe.server import background_server + +CUSTOM_EXPERTS_PATH = os.path.join(os.path.dirname(__file__), "test_utils", "custom_networks.py") + + +@pytest.mark.forked +def test_custom_expert(hid_dim=16): + with background_server( + expert_cls="perceptron", + num_experts=2, + device="cpu", + hidden_dim=hid_dim, + num_handlers=2, + no_dht=True, + custom_module_path=CUSTOM_EXPERTS_PATH, + ) as (server_endpoint, _): + expert0 = RemoteExpert("expert.0", server_endpoint) + expert1 = RemoteExpert("expert.1", server_endpoint) + + for batch_size in (1, 4): + batch = torch.randn(batch_size, hid_dim) + + output0 = expert0(batch) + output1 = expert1(batch) + + loss = output0.sum() + loss.backward() + loss = output1.sum() + loss.backward() + + +@pytest.mark.forked +def test_multihead_expert(hid_dim=16): + with background_server( + expert_cls="multihead", + num_experts=2, + device="cpu", + hidden_dim=hid_dim, + num_handlers=2, + no_dht=True, + custom_module_path=CUSTOM_EXPERTS_PATH, + ) as (server_endpoint, _): + expert0 = RemoteExpert("expert.0", server_endpoint) + expert1 = RemoteExpert("expert.1", server_endpoint) + + for batch_size in (1, 4): + batch = ( + torch.randn(batch_size, hid_dim), + torch.randn(batch_size, 2 * hid_dim), + torch.randn(batch_size, 3 * hid_dim), + ) + + output0 = expert0(*batch) + output1 = expert1(*batch) + + loss = output0.sum() + loss.backward() + loss = output1.sum() + loss.backward() diff --git a/data/source_files/clean/2e9e6abd090a.py b/data/source_files/clean/2e9e6abd090a.py new file mode 100644 index 0000000000000000000000000000000000000000..86eee025668f1ba4e581d9197ce7264211e57bc7 --- /dev/null +++ b/data/source_files/clean/2e9e6abd090a.py @@ -0,0 +1,88 @@ +# Copyright 2015 NEC Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from tempest.lib.services.compute import security_group_default_rules_client +from tempest.tests.lib import fake_auth_provider +from tempest.tests.lib.services import base + + +class TestSecurityGroupDefaultRulesClient(base.BaseServiceTest): + FAKE_RULE = { + "from_port": 80, + "id": 1, + "ip_protocol": "TCP", + "ip_range": { + "cidr": "10.10.10.0/24" + }, + "to_port": 80 + } + + def setUp(self): + super(TestSecurityGroupDefaultRulesClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.client = (security_group_default_rules_client. + SecurityGroupDefaultRulesClient(fake_auth, 'compute', + 'regionOne')) + + def _test_list_security_group_default_rules(self, bytes_body=False): + self.check_service_client_function( + self.client.list_security_group_default_rules, + 'tempest.lib.common.rest_client.RestClient.get', + {"security_group_default_rules": [self.FAKE_RULE]}, + to_utf=bytes_body) + + def test_list_security_group_default_rules_with_str_body(self): + self._test_list_security_group_default_rules() + + def test_list_security_group_default_rules_with_bytes_body(self): + self._test_list_security_group_default_rules(bytes_body=True) + + def _test_show_security_group_default_rule(self, bytes_body=False): + self.check_service_client_function( + self.client.show_security_group_default_rule, + 'tempest.lib.common.rest_client.RestClient.get', + {"security_group_default_rule": self.FAKE_RULE}, + to_utf=bytes_body, + security_group_default_rule_id=1) + + def test_show_security_group_default_rule_with_str_body(self): + self._test_show_security_group_default_rule() + + def test_show_security_group_default_rule_with_bytes_body(self): + self._test_show_security_group_default_rule(bytes_body=True) + + def _test_create_security_default_group_rule(self, bytes_body=False): + request_body = { + "to_port": 80, + "from_port": 80, + "ip_protocol": "TCP", + "cidr": "10.10.10.0/24" + } + self.check_service_client_function( + self.client.create_security_default_group_rule, + 'tempest.lib.common.rest_client.RestClient.post', + {"security_group_default_rule": self.FAKE_RULE}, + to_utf=bytes_body, **request_body) + + def test_create_security_default_group_rule_with_str_body(self): + self._test_create_security_default_group_rule() + + def test_create_security_default_group_rule_with_bytes_body(self): + self._test_create_security_default_group_rule(bytes_body=True) + + def test_delete_security_group_default_rule(self): + self.check_service_client_function( + self.client.delete_security_group_default_rule, + 'tempest.lib.common.rest_client.RestClient.delete', + {}, status=204, security_group_default_rule_id=1) diff --git a/data/source_files/clean/3062ecd53cb9.py b/data/source_files/clean/3062ecd53cb9.py new file mode 100644 index 0000000000000000000000000000000000000000..8a37f39c3ffc420ffcb4173ab24c22f5ec606276 --- /dev/null +++ b/data/source_files/clean/3062ecd53cb9.py @@ -0,0 +1,78 @@ +""" +3D visualization primitives based on Plotly. +We might want to instead use a more powerful library like Open3D. +Plotly however supports animations, buttons and sliders. + +1) Initialize a figure with `fig = init_figure()` +2) Plot points, cameras, lines, or create a slider animation. +3) Call `fig.show()` to render the figure. +""" + +import plotly.graph_objects as go +import numpy as np + +from ..pixlib.geometry.utils import to_homogeneous + + +def init_figure(height=800): + """Initialize a 3D figure.""" + fig = go.Figure() + fig.update_layout( + height=height, + scene_camera=dict( + eye=dict(x=0., y=-.1, z=-2), up=dict(x=0, y=-1., z=0)), + scene=dict( + xaxis=dict(showbackground=False), + yaxis=dict(showbackground=False), + aspectmode='data', dragmode='orbit'), + margin=dict(l=0, r=0, b=0, t=0, pad=0)) # noqa E741 + return fig + + +def plot_points(fig, pts, color='rgba(255, 0, 0, 1)', ps=2): + """Plot a set of 3D points.""" + x, y, z = pts.T + tr = go.Scatter3d( + x=x, y=y, z=z, mode='markers', marker_size=ps, + marker_color=color, marker_line_width=.2) + fig.add_trace(tr) + + +def plot_camera(fig, R, t, K, color='rgb(0, 0, 255)'): + """Plot a camera as a cone with camera frustum.""" + x, y, z = t + u, v, w = R @ -np.array([0, 0, 1]) + tr = go.Cone( + x=[x], y=[y], z=[z], u=[u], v=[v], w=[w], anchor='tip', + showscale=False, colorscale=[[0, color], [1, color]], + sizemode='absolute') + fig.add_trace(tr) + + W, H = K[0, 2]*2, K[1, 2]*2 + corners = np.array([[0, 0], [W, 0], [W, H], [0, H], [0, 0]]) + corners = to_homogeneous(corners) @ np.linalg.inv(K).T + corners = (corners/2) @ R.T + t + x, y, z = corners.T + tr = go.Scatter3d( + x=x, y=y, z=z, line=dict(color='rgba(0, 0, 0, .5)'), + marker=dict(size=0.0001), showlegend=False) + fig.add_trace(tr) + + +def create_slider_animation(fig, traces): + """Create a slider that animates a list of traces (e.g. 3D points).""" + slider = {'steps': []} + frames = [] + fig.add_trace(traces[0]) + idx = len(fig.data) - 1 + for i, tr in enumerate(traces): + frames.append(go.Frame(name=str(i), traces=[idx], data=[tr])) + step = {"args": [ + [str(i)], + {"frame": {"redraw": True}, + "mode": "immediate"}], + "label": i, + "method": "animate"} + slider['steps'].append(step) + fig.frames = tuple(frames) + fig.layout.sliders = (slider,) diff --git a/data/source_files/clean/312f4f16416d.py b/data/source_files/clean/312f4f16416d.py new file mode 100644 index 0000000000000000000000000000000000000000..0a99a93e656914b21bfd27861c1447d786a91bee --- /dev/null +++ b/data/source_files/clean/312f4f16416d.py @@ -0,0 +1,87 @@ +import network + +def conncb(task): + print("[{}] Connected".format(task)) + +def disconncb(task): + print("[{}] Disconnected".format(task)) + +def subscb(task): + print("[{}] Subscribed".format(task)) + +def pubcb(pub): + print("[{}] Published: {}".format(pub[0], pub[1])) + +def datacb(msg): + print("[{}] Data arrived from topic: {}, Message:\n".format(msg[0], msg[1]), msg[2]) + + +mqtt = network.mqtt("loboris", "mqtt://loboris.eu", user="wifimcu", password="wifimculobo", cleansession=True, connected_cb=conncb, disconnected_cb=disconncb, subscribed_cb=subscb, published_cb=pubcb, data_cb=datacb) +# secure connection requires more memory and may not work +# mqtts = network.mqtt("eclipse", "mqtts//iot.eclipse.org", cleansession=True, connected_cb=conncb, disconnected_cb=disconncb, subscribed_cb=subscb, published_cb=pubcb, data_cb=datacb) +# wsmqtt = network.mqtt("eclipse", "ws://iot.eclipse.org:80/ws", cleansession=True, data_cb=datacb) + +mqtt.start() + +#mqtt.config(lwt_topic='status', lwt_msg='Disconected') + + + + +''' + +# Wait until status is: (1, 'Connected') + +mqtt.subscribe('test') +mqtt.publish('test', 'Hi from Micropython') + +mqtt.stop() + +''' + +# ================== +# ThingSpeak example +# ================== + +import network + +def datacb(msg): + print("[{}] Data arrived from topic: {}, Message:\n".format(msg[0], msg[1]), msg[2]) + +thing = network.mqtt("thingspeak", "mqtt://mqtt.thingspeak.com", user="anyName", password="ThingSpeakMQTTid", cleansession=True, data_cb=datacb) +# or secure connection +#thing = network.mqtt("thingspeak", "mqtts://mqtt.thingspeak.com", user="anyName", password="ThingSpeakMQTTid", cleansession=True, data_cb=datacb) + +thingspeakChannelId = "123456" # enter Thingspeak Channel ID +thingspeakChannelWriteApiKey = "ThingspeakWriteAPIKey" # EDIT - enter Thingspeak Write API Key +thingspeakFieldNo = 1 +thingSpeakChanelFormat = "json" + +pubchan = "channels/{:s}/publish/{:s}".format(thingspeakChannelId, thingspeakChannelWriteApiKey) +pubfield = "channels/{:s}/publish/fields/field{}/{:s}".format(thingspeakChannelId, thingspeakFieldNo, thingspeakChannelWriteApiKey) +subchan = "channels/{:s}/subscribe/{:s}/{:s}".format(thingspeakChannelId, thingSpeakChanelFormat, thingspeakChannelWriteApiKey) +subfield = "channels/{:s}/subscribe/fields/field{}/{:s}".format(thingspeakChannelId, thingspeakFieldNo, thingspeakChannelWriteApiKey) + +thing.start() +tmo = 0 +while thing.status()[0] != 2: + utime.sleep_ms(100) + tmo += 1 + if tmo > 80: + print("Not connected") + break + +# subscribe to channel +thing.subscribe(subchan) + +# subscribe to field +thing.subscribe(subfield) + +# publish to channel +# Payload can include any of those fields separated b< ';': +# "field1=value;field2=value;...;field8=value;latitude=value;longitude=value;elevation=value;status=value" +thing.publish(pubchan, "field1=25.2;status=On line") + +# Publish to field +thing.publish(pubfield, "24.5") + diff --git a/data/source_files/clean/31976c91120b.py b/data/source_files/clean/31976c91120b.py new file mode 100644 index 0000000000000000000000000000000000000000..7c605332955c4b043be9f4d88d8eb7ca6bb505c8 --- /dev/null +++ b/data/source_files/clean/31976c91120b.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +# Usage: +# $0 -o log.txt products/ +# +# concatenates .log files (even those in subdirs or .zip) and combines into a single combined.log + +from xdfile.utils import find_files_with_time, open_output, get_args +import boto3 +# from boto.s3.connection import S3Connection +import os + + +def main(): + args = get_args('aggregates all .log files') + outf = open_output() + + s3 = boto3.resource('s3') + s3path = "logs/" + # bucket = conn.get_bucket(s3path) + bucket = s3.Bucket(os.environ['DOMAIN']) + + for obj in sorted(bucket.objects.all(), key=lambda x: x.last_modified): + # last_modified + if s3path in obj.key: + print("Name: %s LastModified:%s" % (obj.key.encode('utf-8'), obj.last_modified)) + + for fn, contents, dt in sorted(find_files_with_time(*args.inputs, ext=".log"), key=lambda x: x[2]): # earliest first + outf.write_file(fn, contents.decode("utf-8")) + +main() diff --git a/data/source_files/clean/319db52d59c7.py b/data/source_files/clean/319db52d59c7.py new file mode 100644 index 0000000000000000000000000000000000000000..863daa6816d11bde4f87896d1cc47d06ece1f0db --- /dev/null +++ b/data/source_files/clean/319db52d59c7.py @@ -0,0 +1,144 @@ +import json +import inspect +import hashlib + +from _plotly_utils.utils import PlotlyJSONEncoder +from dash.long_callback.managers import BaseLongCallbackManager + + +class CeleryLongCallbackManager(BaseLongCallbackManager): + def __init__(self, celery_app, cache_by=None, expire=None): + """ + Long callback manager that runs callback logic on a celery task queue, + and stores results using a celery result backend. + + :param celery_app: + A celery.Celery application instance that must be configured with a + result backend. See the celery documentation for information on + configuration options. + :param cache_by: + A list of zero-argument functions. When provided, caching is enabled and + the return values of these functions are combined with the callback + function's input arguments and source code to generate cache keys. + :param expire: + If provided, a cache entry will be removed when it has not been accessed + for ``expire`` seconds. If not provided, the lifetime of cache entries + is determined by the default behavior of the celery result backend. + """ + try: + import celery # pylint: disable=import-outside-toplevel,import-error + from celery.backends.base import ( # pylint: disable=import-outside-toplevel,import-error + DisabledBackend, + ) + except ImportError as missing_imports: + raise ImportError( + """\ +CeleryLongCallbackManager requires extra dependencies which can be installed doing + + $ pip install "dash[celery]"\n""" + ) from missing_imports + + if not isinstance(celery_app, celery.Celery): + raise ValueError("First argument must be a celery.Celery object") + + if isinstance(celery_app.backend, DisabledBackend): + raise ValueError("Celery instance must be configured with a result backend") + + super().__init__(cache_by) + self.handle = celery_app + self.expire = expire + + def terminate_job(self, job): + if job is None: + return + + self.handle.control.terminate(job) + + def terminate_unhealthy_job(self, job): + task = self.get_task(job) + if task and task.status in ("FAILURE", "REVOKED"): + return self.terminate_job(job) + return False + + def job_running(self, job): + future = self.get_task(job) + return future and future.status in ( + "PENDING", + "RECEIVED", + "STARTED", + "RETRY", + "PROGRESS", + ) + + def make_job_fn(self, fn, progress, args_deps): + return _make_job_fn(fn, self.handle, progress, args_deps) + + def get_task(self, job): + if job: + return self.handle.AsyncResult(job) + + return None + + def clear_cache_entry(self, key): + self.handle.backend.delete(key) + + def call_job_fn(self, key, job_fn, args): + task = job_fn.delay(key, self._make_progress_key(key), args) + return task.task_id + + def get_progress(self, key): + progress_key = self._make_progress_key(key) + progress_data = self.handle.backend.get(progress_key) + if progress_data: + return json.loads(progress_data) + + return None + + def result_ready(self, key): + return self.handle.backend.get(key) is not None + + def get_result(self, key, job): + # Get result value + result = self.handle.backend.get(key) + if result is None: + return None + + result = json.loads(result) + + # Clear result if not caching + if self.cache_by is None: + self.clear_cache_entry(key) + else: + if self.expire: + # Set/update expiration time + self.handle.backend.expire(key, self.expire) + self.clear_cache_entry(self._make_progress_key(key)) + + self.terminate_job(job) + return result + + +def _make_job_fn(fn, celery_app, progress, args_deps): + cache = celery_app.backend + + # Hash function source and module to create a unique (but stable) celery task name + fn_source = inspect.getsource(fn) + fn_str = fn_source + fn_hash = hashlib.sha1(fn_str.encode("utf-8")).hexdigest() + + @celery_app.task(name=f"long_callback_{fn_hash}") + def job_fn(result_key, progress_key, user_callback_args, fn=fn): + def _set_progress(progress_value): + cache.set(progress_key, json.dumps(progress_value, cls=PlotlyJSONEncoder)) + + maybe_progress = [_set_progress] if progress else [] + if isinstance(args_deps, dict): + user_callback_output = fn(*maybe_progress, **user_callback_args) + elif isinstance(args_deps, (list, tuple)): + user_callback_output = fn(*maybe_progress, *user_callback_args) + else: + user_callback_output = fn(*maybe_progress, user_callback_args) + + cache.set(result_key, json.dumps(user_callback_output, cls=PlotlyJSONEncoder)) + + return job_fn diff --git a/data/source_files/clean/31ff7d58e709.py b/data/source_files/clean/31ff7d58e709.py new file mode 100644 index 0000000000000000000000000000000000000000..0a36ce830d4011a6336f73093bb61b54abdb2cbd --- /dev/null +++ b/data/source_files/clean/31ff7d58e709.py @@ -0,0 +1,322 @@ +class AppTestGenerator: + + def test_generator(self): + def f(): + yield 1 + assert f().next() == 1 + + def test_generator2(self): + def f(): + yield 1 + g = f() + assert g.next() == 1 + raises(StopIteration, g.next) + + def test_attributes(self): + def f(): + yield 1 + assert g.gi_running + g = f() + assert g.gi_code is f.__code__ + assert g.__name__ == 'f' + assert g.gi_frame is not None + assert not g.gi_running + g.next() + assert not g.gi_running + raises(StopIteration, g.next) + assert not g.gi_running + assert g.gi_frame is None + assert g.gi_code is f.__code__ + assert g.__name__ == 'f' + + def test_generator3(self): + def f(): + yield 1 + g = f() + assert list(g) == [1] + + def test_generator4(self): + def f(): + yield 1 + g = f() + assert [x for x in g] == [1] + + def test_generator5(self): + d = {} + exec """if 1: + def f(): + v = (yield ) + yield v + g = f() + g.next() + """ in d + g = d['g'] + assert g.send(42) == 42 + + def test_throw1(self): + def f(): + yield 2 + g = f() + # two arguments version + raises(NameError, g.throw, NameError, "Error") + + def test_throw2(self): + def f(): + yield 2 + g = f() + # single argument version + raises(NameError, g.throw, NameError("Error")) + + def test_throw3(self): + def f(): + try: + yield 1 + yield 2 + except: + yield 3 + g = f() + assert g.next() == 1 + assert g.throw(NameError("Error")) == 3 + raises(StopIteration, g.next) + + def test_throw4(self): + d = {} + exec """if 1: + def f(): + try: + yield 1 + v = (yield 2) + except: + yield 3 + g = f() + """ in d + g = d['g'] + assert g.next() == 1 + assert g.next() == 2 + assert g.throw(NameError("Error")) == 3 + raises(StopIteration, g.next) + + def test_throw5(self): + def f(): + try: + yield 1 + except: + x = 3 + try: + yield x + except: + pass + g = f() + g.next() + # String exceptions are not allowed anymore + raises(TypeError, g.throw, "Error") + assert g.throw(Exception) == 3 + raises(StopIteration, g.throw, Exception) + + def test_throw6(self): + def f(): + yield 2 + g = f() + raises(NameError, g.throw, NameError, "Error", None) + + + def test_throw_fail(self): + def f(): + yield 1 + g = f() + raises(TypeError, g.throw, NameError("Error"), "error") + + def test_throw_fail2(self): + def f(): + yield 1 + g = f() + raises(TypeError, g.throw, list()) + + def test_throw_fail3(self): + def f(): + yield 1 + g = f() + raises(TypeError, g.throw, NameError("Error"), None, "not tb object") + + def test_throw_finishes_generator(self): + def f(): + yield 1 + g = f() + assert g.gi_frame is not None + raises(ValueError, g.throw, ValueError) + assert g.gi_frame is None + + def test_throw_bug(self): + def f(): + try: + x.throw(IndexError) # => "generator already executing" + except ValueError: + yield 1 + x = f() + res = list(x) + assert res == [1] + + def test_throw_on_finished_generator(self): + def f(): + yield 1 + g = f() + res = g.next() + assert res == 1 + raises(StopIteration, g.next) + raises(NameError, g.throw, NameError) + + def test_close(self): + def f(): + yield 1 + g = f() + assert g.close() is None + + def test_close2(self): + def f(): + try: + yield 1 + except GeneratorExit: + raise StopIteration + g = f() + g.next() + assert g.close() is None + + def test_close3(self): + def f(): + try: + yield 1 + except GeneratorExit: + raise NameError + g = f() + g.next() + raises(NameError, g.close) + + def test_close_fail(self): + def f(): + try: + yield 1 + except GeneratorExit: + yield 2 + g = f() + g.next() + raises(RuntimeError, g.close) + + def test_close_on_collect(self): + ## we need to exec it, else it won't run on python2.4 + d = {} + exec """ + def f(): + try: + yield + finally: + f.x = 42 + """.strip() in d + + g = d['f']() + g.next() + del g + import gc + gc.collect() + assert d['f'].x == 42 + + def test_generator_raises_typeerror(self): + def f(): + yield 1 + g = f() + raises(TypeError, g.send) # one argument required + raises(TypeError, g.send, 1) # not started, must send None + + def test_generator_explicit_stopiteration(self): + def f(): + yield 1 + raise StopIteration + g = f() + assert [x for x in g] == [1] + + def test_generator_propagate_stopiteration(self): + def f(): + it = iter([1]) + while 1: yield it.next() + g = f() + assert [x for x in g] == [1] + + def test_generator_restart(self): + def g(): + i = me.next() + yield i + me = g() + raises(ValueError, me.next) + + def test_generator_expression(self): + exec "res = sum(i*i for i in range(5))" + assert res == 30 + + def test_generator_expression_2(self): + d = {} + exec """ +def f(): + total = sum(i for i in [x for x in z]) + return total, x +z = [1, 2, 7] +res = f() +""" in d + assert d['res'] == (10, 7) + + def test_repr(self): + def myFunc(): + yield 1 + g = myFunc() + r = repr(g) + assert r.startswith(" 5 + try: + next(gen) + except TypeError: + pass + + def test_multiple_invalid_sends(self): + def mygen(): + yield 42 + g = mygen() + raises(TypeError, g.send, 2) + raises(TypeError, g.send, 2) + + +def test_should_not_inline(space): + from pypy.interpreter.generator import should_not_inline + w_co = space.appexec([], '''(): + def g(x): + yield x + 5 + return g.__code__ + ''') + assert should_not_inline(w_co) == False + w_co = space.appexec([], '''(): + def g(x): + yield x + 5 + yield x + 6 + return g.__code__ + ''') + assert should_not_inline(w_co) == True diff --git a/data/source_files/clean/324487b63865.py b/data/source_files/clean/324487b63865.py new file mode 100644 index 0000000000000000000000000000000000000000..6a5d7ccdf81701102bd40960b2c34a8fefe0bff7 --- /dev/null +++ b/data/source_files/clean/324487b63865.py @@ -0,0 +1,138 @@ +"""Sensor for data from Austrian Zentralanstalt für Meteorologie.""" +from __future__ import annotations + +import logging + +import voluptuous as vol + +from homeassistant.components.weather import ( + ATTR_WEATHER_HUMIDITY, + ATTR_WEATHER_PRESSURE, + ATTR_WEATHER_TEMPERATURE, + ATTR_WEATHER_WIND_BEARING, + ATTR_WEATHER_WIND_SPEED, + PLATFORM_SCHEMA, + WeatherEntity, +) +from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, TEMP_CELSIUS +from homeassistant.core import HomeAssistant +from homeassistant.helpers import config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType + +# Reuse data and API logic from the sensor implementation +from .sensor import ( + ATTRIBUTION, + CONF_STATION_ID, + ZamgData, + closest_station, + zamg_stations, +) + +_LOGGER = logging.getLogger(__name__) + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_NAME): cv.string, + vol.Optional(CONF_STATION_ID): cv.string, + vol.Inclusive( + CONF_LATITUDE, "coordinates", "Latitude and longitude must exist together" + ): cv.latitude, + vol.Inclusive( + CONF_LONGITUDE, "coordinates", "Latitude and longitude must exist together" + ): cv.longitude, + } +) + + +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: + """Set up the ZAMG weather platform.""" + name = config.get(CONF_NAME) + latitude = config.get(CONF_LATITUDE, hass.config.latitude) + longitude = config.get(CONF_LONGITUDE, hass.config.longitude) + + station_id = config.get(CONF_STATION_ID) or closest_station( + latitude, longitude, hass.config.config_dir + ) + if station_id not in zamg_stations(hass.config.config_dir): + _LOGGER.error( + "Configured ZAMG %s (%s) is not a known station", + CONF_STATION_ID, + station_id, + ) + return + + probe = ZamgData(station_id=station_id) + try: + probe.update() + except (ValueError, TypeError) as err: + _LOGGER.error("Received error from ZAMG: %s", err) + return + + add_entities([ZamgWeather(probe, name)], True) + + +class ZamgWeather(WeatherEntity): + """Representation of a weather condition.""" + + def __init__(self, zamg_data, stationname=None): + """Initialise the platform with a data instance and station name.""" + self.zamg_data = zamg_data + self.stationname = stationname + + @property + def name(self): + """Return the name of the sensor.""" + return ( + self.stationname + or f"ZAMG {self.zamg_data.data.get('Name') or '(unknown station)'}" + ) + + @property + def condition(self): + """Return the current condition.""" + return None + + @property + def attribution(self): + """Return the attribution.""" + return ATTRIBUTION + + @property + def temperature(self): + """Return the platform temperature.""" + return self.zamg_data.get_data(ATTR_WEATHER_TEMPERATURE) + + @property + def temperature_unit(self): + """Return the unit of measurement.""" + return TEMP_CELSIUS + + @property + def pressure(self): + """Return the pressure.""" + return self.zamg_data.get_data(ATTR_WEATHER_PRESSURE) + + @property + def humidity(self): + """Return the humidity.""" + return self.zamg_data.get_data(ATTR_WEATHER_HUMIDITY) + + @property + def wind_speed(self): + """Return the wind speed.""" + return self.zamg_data.get_data(ATTR_WEATHER_WIND_SPEED) + + @property + def wind_bearing(self): + """Return the wind bearing.""" + return self.zamg_data.get_data(ATTR_WEATHER_WIND_BEARING) + + def update(self): + """Update current conditions.""" + self.zamg_data.update() diff --git a/data/source_files/clean/32e91de1fd25.py b/data/source_files/clean/32e91de1fd25.py new file mode 100644 index 0000000000000000000000000000000000000000..862c0ef5874a647cec05d7913d882ea14b577a42 --- /dev/null +++ b/data/source_files/clean/32e91de1fd25.py @@ -0,0 +1,56 @@ +"""Scraper for Supreme Court of U.S. +CourtID: scotus +Court Short Name: scotus +History: + - 2014-07-20 - Created by Andrei Chelaru, reviewed by MLR + - 2017-10-09 - Updated by MLR. +""" + +from datetime import datetime + +from juriscraper.OralArgumentSite import OralArgumentSite + + +class Site(OralArgumentSite): + def __init__(self, *args, **kwargs): + super(Site, self).__init__(*args, **kwargs) + self.court_id = self.__module__ + self.url = ( + "http://www.supremecourt.gov/oral_arguments/argument_audio.aspx" + ) + self.back_scrape_iterable = list(range(2010, 2015)) + + def _get_download_urls(self): + path = "id('list')//tr//a/text()" + return list(map(self._return_download_url, self.html.xpath(path))) + + @staticmethod + def _return_download_url(d): + file_type = "mp3" # or 'wma' is also available for any case. + download_url = "http://www.supremecourt.gov/media/audio/{type}files/{docket_number}.{type}".format( + type=file_type, docket_number=d + ) + return download_url + + def _get_case_names(self): + path = "id('list')//tr/td/span/text()" + return [s.lstrip(". ") for s in self.html.xpath(path)] + + def _get_case_dates(self): + path = "id('list')//tr/td[2]//text()" + return [ + datetime.strptime(s, "%m/%d/%y").date() + for s in self.html.xpath(path) + if not "Date" in s + ] + + def _get_docket_numbers(self): + path = "id('list')//tr//a/text()" + return list(self.html.xpath(path)) + + def _download_backwards(self, year): + self.url = ( + "http://www.supremecourt.gov/oral_arguments/argument_audio/%s" + % year + ) + self.html = self._download() diff --git a/data/source_files/clean/3573d0fd1100.py b/data/source_files/clean/3573d0fd1100.py new file mode 100644 index 0000000000000000000000000000000000000000..0a8fdb2b5cc10e441111eda628478417245011ef --- /dev/null +++ b/data/source_files/clean/3573d0fd1100.py @@ -0,0 +1,129 @@ +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================ + +import math +import mindspore.nn as nn +import mindspore.ops as P +from mindspore.common import initializer as init +from src.utils import default_recurisive_init, KaimingNormal + + +class C3D(nn.Cell): + """ + C3D network definition. + + Args: + num_classes (int): Class numbers. Default: 1000. + Returns: + Tensor, infer output tensor. + + Examples: + >>> C3D(num_classes=1000) + """ + + def __init__(self, num_classes=1000): + super(C3D, self).__init__() + + self.conv1 = nn.Conv3d(in_channels=3, out_channels=64, kernel_size=(3, 3, 3), + padding=(1, 1, 1, 1, 1, 1), pad_mode='pad', has_bias=True) + self.pool1 = P.MaxPool3D(kernel_size=(1, 2, 2), strides=(1, 2, 2), pad_mode='same') + + self.conv2 = nn.Conv3d(in_channels=64, out_channels=128, kernel_size=(3, 3, 3), + padding=(1, 1, 1, 1, 1, 1), pad_mode='pad', has_bias=True) + self.pool2 = P.MaxPool3D(kernel_size=(2, 2, 2), strides=(2, 2, 2), pad_mode='same') + + self.conv3a = nn.Conv3d(in_channels=128, out_channels=256, kernel_size=(3, 3, 3), + padding=(1, 1, 1, 1, 1, 1), pad_mode='pad', has_bias=True) + self.conv3b = nn.Conv3d(in_channels=256, out_channels=256, kernel_size=(3, 3, 3), + padding=(1, 1, 1, 1, 1, 1), pad_mode='pad', has_bias=True) + self.pool3 = P.MaxPool3D(kernel_size=(2, 2, 2), strides=(2, 2, 2), pad_mode='same') + + self.conv4a = nn.Conv3d(in_channels=256, out_channels=512, kernel_size=(3, 3, 3), + padding=(1, 1, 1, 1, 1, 1), pad_mode='pad', has_bias=True) + self.conv4b = nn.Conv3d(in_channels=512, out_channels=512, kernel_size=(3, 3, 3), + padding=(1, 1, 1, 1, 1, 1), pad_mode='pad', has_bias=True) + self.pool4 = P.MaxPool3D(kernel_size=(2, 2, 2), strides=(2, 2, 2), pad_mode='same') + + self.conv5a = nn.Conv3d(in_channels=512, out_channels=512, kernel_size=(3, 3, 3), + padding=(1, 1, 1, 1, 1, 1), pad_mode='pad', has_bias=True) + self.conv5b = nn.Conv3d(in_channels=512, out_channels=512, kernel_size=(3, 3, 3), + padding=(1, 1, 1, 1, 1, 1), pad_mode='pad', has_bias=True) + self.pool5 = P.MaxPool3D(kernel_size=(2, 2, 2), strides=(2, 2, 2), pad_mode='same') + + self.fc6 = nn.Dense(in_channels=8192, out_channels=4096) + self.fc7 = nn.Dense(in_channels=4096, out_channels=4096) + self.fc8 = nn.Dense(in_channels=4096, out_channels=num_classes, bias_init=init.Normal(0.02)) + + self.dropout = nn.Dropout(keep_prob=0.5) + self.relu = nn.ReLU() + self.pad = nn.Pad(paddings=((0, 0), (0, 0), (1, 0), (1, 0)), mode="CONSTANT") + + self.__init_weight() + + def __init_weight(self): + default_recurisive_init(self) + self.custom_init_weight() + + def construct(self, x): + + x = self.relu(self.conv1(x)) + x = self.pool1(x) + + x = self.relu(self.conv2(x)) + x = self.pool2(x) + + x = self.relu(self.conv3a(x)) + x = self.relu(self.conv3b(x)) + x = self.pool3(x) + + x = self.relu(self.conv4a(x)) + x = self.relu(self.conv4b(x)) + x = self.pool4(x) + + x = self.relu(self.conv5a(x)) + x = self.relu(self.conv5b(x)) + x = x.view(-1, 512 * 2, 7, 7) + x = self.pad(x) + x = x.view(-1, 512, 2, 8, 8) + x = self.pool5(x) + + x = x.view(-1, 8192) + x = self.relu(self.fc6(x)) + x = self.dropout(x) + x = self.relu(self.fc7(x)) + x = self.dropout(x) + + logits = self.fc8(x) + + return logits + + def custom_init_weight(self): + """ + Init the weight of Conv3d and Dense in the net. + """ + for _, cell in self.cells_and_names(): + if isinstance(cell, nn.Conv3d): + cell.weight.set_data(init.initializer( + KaimingNormal(a=math.sqrt(5), mode='fan_out', nonlinearity='relu'), + cell.weight.shape, cell.weight.dtype)) + if cell.bias is not None: + cell.bias.set_data(init.initializer( + 'zeros', cell.bias.shape, cell.bias.dtype)) + elif isinstance(cell, nn.Dense): + cell.weight.set_data(init.initializer( + init.Normal(0.01), cell.weight.shape, cell.weight.dtype)) + if cell.bias is not None: + cell.bias.set_data(init.initializer( + 'zeros', cell.bias.shape, cell.bias.dtype)) diff --git a/data/source_files/clean/360a872fc6e5.py b/data/source_files/clean/360a872fc6e5.py new file mode 100644 index 0000000000000000000000000000000000000000..0a2b482bae656ac79eb981d550db6a1224027b57 --- /dev/null +++ b/data/source_files/clean/360a872fc6e5.py @@ -0,0 +1,61 @@ +import logging +import unittest + +from pyinstrument import Profiler + +from nuplan.planning.scenario_builder.nuplan_db.test.nuplan_scenario_test_utils import get_test_nuplan_scenario +from nuplan.planning.simulation.history.simulation_history_buffer import SimulationHistoryBuffer +from nuplan.planning.simulation.observation.idm_agents import IDMAgents +from nuplan.planning.simulation.simulation_time_controller.simulation_iteration import SimulationIteration + +logger = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO) + + +class TestProfileIDM(unittest.TestCase): + """ + Profiling test for IDM agents. + """ + + def setUp(self) -> None: + """ + Inherited, see super class. + """ + self.n_repeat_trials = 1 + self.display_results = True + self.scenario = get_test_nuplan_scenario() + + def test_profile_idm_agent_observation(self) -> None: + """Profile IDMAgents.""" + profiler = Profiler(interval=0.0001) + profiler.start() + + # How many times to repeat runtime test + for _ in range(self.n_repeat_trials): + observation = IDMAgents( + target_velocity=10, + min_gap_to_lead_agent=0.5, + headway_time=1.5, + accel_max=1.0, + decel_max=2.0, + scenario=self.scenario, + ) + + for step in range(self.scenario.get_number_of_iterations() - 1): + iteration = SimulationIteration(time_point=self.scenario.get_time_point(step), index=step) + next_iteration = SimulationIteration(time_point=self.scenario.get_time_point(step + 1), index=step + 1) + buffer = SimulationHistoryBuffer.initialize_from_list( + 1, + [self.scenario.get_ego_state_at_iteration(step)], + [self.scenario.get_tracked_objects_at_iteration(step)], + next_iteration.time_point.time_s - iteration.time_point.time_s, + ) + observation.update_observation(iteration, next_iteration, buffer) + profiler.stop() + + if self.display_results: + logger.info(profiler.output_text(unicode=True, color=True)) + + +if __name__ == "__main__": + unittest.main() diff --git a/data/source_files/clean/3721f50853dc.py b/data/source_files/clean/3721f50853dc.py new file mode 100644 index 0000000000000000000000000000000000000000..8123847da358e93698586a58b0a106958f59df07 --- /dev/null +++ b/data/source_files/clean/3721f50853dc.py @@ -0,0 +1,372 @@ +# Copyright The Cloud Custodian Authors. +# SPDX-License-Identifier: Apache-2.0 +import fnmatch +from io import StringIO +import json +import os +import shutil +import zipfile +import re +from datetime import datetime, timedelta, tzinfo +from distutils.util import strtobool + +import boto3 +import placebo +from botocore.response import StreamingBody +from placebo import pill + +from c7n.testing import CustodianTestCore +from .constants import ACCOUNT_ID + +# Custodian Test Account. This is used only for testing. +# Access is available for community project maintainers. + + +########################################################################### +# BEGIN PLACEBO MONKEY PATCH +# +# Placebo is effectively abandoned upstream, since mitch went back to work at AWS, irony... +# These monkeypatch patches represent fixes on trunk of that repo that have not been released +# into an extant version, we carry them here. We can drop this when this issue is resolved +# +# https://github.com/garnaat/placebo/issues/63 +# +# License - Apache 2.0 +# Copyright (c) 2015 Mitch Garnaat + + +class UTC(tzinfo): + """UTC""" + + def utcoffset(self, dt): + return timedelta(0) + + def tzname(self, dt): + return "UTC" + + def dst(self, dt): + return timedelta(0) + + +utc = UTC() + + +def deserialize(obj): + """Convert JSON dicts back into objects.""" + # Be careful of shallow copy here + target = dict(obj) + class_name = None + if "__class__" in target: + class_name = target.pop("__class__") + if "__module__" in obj: + obj.pop("__module__") + # Use getattr(module, class_name) for custom types if needed + if class_name == "datetime": + return datetime(tzinfo=utc, **target) + if class_name == "StreamingBody": + return StringIO(target["body"]) + # Return unrecognized structures as-is + return obj + + +def serialize(obj): + """Convert objects into JSON structures.""" + # Record class and module information for deserialization + result = {"__class__": obj.__class__.__name__} + try: + result["__module__"] = obj.__module__ + except AttributeError: + pass + + # Convert objects to dictionary representation based on type + if isinstance(obj, datetime): + result["year"] = obj.year + result["month"] = obj.month + result["day"] = obj.day + result["hour"] = obj.hour + result["minute"] = obj.minute + result["second"] = obj.second + result["microsecond"] = obj.microsecond + return result + if isinstance(obj, StreamingBody): + result["body"] = obj.read() + obj._raw_stream = StringIO(result["body"]) + obj._amount_read = 0 + return result + if isinstance(obj, bytes): + return obj.decode('utf8') + + # Raise a TypeError if the object isn't recognized + raise TypeError("Type not serializable") + + +pill.FakeHttpResponse.raw = None +placebo.pill.serialize = serialize +placebo.pill.deserialize = deserialize + +# END PLACEBO MONKEY +########################################################################## + + +class BluePill(pill.Pill): + + def playback(self): + super(BluePill, self).playback() + self._avail = self.get_available() + + def get_available(self): + return { + os.path.join(self.data_path, n) + for n in fnmatch.filter(os.listdir(self.data_path), "*.json") + } + + def get_next_file_path(self, service, operation): + fn, format = super(BluePill, self).get_next_file_path(service, operation) + # couple of double use cases + if fn in self._avail: + self._avail.remove(fn) + else: + print("\ndouble use %s\n" % fn) + return (fn, format) + + def stop(self): + result = super(BluePill, self).stop() + if self._avail: + print("Unused json files \n %s" % ("\n".join(sorted(self._avail)))) + return result + + +class ZippedPill(pill.Pill): + + def __init__(self, path, prefix=None, debug=False): + super(ZippedPill, self).__init__(prefix, debug) + self.path = path + self._used = set() + self.archive = None + + def playback(self): + self.archive = zipfile.ZipFile(self.path, "r") + self._files = set(self.archive.namelist()) + return super(ZippedPill, self).playback() + + def record(self): + self.archive = zipfile.ZipFile(self.path, "a", zipfile.ZIP_DEFLATED) + self._files = set() + + files = {n for n in self.archive.namelist() if n.startswith(self.prefix)} + + if not files: + return super(ZippedPill, self).record() + + # We can't update files in a zip, so copy + self.archive.close() + os.rename(self.path, "%s.tmp" % self.path) + src = zipfile.ZipFile("%s.tmp" % self.path, "r") + + self.archive = zipfile.ZipFile(self.path, "w", zipfile.ZIP_DEFLATED) + + for n in src.namelist(): + if n in files: + continue + self.archive.writestr(n, src.read(n)) + os.remove("%s.tmp" % self.path) + return super(ZippedPill, self).record() + + def stop(self): + super(ZippedPill, self).stop() + if self.archive: + self.archive.close() + + def save_response(self, service, operation, response_data, http_response=200): + filepath = self.get_new_file_path(service, operation) + pill.LOG.debug("save_response: path=%s", filepath) + json_data = {"status_code": http_response, "data": response_data} + self.archive.writestr( + filepath, + json.dumps(json_data, indent=4, default=pill.serialize), + zipfile.ZIP_DEFLATED, + ) + self._files.add(filepath) + + def load_response(self, service, operation): + response_file = self.get_next_file_path(service, operation) + self._used.add(response_file) + pill.LOG.debug("load_responses: %s", response_file) + response_data = json.loads( + self.archive.read(response_file), object_hook=pill.deserialize + ) + return ( + pill.FakeHttpResponse(response_data["status_code"]), response_data["data"] + ) + + def get_new_file_path(self, service, operation): + base_name = "{0}.{1}".format(service, operation) + if self.prefix: + base_name = "{0}.{1}".format(self.prefix, base_name) + pill.LOG.debug("get_new_file_path: %s", base_name) + index = 0 + glob_pattern = os.path.join(self._data_path, base_name + "*") + + for file_path in fnmatch.filter(self._files, glob_pattern): + file_name = os.path.basename(file_path) + m = self.filename_re.match(file_name) + if m: + i = int(m.group("index")) + if i > index: + index = i + index += 1 + return os.path.join(self._data_path, "{0}_{1}.json".format(base_name, index)) + + def get_next_file_path(self, service, operation): + base_name = "{0}.{1}".format(service, operation) + if self.prefix: + base_name = "{0}.{1}".format(self.prefix, base_name) + pill.LOG.debug("get_next_file_path: %s", base_name) + next_file = None + while next_file is None: + index = self._index.setdefault(base_name, 1) + fn = os.path.join(self._data_path, base_name + "_{0}.json".format(index)) + fn = fn.replace('\\', '/') + if fn in self._files: + next_file = fn + self._index[base_name] += 1 + self._files.add(fn) + elif index != 1: + self._index[base_name] = 1 + else: + # we are looking for the first index and it's not here + raise IOError("response file ({0}) not found".format(fn)) + return fn + + +def attach(session, data_path, prefix=None, debug=False): + pill = ZippedPill(data_path, prefix=prefix, debug=debug) + pill.attach(session, prefix) + return pill + + +class RedPill(pill.Pill): + + def datetime_converter(self, obj): + if isinstance(obj, datetime): + return obj.isoformat() + + def save_response(self, service, operation, response_data, + http_response=200): + """ + Override to sanitize response metadata and account_ids + """ + # aws sso setups involve a short lived credential transfer + if service == "portal.sso": + return + + if 'ResponseMetadata' in response_data: + response_data['ResponseMetadata'] = {} + + response_data = json.dumps(response_data, default=serialize) + response_data = re.sub(r"\b\d{12}\b", ACCOUNT_ID, response_data) # noqa + response_data = json.loads(response_data, object_hook=deserialize) + + super(RedPill, self).save_response(service, operation, response_data, + http_response) + + +class PillTest(CustodianTestCore): + + archive_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "placebo_data.zip" + ) + + placebo_dir = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "data", "placebo" + ) + + output_dir = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "data", "output" + ) + + recording = False + + def cleanUp(self): + self.pill = None + + def record_flight_data(self, test_case, zdata=False, augment=False, region=None): + self.recording = True + test_dir = os.path.join(self.placebo_dir, test_case) + if not (zdata or augment): + if os.path.exists(test_dir): + shutil.rmtree(test_dir) + os.makedirs(test_dir) + + session = boto3.Session(region_name=region) + default_region = session.region_name + if not zdata: + pill = RedPill() + pill.attach(session, test_dir) + else: + pill = attach(session, self.archive_path, test_case, debug=True) + + pill.record() + self.pill = pill + self.addCleanup(pill.stop) + self.addCleanup(self.cleanUp) + + class FakeFactory: + + def __call__(fake, region=None, assume=None): + new_session = None + # slightly experimental for test recording, using + # cross account assumes, note this will record sts + # assume role api calls creds into test data, they will + # go stale, but its best to modify before commiting. + # Disabled by default. + if 0 and (assume is not False and fake.assume_role): + client = session.client('sts') + creds = client.assume_role( + RoleArn=fake.assume_role, + RoleSessionName='CustodianTest')['Credentials'] + new_session = boto3.Session( + aws_access_key_id=creds['AccessKeyId'], + aws_secret_access_key=creds['SecretAccessKey'], + aws_session_token=creds['SessionToken'], + region_name=region or fake.region or default_region) + elif region and region != default_region: + new_session = boto3.Session(region_name=region) + + if new_session: + assert not zdata + new_pill = placebo.attach(new_session, test_dir, debug=True) + new_pill.record() + self.addCleanup(new_pill.stop) + return new_session + return session + + return FakeFactory() + + def replay_flight_data(self, test_case, zdata=False, region=None): + """ + The `region` argument is to allow functional tests to override the + default region. It is unused when replaying stored data. + """ + + if strtobool(os.environ.get('C7N_FUNCTIONAL', 'no')): + self.recording = True + return lambda region=region, assume=None: boto3.Session(region_name=region) + + if not zdata: + test_dir = os.path.join(self.placebo_dir, test_case) + if not os.path.exists(test_dir): + raise RuntimeError("Invalid Test Dir for flight data %s" % test_dir) + + session = boto3.Session(region_name=region) + if not zdata: + pill = placebo.attach(session, test_dir) + # pill = BluePill() + # pill.attach(session, test_dir) + else: + pill = attach(session, self.archive_path, test_case, False) + + pill.playback() + self.addCleanup(pill.stop) + self.addCleanup(self.cleanUp) + return lambda region=None, assume=None: session diff --git a/data/source_files/clean/37d4f9f88c30.py b/data/source_files/clean/37d4f9f88c30.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce1993cbdc65a6d053c9478a3f9b9475d29bb5c --- /dev/null +++ b/data/source_files/clean/37d4f9f88c30.py @@ -0,0 +1,189 @@ +# Copyright 2018 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""Tests for mobilenet_v2.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +import copy +import tensorflow as tf +from nets.mobilenet import conv_blocks as ops +from nets.mobilenet import mobilenet +from nets.mobilenet import mobilenet_v2 + + +slim = tf.contrib.slim + + +def find_ops(optype): + """Find ops of a given type in graphdef or a graph. + + Args: + optype: operation type (e.g. Conv2D) + Returns: + List of operations. + """ + gd = tf.get_default_graph() + return [var for var in gd.get_operations() if var.type == optype] + + +class MobilenetV2Test(tf.test.TestCase): + + def setUp(self): + tf.reset_default_graph() + + def testCreation(self): + spec = dict(mobilenet_v2.V2_DEF) + _, ep = mobilenet.mobilenet( + tf.placeholder(tf.float32, (10, 224, 224, 16)), conv_defs=spec) + num_convs = len(find_ops('Conv2D')) + + # This is mostly a sanity test. No deep reason for these particular + # constants. + # + # All but first 2 and last one have two convolutions, and there is one + # extra conv that is not in the spec. (logits) + self.assertEqual(num_convs, len(spec['spec']) * 2 - 2) + # Check that depthwise are exposed. + for i in range(2, 17): + self.assertIn('layer_%d/depthwise_output' % i, ep) + + def testCreationNoClasses(self): + spec = copy.deepcopy(mobilenet_v2.V2_DEF) + net, ep = mobilenet.mobilenet( + tf.placeholder(tf.float32, (10, 224, 224, 16)), conv_defs=spec, + num_classes=None) + self.assertIs(net, ep['global_pool']) + + def testImageSizes(self): + for input_size, output_size in [(224, 7), (192, 6), (160, 5), + (128, 4), (96, 3)]: + tf.reset_default_graph() + _, ep = mobilenet_v2.mobilenet( + tf.placeholder(tf.float32, (10, input_size, input_size, 3))) + + self.assertEqual(ep['layer_18/output'].get_shape().as_list()[1:3], + [output_size] * 2) + + def testWithSplits(self): + spec = copy.deepcopy(mobilenet_v2.V2_DEF) + spec['overrides'] = { + (ops.expanded_conv,): dict(split_expansion=2), + } + _, _ = mobilenet.mobilenet( + tf.placeholder(tf.float32, (10, 224, 224, 16)), conv_defs=spec) + num_convs = len(find_ops('Conv2D')) + # All but 3 op has 3 conv operatore, the remainign 3 have one + # and there is one unaccounted. + self.assertEqual(num_convs, len(spec['spec']) * 3 - 5) + + def testWithOutputStride8(self): + out, _ = mobilenet.mobilenet_base( + tf.placeholder(tf.float32, (10, 224, 224, 16)), + conv_defs=mobilenet_v2.V2_DEF, + output_stride=8, + scope='MobilenetV2') + self.assertEqual(out.get_shape().as_list()[1:3], [28, 28]) + + def testDivisibleBy(self): + tf.reset_default_graph() + mobilenet_v2.mobilenet( + tf.placeholder(tf.float32, (10, 224, 224, 16)), + conv_defs=mobilenet_v2.V2_DEF, + divisible_by=16, + min_depth=32) + s = [op.outputs[0].get_shape().as_list()[-1] for op in find_ops('Conv2D')] + s = set(s) + self.assertSameElements([32, 64, 96, 160, 192, 320, 384, 576, 960, 1280, + 1001], s) + + def testDivisibleByWithArgScope(self): + tf.reset_default_graph() + # Verifies that depth_multiplier arg scope actually works + # if no default min_depth is provided. + with slim.arg_scope((mobilenet.depth_multiplier,), min_depth=32): + mobilenet_v2.mobilenet( + tf.placeholder(tf.float32, (10, 224, 224, 2)), + conv_defs=mobilenet_v2.V2_DEF, depth_multiplier=0.1) + s = [op.outputs[0].get_shape().as_list()[-1] for op in find_ops('Conv2D')] + s = set(s) + self.assertSameElements(s, [32, 192, 128, 1001]) + + def testFineGrained(self): + tf.reset_default_graph() + # Verifies that depth_multiplier arg scope actually works + # if no default min_depth is provided. + + mobilenet_v2.mobilenet( + tf.placeholder(tf.float32, (10, 224, 224, 2)), + conv_defs=mobilenet_v2.V2_DEF, depth_multiplier=0.01, + finegrain_classification_mode=True) + s = [op.outputs[0].get_shape().as_list()[-1] for op in find_ops('Conv2D')] + s = set(s) + # All convolutions will be 8->48, except for the last one. + self.assertSameElements(s, [8, 48, 1001, 1280]) + + def testMobilenetBase(self): + tf.reset_default_graph() + # Verifies that mobilenet_base returns pre-pooling layer. + with slim.arg_scope((mobilenet.depth_multiplier,), min_depth=32): + net, _ = mobilenet_v2.mobilenet_base( + tf.placeholder(tf.float32, (10, 224, 224, 16)), + conv_defs=mobilenet_v2.V2_DEF, depth_multiplier=0.1) + self.assertEqual(net.get_shape().as_list(), [10, 7, 7, 128]) + + def testWithOutputStride16(self): + tf.reset_default_graph() + out, _ = mobilenet.mobilenet_base( + tf.placeholder(tf.float32, (10, 224, 224, 16)), + conv_defs=mobilenet_v2.V2_DEF, + output_stride=16) + self.assertEqual(out.get_shape().as_list()[1:3], [14, 14]) + + def testWithOutputStride8AndExplicitPadding(self): + tf.reset_default_graph() + out, _ = mobilenet.mobilenet_base( + tf.placeholder(tf.float32, (10, 224, 224, 16)), + conv_defs=mobilenet_v2.V2_DEF, + output_stride=8, + use_explicit_padding=True, + scope='MobilenetV2') + self.assertEqual(out.get_shape().as_list()[1:3], [28, 28]) + + def testWithOutputStride16AndExplicitPadding(self): + tf.reset_default_graph() + out, _ = mobilenet.mobilenet_base( + tf.placeholder(tf.float32, (10, 224, 224, 16)), + conv_defs=mobilenet_v2.V2_DEF, + output_stride=16, + use_explicit_padding=True) + self.assertEqual(out.get_shape().as_list()[1:3], [14, 14]) + + def testBatchNormScopeDoesNotHaveIsTrainingWhenItsSetToNone(self): + sc = mobilenet.training_scope(is_training=None) + self.assertNotIn('is_training', sc[slim.arg_scope_func_key( + slim.batch_norm)]) + + def testBatchNormScopeDoesHasIsTrainingWhenItsNotNone(self): + sc = mobilenet.training_scope(is_training=False) + self.assertIn('is_training', sc[slim.arg_scope_func_key(slim.batch_norm)]) + sc = mobilenet.training_scope(is_training=True) + self.assertIn('is_training', sc[slim.arg_scope_func_key(slim.batch_norm)]) + sc = mobilenet.training_scope() + self.assertIn('is_training', sc[slim.arg_scope_func_key(slim.batch_norm)]) + + +if __name__ == '__main__': + tf.test.main() diff --git a/data/source_files/clean/3a8717abdef4.py b/data/source_files/clean/3a8717abdef4.py new file mode 100644 index 0000000000000000000000000000000000000000..811909fd3d9bc00f5888c3293282a4df3cefdd8c --- /dev/null +++ b/data/source_files/clean/3a8717abdef4.py @@ -0,0 +1,408 @@ +#!/usr/bin/env python3 + +# -*- coding: utf-8 -*- + +# FOGLAMP_BEGIN +# See: http://foglamp.readthedocs.io/ +# FOGLAMP_END + + +""" fogbench -- a Python script used to test FogLAMP. + +The objective is to simulate payloads for input, REST and other requests against one or +more FogLAMP instances. This version of fogbench is meant to test the CoAP and HTTP plugins +interface of FogLAMP southbound services. + +fogbench + + [IN] -h --help Print this help + -i --interval The interval in seconds between each iteration (default: 0) + [IN] -k --keep Do not delete (keep) the running sample (default: no) + [IN] -o --output Set the output file for statistics + [IN] -p --payload Type of payload and protocol (default: coap) + [IN] -t --template Set the template to use + [IN] -v --version Display the version and exit + [IN] -H --host The FogLAMP host (default: localhost) + -I --iterations The number of iterations of the test (default: 1) + [IN] -O --occurrences The number of occurrences of the template (default: 1) + [IN] -P --port The FogLAMP port. Default depends on payload and protocol + [IN] -S --statistic The type of statistics to collect + + Example: + + $ cd $FOGLAMP_ROOT/bin + $ ./fogbench + + Help: + + $ ./fogbench -h + + * Create reading objects from given template, as per the json file name specified with -t + * Save those objects to the file, as per the file name specified with -o + * Read those objects + * Send those to CoAP or HTTP south plugin server, on specific host and port + + .. todo:: + + * Try generators + +""" +import sys +import os +import random +import json +from datetime import datetime, timezone +import argparse +import collections + +import asyncio +import aiohttp + + +from .exceptions import * + +__author__ = "Praveen Garg" +__copyright__ = "Copyright (c) 2017 OSIsoft, LLC" +__license__ = "Apache 2.0" +__version__ = "${VERSION}" + + +_FOGBENCH_VERSION = u"0.1.1" + +_start_time = [] +_end_time = [] +_tot_msgs_transferred = [] +_tot_byte_transferred = [] +_num_iterated = 0 +"""Statistics to be collected""" + +# _logger = logger.setup(__name__) + + +def local_timestamp(): + """ + :return: str - current time stamp with microseconds and machine timezone info + :example '2018-05-08 14:06:40.517313+05:30' + """ + return str(datetime.now(timezone.utc).astimezone()) + + +def read_templates(): + templates = [] + + return templates + + +def parse_template_and_prepare_json(_template_file, + _write_to_file=None, _occurrences=1): + # template_file = os.path.join(os.path.dirname(__file__), "templates/" + _template_file) + + with open(_template_file) as data_file: + data = json.load(data_file) + + supported_format_types = ["number", "enum"] + for _ in range(_occurrences): + readings_ = _prepare_sensor_reading(data, supported_format_types) + for r in readings_: + _write_readings_to_file(_write_to_file, r) + + +def _write_readings_to_file(to_file, r): + with open(to_file, 'a') as the_file: + json.dump(r, the_file) + the_file.write(os.linesep) + + +def _prepare_sensor_reading(data, supported_format_types): + readings = [] + + for d in data: + x_sensor_values = dict() + + _sensor_value_object_formats = d["sensor_values"] + for fmt in _sensor_value_object_formats: + if fmt["type"] not in supported_format_types: + raise InvalidSensorValueObjectTemplateFormat(u"Invalid format, " + u"Can not parse type {}".format(fmt["type"])) + if fmt["type"] == "number": + # check float precision if any + precision = fmt.get("precision", None) + min_val = fmt.get("min", None) + max_val = fmt.get("max", None) + if min_val is None or max_val is None: + raise InvalidSensorValueObjectTemplateFormat(u"Invalid format, " + u"Min and Max values must be defined for type number.") + # print(precision) + # print(min_val) + # print(max_val) + reading = round(random.uniform(min_val, max_val), precision) + elif fmt["type"] == "enum": + reading = random.choice(fmt["list"]) + + # print(fmt["name"], reading) + x_sensor_values[fmt["name"]] = reading + + # print(d["name"]) + + sensor_value_object = dict() + sensor_value_object["asset"] = d['name'] + sensor_value_object["readings"] = x_sensor_values + sensor_value_object["timestamp"] = "{!s}".format(local_timestamp()) + # print(json.dumps(sensor_value_object)) + ord_dict = collections.OrderedDict(sorted(sensor_value_object.items())) + readings.append(ord_dict) + + return readings + + +def read_out_file(_file=None, _keep=False, _iterations=1, _interval=0, send_to='coap'): + + global _start_time + global _end_time + global _tot_msgs_transferred + global _tot_byte_transferred + global _num_iterated + + # from pprint import pprint + import time + # _file = os.path.join(os.path.dirname(__file__), "out/{}".format(outfile)) + with open(_file) as f: + readings_list = [json.loads(line) for line in f] + + loop = asyncio.get_event_loop() + + while _iterations > 0: + + # Pre-calculate the messages and size + msg_transferred_itr = 0 # Messages transferred in every iteration + byte_transferred_itr = 0 # Bytes transferred in every iteration + + for r in readings_list: + msg_transferred_itr += 1 + byte_transferred_itr += sys.getsizeof(r) + + if send_to == 'coap': + _start_time.append(datetime.now()) + for r in readings_list: + is_sent = loop.run_until_complete(send_to_coap(r)) + if not is_sent: + break + elif send_to == 'http': + _start_time.append(datetime.now()) + loop.run_until_complete(send_to_http(readings_list)) + + _end_time.append(datetime.now()) # End time of every iteration + _tot_msgs_transferred.append(msg_transferred_itr) + _tot_byte_transferred.append(byte_transferred_itr) + _iterations -= 1 + _num_iterated += 1 + if _iterations != 0: + # print(u"Iteration {} completed, waiting for {} seconds".format(_iterations, _interval)) + time.sleep(_interval) + + if not _keep: + os.remove(_file) + + +async def send_to_coap(payload): + """ + POST request to: + localhost + port 5683 (official IANA assigned CoAP port), + URI "/other/sensor-values". + + """ + from aiocoap import Context, Message + from aiocoap.numbers.codes import Code + from cbor2 import dumps + + context = await Context.create_client_context() + + request = Message(payload=dumps(payload), code=Code.POST) + request.opt.uri_host = arg_host + request.opt.uri_port = arg_port + request.opt.uri_path = ("other", "sensor-values") + + response = await context.request(request).response + str_res = str(response.code) + status_code = str_res[:4] # or str_res.split()[0] + if status_code == "4.00" or status_code == "5.00": + print("Error: ", str_res) + return False + + return True + + +async def send_to_http(payload): + """ + POST request to: + host localhost + port 6683 (default HTTP south plugin port), + uri sensor-reading + """ + headers = {'content-type': 'application/json'} + url = 'http://{}:{}/sensor-reading'.format(arg_host, arg_port) + async with aiohttp.ClientSession() as session: + async with session.post(url, data=json.dumps(payload), headers=headers) as resp: + await resp.text() + status_code = resp.status + if status_code in range(400, 500): + print("Bad request error | code:{}, reason: {}".format(status_code, resp.reason)) + return False + if status_code in range(500, 600): + print("Server error | code:{}, reason: {}".format(status_code, resp.reason)) + return False + return True + + +def get_statistics(_stats_type=None, _out_file=None): + stat = '' + global _start_time + global _end_time + global _tot_msgs_transferred + global _tot_byte_transferred + global _num_iterated + if _stats_type == 'total': + stat += u"Total Statistics:\n" + stat += (u"\nStart Time: {}".format(datetime.strftime(_start_time[0], "%Y-%m-%d %H:%M:%S.%f"))) + stat += (u"\nEnd Time: {}\n".format(datetime.strftime(_end_time[-1], "%Y-%m-%d %H:%M:%S.%f"))) + stat += (u"\nTotal Messages Transferred: {}".format(sum(_tot_msgs_transferred))) + stat += (u"\nTotal Bytes Transferred: {}\n".format(sum(_tot_byte_transferred))) + stat += (u"\nTotal Iterations: {}".format(_num_iterated)) + stat += (u"\nTotal Messages per Iteration: {}".format(sum(_tot_msgs_transferred)/_num_iterated)) + stat += (u"\nTotal Bytes per Iteration: {}\n".format(sum(_tot_byte_transferred)/_num_iterated)) + _msg_rate = [] + _byte_rate = [] + for itr in range(_num_iterated): + time_taken = _end_time[itr] - _start_time[itr] + _msg_rate.append(_tot_msgs_transferred[itr]/(time_taken.seconds+time_taken.microseconds/1E6)) + _byte_rate.append(_tot_byte_transferred[itr] / (time_taken.seconds+time_taken.microseconds/1E6)) + stat += (u"\nMin messages/second: {}".format(min(_msg_rate))) + stat += (u"\nMax messages/second: {}".format(max(_msg_rate))) + stat += (u"\nAvg messages/second: {}\n".format(sum(_msg_rate)/_num_iterated)) + stat += (u"\nMin Bytes/second: {}".format(min(_byte_rate))) + stat += (u"\nMax Bytes/second: {}".format(max(_byte_rate))) + stat += (u"\nAvg Bytes/second: {}".format(sum(_byte_rate)/_num_iterated)) + if _out_file: + with open(_out_file, 'w') as f: + f.write(stat) + else: + print(stat) + # should we also show total time diff? end_time - start_time + + +def check_server(payload_type='coap'): + template_str = ">>> Make sure south {} plugin service is running \n & listening on specified host and port \n" + if payload_type == 'coap': + print(template_str.format("CoAP")) + elif payload_type == 'http': + print(template_str.format("HTTP")) + + +parser = argparse.ArgumentParser(prog='fogbench') +parser.description = '%(prog)s -- a Python script used to test FogLAMP (simulate payloads)' +parser.epilog = 'The initial version of %(prog)s is meant to test the south plugin interface of ' \ + 'FogLAMP using CoAP or HTTP' +parser.add_argument('-v', '--version', action='version', version='%(prog)s {0!s}'.format(_FOGBENCH_VERSION)) +parser.add_argument('-k', '--keep', default=False, choices=['y', 'yes', 'n', 'no'], + help='Do not delete the running sample (default: no)') +parser.add_argument('-t', '--template', required=True, help='Set the template file, json extension') +parser.add_argument('-o', '--output', default=None, help='Set the statistics output file') +parser.add_argument('-p', '--payload', default='coap', choices=['coap', 'http'], help='Type of payload ' + 'and protocol (default: coap)') +parser.add_argument('-I', '--iterations', help='The number of iterations of the test (default: 1)') +parser.add_argument('-O', '--occurrences', help='The number of occurrences of the template (default: 1)') + +parser.add_argument('-H', '--host', help='Server host address (default: localhost)') +parser.add_argument('-P', '--port', help='The FogLAMP port. (default: 5683)') +parser.add_argument('-i', '--interval', default=0, help='The interval in seconds for each iteration (default: 0)') + +parser.add_argument('-S', '--statistics', default='total', choices=['total'], help='The type of statistics to collect ' + '(default: total)') + +namespace = parser.parse_args(sys.argv[1:]) +infile = '{0}'.format(namespace.template if namespace.template else '') +statistics_file = os.path.join(os.path.dirname(__file__), "out/{}".format(namespace.output)) if namespace.output else None +keep_the_file = True if namespace.keep in ['y', 'yes'] else False + +# iterations and occurrences +arg_iterations = int(namespace.iterations) if namespace.iterations else 1 +arg_occurrences = int(namespace.occurrences) if namespace.occurrences else 1 + +# interval between each iteration +arg_interval = int(namespace.interval) if namespace.interval else 0 + +arg_stats_type = '{0}'.format(namespace.statistics) if namespace.statistics else 'total' + +if namespace.payload: + arg_payload_protocol = namespace.payload + +arg_host = '{0}'.format(namespace.host) if namespace.host else 'localhost' + +default_port = 6683 if arg_payload_protocol == 'http' else 5683 +arg_port = int(namespace.port) if namespace.port else default_port + +check_server(arg_payload_protocol) +sample_file = os.path.join("/tmp", "foglamp_running_sample.{}".format(os.getpid())) +parse_template_and_prepare_json(_template_file=infile, _write_to_file=sample_file, _occurrences=arg_occurrences) +read_out_file(_file=sample_file, _keep=keep_the_file, _iterations=arg_iterations, _interval=arg_interval, + send_to=arg_payload_protocol) +get_statistics(_stats_type=arg_stats_type, _out_file=statistics_file) + +# TODO: Change below per local_timestamp() values +""" Expected output from given template +{ + "timestamp" : "2017-08-04T06:59:57.503Z", + "asset" : "TI sensorTag/luxometer", + "sensor_values" : { "lux" : 49 } +} + +{ + "timestamp" : "2017-08-04T06:59:57.863Z", + "asset" : "TI sensorTag/pressure", + "sensor_values" : { "pressure" : 1021.2 } +} + +{ + "timestamp" : "2017-08-04T06:59:58.863Z", + "asset" : "TI sensorTag/humidity", + "sensor_values" : { "humidity" : 71.2, "temperature" : 18.6 } +} + +{ + "timestamp" : "2017-08-04T06:59:59.863Z", + "asset" : "TI sensorTag/temperature", + "sensor_values" : { "object" : 18.2, "ambient" : 21.6 } +} + +{ + "timestamp" : "2017-08-04T07:00:00.863Z", + "asset" : "TI sensorTag/accelerometer", + "sensor_values" : { "x" : 1.2, "y" : 0.0, "z" : -0.6 } +} + +{ + "timestamp" : "2017-08-04T07:00:01.863Z", + "asset" : "TI sensorTag/gyroscope", + "sensor_values" : { "x" : 101.2, "y" : 46.2, "z" : -12.6 } +} + +{ + "timestamp" : "2017-08-04T07:00:02.863Z", + "asset" : "TI sensorTag/magnetometer", + "sensor_values" : { "x" : 101.2, "y" : 46.2, "z" : -12.6 } +} + +{ + "timestamp" : "2017-08-04T07:00:03.863Z", + "asset" : "mouse", + "sensor_values" : { "button" : "down" } +} + +{ + "timestamp" : "2017-08-04T07:00:04.863Z", + "asset" : "wall clock", + "sensor_values" : { "tick" : "tock" } +} + +""" diff --git a/data/source_files/clean/3dcb1d7b4a12.py b/data/source_files/clean/3dcb1d7b4a12.py new file mode 100644 index 0000000000000000000000000000000000000000..6ab21446cecd0d46b1a47275470353f326cec4d7 --- /dev/null +++ b/data/source_files/clean/3dcb1d7b4a12.py @@ -0,0 +1,221 @@ +# Copyright 2020 Pants project contributors (see CONTRIBUTORS.md). +# Licensed under the Apache License, Version 2.0 (see LICENSE). + +from abc import ABCMeta, abstractmethod +from pathlib import Path +from textwrap import dedent +from typing import ClassVar, Iterable, List, Optional, Tuple, Type + +from pants.core.goals.check import Check, CheckRequest, CheckResult, CheckResults, check +from pants.core.util_rules.distdir import DistDir +from pants.engine.addresses import Address +from pants.engine.fs import Workspace +from pants.engine.target import FieldSet, MultipleSourcesField, Target, Targets +from pants.engine.unions import UnionMembership +from pants.testutil.option_util import create_options_bootstrapper +from pants.testutil.rule_runner import MockGet, RuleRunner, mock_console, run_rule_with_mocks +from pants.util.logging import LogLevel + + +class MockTarget(Target): + alias = "mock_target" + core_fields = (MultipleSourcesField,) + + +class MockCheckFieldSet(FieldSet): + required_fields = (MultipleSourcesField,) + + +class MockCheckRequest(CheckRequest, metaclass=ABCMeta): + field_set_type = MockCheckFieldSet + checker_name: ClassVar[str] + + @staticmethod + @abstractmethod + def exit_code(_: Iterable[Address]) -> int: + pass + + @property + def check_results(self) -> CheckResults: + addresses = [config.address for config in self.field_sets] + return CheckResults( + [ + CheckResult( + self.exit_code(addresses), + "", + "", + ) + ], + checker_name=self.checker_name, + ) + + +class SuccessfulRequest(MockCheckRequest): + checker_name = "SuccessfulChecker" + + @staticmethod + def exit_code(_: Iterable[Address]) -> int: + return 0 + + +class FailingRequest(MockCheckRequest): + checker_name = "FailingChecker" + + @staticmethod + def exit_code(_: Iterable[Address]) -> int: + return 1 + + +class ConditionallySucceedsRequest(MockCheckRequest): + checker_name = "ConditionallySucceedsChecker" + + @staticmethod + def exit_code(addresses: Iterable[Address]) -> int: + if any(address.target_name == "bad" for address in addresses): + return 127 + return 0 + + +class SkippedRequest(MockCheckRequest): + @staticmethod + def exit_code(_) -> int: + return 0 + + @property + def check_results(self) -> CheckResults: + return CheckResults([], checker_name="SkippedChecker") + + +class InvalidField(MultipleSourcesField): + pass + + +class InvalidFieldSet(MockCheckFieldSet): + required_fields = (InvalidField,) + + +class InvalidRequest(MockCheckRequest): + field_set_type = InvalidFieldSet + checker_name = "InvalidChecker" + + @staticmethod + def exit_code(_: Iterable[Address]) -> int: + return -1 + + +def make_target(address: Optional[Address] = None) -> Target: + if address is None: + address = Address("", target_name="tests") + return MockTarget({}, address) + + +def run_typecheck_rule( + *, request_types: List[Type[CheckRequest]], targets: List[Target] +) -> Tuple[int, str]: + union_membership = UnionMembership({CheckRequest: request_types}) + with mock_console(create_options_bootstrapper()) as (console, stdio_reader): + rule_runner = RuleRunner() + result: Check = run_rule_with_mocks( + check, + rule_args=[ + console, + Workspace(rule_runner.scheduler, _enforce_effects=False), + Targets(targets), + DistDir(relpath=Path("dist")), + union_membership, + ], + mock_gets=[ + MockGet( + output_type=CheckResults, + input_type=CheckRequest, + mock=lambda field_set_collection: field_set_collection.check_results, + ), + ], + union_membership=union_membership, + ) + assert not stdio_reader.get_stdout() + return result.exit_code, stdio_reader.get_stderr() + + +def test_invalid_target_noops() -> None: + exit_code, stderr = run_typecheck_rule(request_types=[InvalidRequest], targets=[make_target()]) + assert exit_code == 0 + assert stderr == "" + + +def test_summary() -> None: + good_address = Address("", target_name="good") + bad_address = Address("", target_name="bad") + exit_code, stderr = run_typecheck_rule( + request_types=[ + ConditionallySucceedsRequest, + FailingRequest, + SkippedRequest, + SuccessfulRequest, + ], + targets=[make_target(good_address), make_target(bad_address)], + ) + assert exit_code == FailingRequest.exit_code([bad_address]) + assert stderr == dedent( + """\ + + 𐄂 ConditionallySucceedsChecker failed. + 𐄂 FailingChecker failed. + - SkippedChecker skipped. + ✓ SuccessfulChecker succeeded. + """ + ) + + +def test_streaming_output_skip() -> None: + results = CheckResults([], checker_name="typechecker") + assert results.level() == LogLevel.DEBUG + assert results.message() == "typechecker skipped." + + +def test_streaming_output_success() -> None: + results = CheckResults([CheckResult(0, "stdout", "stderr")], checker_name="typechecker") + assert results.level() == LogLevel.INFO + assert results.message() == dedent( + """\ + typechecker succeeded. + stdout + stderr + + """ + ) + + +def test_streaming_output_failure() -> None: + results = CheckResults([CheckResult(18, "stdout", "stderr")], checker_name="typechecker") + assert results.level() == LogLevel.ERROR + assert results.message() == dedent( + """\ + typechecker failed (exit code 18). + stdout + stderr + + """ + ) + + +def test_streaming_output_partitions() -> None: + results = CheckResults( + [ + CheckResult(21, "", "", partition_description="ghc8.1"), + CheckResult(0, "stdout", "stderr", partition_description="ghc9.2"), + ], + checker_name="typechecker", + ) + assert results.level() == LogLevel.ERROR + assert results.message() == dedent( + """\ + typechecker failed (exit code 21). + Partition #1 - ghc8.1: + + Partition #2 - ghc9.2: + stdout + stderr + + """ + ) diff --git a/data/source_files/clean/3ec8fd0b4a93.py b/data/source_files/clean/3ec8fd0b4a93.py new file mode 100644 index 0000000000000000000000000000000000000000..0a44f5460d17d97fc0728fbb786ff7e11153576a --- /dev/null +++ b/data/source_files/clean/3ec8fd0b4a93.py @@ -0,0 +1,79 @@ +# +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. +# + + +from rlstructures import logging +from rlstructures.env_wrappers import GymEnv, GymEnvInf +from rlstructures.tools import weight_init +import torch.nn as nn +import copy +import torch +import time +import numpy as np +import torch.nn.functional as F +from tutorial.tutorial_recurrent_policy.agent import RecurrentAgent +from tutorial.tutorial_recurrent_policy.a2c import A2C +import gym +from gym.wrappers import TimeLimit + +# We write the 'create_env' and 'create_agent' function in the main file to allow these functions to be used with pickle when creating the batcher processes +def create_gym_env(env_name): + return gym.make(env_name) + + +def create_env(n_envs, env_name=None, max_episode_steps=None, seed=None): + envs = [] + for k in range(n_envs): + e = create_gym_env(env_name) + e = TimeLimit(e, max_episode_steps=max_episode_steps) + envs.append(e) + return GymEnv(envs, seed) + + +def create_train_env(n_envs, env_name=None, max_episode_steps=None, seed=None): + envs = [] + for k in range(n_envs): + e = create_gym_env(env_name) + e = TimeLimit(e, max_episode_steps=max_episode_steps) + envs.append(e) + return GymEnvInf(envs, seed) + + +def create_agent(model, n_actions=1): + return RecurrentAgent(model=model, n_actions=n_actions) + + +class Experiment(A2C): + def __init__(self, config, create_env, create_train_env, create_agent): + super().__init__(config, create_env, create_train_env, create_agent) + + +if __name__ == "__main__": + # We use spawn mode such that most of the environment will run in multiple processes + import torch.multiprocessing as mp + + mp.set_start_method("spawn") + + config = { + "env_name": "CartPole-v0", + "a2c_timesteps": 3, + "n_envs": 4, + "max_episode_steps": 100, + "env_seed": 42, + "n_threads": 4, + "n_evaluation_threads": 2, + "n_evaluation_episodes": 256, + "time_limit": 3600, + "lr": 0.001, + "discount_factor": 0.95, + "critic_coef": 1.0, + "entropy_coef": 0.01, + "a2c_coef": 1.0, + "logdir": "./results", + } + exp = Experiment(config, create_env, create_train_env, create_agent) + exp.run() diff --git a/data/source_files/clean/3f5f590860dd.py b/data/source_files/clean/3f5f590860dd.py new file mode 100644 index 0000000000000000000000000000000000000000..81081edbfb2a07d5868f34f5440db42fe2a2e90a --- /dev/null +++ b/data/source_files/clean/3f5f590860dd.py @@ -0,0 +1,372 @@ +""" Data Loader for Generating Tasks + +Author: Zhao Na, 2020 +""" +import os +import random +import math +import glob +import numpy as np +import h5py as h5 +import transforms3d +from itertools import combinations + +import torch +from torch.utils.data import Dataset + + +def sample_K_pointclouds(data_path, num_point, pc_attribs, pc_augm, pc_augm_config, + scan_names, sampled_class, sampled_classes, is_support=False): + '''sample K pointclouds and the corresponding labels for one class (one_way)''' + ptclouds = [] + labels = [] + for scan_name in scan_names: + ptcloud, label = sample_pointcloud(data_path, num_point, pc_attribs, pc_augm, pc_augm_config, + scan_name, sampled_classes, sampled_class, support=is_support) + ptclouds.append(ptcloud) + labels.append(label) + + ptclouds = np.stack(ptclouds, axis=0) + labels = np.stack(labels, axis=0) + + return ptclouds, labels + + +def sample_pointcloud(data_path, num_point, pc_attribs, pc_augm, pc_augm_config, scan_name, + sampled_classes, sampled_class=0, support=False, random_sample=False): + sampled_classes = list(sampled_classes) + data = np.load(os.path.join(data_path, 'data', '%s.npy' %scan_name)) + N = data.shape[0] #number of points in this scan + + if random_sample: + sampled_point_inds = np.random.choice(np.arange(N), num_point, replace=(N < num_point)) + else: + # If this point cloud is for support/query set, make sure that the sampled points contain target class + valid_point_inds = np.nonzero(data[:,6] == sampled_class)[0] # indices of points belonging to the sampled class + + if N < num_point: + sampled_valid_point_num = len(valid_point_inds) + else: + valid_ratio = len(valid_point_inds)/float(N) + sampled_valid_point_num = int(valid_ratio*num_point) + + sampled_valid_point_inds = np.random.choice(valid_point_inds, sampled_valid_point_num, replace=False) + sampled_other_point_inds = np.random.choice(np.arange(N), num_point-sampled_valid_point_num, + replace=(N 1: + s = random.uniform(1 / pc_augm_config['scale'], pc_augm_config['scale']) + M = np.dot(transforms3d.zooms.zfdir2mat(s), M) + if pc_augm_config['rot'] == 1: + angle = random.uniform(0, 2 * math.pi) + M = np.dot(transforms3d.axangles.axangle2mat([0, 0, 1], angle), M) # z=upright assumption + if pc_augm_config['mirror_prob'] > 0: # mirroring x&y, not z + if random.random() < pc_augm_config['mirror_prob'] / 2: + M = np.dot(transforms3d.zooms.zfdir2mat(-1, [1, 0, 0]), M) + if random.random() < pc_augm_config['mirror_prob'] / 2: + M = np.dot(transforms3d.zooms.zfdir2mat(-1, [0, 1, 0]), M) + P[:, :3] = np.dot(P[:, :3], M.T) + + if pc_augm_config['jitter']: + sigma, clip = 0.01, 0.05 # https://github.com/charlesq34/pointnet/blob/master/provider.py#L74 + P = P + np.clip(sigma * np.random.randn(*P.shape), -1 * clip, clip).astype(np.float32) + return P + + +class MyDataset(Dataset): + def __init__(self, data_path, dataset_name, cvfold=0, num_episode=50000, n_way=3, k_shot=5, n_queries=1, + phase=None, mode='train', num_point=4096, pc_attribs='xyz', pc_augm=False, pc_augm_config=None): + super(MyDataset).__init__() + self.data_path = data_path + self.n_way = n_way + self.k_shot = k_shot + self.n_queries = n_queries + self.num_episode = num_episode + self.phase = phase + self.mode = mode + self.num_point = num_point + self.pc_attribs = pc_attribs + self.pc_augm = pc_augm + self.pc_augm_config = pc_augm_config + + if dataset_name == 's3dis': + from dataloaders.s3dis import S3DISDataset + self.dataset = S3DISDataset(cvfold, data_path) + elif dataset_name == 'scannet': + from dataloaders.scannet import ScanNetDataset + self.dataset = ScanNetDataset(cvfold, data_path) + else: + raise NotImplementedError('Unknown dataset %s!' % dataset_name) + + if mode == 'train': + self.classes = np.array(self.dataset.train_classes) + elif mode == 'test': + self.classes = np.array(self.dataset.test_classes) + else: + raise NotImplementedError('Unkown mode %s! [Options: train/test]' % mode) + + print('MODE: {0} | Classes: {1}'.format(mode, self.classes)) + self.class2scans = self.dataset.class2scans + + def __len__(self): + return self.num_episode + + def __getitem__(self, index, n_way_classes=None): + if n_way_classes is not None: + sampled_classes = np.array(n_way_classes) + else: + sampled_classes = np.random.choice(self.classes, self.n_way, replace=False) + + support_ptclouds, support_masks, query_ptclouds, query_labels = self.generate_one_episode(sampled_classes) + + if self.mode == 'train' and self.phase == 'metatrain': + remain_classes = list(set(self.classes) - set(sampled_classes)) + try: + sampled_valid_classes = np.random.choice(np.array(remain_classes), self.n_way, replace=False) + except: + raise NotImplementedError('Error! The number remaining classes is less than %d_way' %self.n_way) + + valid_support_ptclouds, valid_support_masks, valid_query_ptclouds, \ + valid_query_labels = self.generate_one_episode(sampled_valid_classes) + + return support_ptclouds.astype(np.float32), \ + support_masks.astype(np.int32), \ + query_ptclouds.astype(np.float32), \ + query_labels.astype(np.int64), \ + valid_support_ptclouds.astype(np.float32), \ + valid_support_masks.astype(np.int32), \ + valid_query_ptclouds.astype(np.float32), \ + valid_query_labels.astype(np.int64) + else: + return support_ptclouds.astype(np.float32), \ + support_masks.astype(np.int32), \ + query_ptclouds.astype(np.float32), \ + query_labels.astype(np.int64), \ + sampled_classes.astype(np.int32) + + + def generate_one_episode(self, sampled_classes): + support_ptclouds = [] + support_masks = [] + query_ptclouds = [] + query_labels = [] + + black_list = [] # to store the sampled scan names, in order to prevent sampling one scan several times... + for sampled_class in sampled_classes: + all_scannames = self.class2scans[sampled_class].copy() + if len(black_list) != 0: + all_scannames = [x for x in all_scannames if x not in black_list] + selected_scannames = np.random.choice(all_scannames, self.k_shot+self.n_queries, replace=False) + black_list.extend(selected_scannames) + query_scannames = selected_scannames[:self.n_queries] + support_scannames = selected_scannames[self.n_queries:] + + query_ptclouds_one_way, query_labels_one_way = sample_K_pointclouds(self.data_path, self.num_point, + self.pc_attribs, self.pc_augm, + self.pc_augm_config, + query_scannames, + sampled_class, + sampled_classes, + is_support=False) + + support_ptclouds_one_way, support_masks_one_way = sample_K_pointclouds(self.data_path, self.num_point, + self.pc_attribs, self.pc_augm, + self.pc_augm_config, + support_scannames, + sampled_class, + sampled_classes, + is_support=True) + + query_ptclouds.append(query_ptclouds_one_way) + query_labels.append(query_labels_one_way) + support_ptclouds.append(support_ptclouds_one_way) + support_masks.append(support_masks_one_way) + + support_ptclouds = np.stack(support_ptclouds, axis=0) + support_masks = np.stack(support_masks, axis=0) + query_ptclouds = np.concatenate(query_ptclouds, axis=0) + query_labels = np.concatenate(query_labels, axis=0) + + return support_ptclouds, support_masks, query_ptclouds, query_labels + + +def batch_train_task_collate(batch): + task_train_support_ptclouds, task_train_support_masks, task_train_query_ptclouds, task_train_query_labels, \ + task_valid_support_ptclouds, task_valid_support_masks, task_valid_query_ptclouds, task_valid_query_labels = list(zip(*batch)) + + task_train_support_ptclouds = np.stack(task_train_support_ptclouds) + task_train_support_masks = np.stack(task_train_support_masks) + task_train_query_ptclouds = np.stack(task_train_query_ptclouds) + task_train_query_labels = np.stack(task_train_query_labels) + task_valid_support_ptclouds = np.stack(task_valid_support_ptclouds) + task_valid_support_masks = np.stack(task_valid_support_masks) + task_valid_query_ptclouds = np.array(task_valid_query_ptclouds) + task_valid_query_labels = np.stack(task_valid_query_labels) + + data = [torch.from_numpy(task_train_support_ptclouds).transpose(3,4), torch.from_numpy(task_train_support_masks), + torch.from_numpy(task_train_query_ptclouds).transpose(2,3), torch.from_numpy(task_train_query_labels), + torch.from_numpy(task_valid_support_ptclouds).transpose(3,4), torch.from_numpy(task_valid_support_masks), + torch.from_numpy(task_valid_query_ptclouds).transpose(2,3), torch.from_numpy(task_valid_query_labels)] + + return data + + +################################################ Static Testing Dataset ################################################ + +class MyTestDataset(Dataset): + def __init__(self, data_path, dataset_name, cvfold=0, num_episode_per_comb=100, n_way=3, k_shot=5, n_queries=1, + num_point=4096, pc_attribs='xyz', mode='valid'): + super(MyTestDataset).__init__() + + dataset = MyDataset(data_path, dataset_name, cvfold=cvfold, n_way=n_way, k_shot=k_shot, n_queries=n_queries, + mode='test', num_point=num_point, pc_attribs=pc_attribs, pc_augm=False) + self.classes = dataset.classes + + if mode == 'valid': + test_data_path = os.path.join(data_path, 'S_%d_N_%d_K_%d_episodes_%d_pts_%d' % ( + cvfold, n_way, k_shot, num_episode_per_comb, num_point)) + elif mode == 'test': + test_data_path = os.path.join(data_path, 'S_%d_N_%d_K_%d_test_episodes_%d_pts_%d' % ( + cvfold, n_way, k_shot, num_episode_per_comb, num_point)) + else: + raise NotImplementedError('Mode (%s) is unknown!' %mode) + + if os.path.exists(test_data_path): + self.file_names = glob.glob(os.path.join(test_data_path, '*.h5')) + self.num_episode = len(self.file_names) + else: + print('Test dataset (%s) does not exist...\n Constructing...' %test_data_path) + os.mkdir(test_data_path) + + class_comb = list(combinations(self.classes, n_way)) # [(),(),(),...] + self.num_episode = len(class_comb) * num_episode_per_comb + + episode_ind = 0 + self.file_names = [] + for sampled_classes in class_comb: + sampled_classes = list(sampled_classes) + for i in range(num_episode_per_comb): + data = dataset.__getitem__(episode_ind, sampled_classes) + out_filename = os.path.join(test_data_path, '%d.h5' % episode_ind) + write_episode(out_filename, data) + self.file_names.append(out_filename) + episode_ind += 1 + + def __len__(self): + return self.num_episode + + def __getitem__(self, index): + file_name = self.file_names[index] + return read_episode(file_name) + + +def batch_test_task_collate(batch): + batch_support_ptclouds, batch_support_masks, batch_query_ptclouds, batch_query_labels, batch_sampled_classes = batch[0] + + data = [torch.from_numpy(batch_support_ptclouds).transpose(2,3), torch.from_numpy(batch_support_masks), + torch.from_numpy(batch_query_ptclouds).transpose(1,2), torch.from_numpy(batch_query_labels.astype(np.int64))] + + return data, batch_sampled_classes + + +def write_episode(out_filename, data): + support_ptclouds, support_masks, query_ptclouds, query_labels, sampled_classes = data + data_file = h5.File(out_filename, 'w') + data_file.create_dataset('support_ptclouds', data=support_ptclouds, dtype='float32') + data_file.create_dataset('support_masks', data=support_masks, dtype='int32') + data_file.create_dataset('query_ptclouds', data=query_ptclouds, dtype='float32') + data_file.create_dataset('query_labels', data=query_labels, dtype='int64') + data_file.create_dataset('sampled_classes', data=sampled_classes, dtype='int32') + data_file.close() + + print('\t {0} saved! | classes: {1}'.format(out_filename, sampled_classes)) + + +def read_episode(file_name): + data_file = h5.File(file_name, 'r') + support_ptclouds = data_file['support_ptclouds'][:] + support_masks = data_file['support_masks'][:] + query_ptclouds = data_file['query_ptclouds'][:] + query_labels = data_file['query_labels'][:] + sampled_classes = data_file['sampled_classes'][:] + + return support_ptclouds, support_masks, query_ptclouds, query_labels, sampled_classes + + + +################################################ Pre-train Dataset ################################################ +class MyPretrainDataset(Dataset): + def __init__(self, data_path, classes, class2scans, mode='train', num_point=4096, pc_attribs='xyz', + pc_augm=False, pc_augm_config=None): + super(MyPretrainDataset).__init__() + self.data_path = data_path + self.classes = classes + self.num_point = num_point + self.pc_attribs = pc_attribs + self.pc_augm = pc_augm + self.pc_augm_config = pc_augm_config + + train_block_names = [] + all_block_names = [] + for k, v in sorted(class2scans.items()): + all_block_names.extend(v) + n_blocks = len(v) + n_test_blocks = int(n_blocks * 0.1) + n_train_blocks = n_blocks - n_test_blocks + train_block_names.extend(v[:n_train_blocks]) + + if mode == 'train': + self.block_names = list(set(train_block_names)) + elif mode == 'test': + self.block_names = list(set(all_block_names) - set(train_block_names)) + else: + raise NotImplementedError('Mode is unknown!') + + print('[Pretrain Dataset] Mode: {0} | Num_blocks: {1}'.format(mode, len(self.block_names))) + + def __len__(self): + return len(self.block_names) + + def __getitem__(self, index): + block_name = self.block_names[index] + + ptcloud, label = sample_pointcloud(self.data_path, self.num_point, self.pc_attribs, self.pc_augm, + self.pc_augm_config, block_name, self.classes, random_sample=True) + + return torch.from_numpy(ptcloud.transpose().astype(np.float32)), torch.from_numpy(label.astype(np.int64)) \ No newline at end of file diff --git a/data/source_files/clean/3fccec626716.py b/data/source_files/clean/3fccec626716.py new file mode 100644 index 0000000000000000000000000000000000000000..86db8d66e4f0f969e4dab6cb93ed65e00e44883f --- /dev/null +++ b/data/source_files/clean/3fccec626716.py @@ -0,0 +1,105 @@ +import pytest + +from datar import stats +from datar.base import * +from datar import f +from datar.datasets import warpbreaks, state_division, state_region, airquality + +from .conftest import assert_iterable_equal + +def test_table(): + # https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/table + z = stats.rpois(100, 5) + x = table(z) + assert sum(x.values.flatten()) == 100 + + #----------------- + with data_context(warpbreaks) as _: + tab = table(f.wool, f.tension) + + assert tab.columns.tolist() == ['H', 'L', 'M'] + assert tab.index.tolist() == ['A', 'B'] + assert_iterable_equal(tab.values.flatten(), [9] * 6) + + tab = table(warpbreaks.loc[:, ['wool', 'tension']]) + assert tab.columns.tolist() == ['H', 'L', 'M'] + assert tab.index.tolist() == ['A', 'B'] + assert_iterable_equal(tab.values.flatten(), [9] * 6) + + #----------------- + tab = table(state_division, state_region) + assert tab.loc['New England', 'Northeast'] == 6 + + #----------------- + with data_context(airquality) as _: + qt = stats.quantile(f.Temp) + ct = cut(f.Temp, qt) + tab = table(ct, f.Month) + + assert tab.iloc[0,0] == 24 + + #----------------- + a = letters[:3] + tab = table(a, sample(a)) + assert sum(tab.values.flatten()) == 3 + + #----------------- + tab = table(a, sample(a), dnn=['x', 'y']) + assert tab.index.name == 'x' + assert tab.columns.name == 'y' + + #----------------- + a = c(NA, Inf, (1.0/(i+1) for i in range(3))) + a = a * 10 + # tab = table(a) + # assert_iterable_equal(tab.values.flatten(), [10] * 4) + + tab = table(a, exclude=None) + assert_iterable_equal(tab.values.flatten(), [10] * 5) + + #------------------ + b = as_factor(rep(c("A","B","C"), 10)) + tab = table(b) + assert tab.shape == (1, 3) + assert_iterable_equal(tab.values.flatten(), [10] * 3) + + tab = table(b, exclude="B") + assert tab.shape == (1, 2) + assert_iterable_equal(tab.values.flatten(), [10] * 2) + assert 'B' not in tab.columns + + #------------------- + d = factor(rep(c("A","B","C"), 10), levels=c("A","B","C","D","E")) + tab = table(d, exclude="B", dnn=['x']) + assert_iterable_equal(tab.columns.to_list(), ["A", "C", "D", "E"]) + assert_iterable_equal(tab.values.flatten(), [10, 10, 0, 0]) + + d2 = factor(rep(c("A","B","C"), 10), levels=c("A","B","C","D","E")) + tab = table(d, d2, exclude="B") + assert tab.shape == (4, 4) + + tab = table("abc", "cba", dnn='x') + assert tab.shape == (3,3) + assert sum(tab.values.flatten()) == 3 + + with data_context(airquality) as _: + tab = table(f.Ozone, f.Solar_R, exclude=None) + assert '' in tab.columns + assert '' in tab.index + +def test_table_error(): + from datar.datasets import iris, warpbreaks + with pytest.raises(ValueError): + table(iris) + with pytest.raises(ValueError): + table(warpbreaks, iris) + with pytest.raises(ValueError): + table(warpbreaks.wool, iris) + with pytest.raises(ValueError): + table(iris.iloc[:, []]) + with pytest.raises(ValueError): + table(iris.iloc[:, [1,2]], iris) + with pytest.raises(ValueError): + table(iris.iloc[:, [1]], iris, iris) + with pytest.raises(ValueError): + table(iris.iloc[:, [1]], iris.iloc[:, []]) diff --git a/data/source_files/clean/42ffce808c3b.py b/data/source_files/clean/42ffce808c3b.py new file mode 100644 index 0000000000000000000000000000000000000000..8a4336dbd5d1cefd9e382961486ab2a2e96b55c6 --- /dev/null +++ b/data/source_files/clean/42ffce808c3b.py @@ -0,0 +1,78 @@ +# Copyright 2020 - 2021 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import torch +import torch.nn as nn +from parameterized import parameterized + +from monai.networks import eval_mode +from monai.networks.blocks import SubpixelUpsample +from monai.networks.layers.factories import Conv + +TEST_CASE_SUBPIXEL = [] +for inch in range(1, 5): + for dim in range(1, 4): + for factor in range(1, 3): + test_case = [ + {"dimensions": dim, "in_channels": inch, "scale_factor": factor}, + (2, inch, *([8] * dim)), + (2, inch, *([8 * factor] * dim)), + ] + TEST_CASE_SUBPIXEL.append(test_case) + +TEST_CASE_SUBPIXEL_2D_EXTRA = [ + {"dimensions": 2, "in_channels": 2, "scale_factor": 3}, + (2, 2, 8, 4), # different size for H and W + (2, 2, 24, 12), +] + +TEST_CASE_SUBPIXEL_3D_EXTRA = [ + {"dimensions": 3, "in_channels": 1, "scale_factor": 2}, + (2, 1, 16, 8, 4), # different size for H, W and D + (2, 1, 32, 16, 8), +] + +conv_block = nn.Sequential( + Conv[Conv.CONV, 3](1, 4, kernel_size=1), Conv[Conv.CONV, 3](4, 8, kernel_size=3, stride=1, padding=1) +) + +TEST_CASE_SUBPIXEL_CONV_BLOCK_EXTRA = [ + {"dimensions": 3, "in_channels": 1, "scale_factor": 2, "conv_block": conv_block}, + (2, 1, 16, 8, 4), # different size for H, W and D + (2, 1, 32, 16, 8), +] + +TEST_CASE_SUBPIXEL.append(TEST_CASE_SUBPIXEL_2D_EXTRA) +TEST_CASE_SUBPIXEL.append(TEST_CASE_SUBPIXEL_3D_EXTRA) +TEST_CASE_SUBPIXEL.append(TEST_CASE_SUBPIXEL_CONV_BLOCK_EXTRA) + + +# add every test back with the pad/pool sequential component omitted +for tests in list(TEST_CASE_SUBPIXEL): + args: dict = tests[0] # type: ignore + args = dict(args) + args["apply_pad_pool"] = False + TEST_CASE_SUBPIXEL.append([args, tests[1], tests[2]]) + + +class TestSUBPIXEL(unittest.TestCase): + @parameterized.expand(TEST_CASE_SUBPIXEL) + def test_subpixel_shape(self, input_param, input_shape, expected_shape): + net = SubpixelUpsample(**input_param) + with eval_mode(net): + result = net.forward(torch.randn(input_shape)) + self.assertEqual(result.shape, expected_shape) + + +if __name__ == "__main__": + unittest.main() diff --git a/data/source_files/clean/439bd748ba75.py b/data/source_files/clean/439bd748ba75.py new file mode 100644 index 0000000000000000000000000000000000000000..8a47b1a4041d7e6d082433e91d3935c95f8c494b --- /dev/null +++ b/data/source_files/clean/439bd748ba75.py @@ -0,0 +1,340 @@ +# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Copyright 2018-2019, Mingkun Huang +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import numpy as np +import torch +from torch.autograd import Function, Variable +from torch.nn import Module + + +def check_type(var, t, name): + if var.dtype is not t: + raise TypeError("{} must be {}".format(name, t)) + + +def check_contiguous(var, name): + if not var.is_contiguous(): + raise ValueError("{} must be contiguous".format(name)) + + +def check_dim(var, dim, name): + if len(var.shape) != dim: + raise ValueError("{} must be {}D".format(name, dim)) + + +def certify_inputs(log_probs, labels, lengths, label_lengths): + # check_type(log_probs, torch.float32, "log_probs") + check_type(labels, torch.int32, "labels") + check_type(label_lengths, torch.int32, "label_lengths") + check_type(lengths, torch.int32, "lengths") + check_contiguous(log_probs, "log_probs") + check_contiguous(labels, "labels") + check_contiguous(label_lengths, "label_lengths") + check_contiguous(lengths, "lengths") + + if lengths.shape[0] != log_probs.shape[0]: + raise ValueError( + f"Must have a length per example. " + f"Given lengths dim: {lengths.shape[0]}, " + f"Log probs dim : {log_probs.shape[0]}" + ) + if label_lengths.shape[0] != log_probs.shape[0]: + raise ValueError( + "Must have a label length per example. " + f"Given label lengths dim : {label_lengths.shape[0]}, " + f"Log probs dim : {log_probs.shape[0]}" + ) + + check_dim(log_probs, 4, "log_probs") + check_dim(labels, 2, "labels") + check_dim(lengths, 1, "lenghts") + check_dim(label_lengths, 1, "label_lenghts") + max_T = torch.max(lengths) + max_U = torch.max(label_lengths) + T, U = log_probs.shape[1:3] + if T != max_T: + raise ValueError(f"Input length mismatch! Given T: {T}, Expected max T from input lengths: {max_T}") + if U != max_U + 1: + raise ValueError(f"Output length mismatch! Given U: {U}, Expected max U from target lengths: {max_U} + 1") + + +def _assert_no_grad(tensor): + assert not tensor.requires_grad, ( + "gradients only computed for log_probs - please " "mark other tensors as not requiring gradients" + ) + + +def forward_pass(log_probs, labels, blank): + """ + Computes probability of the forward variable alpha. + + Args: + log_probs: Tensor of shape [T, U, V+1] + labels: Labels of shape [B, U] + blank: Index of the blank token. + + Returns: + A tuple of the forward variable probabilities - alpha of shape [T, U] + and the log likelihood of this forward step. + """ + T, U, _ = log_probs.shape + alphas = np.zeros((T, U), dtype='f') + + for t in range(1, T): + alphas[t, 0] = alphas[t - 1, 0] + log_probs[t - 1, 0, blank] + + for u in range(1, U): + alphas[0, u] = alphas[0, u - 1] + log_probs[0, u - 1, labels[u - 1]] + for t in range(1, T): + for u in range(1, U): + no_emit = alphas[t - 1, u] + log_probs[t - 1, u, blank] + emit = alphas[t, u - 1] + log_probs[t, u - 1, labels[u - 1]] + alphas[t, u] = np.logaddexp(emit, no_emit) + + loglike = alphas[T - 1, U - 1] + log_probs[T - 1, U - 1, blank] + return alphas, loglike + + +def backward_pass(log_probs, labels, blank): + """ + Computes probability of the backward variable beta. + + Args: + log_probs: Tensor of shape [T, U, V+1] + labels: Labels of shape [B, U] + blank: Index of the blank token. + + Returns: + A tuple of the backward variable probabilities - beta of shape [T, U] + and the log likelihood of this backward step. + """ + T, U, _ = log_probs.shape + betas = np.zeros((T, U), dtype='f') + betas[T - 1, U - 1] = log_probs[T - 1, U - 1, blank] + + for t in reversed(range(T - 1)): + betas[t, U - 1] = betas[t + 1, U - 1] + log_probs[t, U - 1, blank] + + for u in reversed(range(U - 1)): + betas[T - 1, u] = betas[T - 1, u + 1] + log_probs[T - 1, u, labels[u]] + + for t in reversed(range(T - 1)): + for u in reversed(range(U - 1)): + no_emit = betas[t + 1, u] + log_probs[t, u, blank] + emit = betas[t, u + 1] + log_probs[t, u, labels[u]] + betas[t, u] = np.logaddexp(emit, no_emit) + + return betas, betas[0, 0] + + +def compute_gradient(log_probs, alphas, betas, labels, blank, fastemit_lambda): + """ + Computes the gradients of the log_probs with respect to the log probability of this step occuring. + + Args: + Args: + log_probs: Tensor of shape [T, U, V+1] + alphas: Tensor of shape [T, U] which represents the forward variable. + betas: Tensor of shape [T, U] which represents the backward variable. + labels: Labels of shape [B, U] + blank: Index of the blank token. + + Returns: + Gradients of shape [T, U, V+1] with respect to the forward log probability + """ + T, U, _ = log_probs.shape + grads = np.full(log_probs.shape, -float("inf")) + log_like = betas[0, 0] # == alphas[T - 1, U - 1] + betas[T - 1, U - 1] + + # // grad to last blank transition + grads[T - 1, U - 1, blank] = alphas[T - 1, U - 1] + grads[: T - 1, :, blank] = alphas[: T - 1, :] + betas[1:, :] + + # // grad to label transition + for u, l in enumerate(labels): + grads[:, u, l] = alphas[:, u] + betas[:, u + 1] + + grads = -np.exp(grads + log_probs - log_like) + + if fastemit_lambda > 0.0: + for u, l in enumerate(labels): + grads[:, u, l] = (1.0 + fastemit_lambda) * grads[:, u, l] + + return grads + + +def fastemit_regularization(log_probs, labels, alphas, betas, blank, fastemit_lambda): + """ + Describes the computation of FastEmit regularization from the paper - + [FastEmit: Low-latency Streaming ASR with Sequence-level Emission Regularization](https://arxiv.org/abs/2010.11148) + + Args: + log_probs: Tensor of shape [T, U, V+1] + labels: Unused. Labels of shape [B, U] + alphas: Tensor of shape [T, U] which represents the forward variable. + betas: Unused. Tensor of shape [T, U] which represents the backward variable. + blank: Index of the blank token. + fastemit_lambda: Float scaling factor for FastEmit regularization. + + Returns: + The regularized negative log likelihood - lambda * P˜(At, u|x) + """ + # General calculation of the fastemit regularization alignments + T, U, _ = log_probs.shape + # alignment = np.zeros((T, U), dtype='float32') + # + # for t in range(0, T): + # alignment[t, U - 1] = alphas[t, U - 1] + betas[t, U - 1] + # + # for t in range(0, T): + # for u in range(0, U - 1): + # emit = alphas[t, u] + log_probs[t, u, labels[u]] + betas[t, u + 1] + # alignment[t, u] = emit + # reg = fastemit_lambda * (alignment[T - 1, U - 1]) + + # The above is equivalent to below, without need of computing above + # reg = fastemit_lambda * (alphas[T - 1, U - 1] + betas[T - 1, U - 1]) + + # The above is also equivalent to below, without need of computing the betas alignment matrix + reg = fastemit_lambda * (alphas[T - 1, U - 1] + log_probs[T - 1, U - 1, blank]) + return -reg + + +def transduce(log_probs, labels, blank=0, fastemit_lambda=0.0): + """ + Args: + log_probs: 3D array with shape + [input len, output len + 1, vocab size] + labels: 1D array with shape [output time steps] + blank: Index of the blank token. + fastemit_lambda: Float scaling factor for FastEmit regularization. + + Returns: + float: The negative log-likelihood + 3D array: Gradients with respect to the + unnormalized input actications + 2d arrays: Alphas matrix (TxU) + 2d array: Betas matrix (TxU) + """ + alphas, ll_forward = forward_pass(log_probs, labels, blank) + betas, ll_backward = backward_pass(log_probs, labels, blank) + grads = compute_gradient(log_probs, alphas, betas, labels, blank, fastemit_lambda) + return -ll_forward, grads, alphas, betas + + +def transduce_batch(log_probs, labels, flen, glen, blank=0, fastemit_lambda=0.0): + """ + Compute the transducer loss of the batch. + + Args: + log_probs: [B, T, U, V+1]. Activation matrix normalized with log-softmax. + labels: [B, U+1] - ground truth labels with padded as blank token in the beginning. + flen: Length vector of the acoustic sequence. + glen: Length vector of the target sequence. + blank: Id of the blank token. + fastemit_lambda: Float scaling factor for FastEmit regularization. + + Returns: + Batch of transducer forward log probabilities (loss) and the gradients of the activation matrix. + """ + grads = np.zeros_like(log_probs) + costs = [] + for b in range(log_probs.shape[0]): + t = int(flen[b]) + u = int(glen[b]) + 1 + + ll, g, alphas, betas = transduce(log_probs[b, :t, :u, :], labels[b, : u - 1], blank, fastemit_lambda) + grads[b, :t, :u, :] = g + + reg = fastemit_regularization( + log_probs[b, :t, :u, :], labels[b, : u - 1], alphas, betas, blank, fastemit_lambda + ) + ll += reg + costs.append(ll) + return costs, grads + + +class _RNNT(Function): + @staticmethod + def forward(ctx, acts, labels, act_lens, label_lens, blank, fastemit_lambda): + costs, grads = transduce_batch( + acts.detach().cpu().numpy(), + labels.cpu().numpy(), + act_lens.cpu().numpy(), + label_lens.cpu().numpy(), + blank, + fastemit_lambda, + ) + + costs = torch.FloatTensor([sum(costs)]) + grads = torch.Tensor(grads).to(acts) + + ctx.grads = grads + return costs + + @staticmethod + def backward(ctx, grad_output): + return ctx.grads, None, None, None, None, None + + +class RNNTLoss(Module): + """ + Parameters: + `blank_label` (int): default 0 - label index of blank token + fastemit_lambda: Float scaling factor for FastEmit regularization. + """ + + def __init__(self, blank: int = 0, fastemit_lambda: float = 0.0): + super(RNNTLoss, self).__init__() + self.blank = blank + self.fastemit_lambda = fastemit_lambda + self.rnnt = _RNNT.apply + + def forward(self, acts, labels, act_lens, label_lens): + assert len(labels.size()) == 2 + _assert_no_grad(labels) + _assert_no_grad(act_lens) + _assert_no_grad(label_lens) + certify_inputs(acts, labels, act_lens, label_lens) + + acts = torch.nn.functional.log_softmax(acts, -1) + return self.rnnt(acts, labels, act_lens, label_lens, self.blank, self.fastemit_lambda) + + +if __name__ == '__main__': + loss = RNNTLoss(fastemit_lambda=0.01) + + torch.manual_seed(0) + + acts = torch.randn(1, 2, 5, 3) + labels = torch.tensor([[0, 2, 1, 2]], dtype=torch.int32) + act_lens = torch.tensor([2], dtype=torch.int32) + label_lens = torch.tensor([len(labels[0])], dtype=torch.int32) + + loss_val = loss(acts, labels, act_lens, label_lens) diff --git a/data/source_files/clean/4600f935ed1d.py b/data/source_files/clean/4600f935ed1d.py new file mode 100644 index 0000000000000000000000000000000000000000..0aee1a078e80effb05eed8b8321db099a4b35623 --- /dev/null +++ b/data/source_files/clean/4600f935ed1d.py @@ -0,0 +1,59 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import pytest + +import nacl.secret +import nacl.utils + + +def test_random_bytes_produces(): + assert len(nacl.utils.random(16)) == 16 + + +def test_random_bytes_produces_different_bytes(): + assert nacl.utils.random(16) != nacl.utils.random(16) + + +def test_string_fixer(): + assert str(nacl.secret.SecretBox(b"\x00" * 32)) == str(b"\x00" * 32) + + +def test_deterministic_random_bytes(): + expected = ( + b"0d8e6cc68715648926732e7ea73250cfaf2d58422083904c841a8ba" + b"33b986111f346ba50723a68ae283524a6bded09f83be6b80595856f" + b"72e25b86918e8b114bafb94bc8abedd73daab454576b7c5833eb0bf" + b"982a1bb4587a5c970ff0810ca3b791d7e12" + ) + seed = ( + b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d" + b"\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b" + b"\x1c\x1d\x1e\x1f" + ) + assert ( + nacl.utils.randombytes_deterministic( + 100, seed, encoder=nacl.utils.encoding.HexEncoder + ) + == expected + ) + + +def test_deterministic_random_bytes_invalid_seed_length(): + expected = "Deterministic random bytes must be generated from 32 bytes" + seed = b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" + with pytest.raises(TypeError) as e: + nacl.utils.randombytes_deterministic(100, seed) + assert expected in str(e.value) diff --git a/data/source_files/clean/46e001660b82.py b/data/source_files/clean/46e001660b82.py new file mode 100644 index 0000000000000000000000000000000000000000..d9ed79fef6ca74a4e312f154a876ffa2123179f7 --- /dev/null +++ b/data/source_files/clean/46e001660b82.py @@ -0,0 +1,360 @@ +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""Contains the definition of the Inception Resnet V2 architecture. + +As described in http://arxiv.org/abs/1602.07261. + + Inception-v4, Inception-ResNet and the Impact of Residual Connections + on Learning + Christian Szegedy, Sergey Ioffe, Vincent Vanhoucke, Alex Alemi +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + + +import tensorflow as tf + +slim = tf.contrib.slim + + +def block35(net, scale=1.0, activation_fn=tf.nn.relu, scope=None, reuse=None): + """Builds the 35x35 resnet block.""" + with tf.variable_scope(scope, 'Block35', [net], reuse=reuse): + with tf.variable_scope('Branch_0'): + tower_conv = slim.conv2d(net, 32, 1, scope='Conv2d_1x1') + with tf.variable_scope('Branch_1'): + tower_conv1_0 = slim.conv2d(net, 32, 1, scope='Conv2d_0a_1x1') + tower_conv1_1 = slim.conv2d(tower_conv1_0, 32, 3, scope='Conv2d_0b_3x3') + with tf.variable_scope('Branch_2'): + tower_conv2_0 = slim.conv2d(net, 32, 1, scope='Conv2d_0a_1x1') + tower_conv2_1 = slim.conv2d(tower_conv2_0, 48, 3, scope='Conv2d_0b_3x3') + tower_conv2_2 = slim.conv2d(tower_conv2_1, 64, 3, scope='Conv2d_0c_3x3') + mixed = tf.concat(axis=3, values=[tower_conv, tower_conv1_1, tower_conv2_2]) + up = slim.conv2d(mixed, net.get_shape()[3], 1, normalizer_fn=None, + activation_fn=None, scope='Conv2d_1x1') + net += scale * up + if activation_fn: + net = activation_fn(net) + return net + + +def block17(net, scale=1.0, activation_fn=tf.nn.relu, scope=None, reuse=None): + """Builds the 17x17 resnet block.""" + with tf.variable_scope(scope, 'Block17', [net], reuse=reuse): + with tf.variable_scope('Branch_0'): + tower_conv = slim.conv2d(net, 192, 1, scope='Conv2d_1x1') + with tf.variable_scope('Branch_1'): + tower_conv1_0 = slim.conv2d(net, 128, 1, scope='Conv2d_0a_1x1') + tower_conv1_1 = slim.conv2d(tower_conv1_0, 160, [1, 7], + scope='Conv2d_0b_1x7') + tower_conv1_2 = slim.conv2d(tower_conv1_1, 192, [7, 1], + scope='Conv2d_0c_7x1') + mixed = tf.concat(axis=3, values=[tower_conv, tower_conv1_2]) + up = slim.conv2d(mixed, net.get_shape()[3], 1, normalizer_fn=None, + activation_fn=None, scope='Conv2d_1x1') + net += scale * up + if activation_fn: + net = activation_fn(net) + return net + + +def block8(net, scale=1.0, activation_fn=tf.nn.relu, scope=None, reuse=None): + """Builds the 8x8 resnet block.""" + with tf.variable_scope(scope, 'Block8', [net], reuse=reuse): + with tf.variable_scope('Branch_0'): + tower_conv = slim.conv2d(net, 192, 1, scope='Conv2d_1x1') + with tf.variable_scope('Branch_1'): + tower_conv1_0 = slim.conv2d(net, 192, 1, scope='Conv2d_0a_1x1') + tower_conv1_1 = slim.conv2d(tower_conv1_0, 224, [1, 3], + scope='Conv2d_0b_1x3') + tower_conv1_2 = slim.conv2d(tower_conv1_1, 256, [3, 1], + scope='Conv2d_0c_3x1') + mixed = tf.concat(axis=3, values=[tower_conv, tower_conv1_2]) + up = slim.conv2d(mixed, net.get_shape()[3], 1, normalizer_fn=None, + activation_fn=None, scope='Conv2d_1x1') + net += scale * up + if activation_fn: + net = activation_fn(net) + return net + + +def inception_resnet_v2_base(inputs, + final_endpoint='Conv2d_7b_1x1', + output_stride=16, + align_feature_maps=False, + scope=None): + """Inception model from http://arxiv.org/abs/1602.07261. + + Constructs an Inception Resnet v2 network from inputs to the given final + endpoint. This method can construct the network up to the final inception + block Conv2d_7b_1x1. + + Args: + inputs: a tensor of size [batch_size, height, width, channels]. + final_endpoint: specifies the endpoint to construct the network up to. It + can be one of ['Conv2d_1a_3x3', 'Conv2d_2a_3x3', 'Conv2d_2b_3x3', + 'MaxPool_3a_3x3', 'Conv2d_3b_1x1', 'Conv2d_4a_3x3', 'MaxPool_5a_3x3', + 'Mixed_5b', 'Mixed_6a', 'PreAuxLogits', 'Mixed_7a', 'Conv2d_7b_1x1'] + output_stride: A scalar that specifies the requested ratio of input to + output spatial resolution. Only supports 8 and 16. + align_feature_maps: When true, changes all the VALID paddings in the network + to SAME padding so that the feature maps are aligned. + scope: Optional variable_scope. + + Returns: + tensor_out: output tensor corresponding to the final_endpoint. + end_points: a set of activations for external use, for example summaries or + losses. + + Raises: + ValueError: if final_endpoint is not set to one of the predefined values, + or if the output_stride is not 8 or 16, or if the output_stride is 8 and + we request an end point after 'PreAuxLogits'. + """ + if output_stride != 8 and output_stride != 16: + raise ValueError('output_stride must be 8 or 16.') + + padding = 'SAME' if align_feature_maps else 'VALID' + + end_points = {} + + def add_and_check_final(name, net): + end_points[name] = net + return name == final_endpoint + + with tf.variable_scope(scope, 'InceptionResnetV2', [inputs]): + with slim.arg_scope([slim.conv2d, slim.max_pool2d, slim.avg_pool2d], + stride=1, padding='SAME'): + # 149 x 149 x 32 + net = slim.conv2d(inputs, 32, 3, stride=2, padding=padding, + scope='Conv2d_1a_3x3') + if add_and_check_final('Conv2d_1a_3x3', net): return net, end_points + + # 147 x 147 x 32 + net = slim.conv2d(net, 32, 3, padding=padding, + scope='Conv2d_2a_3x3') + if add_and_check_final('Conv2d_2a_3x3', net): return net, end_points + # 147 x 147 x 64 + net = slim.conv2d(net, 64, 3, scope='Conv2d_2b_3x3') + if add_and_check_final('Conv2d_2b_3x3', net): return net, end_points + # 73 x 73 x 64 + net = slim.max_pool2d(net, 3, stride=2, padding=padding, + scope='MaxPool_3a_3x3') + if add_and_check_final('MaxPool_3a_3x3', net): return net, end_points + # 73 x 73 x 80 + net = slim.conv2d(net, 80, 1, padding=padding, + scope='Conv2d_3b_1x1') + if add_and_check_final('Conv2d_3b_1x1', net): return net, end_points + # 71 x 71 x 192 + net = slim.conv2d(net, 192, 3, padding=padding, + scope='Conv2d_4a_3x3') + if add_and_check_final('Conv2d_4a_3x3', net): return net, end_points + # 35 x 35 x 192 + net = slim.max_pool2d(net, 3, stride=2, padding=padding, + scope='MaxPool_5a_3x3') + if add_and_check_final('MaxPool_5a_3x3', net): return net, end_points + + # 35 x 35 x 320 + with tf.variable_scope('Mixed_5b'): + with tf.variable_scope('Branch_0'): + tower_conv = slim.conv2d(net, 96, 1, scope='Conv2d_1x1') + with tf.variable_scope('Branch_1'): + tower_conv1_0 = slim.conv2d(net, 48, 1, scope='Conv2d_0a_1x1') + tower_conv1_1 = slim.conv2d(tower_conv1_0, 64, 5, + scope='Conv2d_0b_5x5') + with tf.variable_scope('Branch_2'): + tower_conv2_0 = slim.conv2d(net, 64, 1, scope='Conv2d_0a_1x1') + tower_conv2_1 = slim.conv2d(tower_conv2_0, 96, 3, + scope='Conv2d_0b_3x3') + tower_conv2_2 = slim.conv2d(tower_conv2_1, 96, 3, + scope='Conv2d_0c_3x3') + with tf.variable_scope('Branch_3'): + tower_pool = slim.avg_pool2d(net, 3, stride=1, padding='SAME', + scope='AvgPool_0a_3x3') + tower_pool_1 = slim.conv2d(tower_pool, 64, 1, + scope='Conv2d_0b_1x1') + net = tf.concat( + [tower_conv, tower_conv1_1, tower_conv2_2, tower_pool_1], 3) + + if add_and_check_final('Mixed_5b', net): return net, end_points + # TODO(alemi): Register intermediate endpoints + net = slim.repeat(net, 10, block35, scale=0.17) + + # 17 x 17 x 1088 if output_stride == 8, + # 33 x 33 x 1088 if output_stride == 16 + use_atrous = output_stride == 8 + + with tf.variable_scope('Mixed_6a'): + with tf.variable_scope('Branch_0'): + tower_conv = slim.conv2d(net, 384, 3, stride=1 if use_atrous else 2, + padding=padding, + scope='Conv2d_1a_3x3') + with tf.variable_scope('Branch_1'): + tower_conv1_0 = slim.conv2d(net, 256, 1, scope='Conv2d_0a_1x1') + tower_conv1_1 = slim.conv2d(tower_conv1_0, 256, 3, + scope='Conv2d_0b_3x3') + tower_conv1_2 = slim.conv2d(tower_conv1_1, 384, 3, + stride=1 if use_atrous else 2, + padding=padding, + scope='Conv2d_1a_3x3') + with tf.variable_scope('Branch_2'): + tower_pool = slim.max_pool2d(net, 3, stride=1 if use_atrous else 2, + padding=padding, + scope='MaxPool_1a_3x3') + net = tf.concat([tower_conv, tower_conv1_2, tower_pool], 3) + + if add_and_check_final('Mixed_6a', net): return net, end_points + + # TODO(alemi): register intermediate endpoints + with slim.arg_scope([slim.conv2d], rate=2 if use_atrous else 1): + net = slim.repeat(net, 20, block17, scale=0.10) + if add_and_check_final('PreAuxLogits', net): return net, end_points + + if output_stride == 8: + # TODO(gpapan): Properly support output_stride for the rest of the net. + raise ValueError('output_stride==8 is only supported up to the ' + 'PreAuxlogits end_point for now.') + + # 8 x 8 x 2080 + with tf.variable_scope('Mixed_7a'): + with tf.variable_scope('Branch_0'): + tower_conv = slim.conv2d(net, 256, 1, scope='Conv2d_0a_1x1') + tower_conv_1 = slim.conv2d(tower_conv, 384, 3, stride=2, + padding=padding, + scope='Conv2d_1a_3x3') + with tf.variable_scope('Branch_1'): + tower_conv1 = slim.conv2d(net, 256, 1, scope='Conv2d_0a_1x1') + tower_conv1_1 = slim.conv2d(tower_conv1, 288, 3, stride=2, + padding=padding, + scope='Conv2d_1a_3x3') + with tf.variable_scope('Branch_2'): + tower_conv2 = slim.conv2d(net, 256, 1, scope='Conv2d_0a_1x1') + tower_conv2_1 = slim.conv2d(tower_conv2, 288, 3, + scope='Conv2d_0b_3x3') + tower_conv2_2 = slim.conv2d(tower_conv2_1, 320, 3, stride=2, + padding=padding, + scope='Conv2d_1a_3x3') + with tf.variable_scope('Branch_3'): + tower_pool = slim.max_pool2d(net, 3, stride=2, + padding=padding, + scope='MaxPool_1a_3x3') + net = tf.concat( + [tower_conv_1, tower_conv1_1, tower_conv2_2, tower_pool], 3) + + if add_and_check_final('Mixed_7a', net): return net, end_points + + # TODO(alemi): register intermediate endpoints + net = slim.repeat(net, 9, block8, scale=0.20) + net = block8(net, activation_fn=None) + + # 8 x 8 x 1536 + net = slim.conv2d(net, 1536, 1, scope='Conv2d_7b_1x1') + if add_and_check_final('Conv2d_7b_1x1', net): return net, end_points + + raise ValueError('final_endpoint (%s) not recognized', final_endpoint) + + +def inception_resnet_v2(inputs, num_classes=1001, is_training=True, + dropout_keep_prob=0.8, + reuse=None, + scope='InceptionResnetV2', + create_aux_logits=True): + """Creates the Inception Resnet V2 model. + + Args: + inputs: a 4-D tensor of size [batch_size, height, width, 3]. + num_classes: number of predicted classes. + is_training: whether is training or not. + dropout_keep_prob: float, the fraction to keep before final layer. + reuse: whether or not the network and its variables should be reused. To be + able to reuse 'scope' must be given. + scope: Optional variable_scope. + create_aux_logits: Whether to include the auxilliary logits. + + Returns: + logits: the logits outputs of the model. + end_points: the set of end_points from the inception model. + """ + end_points = {} + + with tf.variable_scope(scope, 'InceptionResnetV2', [inputs, num_classes], + reuse=reuse) as scope: + with slim.arg_scope([slim.batch_norm, slim.dropout], + is_training=is_training): + + net, end_points = inception_resnet_v2_base(inputs, scope=scope) + + if create_aux_logits: + with tf.variable_scope('AuxLogits'): + aux = end_points['PreAuxLogits'] + aux = slim.avg_pool2d(aux, 5, stride=3, padding='VALID', + scope='Conv2d_1a_3x3') + aux = slim.conv2d(aux, 128, 1, scope='Conv2d_1b_1x1') + aux = slim.conv2d(aux, 768, aux.get_shape()[1:3], + padding='VALID', scope='Conv2d_2a_5x5') + aux = slim.flatten(aux) + aux = slim.fully_connected(aux, num_classes, activation_fn=None, + scope='Logits') + end_points['AuxLogits'] = aux + + with tf.variable_scope('Logits'): + net = slim.avg_pool2d(net, net.get_shape()[1:3], padding='VALID', + scope='AvgPool_1a_8x8') + net = slim.flatten(net) + + net = slim.dropout(net, dropout_keep_prob, is_training=is_training, + scope='Dropout') + + end_points['PreLogitsFlatten'] = net + logits = slim.fully_connected(net, num_classes, activation_fn=None, + scope='Logits') + end_points['Logits'] = logits + end_points['Predictions'] = tf.nn.softmax(logits, name='Predictions') + + return logits, end_points +inception_resnet_v2.default_image_size = 299 + + +def inception_resnet_v2_arg_scope(weight_decay=0.00004, + batch_norm_decay=0.9997, + batch_norm_epsilon=0.001, + trainable=True): + """Returns the scope with the default parameters for inception_resnet_v2. + + Args: + weight_decay: the weight decay for weights variables. + batch_norm_decay: decay for the moving average of batch_norm momentums. + batch_norm_epsilon: small float added to variance to avoid dividing by zero. + + Returns: + a arg_scope with the parameters needed for inception_resnet_v2. + """ + # Set weight_decay for weights in conv2d and fully_connected layers. + with slim.arg_scope([slim.conv2d, slim.fully_connected], + weights_regularizer=slim.l2_regularizer(weight_decay), + biases_regularizer=slim.l2_regularizer(weight_decay), + trainable=trainable): + + batch_norm_params = { + 'decay': batch_norm_decay, + 'epsilon': batch_norm_epsilon, + 'trainable': trainable + } + # Set activation_fn and parameters for batch_norm. + with slim.arg_scope([slim.conv2d], activation_fn=tf.nn.relu, + normalizer_fn=slim.batch_norm, + normalizer_params=batch_norm_params) as scope: + return scope diff --git a/data/source_files/clean/47f9cb7a7222.py b/data/source_files/clean/47f9cb7a7222.py new file mode 100644 index 0000000000000000000000000000000000000000..7c73ce1a389f347a8681ff6c30c8fe84612d252e --- /dev/null +++ b/data/source_files/clean/47f9cb7a7222.py @@ -0,0 +1,293 @@ +"""Provide common mysensors fixtures.""" +from __future__ import annotations + +from collections.abc import AsyncGenerator, Callable, Generator +import json +from typing import Any +from unittest.mock import AsyncMock, MagicMock, patch + +from mysensors import BaseSyncGateway +from mysensors.persistence import MySensorsJSONDecoder +from mysensors.sensor import Sensor +import pytest + +from homeassistant.components.device_tracker.legacy import Device +from homeassistant.components.mqtt import DOMAIN as MQTT_DOMAIN +from homeassistant.components.mysensors.config_flow import DEFAULT_BAUD_RATE +from homeassistant.components.mysensors.const import ( + CONF_BAUD_RATE, + CONF_DEVICE, + CONF_GATEWAY_TYPE, + CONF_GATEWAY_TYPE_SERIAL, + CONF_VERSION, + DOMAIN, +) +from homeassistant.core import HomeAssistant +from homeassistant.setup import async_setup_component + +from tests.common import MockConfigEntry, load_fixture + + +@pytest.fixture(autouse=True) +def device_tracker_storage(mock_device_tracker_conf: list[Device]) -> list[Device]: + """Mock out device tracker known devices storage.""" + devices = mock_device_tracker_conf + return devices + + +@pytest.fixture(name="mqtt") +def mock_mqtt_fixture(hass: HomeAssistant) -> None: + """Mock the MQTT integration.""" + hass.config.components.add(MQTT_DOMAIN) + + +@pytest.fixture(name="is_serial_port") +def is_serial_port_fixture() -> Generator[MagicMock, None, None]: + """Patch the serial port check.""" + with patch("homeassistant.components.mysensors.gateway.cv.isdevice") as is_device: + is_device.side_effect = lambda device: device + yield is_device + + +@pytest.fixture(name="gateway_nodes") +def gateway_nodes_fixture() -> dict[int, Sensor]: + """Return the gateway nodes dict.""" + return {} + + +@pytest.fixture(name="serial_transport") +async def serial_transport_fixture( + gateway_nodes: dict[int, Sensor], + is_serial_port: MagicMock, +) -> AsyncGenerator[dict[int, Sensor], None]: + """Mock a serial transport.""" + with patch( + "mysensors.gateway_serial.AsyncTransport", autospec=True + ) as transport_class, patch("mysensors.task.OTAFirmware", autospec=True), patch( + "mysensors.task.load_fw", autospec=True + ), patch( + "mysensors.task.Persistence", autospec=True + ) as persistence_class: + persistence = persistence_class.return_value + + mock_gateway_features(persistence, transport_class, gateway_nodes) + + yield transport_class + + +def mock_gateway_features( + persistence: MagicMock, transport_class: MagicMock, nodes: dict[int, Sensor] +) -> None: + """Mock the gateway features.""" + + async def mock_schedule_save_sensors() -> None: + """Load nodes from via persistence.""" + gateway = transport_class.call_args[0][0] + gateway.sensors.update(nodes) + + persistence.schedule_save_sensors = AsyncMock( + side_effect=mock_schedule_save_sensors + ) + # For some reason autospeccing does not recognize these methods. + persistence.safe_load_sensors = MagicMock() + persistence.save_sensors = MagicMock() + + async def mock_connect() -> None: + """Mock the start method.""" + transport.connect_task = MagicMock() + gateway = transport_class.call_args[0][0] + gateway.on_conn_made(gateway) + + transport = transport_class.return_value + transport.connect_task = None + transport.connect.side_effect = mock_connect + + +@pytest.fixture(name="transport") +def transport_fixture(serial_transport: MagicMock) -> MagicMock: + """Return the default mocked transport.""" + return serial_transport + + +@pytest.fixture +def transport_write(transport: MagicMock) -> MagicMock: + """Return the transport mock that accepts string messages.""" + return transport.return_value.send + + +@pytest.fixture(name="serial_entry") +async def serial_entry_fixture(hass: HomeAssistant) -> MockConfigEntry: + """Create a config entry for a serial gateway.""" + entry = MockConfigEntry( + domain=DOMAIN, + data={ + CONF_GATEWAY_TYPE: CONF_GATEWAY_TYPE_SERIAL, + CONF_VERSION: "2.3", + CONF_DEVICE: "/test/device", + CONF_BAUD_RATE: DEFAULT_BAUD_RATE, + }, + ) + return entry + + +@pytest.fixture(name="config_entry") +def config_entry_fixture(serial_entry: MockConfigEntry) -> MockConfigEntry: + """Provide the config entry used for integration set up.""" + return serial_entry + + +@pytest.fixture(name="integration") +async def integration_fixture( + hass: HomeAssistant, transport: MagicMock, config_entry: MockConfigEntry +) -> AsyncGenerator[MockConfigEntry, None]: + """Set up the mysensors integration with a config entry.""" + config: dict[str, Any] = {} + config_entry.add_to_hass(hass) + + with patch("homeassistant.components.mysensors.device.UPDATE_DELAY", new=0): + await async_setup_component(hass, DOMAIN, config) + await hass.async_block_till_done() + yield config_entry + + +@pytest.fixture +def receive_message( + transport: MagicMock, integration: MockConfigEntry +) -> Callable[[str], None]: + """Receive a message for the gateway.""" + + def receive_message_callback(message_string: str) -> None: + """Receive a message with the transport. + + The message_string parameter is a string in the MySensors message format. + """ + gateway = transport.call_args[0][0] + # node_id;child_id;command;ack;type;payload\n + gateway.logic(message_string) + + return receive_message_callback + + +@pytest.fixture(name="gateway") +def gateway_fixture( + transport: MagicMock, integration: MockConfigEntry +) -> BaseSyncGateway: + """Return a setup gateway.""" + return transport.call_args[0][0] + + +def load_nodes_state(fixture_path: str) -> dict: + """Load mysensors nodes fixture.""" + return json.loads(load_fixture(fixture_path), cls=MySensorsJSONDecoder) + + +def update_gateway_nodes( + gateway_nodes: dict[int, Sensor], nodes: dict[int, Sensor] +) -> dict: + """Update the gateway nodes.""" + gateway_nodes.update(nodes) + return nodes + + +@pytest.fixture(name="gps_sensor_state", scope="session") +def gps_sensor_state_fixture() -> dict: + """Load the gps sensor state.""" + return load_nodes_state("mysensors/gps_sensor_state.json") + + +@pytest.fixture +def gps_sensor(gateway_nodes: dict[int, Sensor], gps_sensor_state: dict) -> Sensor: + """Load the gps sensor.""" + nodes = update_gateway_nodes(gateway_nodes, gps_sensor_state) + node = nodes[1] + return node + + +@pytest.fixture(name="power_sensor_state", scope="session") +def power_sensor_state_fixture() -> dict: + """Load the power sensor state.""" + return load_nodes_state("mysensors/power_sensor_state.json") + + +@pytest.fixture +def power_sensor(gateway_nodes: dict[int, Sensor], power_sensor_state: dict) -> Sensor: + """Load the power sensor.""" + nodes = update_gateway_nodes(gateway_nodes, power_sensor_state) + node = nodes[1] + return node + + +@pytest.fixture(name="energy_sensor_state", scope="session") +def energy_sensor_state_fixture() -> dict: + """Load the energy sensor state.""" + return load_nodes_state("mysensors/energy_sensor_state.json") + + +@pytest.fixture +def energy_sensor( + gateway_nodes: dict[int, Sensor], energy_sensor_state: dict +) -> Sensor: + """Load the energy sensor.""" + nodes = update_gateway_nodes(gateway_nodes, energy_sensor_state) + node = nodes[1] + return node + + +@pytest.fixture(name="sound_sensor_state", scope="session") +def sound_sensor_state_fixture() -> dict: + """Load the sound sensor state.""" + return load_nodes_state("mysensors/sound_sensor_state.json") + + +@pytest.fixture +def sound_sensor(gateway_nodes: dict[int, Sensor], sound_sensor_state: dict) -> Sensor: + """Load the sound sensor.""" + nodes = update_gateway_nodes(gateway_nodes, sound_sensor_state) + node = nodes[1] + return node + + +@pytest.fixture(name="distance_sensor_state", scope="session") +def distance_sensor_state_fixture() -> dict: + """Load the distance sensor state.""" + return load_nodes_state("mysensors/distance_sensor_state.json") + + +@pytest.fixture +def distance_sensor( + gateway_nodes: dict[int, Sensor], distance_sensor_state: dict +) -> Sensor: + """Load the distance sensor.""" + nodes = update_gateway_nodes(gateway_nodes, distance_sensor_state) + node = nodes[1] + return node + + +@pytest.fixture(name="temperature_sensor_state", scope="session") +def temperature_sensor_state_fixture() -> dict: + """Load the temperature sensor state.""" + return load_nodes_state("mysensors/temperature_sensor_state.json") + + +@pytest.fixture +def temperature_sensor( + gateway_nodes: dict[int, Sensor], temperature_sensor_state: dict +) -> Sensor: + """Load the temperature sensor.""" + nodes = update_gateway_nodes(gateway_nodes, temperature_sensor_state) + node = nodes[1] + return node + + +@pytest.fixture(name="text_node_state", scope="session") +def text_node_state_fixture() -> dict: + """Load the text node state.""" + return load_nodes_state("mysensors/text_node_state.json") + + +@pytest.fixture +def text_node(gateway_nodes: dict[int, Sensor], text_node_state: dict) -> Sensor: + """Load the text child node.""" + nodes = update_gateway_nodes(gateway_nodes, text_node_state) + node = nodes[1] + return node diff --git a/data/source_files/clean/4a39c8df7306.py b/data/source_files/clean/4a39c8df7306.py new file mode 100644 index 0000000000000000000000000000000000000000..6a98547230e4cc83fa248137ca0fde09ebb67dcf --- /dev/null +++ b/data/source_files/clean/4a39c8df7306.py @@ -0,0 +1,41 @@ +import SimpleXMLRPCServer +import sys + +import logging +from K8055Controller import K8055Controller + +logging.basicConfig() + +controller_log = logging.getLogger("Controller") + +class Controller: + def __init__(self): + self.k8055 = K8055Controller() + controller_log.debug("initialized") + + def reset(self): + self.k8055.reset() + controller_log.debug("reset") + return 0 + + def turn_on(self, i): + self.k8055.turn_on(i) + controller_log.debug('turned on %i' % (i)) + return 0 + + def turn_off(self, i): + self.k8055.turn_off(i) + controller_log.debug('turned off %i' % (i)) + return 0 + + def set_analog(self, i, level): + if (i == 1): + self.k8055.set_analog1(level) + else: + self.k8055.set_analog2(level) + return 0 + +controller = Controller() +server = SimpleXMLRPCServer.SimpleXMLRPCServer(("d6349.mysql.zone.ee", 7000)) +server.register_instance(controller) +server.serve_forever() \ No newline at end of file diff --git a/data/source_files/clean/4b09fed9dd71.py b/data/source_files/clean/4b09fed9dd71.py new file mode 100644 index 0000000000000000000000000000000000000000..863e8a2ed0006f7150de09f27d406b39ae986ad3 --- /dev/null +++ b/data/source_files/clean/4b09fed9dd71.py @@ -0,0 +1,32 @@ +# Generated by Django 3.0.4 on 2020-04-06 09:56 + +from django.db import migrations + +from saleor.order import OrderStatus + + +def match_orders_with_users(apps, *_args, **_kwargs): + Order = apps.get_model("order", "Order") + User = apps.get_model("account", "User") + + orders_without_user = Order.objects.filter( + user_email__isnull=False, user=None + ).exclude(status=OrderStatus.DRAFT) + for order in orders_without_user: + try: + new_user = User.objects.get(email=order.user_email) + except User.DoesNotExist: + continue + order.user = new_user + order.save(update_fields=["user"]) + + +class Migration(migrations.Migration): + + dependencies = [ + ("order", "0080_invoice"), + ] + + operations = [ + migrations.RunPython(match_orders_with_users), + ] diff --git a/data/source_files/clean/4bc9509376c0.py b/data/source_files/clean/4bc9509376c0.py new file mode 100644 index 0000000000000000000000000000000000000000..0af634a53b2ebcc4683b0c1863c9043af5a4905d --- /dev/null +++ b/data/source_files/clean/4bc9509376c0.py @@ -0,0 +1,40 @@ +from pyspark.sql import Row +from snorkel.labeling.lf import labeling_function +from snorkel.labeling.lf.nlp_spark import spark_nlp_labeling_function +from snorkel.preprocess import preprocessor + +from drybell_lfs import load_celebrity_knowledge_base + +ABSTAIN = -1 +NEGATIVE = 0 +POSITIVE = 1 + + +@preprocessor() +def combine_text(x): + return Row(title=x.title, body=x.body, article=f"{x.title} {x.body}") + + +@spark_nlp_labeling_function(text_field="article", pre=[combine_text]) +def article_mentions_person(x): + for ent in x.doc.ents: + if ent.label_ == "PERSON": + return ABSTAIN + return NEGATIVE + + +@spark_nlp_labeling_function( + text_field="article", + pre=[combine_text], + resources=dict(celebrity_knowledge_base=load_celebrity_knowledge_base()), +) +def person_in_db(x, celebrity_knowledge_base): + for ent in x.doc.ents: + if ent.label_ == "PERSON" and ent.text.lower() in celebrity_knowledge_base: + return POSITIVE + return ABSTAIN + + +@labeling_function() +def body_contains_fortune(x): + return POSITIVE if "fortune" in x.body else ABSTAIN diff --git a/data/source_files/clean/4df191fa5942.py b/data/source_files/clean/4df191fa5942.py new file mode 100644 index 0000000000000000000000000000000000000000..7c606dd98dcd0e38522a604061eae8d10c8862e6 --- /dev/null +++ b/data/source_files/clean/4df191fa5942.py @@ -0,0 +1,65 @@ +# Checks for broken links in the book chapters, printing the status of each link found to stdout. +# The Python package 'requests' must be installed and available for this simple module to work. +# Author: David Maxwell +# Date: 2017-02-14 +import re +import requests + +def main(chapters_list_filename, hide_success=True): + """ + hide_success = a boolean switch that determines whether to show URLs that return a HTTP 200. + If set to true, only URLs that fail will be printed. + """ + chapters_f = open(chapters_list_filename, 'r') + pattern = re.compile(r'\[([^]]+)]\(\s*(http[s]?://[^)]+)\s*\)') # http://stackoverflow.com/a/23395483 + + print 'filename\tline_no\ttitle\turl\tstatus_code' + + for filename in chapters_f: + filename = filename.strip() + + if not filename or filename.startswith('{'): # Skip non-filename lines + continue + + chapter_f = open(filename, 'r') + line_no = 1 + + for line in chapter_f: + line = line.strip() + + for match in re.findall(pattern, line): + title = match[0] + url = match[1] + + if '127.0.0.1' in url or 'localhost' in url: # Don't check localhost URLs + continue + + request = None + status_code = -1 + + try: + request = requests.get(url) + status_code = request.status_code + except requests.exceptions.ConnectionError: + request = None + status_code = 'FAILED_TO_CONNECT' + + if hide_success and status_code == 200: + continue + + title = title.replace('\t', ' ') + + print '{filename}\t{line_no}\t{title}\t{url}\t{status_code}'.format(filename=filename, + line_no=line_no, + title=title, + url=url, + status_code=status_code) + + line_no = line_no + 1 + + chapter_f.close() + + chapters_f.close() + +if __name__ == '__main__': + main('Book.txt', hide_success=False) \ No newline at end of file diff --git a/data/source_files/clean/4e132b54cd4a.py b/data/source_files/clean/4e132b54cd4a.py new file mode 100644 index 0000000000000000000000000000000000000000..0aad63892e2757c199be78dfebc46a66c8e7becf --- /dev/null +++ b/data/source_files/clean/4e132b54cd4a.py @@ -0,0 +1,103 @@ +""" +.. module:: CAttackEvasionPGDExp + :synopsis: Evasion attack using Projected Gradient Descent. + +.. moduleauthor:: Battista Biggio + +""" +from secml.adv.attacks.evasion import CAttackEvasionPGDLS + + +class CAttackEvasionPGDExp(CAttackEvasionPGDLS): + """Evasion attacks using Projected Gradient Descent with Exponential line search. + + This class implements the maximum-confidence evasion attacks proposed in: + + - https://arxiv.org/abs/1910.00470, EURASIP JIS, 2020. + - https://arxiv.org/abs/1708.06939, ICCV W. ViPAR, 2017. + + It is the multi-class extension of our original work in: + + - https://arxiv.org/abs/1708.06131, ECML 2013, + implemented using a standard projected gradient solver. + + This attack uses a faster line search than PGD-LS. + + In all our attacks, we use a smart double initialization to avoid using the + mimicry term from our ECML 2013 paper, as described in: + - https://pralab.diee.unica.it/sites/default/files/zhang15-tcyb.pdf, IEEE TCYB, 2015 + + If the attack is not successful when starting from x0, + we initialize the optimization by projecting a point from another + class onto the feasible domain and try again. + + Parameters + ---------- + classifier : CClassifier + Target classifier. + double_init_ds : CDataset or None, optional + Dataset used to initialize an alternative init point (double init). + double_init : bool, optional + If True (default), use double initialization point. + Needs double_init_ds not to be None. + distance : {'l1' or 'l2'}, optional + Norm to use for computing the distance of the adversarial example + from the original sample. Default 'l2'. + dmax : scalar, optional + Maximum value of the perturbation. Default 1. + lb, ub : int or CArray, optional + Lower/Upper bounds. If int, the same bound will be applied to all + the features. If CArray, a different bound can be specified for each + feature. Default `lb = 0`, `ub = 1`. + y_target : int or None, optional + If None an error-generic attack will be performed, else a + error-specific attack to have the samples misclassified as + belonging to the `y_target` class. + attack_classes : 'all' or CArray, optional + Array with the classes that can be manipulated by the attacker or + 'all' (default) if all classes can be manipulated. + solver_params : dict or None, optional + Parameters for the solver. + Default None, meaning that default parameters will be used. + See :class:`COptimizerPGDExp` for more information. + + Attributes + ---------- + class_type : 'e-pgd-exp' + + """ + __class_type = 'e-pgd-exp' + + def __init__(self, classifier, + double_init_ds=None, + double_init=True, + distance='l1', + dmax=0, + lb=0, + ub=1, + y_target=None, + attack_classes='all', + solver_params=None): + + # INTERNALS + self._x0 = None + self._y0 = None + + # this is an alternative init point. This could be a single point + # (targeted evasion) or an array of multiple points, one for each + # class (indiscriminate evasion). See _get_point_with_min_f_obj() + self._xk = None + + super(CAttackEvasionPGDExp, self).__init__( + classifier=classifier, + double_init_ds=double_init_ds, + double_init=double_init, + distance=distance, + dmax=dmax, + lb=lb, + ub=ub, + y_target=y_target, + attack_classes=attack_classes, + solver_params=solver_params) + + self.solver_type = 'pgd-exp' diff --git a/data/source_files/clean/4e590d6fb60b.py b/data/source_files/clean/4e590d6fb60b.py new file mode 100644 index 0000000000000000000000000000000000000000..6abe9ac6695fe5a1d34b503ad56c8e41374a9ea6 --- /dev/null +++ b/data/source_files/clean/4e590d6fb60b.py @@ -0,0 +1,123 @@ +from typing import Dict, Optional, List, Any + +import torch +import torch.nn.functional as F +from allennlp.data import Vocabulary +from allennlp.models.model import Model +from allennlp.modules import FeedForward, TextFieldEmbedder, Seq2SeqEncoder +from allennlp.nn import InitializerApplicator, RegularizerApplicator +from allennlp.nn import util +from allennlp.training.metrics import CategoricalAccuracy, F1Measure +from overrides import overrides + + +@Model.register("text_classifier") +class TextClassifier(Model): + """ + Implements a basic text classifier: + 1) Embed tokens using `text_field_embedder` + 2) Seq2SeqEncoder, e.g. BiLSTM + 3) Append the first and last encoder states + 4) Final feedforward layer + + Optimized with CrossEntropyLoss. Evaluated with CategoricalAccuracy & F1. + """ + def __init__(self, vocab: Vocabulary, + text_field_embedder: TextFieldEmbedder, + text_encoder: Seq2SeqEncoder, + classifier_feedforward: FeedForward, + verbose_metrics: False, + initializer: InitializerApplicator = InitializerApplicator(), + regularizer: Optional[RegularizerApplicator] = None, + ) -> None: + super(TextClassifier, self).__init__(vocab, regularizer) + + self.text_field_embedder = text_field_embedder + self.num_classes = self.vocab.get_vocab_size("labels") + self.text_encoder = text_encoder + self.classifier_feedforward = classifier_feedforward + self.prediction_layer = torch.nn.Linear(self.classifier_feedforward.get_output_dim() , self.num_classes) + + self.label_accuracy = CategoricalAccuracy() + self.label_f1_metrics = {} + + self.verbose_metrics = verbose_metrics + + for i in range(self.num_classes): + self.label_f1_metrics[vocab.get_token_from_index(index=i, namespace="labels")] = F1Measure(positive_label=i) + self.loss = torch.nn.CrossEntropyLoss() + + self.pool = lambda text, mask: util.get_final_encoder_states(text, mask, bidirectional=True) + + initializer(self) + + @overrides + def forward(self, + text: Dict[str, torch.LongTensor], + label: torch.IntTensor = None, + metadata: List[Dict[str, Any]] = None) -> Dict[str, torch.Tensor]: + """ + Parameters + ---------- + text : Dict[str, torch.LongTensor] + From a ``TextField`` + label : torch.IntTensor, optional (default = None) + From a ``LabelField`` + metadata : ``List[Dict[str, Any]]``, optional, (default = None) + Metadata containing the original tokenization of the premise and + hypothesis with 'premise_tokens' and 'hypothesis_tokens' keys respectively. + Returns + ------- + An output dictionary consisting of: + label_logits : torch.FloatTensor + A tensor of shape ``(batch_size, num_labels)`` representing unnormalised log probabilities of the label. + label_probs : torch.FloatTensor + A tensor of shape ``(batch_size, num_labels)`` representing probabilities of the label. + loss : torch.FloatTensor, optional + A scalar loss to be optimised. + """ + embedded_text = self.text_field_embedder(text) + + mask = util.get_text_field_mask(text) + encoded_text = self.text_encoder(embedded_text, mask) + pooled = self.pool(encoded_text, mask) + ff_hidden = self.classifier_feedforward(pooled) + logits = self.prediction_layer(ff_hidden) + class_probs = F.softmax(logits, dim=1) + + output_dict = {"logits": logits} + if label is not None: + loss = self.loss(logits, label) + output_dict["loss"] = loss + + # compute F1 per label + for i in range(self.num_classes): + metric = self.label_f1_metrics[self.vocab.get_token_from_index(index=i, namespace="labels")] + metric(class_probs, label) + self.label_accuracy(logits, label) + return output_dict + + @overrides + def decode(self, output_dict: Dict[str, torch.Tensor]) -> Dict[str, torch.Tensor]: + class_probabilities = F.softmax(output_dict['logits'], dim=-1) + output_dict['class_probs'] = class_probabilities + return output_dict + + def get_metrics(self, reset: bool = False) -> Dict[str, float]: + metric_dict = {} + + sum_f1 = 0.0 + for name, metric in self.label_f1_metrics.items(): + metric_val = metric.get_metric(reset) + if self.verbose_metrics: + metric_dict[name + '_P'] = metric_val[0] + metric_dict[name + '_R'] = metric_val[1] + metric_dict[name + '_F1'] = metric_val[2] + sum_f1 += metric_val[2] + + names = list(self.label_f1_metrics.keys()) + total_len = len(names) + average_f1 = sum_f1 / total_len + metric_dict['average_F1'] = average_f1 + metric_dict['accuracy'] = self.label_accuracy.get_metric(reset) + return metric_dict diff --git a/data/source_files/clean/54251d3de0bc.py b/data/source_files/clean/54251d3de0bc.py new file mode 100644 index 0000000000000000000000000000000000000000..6a6e5f7f79247bb69a8f187a793986d06aaf806b --- /dev/null +++ b/data/source_files/clean/54251d3de0bc.py @@ -0,0 +1,79 @@ +""" +The Tornado Framework +By Ali Pesaranghader +University of Ottawa, Ontario, Canada +E-mail: apesaran -at- uottawa -dot- ca / alipsgh -at- gmail -dot- com +""" + +import re + +from data_structures.attribute import Attribute +from dictionary.tornado_dictionary import TornadoDic + + +class ARFFReader: + """This class is used to read a .arff file.""" + + @staticmethod + def read(file_path): + labels = [] + attributes = [] + attributes_min_max = [] + records = [] + data_flag = False + reader = open(file_path, "r") + for line in reader: + + if line.strip() == '': + continue + + if line.startswith("@attribute") or line.startswith("@ATTRIBUTE"): + + line = line.strip('\n\r\t') + line = line.split(' ') + + attribute_name = line[1] + attribute_value_range = line[2] + + attribute = Attribute() + attribute.set_name(attribute_name) + if attribute_value_range.lower() in ['numeric', 'real', 'integer']: + attribute_type = TornadoDic.NUMERIC_ATTRIBUTE + attribute_value_range = [] + attributes_min_max.append([0, 0]) + else: + attribute_type = TornadoDic.NOMINAL_ATTRIBUTE + attribute_value_range = attribute_value_range.strip('{}').replace("'", "") + attribute_value_range = attribute_value_range.split(',') + attributes_min_max.append([None, None]) + attribute.set_type(attribute_type) + attribute.set_possible_values(attribute_value_range) + + attributes.append(attribute) + + elif line.startswith("@data") or line.startswith("@DATA"): + data_flag = True + labels = attributes[len(attributes) - 1].POSSIBLE_VALUES + attributes.pop(len(attributes) - 1) + continue + + elif data_flag is True: + line = re.sub('\s+', '', line) + elements = line.split(',') + for i in range(0, len(elements) - 1): + if attributes[i].TYPE == TornadoDic.NUMERIC_ATTRIBUTE: + elements[i] = float(elements[i]) + min_value = attributes_min_max[i][0] + max_value = attributes_min_max[i][1] + if elements[i] < min_value: + min_value = elements[i] + elif elements[i] > max_value: + max_value = elements[i] + attributes_min_max[i] = [min_value, max_value] + records.append(elements) + + for i in range(0, len(attributes)): + if attributes[i].TYPE == TornadoDic.NUMERIC_ATTRIBUTE: + attributes[i].set_bounds_values(attributes_min_max[i][0], attributes_min_max[i][1]) + + return labels, attributes, records diff --git a/data/source_files/clean/56314e7a26a0.py b/data/source_files/clean/56314e7a26a0.py new file mode 100644 index 0000000000000000000000000000000000000000..6aa55947380a65f7c24093ff3b3feee2ac3b5948 --- /dev/null +++ b/data/source_files/clean/56314e7a26a0.py @@ -0,0 +1,36 @@ +''' +Largest rectangle area in a histogram:: +Find the largest rectangular area possible in a given histogram where the largest rectangle can be made of a number of contiguous bars. +For simplicity, assume that all bars have same width and the width is 1 unit. +''' + +def max_area_histogram(histogram): + + stack = list() + + max_area = 0 # Initialize max area + + index = 0 + + while index < len(histogram): + + if (not stack) or (histogram[stack[-1]] <= histogram[index]): + stack.append(index) + index += 1 + else: + top_of_stack = stack.pop() + area = (histogram[top_of_stack] * ((index - stack[-1] - 1) if stack else index)) + max_area = max(max_area, area) + + while stack: + top_of_stack = stack.pop() + area = (histogram[top_of_stack] * ((index - stack[-1] - 1) if stack else index)) + + max_area = max(max_area, area) + + return max_area + + +hist = [4, 7, 1, 8, 4, 9, 5] +print("Maximum area is", +max_area_histogram(hist)) diff --git a/data/source_files/clean/569e9c198e62.py b/data/source_files/clean/569e9c198e62.py new file mode 100644 index 0000000000000000000000000000000000000000..76de86f0d428be6f17b7c61c98178730bcc214cf --- /dev/null +++ b/data/source_files/clean/569e9c198e62.py @@ -0,0 +1,129 @@ +from test_plus.test import TestCase + +from ...administrative_units.factories import AdministrativeUnitFactory +from ...cases.factories import CaseFactory +from ...channels.factories import ChannelFactory +from ...events.factories import EventFactory +from ...features.factories import FeatureFactory, FeatureOptionFactory +from ...generic.tests.test_views import ReadOnlyViewSetMixin +from ...institutions.factories import InstitutionFactory +from ...letters.factories import DocumentTypeFactory, ReferenceNumberFactory +from ...search.tests.mixins import SearchQueryMixin +from ...tags.factories import TagFactory +from ...users.factories import UserFactory + + +class AdministrativeUnitAutocompleteViewSetTestCase( + ReadOnlyViewSetMixin, SearchQueryMixin, TestCase +): + basename = "autocomplete_administrative_unit" + factory_class = AdministrativeUnitFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class CaseAutocompleteViewSetTestCase(ReadOnlyViewSetMixin, SearchQueryMixin, TestCase): + basename = "autocomplete_case" + factory_class = CaseFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class ChannelAutocompleteViewSetTestCase( + ReadOnlyViewSetMixin, SearchQueryMixin, TestCase +): + basename = "autocomplete_channel" + factory_class = ChannelFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class DocumentTypeAutocompleteViewSetTestCase( + ReadOnlyViewSetMixin, SearchQueryMixin, TestCase +): + basename = "autocomplete_document_type" + factory_class = DocumentTypeFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class ReferenceNumberAutocompleteViewSetTestCase( + ReadOnlyViewSetMixin, SearchQueryMixin, TestCase +): + basename = "autocomplete_reference_number" + factory_class = ReferenceNumberFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class EventAutocompleteViewSetTestCase( + ReadOnlyViewSetMixin, SearchQueryMixin, TestCase +): + basename = "autocomplete_event" + factory_class = EventFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class FeatureAutocompleteViewSetTestCase( + ReadOnlyViewSetMixin, SearchQueryMixin, TestCase +): + basename = "autocomplete_feature" + factory_class = FeatureFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class FeatureOptionAutocompleteViewSetTestCase( + ReadOnlyViewSetMixin, SearchQueryMixin, TestCase +): + basename = "autocomplete_feature_option" + factory_class = FeatureOptionFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class InstitutionAutocompleteViewSetTestCase( + ReadOnlyViewSetMixin, SearchQueryMixin, TestCase +): + basename = "autocomplete_institution" + factory_class = InstitutionFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class TagAutocompleteViewSetTestCase(ReadOnlyViewSetMixin, SearchQueryMixin, TestCase): + basename = "autocomplete_tag" + factory_class = TagFactory + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["name"], self.obj.name) + + +class UserAutocompleteViewSetTestCase(ReadOnlyViewSetMixin, SearchQueryMixin, TestCase): + basename = "autocomplete_user" + factory_class = UserFactory + initial_count = 1 + + def validate_item(self, item): + self.assertEqual(item["id"], self.obj.id) + self.assertEqual(item["username"], self.obj.username) diff --git a/data/source_files/clean/5a1e492c171b.py b/data/source_files/clean/5a1e492c171b.py new file mode 100644 index 0000000000000000000000000000000000000000..6b2234f49a8b57fe4bf6fd97f1ef5ca5137dfade --- /dev/null +++ b/data/source_files/clean/5a1e492c171b.py @@ -0,0 +1,70 @@ +# File: infrastructure_service.py +# +# Licensed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0.txt) +# + +from .ds_base_service import DSBaseService +from .ds_find_service import DSFindService + +from ..model.infrastructure import Infrastructure + + +class InfrastructureService(DSFindService): + + def __init__(self, ds_api_key, ds_api_secret_key, proxy=None): + super(InfrastructureService, self).__init__(ds_api_key, ds_api_secret_key, proxy=proxy) + + def find_all(self, view=None): + """ + Streams all infrastructure objects retrieved from the Digital Shadows API. + + :param view: InfrastructureView + :return: Infrastructure generator + """ + + if view is None: + view = InfrastructureService.infrastructure_view() + + return self._find_all('/api/ip-ports', + view, + Infrastructure) + + def find_all_pages(self, view=None): + """ + Streams all infrastructure objects retrieved from the Digital Shadows API in page groups. + + :param view: InfrastructureView + :return: Infrastructure generator + """ + + if view is None: + view = Infrastructure.infrastructure_view() + + return self._find_all_pages('/api/ip-ports', + view, + Infrastructure) + + @staticmethod + @DSBaseService.paginated(size=500) + @DSBaseService.sorted('published') + def infrastructure_view(detectedopen='ALL', domainname=None, detectedclosed=False, markedclosed=False, + severities=None, alerted=False, reverse=None): + view = { + 'filter': { + 'detectedOpen': detectedopen, + 'severities': [] if severities is None else severities, + 'alerted': 'true' if alerted else 'false', + 'markedClosed': 'true' if markedclosed else 'false', + 'detectedClosed': 'true' if detectedclosed else 'false' + } + } + if domainname is not None: + view['filter']['domainName'] = domainname + + if reverse is not None: + view['sort'] = { + 'direction': 'ASCENDING' if reverse else 'DESCENDING', + 'property': 'published' + } + + return view diff --git a/data/source_files/clean/5b0bb172c22d.py b/data/source_files/clean/5b0bb172c22d.py new file mode 100644 index 0000000000000000000000000000000000000000..6a95707999c6dd8d718ea3549fc898fb5e496ed8 --- /dev/null +++ b/data/source_files/clean/5b0bb172c22d.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +"""Utilities common to CIFAR10 and CIFAR100 datasets. +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import sys +from six.moves import cPickle + + +def load_batch(fpath, label_key='labels'): + """Internal utility for parsing CIFAR data. + + # Arguments + fpath: path the file to parse. + label_key: key for label data in the retrieve + dictionary. + + # Returns + A tuple `(data, labels)`. + """ + with open(fpath, 'rb') as f: + if sys.version_info < (3,): + d = cPickle.load(f) + else: + d = cPickle.load(f, encoding='bytes') + # decode utf8 + d_decoded = {} + for k, v in d.items(): + d_decoded[k.decode('utf8')] = v + d = d_decoded + data = d['data'] + labels = d[label_key] + + data = data.reshape(data.shape[0], 3, 32, 32) + return data, labels \ No newline at end of file diff --git a/data/source_files/clean/5e5c66a78299.py b/data/source_files/clean/5e5c66a78299.py new file mode 100644 index 0000000000000000000000000000000000000000..6adce2d4edcce50b7803e777bec26f0e2dbe1ef5 --- /dev/null +++ b/data/source_files/clean/5e5c66a78299.py @@ -0,0 +1,173 @@ +import argparse +import logging +import torch +import torch.nn.functional as F +import numpy as np +from torch import nn +from torch.autograd import Variable +from transformers import GPT2Config +from transformers import GPT2LMHeadModel, GPT2Tokenizer, BertTokenizer +from DataLoader import * +from Model import BERTGen +from utils import sample_sequence +import torch.optim as optim +import math +import sys +import pandas +import os +import numpy +import nltk +from torch.utils.tensorboard import SummaryWriter +import warnings +from tqdm import tqdm, trange +from torch.utils.data import RandomSampler, SequentialSampler +from torch.utils.data import DataLoader as DL +import torch +from torch.utils.data.distributed import DistributedSampler + +warnings.filterwarnings("ignore", category=UserWarning) + +device = torch.device('cuda') + +def set_seed(args): + np.random.seed(args.seed) + torch.manual_seed(args.seed) + if args.n_gpu > 0: + torch.cuda.manual_seed_all(args.seed) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument("--model", default='gpt2', type=str) + parser.add_argument("--top_k", type=int, default=0) + parser.add_argument("--top_p", type=float, default=0.9) + parser.add_argument('--seed', type=int, default=42, help="random seed for initialization") + parser.add_argument('--do_train', default=False, action="store_true", help="whether to train or test the model") + parser.add_argument('--do_rl', default=False, action="store_true", help="whether to train or test the model") + parser.add_argument('--do_val', default=False, action="store_true", help="whether to train or test the model") + parser.add_argument('--do_test', default=False, action="store_true", help="whether to compute the BLEU scores on test split") + parser.add_argument('--do_test_challenge', default=False, action="store_true", help="whether to compute the BLEU scores on challenge split") + parser.add_argument('--do_ppl', default=False, action="store_true", help="whether to compute perplexity of the model") + parser.add_argument('--do_verify', default=False, action="store_true", help="whether compute the adv-acc score on test split") + parser.add_argument('--do_verify_challenge', default=False, action="store_true", help="whether compute the adv-acc score on challenge split") + parser.add_argument('--epoch', default=10, type=int, help="whether to train or test the model") + parser.add_argument('--batch_size', default=6, type=int, help="whether to train or test the model") + parser.add_argument('--local_rank', default=-1, type=int, help="whether to train or test the model") + parser.add_argument('--learning_rate', default=2e-6, type=float, help="whether to train or test the model") + parser.add_argument('--dataset', default='table', type=str, help="whether to train or test the model") + parser.add_argument('--every', default=50, type=int, help="whether to train or test the model") + parser.add_argument('--load_from', default='', type=str, help="whether to train or test the model") + parser.add_argument('--id', default='models', type=str, help="specify the id of the experiment") + parser.add_argument('--max_len', default=800, type=int, help="whether to train or test the model") + parser.add_argument('--dim', default=768, type=int, help="whether to train or test the model") + parser.add_argument('--layers', default=3, type=int, help="whether to train or test the model") + parser.add_argument('--head', default=4, type=int, help="whether to train or test the model") + parser.add_argument("--modelpath", type=str, default="bert-base-uncased", + help="For distributed training: local_rank") + parser.add_argument('--gradient_accumulation_steps', type=int, default=5, help="accumulation steps for gradient") + parser.add_argument('--decode_first_K', type=int, default=10000, help="For debugging purpose") + args = parser.parse_args() + + if args.local_rank == -1: + device = torch.device("cuda") + args.n_gpu = 1 + else: + torch.cuda.set_device(args.local_rank) + device = torch.device('cuda', args.local_rank) + torch.distributed.init_process_group(backend='nccl') + args.n_gpu = 1 + args.device = device + + if args.local_rank not in [-1, 0]: + torch.distributed.barrier() + + tokenizer = GPT2Tokenizer.from_pretrained(args.model) + model = GPT2LMHeadModel.from_pretrained(args.model) + #model = nn.DataParallel(model) + model.to(args.device) + + if args.local_rank == 0: + torch.distributed.barrier() + + criterion = nn.CrossEntropyLoss(reduction='none', ignore_index=-1) + if args.do_train: + if args.local_rank in [-1, 0]: + if not os.path.exists(args.id): + os.mkdir(args.id) + tb_writer = SummaryWriter(log_dir='tensorboard/GPT2-{}'.format(args.model)) + + dataset = GPTTableDataset2('data/train_lm_preprocessed.json', tokenizer, args.max_len) + + if args.local_rank == -1: + sampler = RandomSampler(dataset) + else: + sampler = DistributedSampler(dataset) + + train_dataloader = DL(dataset, sampler=sampler, batch_size=args.batch_size, num_workers=0) + + model.train() + optimizer = optim.Adam(model.parameters(), args.learning_rate) + + avg_loss = 0 + global_step = 0 + + if args.local_rank != -1: + model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.local_rank], + output_device=args.local_rank, find_unused_parameters=True) + else: + model = torch.nn.DataParallel(model) + + for epoch_idx in trange(0, args.epoch, desc='Epoch', disable=args.local_rank not in [-1, 0]): + #for idx in range(0, dataset.train_len()): + for idx, batch in enumerate(tqdm(train_dataloader, desc="Iteration", disable=args.local_rank not in [-1, 0])): + batch = tuple(Variable(t).to(device) for t in batch) + trg_inp, trg_out, mask, caption = batch + inputs = torch.cat([caption, trg_inp], 1) + + model.zero_grad() + optimizer.zero_grad() + + logits = model(inputs)[0] + logits = logits[:, -trg_out.shape[1]:, :].contiguous() + + loss = criterion(logits.view(-1, logits.shape[-1]), trg_out.view(-1)) + + loss = loss * mask.view(-1) + loss = loss.sum() / mask.sum() + + avg_loss += loss.item() + + loss.backward() + optimizer.step() + global_step += 1 + + if args.local_rank in [-1, 0] and idx % args.every == 0 and idx > 0: + tb_writer.add_scalar("perplexity", math.exp(avg_loss / args.every), global_step) + + fake_inputs = caption + gt_inputs = trg_out.cpu().data.numpy() + + #samples = model.sample(fake_inputs, tabfeat, caption, highlight_idx, bert) + samples = sample_sequence(model, 30, fake_inputs, []) + samples = samples[:, caption.shape[1]:] + samples = samples.cpu().data.numpy() + + for s, gt in zip(samples, gt_inputs): + text = tokenizer.decode(s, clean_up_tokenization_spaces=True) + text = text[: text.find(tokenizer.eos_token)] + print("PREDICTION |||||| ", text) + text = tokenizer.decode(gt, clean_up_tokenization_spaces=True) + text = text[: text.find(tokenizer.eos_token)] + print("GROUNDTRUH |||||| ",text) + break + + avg_loss = 0 + + if args.local_rank in [-1, 0]: + if args.model == 'gpt2': + torch.save(model.state_dict(), '{}/GPT_ep{}.pt'.format(args.id, epoch_idx)) + else: + torch.save(model.state_dict(), '{}/GPT_medium_ep{}.pt'.format(args.id, epoch_idx)) + + if args.local_rank in [-1, 0]: + tb_writer.close() \ No newline at end of file diff --git a/data/source_files/clean/5f5af0d3afa7.py b/data/source_files/clean/5f5af0d3afa7.py new file mode 100644 index 0000000000000000000000000000000000000000..0a42c30234b3cb9b1bf3706f896598d1f485e00b --- /dev/null +++ b/data/source_files/clean/5f5af0d3afa7.py @@ -0,0 +1,171 @@ +from PhysicsTools.Heppy.analyzers.core.Analyzer import Analyzer +from PhysicsTools.Heppy.analyzers.core.AutoHandle import AutoHandle +from PhysicsTools.Heppy.physicsobjects.Tau import Tau + +from PhysicsTools.HeppyCore.utils.deltar import deltaR, matchObjectCollection3 + +import PhysicsTools.HeppyCore.framework.config as cfg + + +class TauAnalyzer( Analyzer ): + + + def __init__(self, cfg_ana, cfg_comp, looperName ): + super(TauAnalyzer,self).__init__(cfg_ana,cfg_comp,looperName) + + #---------------------------------------- + # DECLARATION OF HANDLES OF LEPTONS STUFF + #---------------------------------------- + def declareHandles(self): + super(TauAnalyzer, self).declareHandles() + self.handles['taus'] = AutoHandle( ('slimmedTaus',''),'std::vector') + + def beginLoop(self, setup): + super(TauAnalyzer,self).beginLoop(setup) + self.counters.addCounter('events') + count = self.counters.counter('events') + count.register('all events') + count.register('has >=1 tau at preselection') + count.register('has >=1 selected taus') + count.register('has >=1 other taus') + + #------------------ + # MAKE LEPTON LISTS + #------------------ + def makeTaus(self, event): + event.inclusiveTaus = [] + event.selectedTaus = [] + event.otherTaus = [] + + #get all + alltaus = map( Tau, self.handles['taus'].product() ) + + #make inclusive taus + for tau in alltaus: + tau.associatedVertex = event.goodVertices[0] if len(event.goodVertices)>0 else event.vertices[0] + tau.lepVeto = False + tau.idDecayMode = tau.tauID("decayModeFinding") + tau.idDecayModeNewDMs = tau.tauID("decayModeFindingNewDMs") + + if hasattr(self.cfg_ana, 'inclusive_decayModeID') and self.cfg_ana.inclusive_decayModeID and not tau.tauID(self.cfg_ana.inclusive_decayModeID): + continue + + tau.inclusive_lepVeto = False + if self.cfg_ana.inclusive_vetoLeptons: + for lep in event.selectedLeptons: + if deltaR(lep.eta(), lep.phi(), tau.eta(), tau.phi()) < self.cfg_ana.inclusive_leptonVetoDR: + tau.inclusive_lepVeto = True + if tau.inclusive_lepVeto: continue + if self.cfg_ana.inclusive_vetoLeptonsPOG: + if not tau.tauID(self.cfg_ana.inclusive_tauAntiMuonID): + tau.inclusive_lepVeto = True + if not tau.tauID(self.cfg_ana.inclusive_tauAntiElectronID): + tau.inclusive_lepVeto = True + if tau.inclusive_lepVeto: continue + + if tau.pt() < self.cfg_ana.inclusive_ptMin: continue + if abs(tau.eta()) > self.cfg_ana.inclusive_etaMax: continue + if abs(tau.dxy()) > self.cfg_ana.inclusive_dxyMax or abs(tau.dz()) > self.cfg_ana.inclusive_dzMax: continue + + def id3(tau,X): + """Create an integer equal to 1-2-3 for (loose,medium,tight)""" + return tau.tauID(X%"Loose") + tau.tauID(X%"Medium") + tau.tauID(X%"Tight") + def id5(tau,X): + """Create an integer equal to 1-2-3-4-5 for (very loose, + loose, medium, tight, very tight)""" + return id3(tau, X) + tau.tauID(X%"VLoose") + tau.tauID(X%"VTight") + def id6(tau,X): + """Create an integer equal to 1-2-3-4-5-6 for (very loose, + loose, medium, tight, very tight, very very tight)""" + return id5(tau, X) + tau.tauID(X%"VVTight") + + tau.idMVA = id6(tau, "by%sIsolationMVArun2v1DBoldDMwLT") + tau.idMVANewDM = id6(tau, "by%sIsolationMVArun2v1DBnewDMwLT") + tau.idCI3hit = id3(tau, "by%sCombinedIsolationDeltaBetaCorr3Hits") + tau.idAntiMu = tau.tauID("againstMuonLoose3") + tau.tauID("againstMuonTight3") + tau.idAntiE = id5(tau, "againstElectron%sMVA6") + #print "Tau pt %5.1f: idMVA2 %d, idCI3hit %d, %s, %s" % (tau.pt(), tau.idMVA2, tau.idCI3hit, tau.tauID(self.cfg_ana.tauID), tau.tauID(self.cfg_ana.tauLooseID)) + + if tau.tauID(self.cfg_ana.inclusive_tauID): + event.inclusiveTaus.append(tau) + + for tau in event.inclusiveTaus: + + tau.loose_lepVeto = False + if self.cfg_ana.loose_vetoLeptons: + for lep in event.selectedLeptons: + if deltaR(lep.eta(), lep.phi(), tau.eta(), tau.phi()) < self.cfg_ana.loose_leptonVetoDR: + tau.loose_lepVeto = True + if self.cfg_ana.loose_vetoLeptonsPOG: + if not tau.tauID(self.cfg_ana.loose_tauAntiMuonID): + tau.loose_lepVeto = True + if not tau.tauID(self.cfg_ana.loose_tauAntiElectronID): + tau.loose_lepVeto = True + + if tau.tauID(self.cfg_ana.loose_decayModeID) and \ + tau.pt() > self.cfg_ana.loose_ptMin and abs(tau.eta()) < self.cfg_ana.loose_etaMax and \ + abs(tau.dxy()) < self.cfg_ana.loose_dxyMax and abs(tau.dz()) < self.cfg_ana.loose_dzMax and \ + tau.tauID(self.cfg_ana.loose_tauID) and not tau.loose_lepVeto: + event.selectedTaus.append(tau) + else: + event.otherTaus.append(tau) + + event.inclusiveTaus.sort(key = lambda l : l.pt(), reverse = True) + event.selectedTaus.sort(key = lambda l : l.pt(), reverse = True) + event.otherTaus.sort(key = lambda l : l.pt(), reverse = True) + self.counters.counter('events').inc('all events') + if len(event.inclusiveTaus): self.counters.counter('events').inc('has >=1 tau at preselection') + if len(event.selectedTaus): self.counters.counter('events').inc('has >=1 selected taus') + if len(event.otherTaus): self.counters.counter('events').inc('has >=1 other taus') + + def matchTaus(self, event): + match = matchObjectCollection3(event.inclusiveTaus, event.gentaus, deltaRMax = 0.5) + for lep in event.inclusiveTaus: + gen = match[lep] + lep.mcMatchId = 1 if gen else 0 + lep.genp = gen + + def process(self, event): + self.readCollections( event.input ) + + self.makeTaus(event) + + if not self.cfg_comp.isMC: + return True + + if hasattr(event, 'gentaus'): + self.matchTaus(event) + + return True + +# Find the definitions of the tau ID strings here: +# http://cmslxr.fnal.gov/lxr/source/PhysicsTools/PatAlgos/python/producersLayer1/tauProducer_cfi.py + +setattr(TauAnalyzer,"defaultConfig",cfg.Analyzer( + class_object = TauAnalyzer, + # inclusive very loose hadronic tau selection + inclusive_ptMin = 18, + inclusive_etaMax = 9999, + inclusive_dxyMax = 1000., + inclusive_dzMax = 0.4, + inclusive_vetoLeptons = False, + inclusive_leptonVetoDR = 0.4, + inclusive_decayModeID = "decayModeFindingNewDMs", # ignored if not set or "" + inclusive_tauID = "decayModeFindingNewDMs", + inclusive_vetoLeptonsPOG = False, # If True, the following two IDs are required + inclusive_tauAntiMuonID = "", + inclusive_tauAntiElectronID = "", + # loose hadronic tau selection + loose_ptMin = 18, + loose_etaMax = 9999, + loose_dxyMax = 1000., + loose_dzMax = 0.2, + loose_vetoLeptons = True, + loose_leptonVetoDR = 0.4, + loose_decayModeID = "decayModeFindingNewDMs", # ignored if not set or "" + loose_tauID = "byLooseCombinedIsolationDeltaBetaCorr3Hits", + loose_vetoLeptonsPOG = False, # If True, the following two IDs are required + loose_tauAntiMuonID = "againstMuonLoose3", + loose_tauAntiElectronID = "againstElectronLooseMVA5" + ) +) diff --git a/data/source_files/clean/5ffc696dc345.py b/data/source_files/clean/5ffc696dc345.py new file mode 100644 index 0000000000000000000000000000000000000000..8a5438fd129b5b6996b6b2555c75bb6bb382b7d5 --- /dev/null +++ b/data/source_files/clean/5ffc696dc345.py @@ -0,0 +1,175 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2013 Ole Krause-Sparmann + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +import numpy +import scipy +import unittest +import time + +from nearpy import Engine +from nearpy.distances import CosineDistance + +from nearpy.hashes import RandomBinaryProjections, HashPermutations, HashPermutationMapper + +def example2(): + + # Dimension of feature space + DIM = 100 + + # Number of data points (dont do too much because of exact search) + POINTS = 20000 + + ########################################################## + + print('Performing indexing with HashPermutations...') + t0 = time.time() + + # Create permutations meta-hash + permutations = HashPermutations('permut') + + # Create binary hash as child hash + rbp_perm = RandomBinaryProjections('rbp_perm', 14) + rbp_conf = {'num_permutation':50,'beam_size':10,'num_neighbour':100} + + # Add rbp as child hash of permutations hash + permutations.add_child_hash(rbp_perm, rbp_conf) + + # Create engine + engine_perm = Engine(DIM, lshashes=[permutations], distance=CosineDistance()) + + # First index some random vectors + matrix = numpy.zeros((POINTS,DIM)) + for i in range(POINTS): + v = numpy.random.randn(DIM) + matrix[i] = v + engine_perm.store_vector(v) + + # Then update permuted index + permutations.build_permuted_index() + + t1 = time.time() + print('Indexing took %f seconds' % (t1-t0)) + + # Get random query vector + query = numpy.random.randn(DIM) + + # Do random query on engine 3 + print('\nNeighbour distances with HashPermutations:') + print(' -> Candidate count is %d' % engine_perm.candidate_count(query)) + results = engine_perm.neighbours(query) + dists = [x[2] for x in results] + print(dists) + + # Real neighbours + print('\nReal neighbour distances:') + query = query.reshape((DIM)) + dists = CosineDistance().distance(matrix, query) + dists = dists.reshape((-1,)) + dists = sorted(dists) + print(dists[:10]) + + ########################################################## + + print('\nPerforming indexing with HashPermutationMapper...') + t0 = time.time() + + # Create permutations meta-hash + permutations2 = HashPermutationMapper('permut2') + + # Create binary hash as child hash + rbp_perm2 = RandomBinaryProjections('rbp_perm2', 14) + + # Add rbp as child hash of permutations hash + permutations2.add_child_hash(rbp_perm2) + + # Create engine + engine_perm2 = Engine(DIM, lshashes=[permutations2], distance=CosineDistance()) + + # First index some random vectors + matrix = numpy.zeros((POINTS,DIM)) + for i in range(POINTS): + v = numpy.random.randn(DIM) + matrix[i] = v + engine_perm2.store_vector(v) + + t1 = time.time() + print('Indexing took %f seconds' % (t1-t0)) + + # Get random query vector + query = numpy.random.randn(DIM) + + # Do random query on engine 4 + print('\nNeighbour distances with HashPermutationMapper:') + print(' -> Candidate count is %d' % engine_perm2.candidate_count(query)) + results = engine_perm2.neighbours(query) + dists = [x[2] for x in results] + print(dists) + + # Real neighbours + print('\nReal neighbour distances:') + query = query.reshape((DIM)) + dists = CosineDistance().distance(matrix,query) + dists = dists.reshape((-1,)) + dists = sorted(dists) + print(dists[:10]) + + ########################################################## + + print('\nPerforming indexing with multiple binary hashes...') + t0 = time.time() + + hashes = [] + for k in range(20): + hashes.append(RandomBinaryProjections('rbp_%d' % k, 10)) + + # Create engine + engine_rbps = Engine(DIM, lshashes=hashes, distance=CosineDistance()) + + # First index some random vectors + matrix = numpy.zeros((POINTS,DIM)) + for i in range(POINTS): + v = numpy.random.randn(DIM) + matrix[i] = v + engine_rbps.store_vector(v) + + t1 = time.time() + print('Indexing took %f seconds' % (t1-t0)) + + # Get random query vector + query = numpy.random.randn(DIM) + + # Do random query on engine 4 + print('\nNeighbour distances with multiple binary hashes:') + print(' -> Candidate count is %d' % engine_rbps.candidate_count(query)) + results = engine_rbps.neighbours(query) + dists = [x[2] for x in results] + print(dists) + + # Real neighbours + print('\nReal neighbour distances:') + query = query.reshape((DIM)) + dists = CosineDistance().distance(matrix,query) + dists = dists.reshape((-1,)) + dists = sorted(dists) + print(dists[:10]) + + ########################################################## diff --git a/data/source_files/clean/60ccb349f496.py b/data/source_files/clean/60ccb349f496.py new file mode 100644 index 0000000000000000000000000000000000000000..76dff496b7787e808a82fccd90d499cb2d9e785d --- /dev/null +++ b/data/source_files/clean/60ccb349f496.py @@ -0,0 +1,47 @@ +import json +import re + +import responses +from werkzeug.test import Client +from werkzeug.wrappers import Response + +from satosa.proxy_server import make_app +from satosa.satosa_config import SATOSAConfig + + +class TestConsent: + def test_full_flow(self, satosa_config_dict, consent_module_config): + api_url = "https://consent.example.com/api" + redirect_url = "https://consent.example.com/redirect" + consent_module_config["config"]["api_url"] = api_url + consent_module_config["config"]["redirect_url"] = redirect_url + satosa_config_dict["MICRO_SERVICES"].append(consent_module_config) + + # application + test_client = Client(make_app(SATOSAConfig(satosa_config_dict)), Response) + + # incoming auth req + http_resp = test_client.get("/{}/{}/request".format(satosa_config_dict["BACKEND_MODULES"][0]["name"], + satosa_config_dict["FRONTEND_MODULES"][0]["name"])) + assert http_resp.status_code == 200 + + verify_url_re = re.compile(r"{}/verify/\w+".format(api_url)) + with responses.RequestsMock() as rsps: + # fake no previous consent + + consent_request_url_re = re.compile(r"{}/creq/\w+".format(api_url)) + rsps.add(responses.GET, verify_url_re, status=401) + rsps.add(responses.GET, consent_request_url_re, "test_ticket", status=200) + + # incoming auth resp + http_resp = test_client.get("/{}/response".format(satosa_config_dict["BACKEND_MODULES"][0]["name"])) + assert http_resp.status_code == 302 + assert http_resp.headers["Location"].startswith(redirect_url) + + with responses.RequestsMock() as rsps: + # fake consent + rsps.add(responses.GET, verify_url_re, json.dumps({"foo": "bar"}), status=200) + + # incoming consent response + http_resp = test_client.get("/consent/handle_consent") + assert http_resp.status_code == 200 diff --git a/data/source_files/clean/615ca63ee16d.py b/data/source_files/clean/615ca63ee16d.py new file mode 100644 index 0000000000000000000000000000000000000000..6ab3a62e50f821717cc617bcae69096621bae1d3 --- /dev/null +++ b/data/source_files/clean/615ca63ee16d.py @@ -0,0 +1,246 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. +""" +BART: Denoising Sequence-to-Sequence Pre-training for +Natural Language Generation, Translation, and Comprehension +""" + +import torch.nn as nn + +from fairseq import utils +from fairseq.models import ( + register_model, + register_model_architecture, +) +from fairseq.models.transformer import TransformerModel +from fairseq.modules.transformer_sentence_encoder import init_bert_params + +from .hub_interface import BARTHubInterface + + +@register_model('bart') +class BARTModel(TransformerModel): + + @classmethod + def hub_models(cls): + return { + 'bart.large': 'http://dl.fbaipublicfiles.com/fairseq/models/bart.large.tar.gz', + 'bart.large.mnli': 'http://dl.fbaipublicfiles.com/fairseq/models/bart.large.mnli.tar.gz', + } + + def __init__(self, args, encoder, decoder): + super().__init__(args, encoder, decoder) + + # We follow BERT's random weight initialization + self.apply(init_bert_params) + + self.classification_heads = nn.ModuleDict() + + @staticmethod + def add_args(parser): + super(BARTModel, BARTModel).add_args(parser) + parser.add_argument( + '--max-source-positions', default=1024, type=int, metavar='N', + help='max number of tokens in the source sequence' + ) + parser.add_argument( + '--max-target-positions', default=1024, type=int, metavar='N', + help='max number of tokens in the target sequence' + ) + parser.add_argument( + '--pooler-dropout', type=float, metavar='D', + help='dropout probability in the masked_lm pooler layers' + ) + parser.add_argument( + '--pooler-activation-fn', + choices=utils.get_available_activation_fns(), + help='activation function to use for pooler layer' + ) + + @property + def supported_targets(self): + return {'self'} + + def forward( + self, src_tokens, src_lengths, prev_output_tokens, + features_only=False, classification_head_name=None, **kwargs + ): + if classification_head_name is not None: + features_only = True + + encoder_out = self.encoder( + src_tokens, + src_lengths=src_lengths, + **kwargs, + ) + x, extra = self.decoder( + prev_output_tokens, + encoder_out=encoder_out, + features_only=features_only, + **kwargs, + ) + + if classification_head_name is not None: + sentence_representation = x[ + src_tokens.eq(self.encoder.dictionary.eos()), : + ].view(x.size(0), -1, x.size(-1))[:, -1, :] + x = self.classification_heads[classification_head_name]( + sentence_representation + ) + return x, extra + + @classmethod + def from_pretrained( + cls, + model_name_or_path, + checkpoint_file='model.pt', + data_name_or_path='.', + bpe='gpt2', + **kwargs, + ): + from fairseq import hub_utils + x = hub_utils.from_pretrained( + model_name_or_path, + checkpoint_file, + data_name_or_path, + archive_map=cls.hub_models(), + bpe=bpe, + load_checkpoint_heads=True, + **kwargs, + ) + return BARTHubInterface(x['args'], x['task'], x['models'][0]) + + def register_classification_head(self, name, num_classes=None, inner_dim=None, **kwargs): + """Register a classification head.""" + print("Registering classification head: {0}".format(name)) + if name in self.classification_heads: + prev_num_classes = self.classification_heads[name].out_proj.out_features + prev_inner_dim = self.classification_heads[name].dense.out_features + if num_classes != prev_num_classes or inner_dim != prev_inner_dim: + print( + 'WARNING: re-registering head "{}" with num_classes {} (prev: {}) ' + 'and inner_dim {} (prev: {})'.format( + name, num_classes, prev_num_classes, inner_dim, prev_inner_dim + ) + ) + self.classification_heads[name] = BARTClassificationHead( + self.args.encoder_embed_dim, + inner_dim or self.args.encoder_embed_dim, + num_classes, + self.args.pooler_activation_fn, + self.args.pooler_dropout, + ) + + def upgrade_state_dict_named(self, state_dict, name): + super().upgrade_state_dict_named(state_dict, name) + + prefix = name + '.' if name != '' else '' + current_head_names = [] if not hasattr(self, 'classification_heads') else \ + self.classification_heads.keys() + + # Handle new classification heads present in the state dict. + keys_to_delete = [] + for k in state_dict.keys(): + if not k.startswith(prefix + 'classification_heads.'): + continue + + head_name = k[len(prefix + 'classification_heads.'):].split('.')[0] + num_classes = state_dict[prefix + 'classification_heads.' + head_name + '.out_proj.weight'].size(0) + inner_dim = state_dict[prefix + 'classification_heads.' + head_name + '.dense.weight'].size(0) + + if getattr(self.args, 'load_checkpoint_heads', False): + if head_name not in current_head_names: + self.register_classification_head(head_name, num_classes, inner_dim) + else: + if head_name not in current_head_names: + print( + 'WARNING: deleting classification head ({}) from checkpoint ' + 'not present in current model: {}'.format(head_name, k) + ) + keys_to_delete.append(k) + elif ( + num_classes != self.classification_heads[head_name].out_proj.out_features + or inner_dim != self.classification_heads[head_name].dense.out_features + ): + print( + 'WARNING: deleting classification head ({}) from checkpoint ' + 'with different dimensions than current model: {}'.format(head_name, k) + ) + keys_to_delete.append(k) + for k in keys_to_delete: + del state_dict[k] + + # Copy any newly-added classification heads into the state dict + # with their current weights. + if hasattr(self, 'classification_heads'): + cur_state = self.classification_heads.state_dict() + for k, v in cur_state.items(): + if prefix + 'classification_heads.' + k not in state_dict: + print('Overwriting', prefix + 'classification_heads.' + k) + state_dict[prefix + 'classification_heads.' + k] = v + + +class BARTClassificationHead(nn.Module): + """Head for sentence-level classification tasks.""" + + def __init__( + self, + input_dim, + inner_dim, + num_classes, + activation_fn, + pooler_dropout, + ): + super().__init__() + self.dense = nn.Linear(input_dim, inner_dim) + self.activation_fn = utils.get_activation_fn(activation_fn) + self.dropout = nn.Dropout(p=pooler_dropout) + self.out_proj = nn.Linear(inner_dim, num_classes) + + def forward(self, features, **kwargs): + x = features + x = self.dropout(x) + x = self.dense(x) + x = self.activation_fn(x) + x = self.dropout(x) + x = self.out_proj(x) + return x + + +@register_model_architecture('bart', 'bart_large') +def bart_large_architecture(args): + args.encoder_embed_path = getattr(args, 'encoder_embed_path', None) + args.encoder_embed_dim = getattr(args, 'encoder_embed_dim', 1024) + args.encoder_ffn_embed_dim = getattr(args, 'encoder_ffn_embed_dim', 4*1024) + args.encoder_layers = getattr(args, 'encoder_layers', 12) + args.encoder_attention_heads = getattr(args, 'encoder_attention_heads', 16) + args.encoder_normalize_before = getattr(args, 'encoder_normalize_before', False) + args.encoder_learned_pos = getattr(args, 'encoder_learned_pos', True) + args.decoder_embed_path = getattr(args, 'decoder_embed_path', None) + args.decoder_embed_dim = getattr(args, 'decoder_embed_dim', args.encoder_embed_dim) + args.decoder_ffn_embed_dim = getattr(args, 'decoder_ffn_embed_dim', args.encoder_ffn_embed_dim) + args.decoder_layers = getattr(args, 'decoder_layers', 12) + args.decoder_attention_heads = getattr(args, 'decoder_attention_heads', 16) + args.decoder_normalize_before = getattr(args, 'decoder_normalize_before', False) + args.decoder_learned_pos = getattr(args, 'decoder_learned_pos', True) + args.attention_dropout = getattr(args, 'attention_dropout', 0.) + args.relu_dropout = getattr(args, 'relu_dropout', 0.) + args.dropout = getattr(args, 'dropout', 0.1) + args.max_target_positions = getattr(args, 'max_target_positions', 1024) + args.max_source_positions = getattr(args, 'max_source_positions', 1024) + args.adaptive_softmax_cutoff = getattr(args, 'adaptive_softmax_cutoff', None) + args.adaptive_softmax_dropout = getattr(args, 'adaptive_softmax_dropout', 0) + args.share_decoder_input_output_embed = getattr(args, 'share_decoder_input_output_embed', True) + args.share_all_embeddings = getattr(args, 'share_all_embeddings', True) + + args.decoder_output_dim = getattr(args, 'decoder_output_dim', args.decoder_embed_dim) + args.decoder_input_dim = getattr(args, 'decoder_input_dim', args.decoder_embed_dim) + + args.no_scale_embedding = getattr(args, 'no_scale_embedding', True) + args.layernorm_embedding = getattr(args, 'layernorm_embedding', True) + + args.activation_fn = getattr(args, 'activation_fn', 'gelu') + args.pooler_activation_fn = getattr(args, 'pooler_activation_fn', 'tanh') + args.pooler_dropout = getattr(args, 'pooler_dropout', 0.0) diff --git a/data/source_files/clean/617102a55e7d.py b/data/source_files/clean/617102a55e7d.py new file mode 100644 index 0000000000000000000000000000000000000000..d9c389b63a2c9720abef56190237f31a2306da19 --- /dev/null +++ b/data/source_files/clean/617102a55e7d.py @@ -0,0 +1,71 @@ +# This source code is part of the Biotite package and is distributed +# under the 3-Clause BSD License. Please see 'LICENSE.rst' for further +# information. + +__name__ = "biotite" +__author__ = "Patrick Kunzmann" +__all__ = ["Copyable"] + +import abc + + +class Copyable(metaclass=abc.ABCMeta): + """ + Base class for all objects, that should be copyable. + + The public method `copy()` first creates a fresh instance of the + class of the instance, that is copied via the `__copy_create__()` + method. All variables, that could not be set via the constructor, + are then copied via `__copy_fill__()`, starting with the method in + the uppermost base class and ending with the class of the instance + to be copied. + + This approach solves the problem of encapsulated variables in + superclasses. + """ + + def copy(self): + """ + Create a deep copy of this object. + + Returns + ------- + copy + A copy of this object. + """ + clone = self.__copy_create__() + self.__copy_fill__(clone) + return clone + + def __copy_create__(self): + """ + Instantiate a new object of this class. + + Only the constructor should be called in this method. + All further attributes, that need to be copied are handled + in `__copy_fill__()` + + Do not call the `super()` method here. + + This method must be overridden, if the constructor takes + parameters. + + Returns + ------- + copy + A freshly instantiated copy of *self*. + """ + return type(self)() + + def __copy_fill__(self, clone): + """ + Copy all necessary attributes to the new object. + + Always call the `super()` method as first statement. + + Parameters + ---------- + clone + The freshly instantiated copy of *self*. + """ + pass \ No newline at end of file diff --git a/data/source_files/clean/62a6423feb5b.py b/data/source_files/clean/62a6423feb5b.py new file mode 100644 index 0000000000000000000000000000000000000000..7c54e5deea62f99049023a90de0d70c094863c10 --- /dev/null +++ b/data/source_files/clean/62a6423feb5b.py @@ -0,0 +1,283 @@ +# Author: Anurag Ranjan +# Copyright (c) 2019, Anurag Ranjan +# All rights reserved. +# based on github.com/ClementPinard/SfMLearner-Pytorch + +from __future__ import division +import torch +from torch.autograd import Variable + +pixel_coords = None + + +def set_id_grid(depth): + global pixel_coords + b, h, w = depth.size() + i_range = Variable(torch.arange(0, h).view(1, h, 1).expand(1,h,w)).type_as(depth) # [1, H, W] + j_range = Variable(torch.arange(0, w).view(1, 1, w).expand(1,h,w)).type_as(depth) # [1, H, W] + ones = Variable(torch.ones(1,h,w)).type_as(depth) + + pixel_coords = torch.stack((j_range, i_range, ones), dim=1) # [1, 3, H, W] + + +def check_sizes(input, input_name, expected): + condition = [input.ndimension() == len(expected)] + for i,size in enumerate(expected): + if size.isdigit(): + condition.append(input.size(i) == int(size)) + assert(all(condition)), "wrong size for {}, expected {}, got {}".format(input_name, 'x'.join(expected), list(input.size())) + + +def pixel2cam(depth, intrinsics_inv): + global pixel_coords + """Transform coordinates in the pixel frame to the camera frame. + Args: + depth: depth maps -- [B, H, W] + intrinsics_inv: intrinsics_inv matrix for each element of batch -- [B, 3, 3] + Returns: + array of (u,v,1) cam coordinates -- [B, 3, H, W] + """ + b, h, w = depth.size() + if (pixel_coords is None) or pixel_coords.size(2) != h or pixel_coords.size(3) != w: + set_id_grid(depth) + current_pixel_coords = pixel_coords[:,:,:h,:w].expand(b,3,h,w).contiguous().view(b, 3, -1) # [B, 3, H*W] + cam_coords = intrinsics_inv.bmm(current_pixel_coords).view(b, 3, h, w) + return cam_coords * depth.unsqueeze(1) + + +def cam2pixel(cam_coords, proj_c2p_rot, proj_c2p_tr, padding_mode): + """Transform coordinates in the camera frame to the pixel frame. + Args: + cam_coords: pixel coordinates defined in the first camera coordinates system -- [B, 4, H, W] + proj_c2p_rot: rotation matrix of cameras -- [B, 3, 4] + proj_c2p_tr: translation vectors of cameras -- [B, 3, 1] + Returns: + array of [-1,1] coordinates -- [B, 2, H, W] + """ + b, _, h, w = cam_coords.size() + cam_coords_flat = cam_coords.view(b, 3, -1) # [B, 3, H*W] + if proj_c2p_rot is not None: + pcoords = proj_c2p_rot.bmm(cam_coords_flat) + else: + pcoords = cam_coords_flat + + if proj_c2p_tr is not None: + pcoords = pcoords + proj_c2p_tr # [B, 3, H*W] + X = pcoords[:, 0] + Y = pcoords[:, 1] + Z = pcoords[:, 2].clamp(min=1e-3) + + X_norm = 2*(X / Z)/(w-1) - 1 # Normalized, -1 if on extreme left, 1 if on extreme right (x = w-1) [B, H*W] + Y_norm = 2*(Y / Z)/(h-1) - 1 # Idem [B, H*W] + if padding_mode == 'zeros': + X_mask = ((X_norm > 1)+(X_norm < -1)).detach() + X_norm[X_mask] = 2 # make sure that no point in warped image is a combinaison of im and gray + Y_mask = ((Y_norm > 1)+(Y_norm < -1)).detach() + Y_norm[Y_mask] = 2 + + pixel_coords = torch.stack([X_norm, Y_norm], dim=2) # [B, H*W, 2] + return pixel_coords.view(b,h,w,2) + + +def euler2mat(angle): + """Convert euler angles to rotation matrix. + + Reference: https://github.com/pulkitag/pycaffe-utils/blob/master/rot_utils.py#L174 + + Args: + angle: rotation angle along 3 axis (in radians) -- size = [B, 3] + Returns: + Rotation matrix corresponding to the euler angles -- size = [B, 3, 3] + """ + B = angle.size(0) + x, y, z = angle[:,0], angle[:,1], angle[:,2] + + cosz = torch.cos(z) + sinz = torch.sin(z) + + zeros = z.detach()*0 + ones = zeros.detach()+1 + zmat = torch.stack([cosz, -sinz, zeros, + sinz, cosz, zeros, + zeros, zeros, ones], dim=1).view(B, 3, 3) + + cosy = torch.cos(y) + siny = torch.sin(y) + + ymat = torch.stack([cosy, zeros, siny, + zeros, ones, zeros, + -siny, zeros, cosy], dim=1).view(B, 3, 3) + + cosx = torch.cos(x) + sinx = torch.sin(x) + + xmat = torch.stack([ones, zeros, zeros, + zeros, cosx, -sinx, + zeros, sinx, cosx], dim=1).view(B, 3, 3) + + rotMat = xmat.bmm(ymat).bmm(zmat) + return rotMat + + +def quat2mat(quat): + """Convert quaternion coefficients to rotation matrix. + + Args: + quat: first three coeff of quaternion of rotation. fourht is then computed to have a norm of 1 -- size = [B, 3] + Returns: + Rotation matrix corresponding to the quaternion -- size = [B, 3, 3] + """ + norm_quat = torch.cat([quat[:,:1].detach()*0 + 1, quat], dim=1) + norm_quat = norm_quat/norm_quat.norm(p=2, dim=1, keepdim=True) + w, x, y, z = norm_quat[:,0], norm_quat[:,1], norm_quat[:,2], norm_quat[:,3] + + B = quat.size(0) + + w2, x2, y2, z2 = w.pow(2), x.pow(2), y.pow(2), z.pow(2) + wx, wy, wz = w*x, w*y, w*z + xy, xz, yz = x*y, x*z, y*z + + rotMat = torch.stack([w2 + x2 - y2 - z2, 2*xy - 2*wz, 2*wy + 2*xz, + 2*wz + 2*xy, w2 - x2 + y2 - z2, 2*yz - 2*wx, + 2*xz - 2*wy, 2*wx + 2*yz, w2 - x2 - y2 + z2], dim=1).view(B, 3, 3) + return rotMat + + +def pose_vec2mat(vec, rotation_mode='euler'): + """ + Convert 6DoF parameters to transformation matrix. + + Args:s + vec: 6DoF parameters in the order of tx, ty, tz, rx, ry, rz -- [B, 6] + Returns: + A transformation matrix -- [B, 3, 4] + """ + translation = vec[:, :3].unsqueeze(-1) # [B, 3, 1] + rot = vec[:,3:] + if rotation_mode == 'euler': + rot_mat = euler2mat(rot) # [B, 3, 3] + elif rotation_mode == 'quat': + rot_mat = quat2mat(rot) # [B, 3, 3] + transform_mat = torch.cat([rot_mat, translation], dim=2) # [B, 3, 4] + return transform_mat + +def flow_warp(img, flow, padding_mode='zeros'): + """ + Inverse warp a source image to the target image plane. + + Args: + img: the source image (where to sample pixels) -- [B, 3, H, W] + flow: flow map of the target image -- [B, 2, H, W] + Returns: + Source image warped to the target image plane + """ + check_sizes(img, 'img', 'BCHW') + check_sizes(flow, 'flow', 'B2HW') + + bs, _, h, w = flow.size() + u = flow[:,0,:,:] + v = flow[:,1,:,:] + + grid_x = Variable(torch.arange(0, w).view(1, 1, w).expand(1,h,w), requires_grad=False).type_as(u).expand_as(u) # [bs, H, W] + grid_y = Variable(torch.arange(0, h).view(1, h, 1).expand(1,h,w), requires_grad=False).type_as(v).expand_as(v) # [bs, H, W] + + X = grid_x + u + Y = grid_y + v + + X = 2*(X/(w-1.0) - 0.5) + Y = 2*(Y/(h-1.0) - 0.5) + grid_tf = torch.stack((X,Y), dim=3) + img_tf = torch.nn.functional.grid_sample(img, grid_tf, padding_mode=padding_mode) + + return img_tf + + +def pose2flow(depth, pose, intrinsics, intrinsics_inv, rotation_mode='euler', padding_mode=None): + """ + Converts pose parameters to rigid optical flow + """ + check_sizes(depth, 'depth', 'BHW') + check_sizes(pose, 'pose', 'B6') + check_sizes(intrinsics, 'intrinsics', 'B33') + check_sizes(intrinsics_inv, 'intrinsics', 'B33') + assert(intrinsics_inv.size() == intrinsics.size()) + + bs, h, w = depth.size() + + grid_x = Variable(torch.arange(0, w).view(1, 1, w).expand(1,h,w), requires_grad=False).type_as(depth).expand_as(depth) # [bs, H, W] + grid_y = Variable(torch.arange(0, h).view(1, h, 1).expand(1,h,w), requires_grad=False).type_as(depth).expand_as(depth) # [bs, H, W] + + cam_coords = pixel2cam(depth, intrinsics_inv) # [B,3,H,W] + pose_mat = pose_vec2mat(pose, rotation_mode) # [B,3,4] + + # Get projection matrix for tgt camera frame to source pixel frame + proj_cam_to_src_pixel = intrinsics.bmm(pose_mat) # [B, 3, 4] + src_pixel_coords = cam2pixel(cam_coords, proj_cam_to_src_pixel[:,:,:3], proj_cam_to_src_pixel[:,:,-1:], padding_mode) # [B,H,W,2] + + X = (w-1)*(src_pixel_coords[:,:,:,0]/2.0 + 0.5) - grid_x + Y = (h-1)*(src_pixel_coords[:,:,:,1]/2.0 + 0.5) - grid_y + + return torch.stack((X,Y), dim=1) + +def flow2oob(flow): + check_sizes(flow, 'flow', 'B2HW') + + bs, _, h, w = flow.size() + u = flow[:,0,:,:] + v = flow[:,1,:,:] + + grid_x = Variable(torch.arange(0, w).view(1, 1, w).expand(1,h,w), requires_grad=False).type_as(u).expand_as(u) # [bs, H, W] + grid_y = Variable(torch.arange(0, h).view(1, h, 1).expand(1,h,w), requires_grad=False).type_as(v).expand_as(v) # [bs, H, W] + + X = grid_x + u + Y = grid_y + v + + X = 2*(X/(w-1.0) - 0.5) + Y = 2*(Y/(h-1.0) - 0.5) + oob = (X.abs()>1).add(Y.abs()>1)>0 + return oob + +def occlusion_mask(grid, depth): + check_sizes(img, 'grid', 'BHW2') + check_sizes(depth, 'depth', 'BHW') + + mask = grid + + return mask + + + +def inverse_warp(img, depth, pose, intrinsics, intrinsics_inv, rotation_mode='euler', padding_mode='zeros'): + """ + Inverse warp a source image to the target image plane. + + Args: + img: the source image (where to sample pixels) -- [B, 3, H, W] + depth: depth map of the target image -- [B, H, W] + pose: 6DoF pose parameters from target to source -- [B, 6] + intrinsics: camera intrinsic matrix -- [B, 3, 3] + intrinsics_inv: inverse of the intrinsic matrix -- [B, 3, 3] + Returns: + Source image warped to the target image plane + """ + check_sizes(img, 'img', 'B3HW') + check_sizes(depth, 'depth', 'BHW') + check_sizes(pose, 'pose', 'B6') + check_sizes(intrinsics, 'intrinsics', 'B33') + check_sizes(intrinsics_inv, 'intrinsics', 'B33') + + assert(intrinsics_inv.size() == intrinsics.size()) + + batch_size, _, img_height, img_width = img.size() + + cam_coords = pixel2cam(depth, intrinsics_inv) # [B,3,H,W] + + pose_mat = pose_vec2mat(pose, rotation_mode) # [B,3,4] + + # Get projection matrix for tgt camera frame to source pixel frame + proj_cam_to_src_pixel = intrinsics.bmm(pose_mat) # [B, 3, 4] + + src_pixel_coords = cam2pixel(cam_coords, proj_cam_to_src_pixel[:,:,:3], proj_cam_to_src_pixel[:,:,-1:], padding_mode) # [B,H,W,2] + projected_img = torch.nn.functional.grid_sample(img, src_pixel_coords, padding_mode=padding_mode) + + return projected_img diff --git a/data/source_files/clean/6968fa78ff3c.py b/data/source_files/clean/6968fa78ff3c.py new file mode 100644 index 0000000000000000000000000000000000000000..d4cf41c3907f30d0f8d4b3c715caa3ef127581dc --- /dev/null +++ b/data/source_files/clean/6968fa78ff3c.py @@ -0,0 +1,153 @@ +# -*- coding: utf-8 -*- +# Copyright 2012 Viewfinder Inc. All Rights Reserved. + +"""Apple Push Notification service utilities. + +Original copyright for this code: https://github.com/jayridge/apnstornado + + TokenToBinary(): converts a hex-encoded token into a binary value + CreateMessage(): formats a binary APNs message from parameters + ParseResponse(): parses APNs binary response for status & identifier + ErrorStatusToString(): converts error status to error message +""" + +__author__ = 'spencer@emailscrubbed.com (Spencer Kimball)' + +import base64 +import json +import struct +import time + +from tornado import escape + + +_MAX_PAYLOAD_BYTES = 256 +"""Maximum number of bytes in the APNS payload.""" + +_ELLIPSIS_BYTES = escape.utf8(u'…') +"""UTF-8 encoding of the Unicode ellipsis character.""" + + +def TokenToBinary(token): + return base64.b64decode(token) + + +def TokenFromBinary(bin_token): + return base64.b64encode(bin_token) + +def CreateMessage(token, alert=None, badge=None, sound=None, + identifier=0, expiry=None, extra=None, allow_truncate=True): + token = TokenToBinary(token) + if len(token) != 32: + raise ValueError, u'Token must be a 32-byte binary string.' + if (alert is not None) and (not isinstance(alert, (basestring, dict))): + raise ValueError, u'Alert message must be a string or a dictionary.' + if expiry is None: + expiry = long(time.time() + 365 * 86400) + + # Start by determining the length of the UTF-8 encoded JSON with no alert text. This allows us to + # determine how much space is left for the message. + # 'content-available': 1 is necessary to trigger iOS 7's background download processing. + aps = { 'alert' : '', 'content-available': 1 } + if badge is not None: + aps['badge'] = badge + if sound is not None: + aps['sound'] = sound + + data = { 'aps' : aps } + if extra is not None: + data.update(extra) + + # Create compact JSON representation with no extra space and no escaping of non-ascii chars (i.e. use + # direct UTF-8 representation rather than "\u1234" escaping). This maximizes the amount of space that's + # left for the alert text. + encoded = escape.utf8(json.dumps(escape.recursive_unicode(data), separators=(',', ':'), ensure_ascii=False)) + bytes_left = _MAX_PAYLOAD_BYTES - len(encoded) + if allow_truncate and isinstance(alert, basestring): + alert = _TruncateAlert(alert, bytes_left) + elif alert and len(escape.utf8(alert)) > bytes_left: + raise ValueError, u'max payload(%d) exceeded: %d' % (_MAX_PAYLOAD_BYTES, len(escape.utf8(alert))) + + # Now re-encode including the alert text. + aps['alert'] = alert + encoded = escape.utf8(json.dumps(escape.recursive_unicode(data), separators=(',', ':'), ensure_ascii=False)) + length = len(encoded) + assert length <= _MAX_PAYLOAD_BYTES, (encoded, length) + + return struct.pack('!bIIH32sH%(length)ds' % { 'length' : length }, + 1, identifier, expiry, + 32, token, length, encoded) + + +def ParseResponse(bytes): + if len(bytes) != 6: + raise ValueError, u'response must be a 6-byte binary string.' + + command, status, identifier = struct.unpack_from('!bbI', bytes, 0) + if command != 8: + raise ValueError, u'response command must equal 8.' + + return status, identifier, ErrorStatusToString(status) + + +def ErrorStatusToString(status): + if status is 0: + return 'No errors encountered' + elif status is 1: + return 'Processing error' + elif status is 2: + return 'Missing device token' + elif status is 3: + return 'Missing topic' + elif status is 4: + return 'Missing payload' + elif status is 5: + return 'Invalid token size' + elif status is 6: + return 'Invalid topic size' + elif status is 7: + return 'Invalid payload size' + elif status is 8: + return 'Invalid token' + elif status is 255: + return 'None (unknown)' + else: + return '' + + +def _TruncateAlert(alert, max_bytes): + """Converts the alert text to UTF-8 encoded JSON format, which is how + the alert will be stored in the APNS payload. If the number of + resulting bytes exceeds "max_bytes", then truncates the alert text + at a Unicode character boundary, taking care not to split JSON + escape sequences. Returns the truncated UTF-8 encoded alert text, + including a trailing ellipsis character. + """ + alert_json = escape.utf8(json.dumps(escape.recursive_unicode(alert), ensure_ascii=False)) + + # Strip quotes added by JSON. + alert_json = alert_json[1:-1] + + # Check if alert fits with no truncation. + if len(alert_json) <= max_bytes: + return escape.utf8(alert) + + # Make room for an appended ellipsis. + assert max_bytes >= len(_ELLIPSIS_BYTES), 'max_bytes must be at least %d' % len(_ELLIPSIS_BYTES) + max_bytes -= len(_ELLIPSIS_BYTES) + + # Truncate the JSON UTF8 string at a Unicode character boundary. + truncated = alert_json[:max_bytes].decode('utf-8', errors='ignore') + + # If JSON escape sequences were split, then the truncated string may not be valid JSON. Keep + # chopping trailing characters until the truncated string is valid JSON. It may take several + # tries, such as in the case where a "\u1234" sequence has been split. + while True: + try: + alert = json.loads(u'"%s"' % truncated) + break + except Exception: + truncated = truncated[:-1] + + # Return the UTF-8 encoding of the alert with the ellipsis appended to it. + return escape.utf8(alert) + _ELLIPSIS_BYTES diff --git a/data/source_files/clean/69ef06a022e9.py b/data/source_files/clean/69ef06a022e9.py new file mode 100644 index 0000000000000000000000000000000000000000..6b36c2213b18abb5b4d5cac68e49cf0ee92025a0 --- /dev/null +++ b/data/source_files/clean/69ef06a022e9.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python + +# Copyright 1996-2021 Cyberbotics Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Test that the C, C++ and shader source code is compliant with ClangFormat.""" +import unittest + +import difflib +import os +import subprocess + +from io import open + +from distutils.spawn import find_executable + + +class TestClangFormat(unittest.TestCase): + """Unit test for ClangFormat compliance.""" + + def setUp(self): + """Set up called before each test.""" + self.WEBOTS_HOME = os.environ['WEBOTS_HOME'] + + def _runClangFormat(self, f): + """Run clang format on 'f' file.""" + return subprocess.check_output(['clang-format', '-style=file', f]) + + def test_clang_format_is_correctly_installed(self): + """Test ClangFormat is correctly installed.""" + self.assertTrue( + find_executable('clang-format') is not None, + msg='ClangFormat is not installed on this computer.' + ) + clangFormatConfigFile = self.WEBOTS_HOME + os.sep + '.clang-format' + self.assertTrue( + os.path.exists(clangFormatConfigFile), + msg=clangFormatConfigFile + ' not found.' + ) + + def test_sources_are_clang_format_compliant(self): + """Test that sources are ClangFormat compliant.""" + directories = [ + 'include/controller', + 'projects', + 'resources/projects', + 'resources/wren/shaders', + 'tests', + 'include/wren', + 'src/controller/c', + 'src/controller/cpp', + 'src/license/sign', + 'src/webots', + 'src/wren' + ] + skippedPaths = [ + 'projects/default/controllers/ros/include', + 'projects/robots/gctronic/e-puck/transfer', + 'projects/robots/mobsya/thymio/controllers/thymio2_aseba/aseba', + 'projects/robots/mobsya/thymio/libraries/dashel', + 'projects/robots/mobsya/thymio/libraries/dashel-src', + 'projects/robots/robotis/darwin-op/libraries/libssh', + 'projects/robots/robotis/darwin-op/libraries/libzip', + 'projects/robots/robotis/darwin-op/libraries/robotis-op2/robotis', + 'projects/robots/robotis/darwin-op/remote_control/libjpeg-turbo', + 'projects/vehicles/controllers/ros_automobile/include', + 'src/webots/external' + ] + skippedFiles = [ + 'projects/robots/robotis/darwin-op/plugins/remote_controls/robotis-op2_tcpip/stb_image.h' + ] + skippedDirectories = [ + 'build', + 'python', + 'java' + ] + extensions = ['c', 'h', 'cpp', 'hpp', 'cc', 'hh', 'c++', 'h++', 'vert', 'frag'] + modified_files = os.path.join(self.WEBOTS_HOME, 'tests', 'sources', 'modified_files.txt') + sources = [] + if os.path.isfile(modified_files): + with open(modified_files, 'r') as file: + for line in file: + line = line.strip() + extension = os.path.splitext(line)[1][1:].lower() + if extension not in extensions: + continue + found = False + for directory in directories: + if line.startswith(directory): + found = True + break + if not found: + continue + found = False + for directory in skippedPaths + skippedFiles: + if line.startswith(directory): + found = True + break + if found: + continue + for directory in skippedDirectories: + currentDirectories = line.split(os.sep) + if directory in currentDirectories: + found = True + if found: + continue + sources.append(line.replace('/', os.sep)) + else: + for directory in directories: + path = self.WEBOTS_HOME + os.sep + directory.replace('/', os.sep) + for rootPath, dirNames, fileNames in os.walk(path): + shouldContinue = False + for path in skippedPaths: + if rootPath.startswith(self.WEBOTS_HOME + os.sep + path.replace('/', os.sep)): + shouldContinue = True + break + for directory in skippedDirectories: + currentDirectories = rootPath.replace(self.WEBOTS_HOME, '').split(os.sep) + if directory in currentDirectories: + shouldContinue = True + break + if shouldContinue: + continue + for fileName in fileNames: + extension = os.path.splitext(fileName)[1][1:].lower() + if extension not in extensions: + continue + path = os.path.normpath(os.path.join(rootPath, fileName)) + skipFile = False + for file in skippedFiles: + if os.path.normpath((self.WEBOTS_HOME + os.sep + file.replace('/', os.sep))) == path: + skipFile = True + break + if not skipFile: + sources.append(path) + curdir = os.getcwd() + os.chdir(self.WEBOTS_HOME) + for source in sources: + diff = '' + with open(source, encoding='utf8') as file: + try: + for line in difflib.context_diff(self._runClangFormat(source).decode('utf-8').splitlines(), + file.read().splitlines()): + diff += line + '\n' + except UnicodeDecodeError: + self.assertTrue(False, msg='utf-8 decode problem in %s' % source) + self.assertTrue( + len(diff) == 0, + msg='Source file "%s" is not compliant with ClangFormat:\n\nDIFF:%s' % (source, diff) + ) + os.chdir(curdir) + + +if __name__ == '__main__': + unittest.main() diff --git a/data/source_files/clean/6bc6fb7ee908.py b/data/source_files/clean/6bc6fb7ee908.py new file mode 100644 index 0000000000000000000000000000000000000000..0ad85408ba998c356a370a0f1582159d01f77a69 --- /dev/null +++ b/data/source_files/clean/6bc6fb7ee908.py @@ -0,0 +1,251 @@ +""" +Module for working with named and anonymous maps + +.. module:: carto.maps + :platform: Unix, Windows + :synopsis: Module for working with named and anonymous maps + +.. moduleauthor:: Daniel Carrion +.. moduleauthor:: Alberto Romeu + + +""" + +try: + from urllib.parse import urljoin +except ImportError: + from urlparse import urljoin + +from pyrestcli.resources import Manager, Resource + +from .exceptions import CartoException, CartoRateLimitException + +API_VERSION = "v1" +NAMED_API_ENDPOINT = "api/{api_version}/map/named/" +ANONYMOUS_API_ENDPOINT = "api/{api_version}/map/" + + +class BaseMap(Resource): + """ + Base class for NamedMap and AnonymousMap + """ + def __init__(self, auth_client): + """ + Initializes a BaseMap instance + :param auth_client: Auth client + """ + super(BaseMap, self).__init__(auth_client) + + def get_tile_url(self, x, y, z, layer_id=None, feature_id=None, + filter=None, extension="png"): + """ + Prepares a URL to get data (raster or vector) from a NamedMap or + AnonymousMap + + :param x: The x tile + :param y: The y tile + :param z: The zoom level + :param layer_id: Can be a number (referring to the # layer of your \ + map), all layers of your map, or a list of layers. + To show just the basemap layer, enter the value 0 + To show the first layer, enter the value 1 + To show all layers, enter the value 'all' + To show a list of layers, enter the comma separated \ + layer value as '0,1,2' + :param feature_id: The id of the feature + :param filter: The filter to be applied to the layer + :param extension: The format of the data to be retrieved: png, mvt, ... + :type x: int + :type y: int + :type z: int + :type layer_id: str + :type feature_id: str + :type filter: str + :type extension: str + + :return: A URL to download data + :rtype: str + + :raise: CartoException + """ + base_url = self.client.base_url + self.Meta.collection_endpoint + template_id = self.template_id if hasattr(self, 'template_id') \ + else self.layergroupid + if layer_id is not None and feature_id is not None: + url = urljoin(base_url, + "{template_id}/{layer}/attributes/{feature_id}"). \ + format(template_id=template_id, + layer=layer_id, + feature_id=feature_id) + elif layer_id is not None and filter is not None: + url = urljoin(base_url, + "{template_id}/{filter}/{z}/{x}/{y}.{extension}"). \ + format(template_id=template_id, + filter=filter, + z=z, x=x, y=y, + extension=extension) + elif layer_id is not None: + url = urljoin(base_url, + "{template_id}/{layer}/{z}/{x}/{y}.{extension}"). \ + format(template_id=template_id, + layer=layer_id, + z=z, x=x, y=y, + extension=extension) + else: + url = urljoin(base_url, "{template_id}/{z}/{x}/{y}.{extension}"). \ + format( + template_id=template_id, + z=z, x=x, y=y, + extension=extension) + + if hasattr(self, 'auth') and self.auth is not None \ + and len(self.auth['valid_tokens']) > 0: + url = urljoin(url, "?auth_token={auth_token}"). \ + format(auth_token=self.auth['valid_tokens'][0]) + + return url + + +class NamedMap(BaseMap): + """ + Equivalent to creating a named map in CARTO. + """ + class Meta: + collection_endpoint = NAMED_API_ENDPOINT.format( + api_version=API_VERSION) + id_field = "template_id" + name_field = "name" + + def __str__(self): + try: + return unicode(self.name).encode("utf-8") + except AttributeError: + return super(NamedMap, self).__repr__() + + def __init__(self, auth_client): + """ + Initializes a NamedMap instance + :param auth_client: Auth client + """ + self.fields = ["version", + "name", + "auth", + "placeholders", + "layergroup", + "view"] + # Optional fields can be assigned by some responses create, instantiate, + # but are not saved to the backend + self.optional_fields = ["template_id", "layergroupid", "last_updated"] + super(NamedMap, self).__init__(auth_client) + + def instantiate(self, params, auth=None): + """ + Allows you to fetch the map tiles of a created map + + :param params: The json with the styling info for the named map + :param auth: The auth client + :type params: dict + :type auth: :class:`carto.auth.APIKeyAuthClient` + + :return: + + :raise: CartoException + """ + try: + endpoint = (self.Meta.collection_endpoint + + "{template_id}"). \ + format(template_id=self.template_id) + if (auth is not None): + endpoint = (endpoint + "?auth_token={auth_token}"). \ + format(auth_token=auth) + + self.send(endpoint, "POST", json=params) + except CartoRateLimitException as e: + raise e + except Exception as e: + raise CartoException(e) + + def update_from_dict(self, attribute_dict): + """ + Method overriden from the base class + + """ + if 'template' in attribute_dict: + self.update_from_dict(attribute_dict['template']) + setattr(self, + self.Meta.id_field, attribute_dict['template']['name']) + return + try: + for k, v in attribute_dict.items(): + if k in self.fields + self.optional_fields: + setattr(self, k, v) + except Exception: + setattr(self, self.Meta.id_field, attribute_dict) + + +class AnonymousMap(BaseMap): + """ + Equivalent to creating an anonymous map in CARTO. + """ + class Meta: + collection_endpoint = ANONYMOUS_API_ENDPOINT.format( + api_version=API_VERSION) + + def __init__(self, auth_client): + """ + Initializes an AnonymousMap instance + :param auth_client: Auth client + """ + self.optional_fields = ['cdn_url', 'last_updated', 'layergroupid', 'metadata'] + super(AnonymousMap, self).__init__(auth_client) + + def instantiate(self, params): + """ + Allows you to fetch the map tiles of a created map + + :param params: The json with the styling info for the named map + :type params: dict + + :return: + + :raise: CartoException + """ + try: + self.send(self.Meta.collection_endpoint, "POST", json=params) + except CartoRateLimitException as e: + raise e + except Exception as e: + raise CartoException(e) + + def update_from_dict(self, attribute_dict): + for k, v in attribute_dict.items(): + if k in self.fields + self.optional_fields: + setattr(self, k, v) + + +class NamedMapManager(Manager): + """ + Manager for the NamedMap class + """ + resource_class = NamedMap + json_collection_attribute = "template_ids" + + def create(self, **kwargs): + """ + Creates a named map + + :param kwargs: Attributes for creating the named map. Specifically + an attribute `template` must contain the JSON object + defining the named map + :type kwargs: kwargs + + :return: New named map object + :rtype: NamedMap + + :raise: CartoException + """ + resource = self.resource_class(self.client) + resource.update_from_dict(kwargs['template']) + resource.save(force_create=True) + + return resource diff --git a/data/source_files/clean/6bd49a8ce27c.py b/data/source_files/clean/6bd49a8ce27c.py new file mode 100644 index 0000000000000000000000000000000000000000..0a0650316e52ee5d4a9ff4c95b3303130df01427 --- /dev/null +++ b/data/source_files/clean/6bd49a8ce27c.py @@ -0,0 +1,82 @@ +# Lint as: python3 +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""Tests for car_layers.""" + +from lingvo import compat as tf +from lingvo.core import py_utils +from lingvo.core import test_utils +from lingvo.tasks.car import car_layers + + +class CarLayersTest(test_utils.TestCase): + + def _testNestedOutShape(self, p, input_shape, expected_shape): + batch_size, num_points, _ = input_shape + g = tf.Graph() + with g.as_default(): + net = p.Instantiate() + input_data = py_utils.NestedMap( + points=tf.random.uniform(input_shape[:-1] + (3,)), + features=tf.random.uniform(input_shape), + padding=tf.zeros((batch_size, num_points), dtype=tf.float32), + label=tf.random.uniform((batch_size,), + minval=0, + maxval=16, + dtype=tf.int32)) + result = net.FPropDefaultTheta(input_data) + with self.session(graph=g): + self.evaluate(tf.global_variables_initializer()) + np_result = self.evaluate(result) + grouped_points_result = np_result.grouped_points + self.assertEqual(grouped_points_result.features.shape, + expected_shape.grouped_points.features) + self.assertEqual(grouped_points_result.points.shape, + expected_shape.grouped_points.points) + self.assertEqual(grouped_points_result.padding.shape, + expected_shape.grouped_points.padding) + + query_points_result = np_result.query_points + self.assertEqual(query_points_result.points.shape, + expected_shape.query_points.points) + self.assertEqual(query_points_result.padding.shape, + expected_shape.query_points.padding) + + def testSamplingAndGrouping(self): + for num_points in [1024, 256]: + for input_dims in [3, 6, 9]: + for group_size in [32, 64]: + p = car_layers.SamplingAndGroupingLayer.Params().Set( + name='SampleGroupTest', + num_samples=256, + ball_radius=0.2, + group_size=group_size, + sample_neighbors_uniformly=True) + grouped_points_shape = py_utils.NestedMap( + features=(8, 256, group_size, input_dims), + points=(8, 256, group_size, 3), + padding=(8, 256, group_size)) + query_points_shape = py_utils.NestedMap( + points=(8, 256, 3), padding=(8, 256)) + expected_shape = py_utils.NestedMap({ + 'grouped_points': grouped_points_shape, + 'query_points': query_points_shape + }) + self._testNestedOutShape(p, (8, num_points, input_dims), + expected_shape) + + +if __name__ == '__main__': + tf.test.main() diff --git a/data/source_files/clean/6da87f727811.py b/data/source_files/clean/6da87f727811.py new file mode 100644 index 0000000000000000000000000000000000000000..7c6ea33d579371cc05a40f107c83af6d179fcd7a --- /dev/null +++ b/data/source_files/clean/6da87f727811.py @@ -0,0 +1,52 @@ +'''Entry point into the pommerman module''' +import gym +import inspect +from . import agents +from . import configs +from . import constants +from . import forward_model +from . import helpers +from . import utility +from . import network + +gym.logger.set_level(40) +REGISTRY = None + + +def _register(): + global REGISTRY + REGISTRY = [] + for name, f in inspect.getmembers(configs, inspect.isfunction): + if not name.endswith('_env'): + continue + + config = f() + gym.envs.registration.register( + id=config['env_id'], + entry_point=config['env_entry_point'], + kwargs=config['env_kwargs'] + ) + REGISTRY.append(config['env_id']) + + +# Register environments with gym +_register() + +def make(config_id, agent_list, game_state_file=None, render_mode='human'): + '''Makes the pommerman env and registers it with gym''' + assert config_id in REGISTRY, "Unknown configuration '{}'. " \ + "Possible values: {}".format(config_id, REGISTRY) + env = gym.make(config_id) + + for id_, agent in enumerate(agent_list): + assert isinstance(agent, agents.BaseAgent) + # NOTE: This is IMPORTANT so that the agent character is initialized + agent.init_agent(id_, env.spec._kwargs['game_type']) + + env.set_agents(agent_list) + env.set_init_game_state(game_state_file) + env.set_render_mode(render_mode) + return env + + +from . import cli diff --git a/data/source_files/clean/6f07e5ed698f.py b/data/source_files/clean/6f07e5ed698f.py new file mode 100644 index 0000000000000000000000000000000000000000..81118158b2fe646b1e3b2899f2e0b74a521117c9 --- /dev/null +++ b/data/source_files/clean/6f07e5ed698f.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import json + +from alipay.aop.api.constant.ParamConstants import * +from alipay.aop.api.domain.CloudbusUserInfo import CloudbusUserInfo + + +class MetroOdItem(object): + + def __init__(self): + self._dest_geo = None + self._od = None + self._time = None + self._user_info = None + self._week_od = None + self._work_od = None + + @property + def dest_geo(self): + return self._dest_geo + + @dest_geo.setter + def dest_geo(self, value): + self._dest_geo = value + @property + def od(self): + return self._od + + @od.setter + def od(self, value): + self._od = value + @property + def time(self): + return self._time + + @time.setter + def time(self, value): + self._time = value + @property + def user_info(self): + return self._user_info + + @user_info.setter + def user_info(self, value): + if isinstance(value, CloudbusUserInfo): + self._user_info = value + else: + self._user_info = CloudbusUserInfo.from_alipay_dict(value) + @property + def week_od(self): + return self._week_od + + @week_od.setter + def week_od(self, value): + self._week_od = value + @property + def work_od(self): + return self._work_od + + @work_od.setter + def work_od(self, value): + self._work_od = value + + + def to_alipay_dict(self): + params = dict() + if self.dest_geo: + if hasattr(self.dest_geo, 'to_alipay_dict'): + params['dest_geo'] = self.dest_geo.to_alipay_dict() + else: + params['dest_geo'] = self.dest_geo + if self.od: + if hasattr(self.od, 'to_alipay_dict'): + params['od'] = self.od.to_alipay_dict() + else: + params['od'] = self.od + if self.time: + if hasattr(self.time, 'to_alipay_dict'): + params['time'] = self.time.to_alipay_dict() + else: + params['time'] = self.time + if self.user_info: + if hasattr(self.user_info, 'to_alipay_dict'): + params['user_info'] = self.user_info.to_alipay_dict() + else: + params['user_info'] = self.user_info + if self.week_od: + if hasattr(self.week_od, 'to_alipay_dict'): + params['week_od'] = self.week_od.to_alipay_dict() + else: + params['week_od'] = self.week_od + if self.work_od: + if hasattr(self.work_od, 'to_alipay_dict'): + params['work_od'] = self.work_od.to_alipay_dict() + else: + params['work_od'] = self.work_od + return params + + @staticmethod + def from_alipay_dict(d): + if not d: + return None + o = MetroOdItem() + if 'dest_geo' in d: + o.dest_geo = d['dest_geo'] + if 'od' in d: + o.od = d['od'] + if 'time' in d: + o.time = d['time'] + if 'user_info' in d: + o.user_info = d['user_info'] + if 'week_od' in d: + o.week_od = d['week_od'] + if 'work_od' in d: + o.work_od = d['work_od'] + return o + + diff --git a/data/source_files/clean/6f822a50fb9a.py b/data/source_files/clean/6f822a50fb9a.py new file mode 100644 index 0000000000000000000000000000000000000000..86cdf766574c9c743ff631f5d4070feb9f763d2a --- /dev/null +++ b/data/source_files/clean/6f822a50fb9a.py @@ -0,0 +1,196 @@ +# Copyright (c) 2016-present, Facebook, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +############################################################################## + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals +import numpy as np +from caffe2.python import core, workspace +from caffe2.python.test_util import TestCase, rand_array + + +class TestPartitionOps(TestCase): + + def test_configs(self): + # (main dims, partitions, main type, [list of (extra dims, type)]) + configs = [ + ((10, ), 3), + ((4, ), 10), + ((10, 10), 4), + ((100, ), 2), + ((5, ), 1), + ((1, ), 1), + ((2, 10), 2), + ] + suffixes = [ + [], + [((2, 2), np.float32)], + [((3, ), np.int64), ((2, ), np.float32)], + ] + return [ + (main_dims, parts, main_type, extra, pack) + for main_dims, parts in configs + for main_type in [np.int32, np.int64] for extra in suffixes + for pack in [False, True] + ] + + def testPartition(self): + for main_dims, parts, main_type, extra_ins, pack in self.test_configs(): + ins = ['in' + str(i) for i in range(1 + len(extra_ins))] + outs = [ + 'in{}_p{}'.format(j, i) + for i in range(parts) for j in range(1 + len(extra_ins)) + ] + op = core.CreateOperator( + 'Partition', ins, outs, pack_first_input=(1 if pack else 0)) + x = [] + for i, (dims, t) in enumerate([((), main_type)] + extra_ins): + if t in [np.float32, np.float64]: + d = rand_array(*(main_dims + dims)) + else: + d = np.random.randint(-100, 100, (main_dims + dims)) + d = d.astype(t) + workspace.FeedBlob(ins[i], d) + x.append(d) + + def sharding(x): + # numpy has proper modulo op that yields non-negative results + shards = (x[0] % parts).reshape([-1]) + out = [] + for i in range(parts): + for ind, v in enumerate(x): + suffix_shape = v.shape[len(x[0].shape):] + accum = [] + data = v.reshape((-1, ) + suffix_shape) + + if pack and ind == 0: + data = data // parts + + for j, s in enumerate(shards): + if s == i: + accum.append(data[j]) + + def join(a): + if not a: + return np.empty(shape=(0, ) + suffix_shape) + return np.stack(a) + + out.append(join(accum)) + return out + + workspace.RunOperatorOnce(op) + ref = sharding(x) + print(x) + print(ref) + for name, expected in zip(outs, ref): + np.testing.assert_array_equal( + expected, workspace.FetchBlob(name) + ) + + # test inverse operation (GatherByKey) + if len(main_dims) == 1: + # currently only 1D key tensor supported + for i in range(len(extra_ins)): + expected_out = ins[i + 1] + gather_ins = [ins[0]] + [ + outs[len(ins) * p + i + 1] for p in range(parts)] + actual_out = expected_out + '_actual' + op = core.CreateOperator( + 'GatherByKey', gather_ins, actual_out) + workspace.RunOperatorOnce(op) + expected = workspace.FetchBlob(expected_out) + actual = workspace.FetchBlob(actual_out) + np.testing.assert_array_equal(expected, actual) + + + def testLengthsPartition(self): + for main_dims, parts, main_type, extra_ins, pack in self.test_configs(): + # For LengthsSharding only 1-D tensors supported as a first input + if len(main_dims) > 1: + continue + ins = ['in' + str(i) for i in range(2 + len(extra_ins))] + outs = [ + 'in{}_p{}'.format(j, i) + for i in range(parts) for j in range(2 + len(extra_ins)) + ] + op = core.CreateOperator( + 'LengthsPartition', ins, outs, + pack_first_input=(1 if pack else 0) + ) + x = [] + for i, (dims, t) in enumerate([((), main_type)] + extra_ins): + if t in [np.float32, np.float64]: + d = rand_array(*(main_dims + dims)) + else: + d = np.random.randint(-100, 100, (main_dims + dims)) + d = d.astype(t) + workspace.FeedBlob(ins[i + 1], d) + x.append(d) + + # Randomly generate length tensor as well + elements = np.random.randint(2, 10) + lengths = [] + total_length = 0 + for _ in range(elements - 1): + lengths.append(np.random.randint(main_dims[0] - total_length)) + total_length += lengths[-1] + lengths.append(main_dims[0] - total_length) + workspace.FeedBlob(ins[0], np.array(lengths, dtype=np.int32)) + + def sharding(x): + # numpy has proper modulo op that yields non-negative results + shards = (x[0] % parts).reshape([-1]) + out = [] + for i in range(parts): + idx = 0 + sharded_lengths = np.zeros(elements) + for ind, length in enumerate(lengths): + for _ in range(length): + if shards[idx] == i: + sharded_lengths[ind] += 1 + idx += 1 + out.append(sharded_lengths) + + for ind, v in enumerate(x): + suffix_shape = v.shape[len(x[0].shape):] + accum = [] + data = v.reshape((-1, ) + suffix_shape) + + if pack and ind == 0: + data = data // parts + + for j, s in enumerate(shards): + if s == i: + accum.append(data[j]) + + def join(a): + if not a: + return np.empty(shape=(0, ) + suffix_shape) + return np.stack(a) + + out.append(join(accum)) + return out + + workspace.RunOperatorOnce(op) + ref = sharding(x) + for name, expected in zip(outs, ref): + np.testing.assert_array_equal( + expected, workspace.FetchBlob(name) + ) + +if __name__ == "__main__": + import unittest + unittest.main() diff --git a/data/source_files/clean/71e2ec05a4ce.py b/data/source_files/clean/71e2ec05a4ce.py new file mode 100644 index 0000000000000000000000000000000000000000..863f656903c4148e82b3b4fd5343ee724e111ab6 --- /dev/null +++ b/data/source_files/clean/71e2ec05a4ce.py @@ -0,0 +1,84 @@ +""" + Copyright 2019 Samsung SDS + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" + +from brightics.common.utils import check_required_parameters +from brightics.common.exception import BrighticsFunctionException +from .data import regex_format_dict +import re + + +def regex(table, **params): + check_required_parameters(_regex, params, ['table']) + return _regex(table, **params) + + +def _regex(table, input_cols, transformation_mode='extract', find_mode='all', pattern='', + user_dict_pattern='', custom_pattern='', replacement_string='', user_dict=None): + out_table = table.copy() + pattern_dict = regex_format_dict.pattern_dict + user_pattern_dict = {} + if user_dict is not None: + user_patterns = user_dict.values + for user_pattern in user_patterns: + user_pattern_name = user_pattern[0] + user_pattern_content = user_pattern[1] + user_pattern_dict[user_pattern_name] = user_pattern_dict.get(user_pattern_name, []) + [user_pattern_content] + user_pattern_dict = {key: r'|'.join(value) for key, value in user_pattern_dict.items()} + + if pattern == '': + raise BrighticsFunctionException.from_errors([{'0100': "Please choose a pattern."}]) + if pattern == 'custom': + raw_pattern = custom_pattern + elif pattern == 'user_dictionary': + raw_pattern = user_pattern_dict.get(user_dict_pattern) + if raw_pattern is None: + raise BrighticsFunctionException.from_errors( + [{'0100': user_dict_pattern + " is not a valid pattern name in the user dictionary."}]) + else: + raw_pattern = pattern_dict.get(pattern) + regex_pattern = re.compile(raw_pattern) + + def transformation(text): + if transformation_mode == 'extract': + if find_mode == 'first': + result = regex_pattern.search(text) + if result is None: + return "" + else: + return result.group() + else: # find_mode == 'all' + return regex_pattern.findall(text) + elif transformation_mode == 'replace': + if find_mode == 'first': + return regex_pattern.sub(replacement_string, text, 1) + else: # find_mode == 'all' + return regex_pattern.sub(replacement_string, text) + elif transformation_mode == 'remove': + if find_mode == 'first': + return regex_pattern.sub("", text, 1) + else: # find_mode == 'all' + return regex_pattern.sub("", text) + else: # transformation_mode == 'split' + if find_mode == 'first': + return regex_pattern.split(text, 1) + else: # find_mode == 'all' + return regex_pattern.split(text) + + for col in input_cols: + result_col = table[col].apply(transformation) + out_table['regex_' + col] = result_col + + return {'out_table': out_table} diff --git a/data/source_files/clean/7645f390c515.py b/data/source_files/clean/7645f390c515.py new file mode 100644 index 0000000000000000000000000000000000000000..7cc70ea72109b3602fc21ef2eb53e2e3c1469770 --- /dev/null +++ b/data/source_files/clean/7645f390c515.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- +"""A module with test cases for the YARA database method.""" + +import os + +from grr_response_server.databases import db +from grr_response_server.rdfvalues import objects as rdf_objects + + +class DatabaseTestYaraMixin(object): + """A mixin class for testing YARA methods of database implementations.""" + + def testWriteYaraSignatureReferenceIncorrectUsername(self): + blob_id = rdf_objects.BlobID(os.urandom(32)) + + with self.assertRaises(db.UnknownGRRUserError) as context: + self.db.WriteYaraSignatureReference(blob_id=blob_id, username="quux") + + self.assertEqual(context.exception.username, "quux") + + def testWriteYaraSignatureReferenceDuplicated(self): + self.db.WriteGRRUser("foo") + + blob_id = rdf_objects.BlobID(os.urandom(32)) + + # Writing duplicated signatures is possible, it should not raise. + self.db.WriteYaraSignatureReference(blob_id=blob_id, username="foo") + self.db.WriteYaraSignatureReference(blob_id=blob_id, username="foo") + + def testVerifyYaraSignatureReferenceSimple(self): + self.db.WriteGRRUser("foo") + + blob_id = rdf_objects.BlobID(os.urandom(32)) + self.db.WriteYaraSignatureReference(blob_id=blob_id, username="foo") + + self.assertTrue(self.db.VerifyYaraSignatureReference(blob_id)) + + def testVerifyYaraSignatureReferenceIncorrect(self): + blob_id = rdf_objects.BlobID(os.urandom(32)) + + self.assertFalse(self.db.VerifyYaraSignatureReference(blob_id)) diff --git a/data/source_files/clean/788210038906.py b/data/source_files/clean/788210038906.py new file mode 100644 index 0000000000000000000000000000000000000000..8ab7c4d71edafc2000970ee8f5e485db6a4fa978 --- /dev/null +++ b/data/source_files/clean/788210038906.py @@ -0,0 +1,35 @@ +class Foo: + pass + + +class Bar(Foo): + def __init__(self): + super(Bar, self).__init__() # [super-with-arguments] + + +class Baz(Foo): + def __init__(self): + super().__init__() + + +class Qux(Foo): + def __init__(self): + super(Bar, self).__init__() + + +class NotSuperCall(Foo): + def __init__(self): + super.test(Bar, self).__init__() + + +class InvalidSuperCall(Foo): + def __init__(self): + super(InvalidSuperCall.__class__, self).__init__() + + +def method_accepting_cls(cls, self): + # Using plain `super()` is not valid here, since there's no `__class__` cell found + # (Exact exception would be 'RuntimeError: super(): __class__ cell not found') + # Instead, we expect to *not* see a warning about `super-with-arguments`. + # Explicitly passing `cls`, and `self` to `super()` is what's required. + super(cls, self).__init__() diff --git a/data/source_files/clean/7a2462313ab1.py b/data/source_files/clean/7a2462313ab1.py new file mode 100644 index 0000000000000000000000000000000000000000..6addc56efc2458ffaaa37a8a1a9d3060123eac26 --- /dev/null +++ b/data/source_files/clean/7a2462313ab1.py @@ -0,0 +1,278 @@ +# Copyright 2019 Atalaya Tech, Inc. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import io +import os +import sys +import tarfile +import logging +import tempfile +import shutil +from functools import wraps +from contextlib import contextmanager +from urllib.parse import urlparse +from typing import TYPE_CHECKING +from pathlib import PureWindowsPath, PurePosixPath + +from bentoml.utils.s3 import is_s3_url +from bentoml.utils.gcs import is_gcs_url +from bentoml.exceptions import BentoMLException +from bentoml.saved_bundle.config import SavedBundleConfig +from bentoml.saved_bundle.pip_pkg import ZIPIMPORT_DIR + +if TYPE_CHECKING: + from bentoml.yatai.proto.repository_pb2 import BentoServiceMetadata + +logger = logging.getLogger(__name__) + + +def _is_http_url(bundle_path) -> bool: + try: + return urlparse(bundle_path).scheme in ["http", "https"] + except ValueError: + return False + + +def _is_remote_path(bundle_path) -> bool: + return isinstance(bundle_path, str) and ( + is_s3_url(bundle_path) or is_gcs_url(bundle_path) or _is_http_url(bundle_path) + ) + + +@contextmanager +def _resolve_remote_bundle_path(bundle_path): + if is_s3_url(bundle_path): + import boto3 + + parsed_url = urlparse(bundle_path) + bucket_name = parsed_url.netloc + object_name = parsed_url.path.lstrip('/') + + s3 = boto3.client('s3') + fileobj = io.BytesIO() + s3.download_fileobj(bucket_name, object_name, fileobj) + fileobj.seek(0, 0) + elif is_gcs_url(bundle_path): + try: + from google.cloud import storage + except ImportError: + raise BentoMLException( + '"google-cloud-storage" package is required. You can install it with ' + 'pip: "pip install google-cloud-storage"' + ) + + gcs = storage.Client() + fileobj = io.BytesIO() + gcs.download_blob_to_file(bundle_path, fileobj) + fileobj.seek(0, 0) + elif _is_http_url(bundle_path): + import requests + + response = requests.get(bundle_path) + if response.status_code != 200: + raise BentoMLException( + f"Error retrieving BentoService bundle. " + f"{response.status_code}: {response.text}" + ) + fileobj = io.BytesIO() + fileobj.write(response.content) + fileobj.seek(0, 0) + else: + raise BentoMLException(f"Saved bundle path: '{bundle_path}' is not supported") + + with tarfile.open(mode="r:gz", fileobj=fileobj) as tar: + with tempfile.TemporaryDirectory() as tmpdir: + filename = tar.getmembers()[0].name + tar.extractall(path=tmpdir) + yield os.path.join(tmpdir, filename) + + +def resolve_remote_bundle(func): + """Decorate a function to handle remote bundles.""" + + @wraps(func) + def wrapper(bundle_path, *args): + if _is_remote_path(bundle_path): + with _resolve_remote_bundle_path(bundle_path) as local_bundle_path: + return func(local_bundle_path, *args) + + return func(bundle_path, *args) + + return wrapper + + +@resolve_remote_bundle +def load_saved_bundle_config(bundle_path) -> "SavedBundleConfig": + try: + return SavedBundleConfig.load(os.path.join(bundle_path, "bentoml.yml")) + except FileNotFoundError: + raise BentoMLException( + "BentoML can't locate config file 'bentoml.yml'" + " in saved bundle in path: {}".format(bundle_path) + ) + + +def load_bento_service_metadata(bundle_path: str) -> "BentoServiceMetadata": + return load_saved_bundle_config(bundle_path).get_bento_service_metadata_pb() + + +def _find_module_file(bundle_path, service_name, module_file): + # Simply join full path when module_file is just a file name, + # e.g. module_file=="iris_classifier.py" + module_file_path = os.path.join(bundle_path, service_name, module_file) + if not os.path.isfile(module_file_path): + # Try loading without service_name prefix, for loading from a installed PyPi + module_file_path = os.path.join(bundle_path, module_file) + + # When module_file is located in sub directory + # e.g. module_file=="foo/bar/iris_classifier.py" + # This needs to handle the path differences between posix and windows platform: + if not os.path.isfile(module_file_path): + if sys.platform == "win32": + # Try load a saved bundle created from posix platform on windows + module_file_path = os.path.join( + bundle_path, service_name, str(PurePosixPath(module_file)) + ) + if not os.path.isfile(module_file_path): + module_file_path = os.path.join( + bundle_path, str(PurePosixPath(module_file)) + ) + else: + # Try load a saved bundle created from windows platform on posix + module_file_path = os.path.join( + bundle_path, service_name, PureWindowsPath(module_file).as_posix() + ) + if not os.path.isfile(module_file_path): + module_file_path = os.path.join( + bundle_path, PureWindowsPath(module_file).as_posix() + ) + + if not os.path.isfile(module_file_path): + raise BentoMLException( + "Can not locate module_file {} in saved bundle {}".format( + module_file, bundle_path + ) + ) + + return module_file_path + + +@resolve_remote_bundle +def load_bento_service_class(bundle_path): + """ + Load a BentoService class from saved bundle in given path + + :param bundle_path: A path to Bento files generated from BentoService#save, + #save_to_dir, or the path to pip installed BentoService directory + :return: BentoService class + """ + config = load_saved_bundle_config(bundle_path) + metadata = config["metadata"] + + # Find and load target module containing BentoService class from given path + module_file_path = _find_module_file( + bundle_path, metadata["service_name"], metadata["module_file"] + ) + + # Prepend bundle_path to sys.path for loading extra python dependencies + sys.path.insert(0, bundle_path) + sys.path.insert(0, os.path.join(bundle_path, metadata["service_name"])) + # Include zipimport modules + zipimport_dir = os.path.join(bundle_path, metadata["service_name"], ZIPIMPORT_DIR) + if os.path.exists(zipimport_dir): + for p in os.listdir(zipimport_dir): + logger.debug('adding %s to sys.path', p) + sys.path.insert(0, os.path.join(zipimport_dir, p)) + + module_name = metadata["module_name"] + if module_name in sys.modules: + logger.warning( + "Module `%s` already loaded, using existing imported module.", module_name + ) + module = sys.modules[module_name] + elif sys.version_info >= (3, 5): + import importlib.util + + spec = importlib.util.spec_from_file_location(module_name, module_file_path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + elif sys.version_info >= (3, 3): + from importlib.machinery import SourceFileLoader + + # pylint:disable=deprecated-method + module = SourceFileLoader(module_name, module_file_path).load_module( + module_name + ) + # pylint:enable=deprecated-method + else: + raise BentoMLException("BentoML requires Python 3.4 and above") + + # Remove bundle_path from sys.path to avoid import naming conflicts + sys.path.remove(bundle_path) + + model_service_class = module.__getattribute__(metadata["service_name"]) + # Set _bento_service_bundle_path, where BentoService will load its artifacts + model_service_class._bento_service_bundle_path = bundle_path + # Set cls._version, service instance can access it via svc.version + model_service_class._bento_service_bundle_version = metadata["service_version"] + + if ( + model_service_class._env + and model_service_class._env._requirements_txt_file is not None + ): + # Load `requirement.txt` from bundle directory instead of the user-provided + # file path, which may only available during the bundle save process + model_service_class._env._requirements_txt_file = os.path.join( + bundle_path, "requirements.txt" + ) + + return model_service_class + + +@resolve_remote_bundle +def safe_retrieve(bundle_path: str, target_dir: str): + """Safely retrieve bento service to local path + + Args: + bundle_path (:obj:`str`): + The path that contains saved BentoService bundle, supporting + both local file path and s3 path + target_dir (:obj:`str`): + Where the service contents should end up. + + Returns: + :obj:`str`: location of safe local path + """ + shutil.copytree(bundle_path, target_dir) + + +@resolve_remote_bundle +def load_from_dir(bundle_path): + """Load bento service from local file path or s3 path + + Args: + bundle_path (str): The path that contains saved BentoService bundle, + supporting both local file path and s3 path + + Returns: + bentoml.service.BentoService: a loaded BentoService instance + """ + svc_cls = load_bento_service_class(bundle_path) + return svc_cls() + + +@resolve_remote_bundle +def load_bento_service_api(bundle_path, api_name=None): + bento_service = load_from_dir(bundle_path) + return bento_service.get_inference_api(api_name) diff --git a/data/source_files/clean/80861ff6ee46.py b/data/source_files/clean/80861ff6ee46.py new file mode 100644 index 0000000000000000000000000000000000000000..0a03afbc022ab3ed1e3b4074455a3f3fdefc3a2e --- /dev/null +++ b/data/source_files/clean/80861ff6ee46.py @@ -0,0 +1,40 @@ +# Generated by Django 3.0.4 on 2020-07-14 11:00 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("core", "0026_auto_20200713_1535"), + ("ai_lab", "0002_ailabusecase"), + ] + + operations = [ + migrations.CreateModel( + name="AiLabCaseStudy", + fields=[ + ( + "articlepage_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="core.ArticlePage", + ), + ), + ( + "use_case", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to="ai_lab.AiLabUseCase", + ), + ), + ], + options={"abstract": False,}, + bases=("core.articlepage", models.Model), + ), + ] diff --git a/data/source_files/clean/830d0ef964f3.py b/data/source_files/clean/830d0ef964f3.py new file mode 100644 index 0000000000000000000000000000000000000000..7cf8865345a71c46f4e1edec308e018d877fedb9 --- /dev/null +++ b/data/source_files/clean/830d0ef964f3.py @@ -0,0 +1,348 @@ +#!/usr/bin/env python +# +# Copyright 2007 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +"""Handles login/logout pages and dealing with user cookies. + +Includes a WSGI application that serves the login page and handles login and +logout HTTP requests. It accepts these GET query parameters: + + continue: URL to redirect to after a login or logout has completed. + email: Email address to set for the client. + admin: If 'True', the client should be logged in as an admin. + action: What action to take ('Login' or 'Logout'). + +To view the current user information and a form for logging in and out, +supply no parameters. +""" + + +import cgi +import Cookie +import hashlib +import logging +import os +import sha +import sys +import urllib +import uuid + +import webapp2 + +app_dashboard_lib = '/../../../../../AppDashboard/lib' +sys.path.append(os.path.dirname(__file__) + app_dashboard_lib) +from app_dashboard_helper import AppDashboardHelper + +# URL of the login page within the dev appserver. +LOGIN_URL_RELATIVE = '_ah/login' + +# CGI parameter constants. +CONTINUE_PARAM = 'continue' +_EMAIL_PARAM = 'email' +_ADMIN_PARAM = 'admin' +ACTION_PARAM = 'action' + +# Values for the action parameter. +LOGOUT_ACTION = 'logout' +LOGIN_ACTION = 'login' + +# Name of the cookie that stores the user info. +_COOKIE_NAME = 'dev_appserver_login' + +# Indicates that the user has admin access to all applications. +CLOUD_ADMIN_MARKER = 'CLOUD_ADMIN' + +# The port that the AppDashboard serves HTTPS traffic on. +DASHBOARD_HTTPS_PORT = "1443" + + +def get_user_info(http_cookie, cookie_name=_COOKIE_NAME): + """Gets the requestor's user info from an HTTP Cookie header. + + Args: + http_cookie: The value of the 'Cookie' HTTP request header. + cookie_name: The name of the cookie that stores the user info. + + Returns: + A tuple (email, admin, user_id) where: + email: The user's email address, if any. + admin: True if the user is an admin; False otherwise. + user_id: The user ID, if any. + """ + try: + cookie = Cookie.SimpleCookie(http_cookie) + except Cookie.CookieError: + return '', False, '' + + cookie_dict = dict((k, v.value) for k, v in cookie.iteritems()) + return _get_user_info_from_dict(cookie_dict, cookie_name) + + +def _get_user_info_from_dict(cookie_dict, cookie_name=_COOKIE_NAME): + """Gets the requestor's user info from a cookie dictionary. + + Args: + cookie_dict: A dictionary mapping cookie names onto values. + cookie_name: The name of the cookie that stores the user info. + + Returns: + A tuple (email, admin, user_id) where: + email: The user's email address, if any. + admin: True if the user is an admin; False otherwise. + user_id: The user ID, if any. + """ + cookie_secret = os.environ['COOKIE_SECRET'] + + cookie_value = cookie_dict.get(cookie_name, '') + cookie_value = cookie_value.replace("%3A",":") + cookie_value = cookie_value.replace("%40",'@') + cookie_value = cookie_value.replace("%2C",",") + + email, nickname, admin, hsh = (cookie_value.split(':') + ['', '', '', ''])[:4] + + if email == '': + nickname = '' + admin = '' + return '', False, '' + else: + vhsh = sha.new(email+nickname+admin+cookie_secret).hexdigest() + if hsh != vhsh: + logging.info("{0} has an invalid cookie, so ignoring it.".format(email)) + return '', False, '' + + admin_apps = admin.split(',') + current_app = os.environ['APPLICATION_ID'] + is_admin = current_app in admin_apps or CLOUD_ADMIN_MARKER in admin_apps + return email, is_admin, nickname + +def _create_cookie_data(email, admin): + """Creates cookie payload data. + + Args: + email: The user's email address. + admin: True if the user is an admin; False otherwise. + + Returns: + A string containing the cookie payload. + """ + if email: + user_id_digest = hashlib.md5(email.lower()).digest() + user_id = '1' + ''.join(['%02d' % ord(x) for x in user_id_digest])[:20] + else: + user_id = '' + return '%s:%s:%s' % (email, admin, user_id) + + +def _set_user_info_cookie(email, admin, cookie_name=_COOKIE_NAME): + """Creates a cookie to set the user information for the requestor. + + Args: + email: The email to set for the user. + admin: True if the user should be admin; False otherwise. + cookie_name: The name of the cookie that stores the user info. + + Returns: + Set-Cookie value for setting the user info of the requestor. + """ + cookie_value = _create_cookie_data(email, admin) + cookie = Cookie.SimpleCookie() + cookie[cookie_name] = cookie_value + cookie[cookie_name]['path'] = '/' + return cookie[cookie_name].OutputString() + + +def _clear_user_info_cookie(cookie_name=_COOKIE_NAME): + """Clears the user info cookie from the requestor, logging them out. + + Args: + cookie_name: The name of the cookie that stores the user info. + + Returns: + A Set-Cookie value for clearing the user info of the requestor. + """ + cookie = Cookie.SimpleCookie() + cookie[cookie_name] = '' + cookie[cookie_name]['path'] = '/' + cookie[cookie_name]['max-age'] = '0' + if AppDashboardHelper.USE_SHIBBOLETH: + cookie[cookie_name]['domain'] = AppDashboardHelper.\ + SHIBBOLETH_COOKIE_DOMAIN + return cookie[cookie_name].OutputString() + + +_LOGIN_TEMPLATE = """ + + Login + + + +
+
+

%(login_message)s

+

+ + +

+

+ + +

+

+ + +

+
+ +
+ + + +""" + + +def _render_login_template(login_url, continue_url, email, admin): + """Renders the login page. + + Args: + login_url: The parameter to _login_response. + continue_url: The parameter to _login_response. + email: The email address of the current user, if any. + admin: True if the user is currently an admin; False otherwise. + + Returns: + A string containing the contents of the login page. + """ + if email: + login_message = 'Logged in' + else: + login_message = 'Not logged in' + + email = 'test\x40example.com' + admin_checked = 'checked' if admin else '' + + template_dict = { + 'email': cgi.escape(email, quote=True), + 'admin_checked': admin_checked, + 'login_message': login_message, + 'login_url': cgi.escape(login_url, quote=True), + 'continue_url': cgi.escape(continue_url, quote=True), + } + + return _LOGIN_TEMPLATE % template_dict + + +def login_redirect(application_url, continue_url, start_response): + """Writes a login redirection URL to a user. + + This redirects to login_url with a continue parameter to return to + continue_url. The login_url should be on the canonical front-end server, + regardless of the host:port the user connected to. + + Args: + application_url: The URL of the dev appserver domain + (e.g., 'http://localhost:8080'). + continue_url: The URL to continue to after the user logs in. + start_response: A WSGI start_response function. + + Returns: + An (empty) iterable over strings containing the body of the HTTP response. + """ + if AppDashboardHelper.USE_SHIBBOLETH: + redirect_url = '{0}:{1}/login?{2}={3}'.format( + AppDashboardHelper.SHIBBOLETH_CONNECTOR, + AppDashboardHelper.SHIBBOLETH_CONNECTOR_PORT, + CONTINUE_PARAM, + urllib.quote(continue_url) + ) + else: + hostname = os.environ['NGINX_HOST'] + redirect_url = 'https://{0}:{1}/login?{2}={3}'.format( + hostname, + DASHBOARD_HTTPS_PORT, + CONTINUE_PARAM, + urllib.quote(continue_url)) + + start_response('302 Requires login', + [('Location', redirect_url)]) + return [] + + +def fake_admin(): + """ Generate the fake admin login secret + + Returns: + A string containing the fake login secret + """ + return hashlib.sha1('{}/{}'.format( + os.environ.get('APPNAME', str(uuid.uuid4())), + os.environ.get('COOKIE_SECRET', str(uuid.uuid4())))).hexdigest() + + +class Handler(webapp2.RequestHandler): + """The request handler for the login and logout pages.""" + + def get(self): + action = self.request.get(ACTION_PARAM) + set_email = self.request.get(_EMAIL_PARAM) + set_admin = self.request.get(_ADMIN_PARAM).lower() == 'true' + continue_url = self.request.get(CONTINUE_PARAM) + + login_url = self.request.path_url + + if action: + redirect_url = continue_url or login_url + + # Perform the action. + if action.lower() == LOGOUT_ACTION.lower(): + self.response.headers['Set-Cookie'] = _clear_user_info_cookie() + if AppDashboardHelper.USE_SHIBBOLETH: + redirect_url = AppDashboardHelper.SHIBBOLETH_LOGOUT_URL + elif action.lower() == LOGIN_ACTION.lower() and set_email: + self.response.headers['Set-Cookie'] = _set_user_info_cookie(set_email, + set_admin) + + # URLs should be ASCII-only byte strings. + if isinstance(redirect_url, unicode): + redirect_url = redirect_url.encode('ascii') + + # Redirect the user after performing the action. + self.response.status = 302 + self.response.status_message = 'Redirecting to continue URL' + self.response.headers['Location'] = redirect_url + else: + # Send the user to the AppDashboard to log in before letting them view the + # specified URL. + if AppDashboardHelper.USE_SHIBBOLETH: + appscale_login_url = "{0}:{1}/login".format( + AppDashboardHelper.SHIBBOLETH_CONNECTOR, DASHBOARD_HTTPS_PORT) + else: + appscale_login_url = "https://{0}:{1}/login".format( + os.environ['NGINX_HOST'], DASHBOARD_HTTPS_PORT) + redirect_url = '{0}?{1}={2}'.format(appscale_login_url, CONTINUE_PARAM, + continue_url) + self.response.status = 302 + self.response.status_message = 'Redirecting to login service URL' + self.response.headers['Location'] = redirect_url + + +application = webapp2.WSGIApplication([('/.*', Handler)], debug=True) diff --git a/data/source_files/clean/83b5f3fff612.py b/data/source_files/clean/83b5f3fff612.py new file mode 100644 index 0000000000000000000000000000000000000000..0ac1668c9f200fa1e8cd7c054395a35fadf64190 --- /dev/null +++ b/data/source_files/clean/83b5f3fff612.py @@ -0,0 +1,214 @@ +# Original work Copyright 2018 The Google AI Language Team Authors. +# Modified work Copyright 2019 Rowan Zellers +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +from lm.modeling import model_fn_builder, GroverConfig +import tensorflow as tf +from lm.dataloader import input_fn_builder +import numpy as np +import tempfile +import h5py +from google.cloud import storage + +flags = tf.flags + +FLAGS = flags.FLAGS + +## Required parameters +flags.DEFINE_string( + "config_file", 'configs/base.json', + "The config json file corresponding to the pre-trained news model. " + "This specifies the model architecture.") + +flags.DEFINE_string( + "input_file", None, + "Input TF example files (can be a glob or comma separated).") + +flags.DEFINE_string( + "output_dir", None, + "The output directory where the model checkpoints will be written.") + +flags.DEFINE_string( + "validation_name", 'preds.h5', + "Name to use") + +## Other parameters +flags.DEFINE_string( + "init_checkpoint", None, + "Initial checkpoint (usually from a pre-trained model).") + +flags.DEFINE_integer( + "max_seq_length", 1024, + "The maximum total input sequence length after WordPiece tokenization. " + "Sequences longer than this will be truncated, and sequences shorter " + "than this will be padded. Must match data generation.") + +flags.DEFINE_integer("iterations_per_loop", 1000, + "How many steps to make in each estimator call.") + +flags.DEFINE_integer("batch_size", 32, "Batch size used for eval") + +flags.DEFINE_bool("use_tpu", False, "Whether to use TPU or GPU/CPU.") + +flags.DEFINE_string( + "tpu_name", None, + "The Cloud TPU to use for training. This should be either the name " + "used when creating the Cloud TPU, or a grpc://ip.address.of.tpu:8470 " + "url.") + +flags.DEFINE_string( + "tpu_zone", None, + "[Optional] GCE zone where the Cloud TPU is located in. If not " + "specified, we will attempt to automatically detect the GCE project from " + "metadata.") + +flags.DEFINE_string( + "gcp_project", None, + "[Optional] Project name for the Cloud TPU-enabled project. If not " + "specified, we will attempt to automatically detect the GCE project from " + "metadata.") + +flags.DEFINE_string("master", None, "[Optional] TensorFlow master URL.") + +flags.DEFINE_integer( + "num_tpu_cores", 8, + "Only used if `use_tpu` is True. Total number of TPU cores to use.") + + +# This is a handy little utility so that we can save the perplexities to TPU +class gcloudwriter(): + def __init__(self, gcloud_name): + assert gcloud_name.startswith('gs://') + self.gcloud_name = gcloud_name + bucket_name, blob_name = gcloud_name.split('gs://')[1].split('/', 1) + bucket = storage.Client().get_bucket(bucket_name) + self.blob = bucket.blob(blob_name) + + def __enter__(self): + self.tempfile = tempfile.NamedTemporaryFile() + return self.tempfile + + def __exit__(self, *args): + self.tempfile.flush() + print("UPLOADING TO {}".format(self.gcloud_name), flush=True) + self.blob.upload_from_filename(self.tempfile.name) + self.tempfile.close() + + +def ind_where(array: np.ndarray, target, return_first_match=True, default_value=-1): + """ + :param array: Single dimension array + :param target: target to search for + :param return_first_match: If true, return the first index that matches, otherwise, return the last one + :param default_value: Index to return if there was no match + :return: index of the first match, or -1 if nothing + """ + assert array.ndim == 1 + matching_inds = np.where(array == target)[0] + if len(matching_inds) > 0: + if return_first_match: + return int(matching_inds[0]) + else: + return int(matching_inds[-1]) + return default_value + + +def main(_): + tf.logging.set_verbosity(tf.logging.INFO) + + news_config = GroverConfig.from_json_file(FLAGS.config_file) + + tf.gfile.MakeDirs(FLAGS.output_dir) + + input_files = [] + for input_pattern in FLAGS.input_file.split(","): + input_files.extend(tf.gfile.Glob(input_pattern)) + + tf.logging.info("*** Input Files ***") + for input_file in input_files: + tf.logging.info(" %s" % input_file) + + tpu_cluster_resolver = None + if FLAGS.use_tpu and FLAGS.tpu_name: + tpu_cluster_resolver = tf.contrib.cluster_resolver.TPUClusterResolver( + FLAGS.tpu_name, zone=FLAGS.tpu_zone, project=FLAGS.gcp_project) + + is_per_host = tf.contrib.tpu.InputPipelineConfig.PER_HOST_V2 + run_config = tf.contrib.tpu.RunConfig( + cluster=tpu_cluster_resolver, + master=FLAGS.master, + model_dir=FLAGS.output_dir, + save_checkpoints_steps=FLAGS.iterations_per_loop, + keep_checkpoint_max=None, + tpu_config=tf.contrib.tpu.TPUConfig( + iterations_per_loop=FLAGS.iterations_per_loop, + num_shards=FLAGS.num_tpu_cores, + per_host_input_for_training=is_per_host)) + + model_fn = model_fn_builder(news_config, + init_checkpoint=FLAGS.init_checkpoint, + learning_rate=1e-4, + num_train_steps=0, + num_warmup_steps=0, + use_tpu=FLAGS.use_tpu, + ) + + # If TPU is not available, this will fall back to normal Estimator on CPU + # or GPU. + estimator = tf.contrib.tpu.TPUEstimator( + use_tpu=FLAGS.use_tpu, + model_fn=model_fn, + config=run_config, + train_batch_size=FLAGS.batch_size, + eval_batch_size=FLAGS.batch_size, + predict_batch_size=FLAGS.batch_size, + params={'model_dir': FLAGS.output_dir} + ) + + eval_input_fn = input_fn_builder( + input_files=input_files, + seq_length=FLAGS.max_seq_length, + evaluate_for_fixed_number_of_steps=False, + num_cpu_threads=1, + is_training=False) + result = [x for x in estimator.predict(input_fn=eval_input_fn, yield_single_examples=True)] + cats = sorted(result[0].keys()) + result_stack = {cat: np.stack([x[cat] for x in result]) for cat in cats} + + with gcloudwriter(os.path.join(FLAGS.output_dir, FLAGS.validation_name)) as tempfile_name: + with h5py.File(tempfile_name, 'w') as h5: + for cat, data in result_stack.items(): + dtype2use = np.float16 if cat.endswith(('logprobs', 'top_p_required')) else np.uint16 + h5.create_dataset(cat, data=data.astype(dtype2use)) + h5.create_dataset('model', data=FLAGS.config_file) + h5.create_dataset('ckpt', data=FLAGS.init_checkpoint) + h5.create_dataset('input_file', data=FLAGS.input_file) + + # This gives the perplexity of the entire article. if you want to replicate the results of the paper you + # might need to do something different to extract the ppl of just the body in particular. + ppl_ex = [] + for logprobs_i, ids_i in zip(result_stack['gt_logprobs'], result_stack['labels']): + # Omit the first token. Keep in mind input_ids is shifted by 1 + start_ind = ind_where(ids_i, target=50265, default_value=0) + end_ind = ind_where(ids_i, target=50266, default_value=ids_i.shape[0] - 1) + ppl_ex.append(logprobs_i[start_ind:end_ind]) + ppl_ex = np.concatenate(ppl_ex, 0) + print("Article perplexity is {:.3f}".format(np.exp(-np.mean(ppl_ex))), flush=True) + + +if __name__ == "__main__": + flags.mark_flag_as_required("input_file") + flags.mark_flag_as_required("output_dir") + tf.app.run() diff --git a/data/source_files/clean/83cc76b69a63.py b/data/source_files/clean/83cc76b69a63.py new file mode 100644 index 0000000000000000000000000000000000000000..8634b2f385acdad2561bde76c51b0f6fb67361d8 --- /dev/null +++ b/data/source_files/clean/83cc76b69a63.py @@ -0,0 +1,75 @@ +# Lint as: python3 +# coding=utf-8 +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + +"""Split data into train, validation and test dataset according to person. + +That is, use some people's data as train, some other people's data as +validation, and the rest ones' data as test. These data would be saved +separately under "/person_split". + +It will generate new files with the following structure: +├──person_split +│   ├── test +│   ├── train +│   └──valid +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import random +from data_split import read_data +from data_split import write_data + + +def person_split(whole_data, train_names, valid_names, test_names): + """Split data by person.""" + random.seed(30) + random.shuffle(whole_data) + train_data = [] + valid_data = [] + test_data = [] + for idx, data in enumerate(whole_data): # pylint: disable=unused-variable + if data["name"] in train_names: + train_data.append(data) + elif data["name"] in valid_names: + valid_data.append(data) + elif data["name"] in test_names: + test_data.append(data) + print("train_length:" + str(len(train_data))) + print("valid_length:" + str(len(valid_data))) + print("test_length:" + str(len(test_data))) + return train_data, valid_data, test_data + + +if __name__ == "__main__": + data = read_data("./data/complete_data") + train_names = [ + "hyw", "shiyun", "tangsy", "dengyl", "jiangyh", "xunkai", "negative3", + "negative4", "negative5", "negative6" + ] + valid_names = ["lsj", "pengxl", "negative2", "negative7"] + test_names = ["liucx", "zhangxy", "negative1", "negative8"] + train_data, valid_data, test_data = person_split(data, train_names, + valid_names, test_names) + if not os.path.exists("./person_split"): + os.makedirs("./person_split") + write_data(train_data, "./person_split/train") + write_data(valid_data, "./person_split/valid") + write_data(test_data, "./person_split/test") diff --git a/data/source_files/clean/84b7031cbd25.py b/data/source_files/clean/84b7031cbd25.py new file mode 100644 index 0000000000000000000000000000000000000000..86cfbb57e1ec13e6ae0711449af6c95612ae3139 --- /dev/null +++ b/data/source_files/clean/84b7031cbd25.py @@ -0,0 +1,62 @@ +"""Find kernel specifications for a given language""" + +import os +import sys + +from .languages import same_language +from .reraise import reraise + +try: + # I prefer not to take a dependency on jupyter_client + from jupyter_client.kernelspec import find_kernel_specs, get_kernel_spec +except ImportError as err: + find_kernel_specs = reraise(err) + get_kernel_spec = reraise(err) + + +def set_kernelspec_from_language(notebook): + """Set the kernel specification based on the 'main_language' metadata""" + language = notebook.metadata.get("jupytext", {}).get("main_language") + if "kernelspec" not in notebook.metadata and language: + try: + kernelspec = kernelspec_from_language(language) + except ValueError: + return + notebook.metadata["kernelspec"] = kernelspec + notebook.metadata.get("jupytext", {}).pop("main_language") + + +def kernelspec_from_language(language): + """Return the python kernel that matches the current env, or the first kernel that matches the given language""" + if language == "python": + # Return the kernel that matches the current Python executable + for name in find_kernel_specs(): + kernel_specs = get_kernel_spec(name) + cmd = kernel_specs.argv[0] + if ( + kernel_specs.language == "python" + and os.path.isfile(cmd) + and os.path.samefile(cmd, sys.executable) + ): + return { + "name": name, + "language": language, + "display_name": kernel_specs.display_name, + } + raise ValueError( + "No kernel found that matches the current python executable {}\n".format( + sys.executable + ) + + "Install one with 'python -m ipykernel install --name kernel_name [--user]'" + ) + + for name in find_kernel_specs(): + kernel_specs = get_kernel_spec(name) + if same_language(kernel_specs.language, language): + return { + "name": name, + "language": language, + "display_name": kernel_specs.display_name, + } + + raise ValueError("No kernel found for the language {}".format(language)) diff --git a/data/source_files/clean/859980c575e3.py b/data/source_files/clean/859980c575e3.py new file mode 100644 index 0000000000000000000000000000000000000000..6b1f450e0afe4b703c2e85c366b7453eddf2730b --- /dev/null +++ b/data/source_files/clean/859980c575e3.py @@ -0,0 +1,44 @@ +import filters as f + +from iota import TransactionHash, Address +from iota.commands import FilterCommand, RequestFilter, ResponseFilter +from iota.filters import Trytes + +__all__ = [ + 'GetNodeInfoCommand', +] + + +class GetNodeInfoCommand(FilterCommand): + """ + Executes `getNodeInfo` command. + + See :py:meth:`iota.api.StrictIota.get_node_info`. + """ + command = 'getNodeInfo' + + def get_request_filter(self): + return GetNodeInfoRequestFilter() + + def get_response_filter(self): + return GetNodeInfoResponseFilter() + + +class GetNodeInfoRequestFilter(RequestFilter): + def __init__(self) -> None: + # ``getNodeInfo`` does not accept any parameters. + # Using a filter here just to enforce that the request is empty. + super(GetNodeInfoRequestFilter, self).__init__({}) + + +class GetNodeInfoResponseFilter(ResponseFilter): + def __init__(self) -> None: + super(GetNodeInfoResponseFilter, self).__init__({ + 'coordinatorAddress': + f.ByteString(encoding='ascii') | Trytes(Address), + 'latestMilestone': + f.ByteString(encoding='ascii') | Trytes(TransactionHash), + + 'latestSolidSubtangleMilestone': + f.ByteString(encoding='ascii') | Trytes(TransactionHash), + }) diff --git a/data/source_files/clean/85c4dfcff4bc.py b/data/source_files/clean/85c4dfcff4bc.py new file mode 100644 index 0000000000000000000000000000000000000000..0a20c183c03d4133fca24e84a8755331075102c6 --- /dev/null +++ b/data/source_files/clean/85c4dfcff4bc.py @@ -0,0 +1,37 @@ +from itertools import product +import numpy as np +import pytest +from alibi_detect.utils.discretizer import Discretizer + +x = np.random.rand(10, 4) +n_features = x.shape[1] +feature_names = [str(_) for _ in range(n_features)] + +categorical_features = [[], [1, 3]] +percentiles = [list(np.arange(25, 100, 25)), list(np.arange(10, 100, 10))] +tests = list(product(categorical_features, percentiles)) +n_tests = len(tests) + + +@pytest.fixture +def cats_and_percentiles(request): + cat, perc = tests[request.param] + return cat, perc + + +@pytest.mark.parametrize('cats_and_percentiles', list(range(n_tests)), indirect=True) +def test_discretizer(cats_and_percentiles): + cat, perc = cats_and_percentiles + disc = Discretizer(x, cat, feature_names, perc) + to_disc = list(disc.names.keys()) + assert len(to_disc) == (x.shape[1] - len(cat)) + x_disc = disc.discretize(x) + for k, v in disc.names.items(): + assert len(v) <= len(perc) + 1 + assert callable(disc.lambdas[k]) + assert (x_disc[:, k].min() == 0).all() + assert (x_disc[:, k].max() == len(perc)).all() + + for i in range(x.shape[1]): + if i not in to_disc: + assert (x_disc[:, i] == x[:, i]).all() diff --git a/data/source_files/clean/860f547cf9e4.py b/data/source_files/clean/860f547cf9e4.py new file mode 100644 index 0000000000000000000000000000000000000000..0a880ef41f3bfd67c8ea6c85667d8aef79348500 --- /dev/null +++ b/data/source_files/clean/860f547cf9e4.py @@ -0,0 +1,51 @@ +# Copyright 2016 EMC Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_versionedobjects import fields + +from cinder import objects +from cinder.tests.unit import fake_constants as fake + + +def fake_db_group_snapshot(**updates): + db_group_snapshot = { + 'id': fake.GROUP_SNAPSHOT_ID, + 'name': 'group-1', + 'status': 'available', + 'user_id': fake.USER_ID, + 'project_id': fake.PROJECT_ID, + 'group_type_id': fake.GROUP_TYPE_ID, + 'group_id': fake.GROUP_ID, + } + + for name, field in objects.GroupSnapshot.fields.items(): + if name in db_group_snapshot: + continue + if field.nullable: + db_group_snapshot[name] = None + elif field.default != fields.UnspecifiedDefault: + db_group_snapshot[name] = field.default + else: + raise Exception('fake_db_group_snapshot needs help with %s.' + % name) + + if updates: + db_group_snapshot.update(updates) + + return db_group_snapshot + + +def fake_group_snapshot_obj(context, **updates): + return objects.GroupSnapshot._from_db_object( + context, objects.GroupSnapshot(), fake_db_group_snapshot(**updates)) diff --git a/data/source_files/clean/88b8d70f4fe4.py b/data/source_files/clean/88b8d70f4fe4.py new file mode 100644 index 0000000000000000000000000000000000000000..6ae3ed28439c3795f0a3092e3b0da325e69356b7 --- /dev/null +++ b/data/source_files/clean/88b8d70f4fe4.py @@ -0,0 +1,45 @@ +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +from benchmarks import smoothness,thread_times +import page_sets +from telemetry import benchmark + +# pylint: disable=protected-access + +def CustomizeBrowserOptionsForOopRasterization(options): + """Enables flags needed for out of process rasterization.""" + options.AppendExtraBrowserArgs('--force-gpu-rasterization') + options.AppendExtraBrowserArgs('--enable-oop-rasterization') + + +@benchmark.Owner(emails=['enne@chromium.org']) +class SmoothnessOopRasterizationTop25(smoothness._Smoothness): + """Measures rendering statistics for the top 25 with oop rasterization. + """ + tag = 'oop_rasterization' + page_set = page_sets.Top25SmoothPageSet + + def SetExtraBrowserOptions(self, options): + CustomizeBrowserOptionsForOopRasterization(options) + + @classmethod + def Name(cls): + return 'smoothness.oop_rasterization.top_25_smooth' + + +@benchmark.Owner(emails=['enne@chromium.org']) +class ThreadTimesOopRasterKeyMobile(thread_times._ThreadTimes): + """Measure timeline metrics for key mobile pages while using out of process + raster.""" + tag = 'oop_rasterization' + page_set = page_sets.KeyMobileSitesSmoothPageSet + options = {'story_tag_filter': 'fastpath'} + + def SetExtraBrowserOptions(self, options): + super(ThreadTimesOopRasterKeyMobile, self).SetExtraBrowserOptions(options) + CustomizeBrowserOptionsForOopRasterization(options) + + @classmethod + def Name(cls): + return 'thread_times.oop_rasterization.key_mobile' diff --git a/data/source_files/clean/8a13f8afeb71.py b/data/source_files/clean/8a13f8afeb71.py new file mode 100644 index 0000000000000000000000000000000000000000..0a7f17dbb71fa4b55ccb4daea833fc07286f055d --- /dev/null +++ b/data/source_files/clean/8a13f8afeb71.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 + +import json +import platform + + +def make_sys_report(anonymous=False, skipUsb=False, skipPackages=False): + def get_usb(): + try: + import usb.core + except ImportError: + yield "NoLib" + return + speeds = ["Unknown", "Low", "Full", "High", "Super", "SuperPlus"] + format_hex = lambda val: f"{val:#0{6}x}" + try: + for dev in usb.core.find(find_all=True): + yield { + "port": dev.port_number, + "vendor_id": format_hex(dev.idVendor), + "product_id": format_hex(dev.idProduct), + "speed": speeds[dev.speed] if dev.speed < len(speeds) else dev.speed + } + except usb.core.NoBackendError: + yield "No USB backend found" + + result = { + "architecture": ' '.join(platform.architecture()).strip(), + "machine": platform.machine(), + "platform": platform.platform(), + "processor": platform.processor(), + "python_build": ' '.join(platform.python_build()).strip(), + "python_compiler": platform.python_compiler(), + "python_implementation": platform.python_implementation(), + "python_version": platform.python_version(), + "release": platform.release(), + "system": platform.system(), + "version": platform.version(), + "win32_ver": ' '.join(platform.win32_ver()).strip(), + } + + if not skipPackages: + from pip._internal.operations.freeze import freeze + result["packages"] = list(freeze(local_only=True)) + if not skipUsb: + result["usb"] = list(get_usb()) + if not anonymous: + result["uname"] = ' '.join(platform.uname()).strip(), + return result + + +if __name__ == "__main__": + data = make_sys_report() + with open("log_system_information.json", "w") as f: + json.dump(data, f, indent=4) + + print(json.dumps(data, indent=4)) + print("System info gathered successfully - saved as \"log_system_information.json\"") diff --git a/data/source_files/clean/8dc2e031fff8.py b/data/source_files/clean/8dc2e031fff8.py new file mode 100644 index 0000000000000000000000000000000000000000..7ca170e48f979878209316e327d77080c8c15058 --- /dev/null +++ b/data/source_files/clean/8dc2e031fff8.py @@ -0,0 +1,69 @@ +# This code is part of Qiskit. +# +# (C) Copyright IBM 2018, 2020. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +""" +iris dataset +""" + +import numpy as np +from sklearn import datasets +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import StandardScaler, MinMaxScaler +from sklearn.decomposition import PCA +from qiskit.aqua import MissingOptionalLibraryError + + +def iris(training_size, test_size, n, plot_data=False): + """ returns iris dataset """ + class_labels = [r'A', r'B', r'C'] + data, target = datasets.load_iris(return_X_y=True) + sample_train, sample_test, label_train, label_test = \ + train_test_split(data, target, test_size=1, random_state=42) + + # Now we standardize for gaussian around 0 with unit variance + std_scale = StandardScaler().fit(sample_train) + sample_train = std_scale.transform(sample_train) + sample_test = std_scale.transform(sample_test) + + # Now reduce number of features to number of qubits + pca = PCA(n_components=n).fit(sample_train) + sample_train = pca.transform(sample_train) + sample_test = pca.transform(sample_test) + + # Scale to the range (-1,+1) + samples = np.append(sample_train, sample_test, axis=0) + minmax_scale = MinMaxScaler((-1, 1)).fit(samples) + sample_train = minmax_scale.transform(sample_train) + sample_test = minmax_scale.transform(sample_test) + + # Pick training size number of samples from each distro + training_input = {key: (sample_train[label_train == k, :])[:training_size] + for k, key in enumerate(class_labels)} + test_input = {key: (sample_test[label_test == k, :])[:test_size] + for k, key in enumerate(class_labels)} + + if plot_data: + try: + import matplotlib.pyplot as plt + except ImportError as ex: + raise MissingOptionalLibraryError( + libname='Matplotlib', + name='iris', + pip_install='pip install matplotlib') from ex + for k in range(0, 3): + plt.scatter(sample_train[label_train == k, 0][:training_size], + sample_train[label_train == k, 1][:training_size]) + + plt.title("Iris dataset") + plt.show() + + return sample_train, training_input, test_input, class_labels diff --git a/data/source_files/clean/8e35b9de52d2.py b/data/source_files/clean/8e35b9de52d2.py new file mode 100644 index 0000000000000000000000000000000000000000..86dfb9b0ac538e587eb0952c661e061a843edff2 --- /dev/null +++ b/data/source_files/clean/8e35b9de52d2.py @@ -0,0 +1,44 @@ +from common.make_tx import make_swap_tx +from sol.handle_simple import handle_unknown_detect_transfers + + +def handle_metaplex(exporter, txinfo): + transfers_in, transfers_out, _ = txinfo.transfers_net + + if len(transfers_in) == 1 and len(transfers_out) == 1: + sent_amount, sent_currency, _, _ = transfers_out[0] + received_amount, received_currency, _, _ = transfers_in[0] + + row = make_swap_tx(txinfo, sent_amount, sent_currency, received_amount, received_currency) + exporter.ingest_row(row) + else: + handle_unknown_detect_transfers(exporter, txinfo) + + +def is_nft_mint(txinfo): + log_instructions = txinfo.log_instructions + transfers_in, transfers_out, _ = txinfo.transfers_net + + if "MintTo" in log_instructions and len(transfers_out) == 1 and len(transfers_in) == 0: + return True + elif ("MintTo" in log_instructions + and len(transfers_out) == 1 + and len(transfers_in) == 1 + and transfers_in[0][0] == 1): + return True + else: + return False + + +def handle_nft_mint(exporter, txinfo): + transfers_in, transfers_out, transfers_unknown = txinfo.transfers_net + + if len(transfers_in) == 1 and len(transfers_out) == 1: + sent_amount, sent_currency, _, _ = transfers_out[0] + received_amount, received_currency, _, _ = transfers_in[0] + + row = make_swap_tx(txinfo, sent_amount, sent_currency, received_amount, received_currency) + exporter.ingest_row(row) + return + + handle_unknown_detect_transfers(exporter, txinfo) diff --git a/data/source_files/clean/8ff7006eba8b.py b/data/source_files/clean/8ff7006eba8b.py new file mode 100644 index 0000000000000000000000000000000000000000..0acf3366802d8714bb15485c54ab7f3de9aac778 --- /dev/null +++ b/data/source_files/clean/8ff7006eba8b.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +# Thanks to @skelsec for his awesome tool Pypykatz +# Checks his project here: https://github.com/skelsec/pypykatz + +import codecs +import traceback + +from lazagne.config.module_info import ModuleInfo +from lazagne.config.constant import constant +from pypykatz.pypykatz import pypykatz + + +class Pypykatz(ModuleInfo): + """ + Pypykatz dumps all secrets from the lsass.exe memory + It does not work if: + - LSASS is running as a protected process + - A security product blocks this access + """ + + def __init__(self): + ModuleInfo.__init__(self, 'pypykatz', 'windows', system_module=True) + + def run(self): + mimi = None + try: + mimi = pypykatz.go_live() + except Exception: + self.debug(traceback.format_exc()) + + if mimi: + results = {} + logon_sessions = mimi.to_dict().get('logon_sessions', []) + for logon_session in logon_sessions: + + # Right now kerberos_creds, dpapi_creds results are not used + user = logon_sessions[logon_session] + + # Get cleartext password + for i in ['credman_creds', 'ssp_creds', 'livessp_creds', 'tspkg_creds', 'wdigest_creds']: + for data in user.get(i, []): + if all((data['username'], data['password'])): + login = data['username'] + if login not in results: + results[login] = {} + + results[login]['Type'] = i + results[login]['Domain'] = data.get('domainname', 'N/A') + results[login]['Password'] = data['password'] + + # msv_creds to get sha1 user hash + for data in user.get('msv_creds', []): + if data['username']: + login = data['username'] + else: + login = user['username'] + + if login not in results: + results[login] = {} + + if data['SHAHash']: + results[login]['Shahash'] = codecs.encode(data['SHAHash'], 'hex') + if data['LMHash']: + results[login]['Lmhash'] = codecs.encode(data['LMHash'], 'hex') + if data['NThash']: + results[login]['Nthash'] = codecs.encode(data['NThash'], 'hex') + + constant.pypykatz_result = results + pwd_found = [] + for user in results: + results[user]['Login'] = user + pwd_found.append(results[user]) + + return pwd_found diff --git a/data/source_files/clean/913235b0bf33.py b/data/source_files/clean/913235b0bf33.py new file mode 100644 index 0000000000000000000000000000000000000000..7cfea92f95c14fb4efaa051120fc4e6f1facdf01 --- /dev/null +++ b/data/source_files/clean/913235b0bf33.py @@ -0,0 +1,75 @@ +import torch +import torch.nn as nn + +class WordDropout(nn.Module): + """ A word dropout layer that's designed for embedded inputs (e.g., any inputs to an LSTM layer). + Given a batch of embedded inputs, this layer randomly set some of them to be a replacement state. + Note that this layer assumes the last dimension of the input to be the hidden dimension of a unit. + """ + def __init__(self, dropprob): + super().__init__() + self.dropprob = dropprob + + def forward(self, x, replacement=None): + if not self.training or self.dropprob == 0: + return x + + masksize = [y for y in x.size()] + masksize[-1] = 1 + dropmask = torch.rand(*masksize, device=x.device) < self.dropprob + + res = x.masked_fill(dropmask, 0) + if replacement is not None: + res = res + dropmask.float() * replacement + + return res + + def extra_repr(self): + return 'p={}'.format(self.dropprob) + +class LockedDropout(nn.Module): + """ + A variant of dropout layer that consistently drops out the same parameters over time. Also known as the variational dropout. + This implementation was modified from the LockedDropout implementation in the flair library (https://github.com/zalandoresearch/flair). + """ + def __init__(self, dropprob, batch_first=True): + super().__init__() + self.dropprob = dropprob + self.batch_first = batch_first + + def forward(self, x): + if not self.training or self.dropprob == 0: + return x + + if not self.batch_first: + m = x.new_empty(1, x.size(1), x.size(2), requires_grad=False).bernoulli_(1 - self.dropprob) + else: + m = x.new_empty(x.size(0), 1, x.size(2), requires_grad=False).bernoulli_(1 - self.dropprob) + + mask = m.div(1 - self.dropprob).expand_as(x) + return mask * x + + def extra_repr(self): + return 'p={}'.format(self.dropprob) + +class SequenceUnitDropout(nn.Module): + """ A unit dropout layer that's designed for input of sequence units (e.g., word sequence, char sequence, etc.). + Given a sequence of unit indices, this layer randomly set some of them to be a replacement id (usually set to be ). + """ + def __init__(self, dropprob, replacement_id): + super().__init__() + self.dropprob = dropprob + self.replacement_id = replacement_id + + def forward(self, x): + """ :param: x must be a LongTensor of unit indices. """ + if not self.training or self.dropprob == 0: + return x + masksize = [y for y in x.size()] + dropmask = torch.rand(*masksize, device=x.device) < self.dropprob + res = x.masked_fill(dropmask, self.replacement_id) + return res + + def extra_repr(self): + return 'p={}, replacement_id={}'.format(self.dropprob, self.replacement_id) + diff --git a/data/source_files/clean/91edb6dccbbc.py b/data/source_files/clean/91edb6dccbbc.py new file mode 100644 index 0000000000000000000000000000000000000000..81265c7215ed57cef680d0ec0a27f1c4d35a191a --- /dev/null +++ b/data/source_files/clean/91edb6dccbbc.py @@ -0,0 +1,150 @@ +# Test definitions for Lit, the LLVM test runner. +# +# This is reusing the LLVM Lit test runner in the interim until the new build +# rules are upstreamed. +# TODO(b/136126535): remove this custom rule. +"""Lit runner globbing test +""" + +load("//tensorflow:tensorflow.bzl", "filegroup") +load("@bazel_skylib//lib:paths.bzl", "paths") +load("//tensorflow:tensorflow.bzl", "tf_cc_test", "tf_native_cc_binary", "tf_copts") + +# Default values used by the test runner. +_default_test_file_exts = ["mlir", ".pbtxt", ".td"] +_default_driver = "@llvm-project//mlir:run_lit.sh" +_default_size = "small" +_default_tags = [] + +# These are patterns which we should never match, for tests, subdirectories, or +# test input data files. +_ALWAYS_EXCLUDE = [ + "**/LICENSE.txt", + "**/README.txt", + "**/lit.local.cfg", + # Exclude input files that have spaces in their names, since bazel + # cannot cope with such "targets" in the srcs list. + "**/* *", + "**/* */**", +] + +def _run_lit_test(name, test_file, data, size, tags, driver, features, exec_properties): + """Runs lit on all tests it can find in `data` under tensorflow/compiler/mlir. + + Note that, due to Bazel's hermetic builds, lit only sees the tests that + are included in the `data` parameter, regardless of what other tests might + exist in the directory searched. + + Args: + name: str, the name of the test, including extension. + data: [str], the data input to the test. + size: str, the size of the test. + tags: [str], tags to attach to the test. + driver: str, label of the driver shell script. + Note: use of a custom driver is not currently supported + and specifying a default driver will abort the tests. + features: [str], list of extra features to enable. + """ + + name_without_suffix = test_file[0].split('.')[0] + local_test_files = name + ".test_files" + + filegroup( + name = local_test_files, + srcs = native.glob([ + "data/" + name_without_suffix + "*.mlir", + ]), + ) + + tf_cc_test( + name = name, + srcs = test_file, + size = size, + deps = [ + "//tensorflow/compiler/mlir/disc/tests:mlir_feature_test", + "//tensorflow/core:test", + "//tensorflow/core:test_main", + "//tensorflow/core:testlib", + ], + data = [":" + local_test_files] + data + [ + "//tensorflow/compiler/mlir/disc:disc_compiler_main", + "//tensorflow/compiler/mlir:tf-mlir-translate", + "//tensorflow/compiler/mlir:tf-opt", + ], + ) + +def glob_op_tests( + exclude = [], + test_file_exts = _default_test_file_exts, + default_size = _default_size, + size_override = {}, + data = [], + per_test_extra_data = {}, + default_tags = _default_tags, + tags_override = {}, + driver = _default_driver, + features = [], + exec_properties = {}): + """Creates all plausible Lit tests (and their inputs) under this directory. + + Args: + exclude: [str], paths to exclude (for tests and inputs). + test_file_exts: [str], extensions for files that are tests. + default_size: str, the test size for targets not in "size_override". + size_override: {str: str}, sizes to use for specific tests. + data: [str], additional input data to the test. + per_test_extra_data: {str: [str]}, extra data to attach to a given file. + default_tags: [str], additional tags to attach to the test. + tags_override: {str: str}, tags to add to specific tests. + driver: str, label of the driver shell script. + Note: use of a custom driver is not currently supported + and specifying a default driver will abort the tests. + features: [str], list of extra features to enable. + exec_properties: a dictionary of properties to pass on. + """ + + # Ignore some patterns by default for tests and input data. + exclude = _ALWAYS_EXCLUDE + exclude + + tests = native.glob( + ["*." + ext for ext in test_file_exts], + exclude = exclude, + ) + + # Run tests individually such that errors can be attributed to a specific + # failure. + for i in range(len(tests)): + curr_test = tests[i] + + # Instantiate this test with updated parameters. + lit_test( + name = curr_test, + data = data + per_test_extra_data.get(curr_test, []), + size = size_override.get(curr_test, default_size), + tags = default_tags + tags_override.get(curr_test, []), + driver = driver, + features = features, + exec_properties = exec_properties, + ) + +def lit_test( + name, + data = [], + size = _default_size, + tags = _default_tags, + driver = _default_driver, + features = [], + exec_properties = {}): + """Runs test files under lit. + + Args: + name: str, the name of the test. + data: [str], labels that should be provided as data inputs. + size: str, the size of the test. + tags: [str], tags to attach to the test. + driver: str, label of the driver shell script. + Note: use of a custom driver is not currently supported + and specifying a default driver will abort the tests. + features: [str], list of extra features to enable. + """ + _run_lit_test(name + ".test", [name], data, size, tags, driver, features, exec_properties) diff --git a/data/source_files/clean/921dcf5c8770.py b/data/source_files/clean/921dcf5c8770.py new file mode 100644 index 0000000000000000000000000000000000000000..86cc1ac4bd0be7cfc736232b574de4d27f85e0ca --- /dev/null +++ b/data/source_files/clean/921dcf5c8770.py @@ -0,0 +1,240 @@ +""" +The MIT License (MIT) + +Copyright (c) 2015-2021 Rapptz + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +""" + +from __future__ import annotations + +from typing import Optional, TYPE_CHECKING, Dict, TypedDict, Union, List, Literal +from .snowflake import Snowflake +from .components import Component, SelectOption +from .embed import Embed +from .channel import ChannelType, Channel +from .member import Member +from .role import Role +from .user import User + +if TYPE_CHECKING: + from .message import AllowedMentions, Message + + +ApplicationCommandType = Literal[1, 2, 3] + + +class ApplicationCommand(TypedDict): + id: Snowflake + application_id: Snowflake + name: str + description: str + options: Optional[List[ApplicationCommandOption]] + type: Optional[ApplicationCommandType] + + +ApplicationCommandOptionType = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + + +class ApplicationCommandOption(TypedDict): + type: ApplicationCommandOptionType + name: str + description: str + required: bool + choices: Optional[List[ApplicationCommandOptionChoice]] + options: Optional[List[ApplicationCommandOption]] + + +class ApplicationCommandOptionChoice(TypedDict): + name: str + value: Union[str, int] + + +ApplicationCommandPermissionType = Literal[1, 2] + + +class ApplicationCommandPermissions(TypedDict): + id: Snowflake + type: ApplicationCommandPermissionType + permission: bool + + +class BaseGuildApplicationCommandPermissions(TypedDict): + permissions: List[ApplicationCommandPermissions] + + +class PartialGuildApplicationCommandPermissions(BaseGuildApplicationCommandPermissions): + id: Snowflake + + +class GuildApplicationCommandPermissions(PartialGuildApplicationCommandPermissions): + application_id: Snowflake + guild_id: Snowflake + + +InteractionType = Literal[1, 2, 3] + + +class _ApplicationCommandInteractionDataOption(TypedDict): + name: str + + +class _ApplicationCommandInteractionDataOptionSubcommand(_ApplicationCommandInteractionDataOption): + type: Literal[1, 2] + options: List[ApplicationCommandInteractionDataOption] + + +class _ApplicationCommandInteractionDataOptionString(_ApplicationCommandInteractionDataOption): + type: Literal[3] + value: str + + +class _ApplicationCommandInteractionDataOptionInteger(_ApplicationCommandInteractionDataOption): + type: Literal[4] + value: int + + +class _ApplicationCommandInteractionDataOptionBoolean(_ApplicationCommandInteractionDataOption): + type: Literal[5] + value: bool + + +class _ApplicationCommandInteractionDataOptionSnowflake(_ApplicationCommandInteractionDataOption): + type: Literal[6, 7, 8, 9] + value: Snowflake + + +class _ApplicationCommandInteractionDataOptionNumber(_ApplicationCommandInteractionDataOption): + type: Literal[10] + value: float + + +ApplicationCommandInteractionDataOption = Union[ + _ApplicationCommandInteractionDataOptionString, + _ApplicationCommandInteractionDataOptionInteger, + _ApplicationCommandInteractionDataOptionSubcommand, + _ApplicationCommandInteractionDataOptionBoolean, + _ApplicationCommandInteractionDataOptionSnowflake, + _ApplicationCommandInteractionDataOptionNumber, +] + + +class ApplicationCommandResolvedPartialChannel(TypedDict): + id: Snowflake + type: ChannelType + permissions: str + name: str + + +class ApplicationCommandInteractionDataResolved(TypedDict, total=False): + users: Dict[Snowflake, User] + members: Dict[Snowflake, Member] + roles: Dict[Snowflake, Role] + channels: Dict[Snowflake, ApplicationCommandResolvedPartialChannel] + + +class ApplicationCommandInteractionDataOption(TypedDict): + name: str + type: int + value: Optional[str] # Optional[ApplicationCommandOptionType] + options: Optional[ApplicationCommandInteractionDataOption] + focused: Optional[bool] + components: Optional[List[ApplicationCommandInteractionDataOption]] + + +class _InteractionDataOptional(TypedDict, total=False): + resolved: Dict[str, dict] + options: List[ApplicationCommandInteractionDataOption] + custom_id: str + component_type: int + values: List[str] + target_id: Snowflake + components: List[ApplicationCommandInteractionDataOption] + + +class InteractionData(_InteractionDataOptional): + id: Snowflake + name: str + type: ApplicationCommandType + + +class InteractionResolved(TypedDict): + users: List[Union[User, Member]] + members: List[Member] + roles: List[Role] + channels: List[Channel] + messages: List[Message] + + +class _InteractionOptional(TypedDict, total=False): + data: InteractionData + guild_id: Snowflake + channel_id: Snowflake + member: Member + user: User + message: Message + guild_locale: str + + +class Interaction(_InteractionOptional): + id: Snowflake + application_id: Snowflake + type: InteractionType + token: str + version: int + resolved: InteractionResolved + locale: str + + +class InteractionApplicationCommandCallbackData(TypedDict, total=False): + tts: bool + content: str + embeds: List[Embed] + allowed_mentions: AllowedMentions + flags: int + components: List[Component] + + +InteractionResponseType = Literal[1, 4, 5, 6, 7] + + +class _InteractionResponseOptional(TypedDict, total=False): + data: InteractionApplicationCommandCallbackData + + +class InteractionResponse(_InteractionResponseOptional): + type: InteractionResponseType + + +class MessageInteraction(TypedDict): + id: Snowflake + type: InteractionType + name: str + user: User + + +class _EditApplicationCommandOptional(TypedDict, total=False): + description: str + options: Optional[List[ApplicationCommandOption]] + type: ApplicationCommandType + + +class EditApplicationCommand(_EditApplicationCommandOptional): + name: str + default_permission: bool diff --git a/data/source_files/clean/97afbd1b0bf4.py b/data/source_files/clean/97afbd1b0bf4.py new file mode 100644 index 0000000000000000000000000000000000000000..81197e9fdd38be14f8210f08e7cec2020796f260 --- /dev/null +++ b/data/source_files/clean/97afbd1b0bf4.py @@ -0,0 +1,491 @@ +# -*- coding: utf-8 -*- + +# This code is part of Qiskit. +# +# (C) Copyright IBM 2019. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +# pylint: disable=cell-var-from-loop,invalid-name + + +""" +Measurement correction filters. + +""" + +from typing import List, Union +from copy import deepcopy +from scipy.optimize import minimize +import scipy.linalg as la +import numpy as np +import qiskit +from qiskit import QiskitError +from qiskit.tools import parallel_map +from qiskit.ignis.verification.tomography import count_keys + + +class MeasurementFilter(): + """ + Measurement error mitigation filter. + + Produced from a measurement calibration fitter and can be applied + to data. + + """ + + def __init__(self, + cal_matrix: np.matrix, + state_labels: list): + """ + Initialize a measurement error mitigation filter using the cal_matrix + from a measurement calibration fitter. + + Args: + cal_matrix: the calibration matrix for applying the correction + state_labels: the states for the ordering of the cal matrix + """ + + self._cal_matrix = cal_matrix + self._state_labels = state_labels + + @property + def cal_matrix(self): + """Return cal_matrix.""" + return self._cal_matrix + + @property + def state_labels(self): + """return the state label ordering of the cal matrix""" + return self._state_labels + + @state_labels.setter + def state_labels(self, new_state_labels): + """set the state label ordering of the cal matrix""" + self._state_labels = new_state_labels + + @cal_matrix.setter + def cal_matrix(self, new_cal_matrix): + """Set cal_matrix.""" + self._cal_matrix = new_cal_matrix + + def apply(self, + raw_data, + method='least_squares'): + """Apply the calibration matrix to results. + + Args: + raw_data (dict or list): The data to be corrected. Can be in a number of forms: + + Form 1: a counts dictionary from results.get_counts + + Form 2: a list of counts of `length==len(state_labels)` + + Form 3: a list of counts of `length==M*len(state_labels)` where M is an + integer (e.g. for use with the tomography data) + + Form 4: a qiskit Result + + method (str): fitting method. If `None`, then least_squares is used. + + ``pseudo_inverse``: direct inversion of the A matrix + + ``least_squares``: constrained to have physical probabilities + + Returns: + dict or list: The corrected data in the same form as `raw_data` + + Raises: + QiskitError: if `raw_data` is not an integer multiple + of the number of calibrated states. + + """ + + # check forms of raw_data + if isinstance(raw_data, dict): + # counts dictionary + for data_label in raw_data.keys(): + if data_label not in self._state_labels: + raise QiskitError("Unexpected state label '" + data_label + + "', verify the fitter's state labels " + "correspond to the input data") + data_format = 0 + # convert to form2 + raw_data2 = [np.zeros(len(self._state_labels), dtype=float)] + for stateidx, state in enumerate(self._state_labels): + raw_data2[0][stateidx] = raw_data.get(state, 0) + + elif isinstance(raw_data, list): + size_ratio = len(raw_data)/len(self._state_labels) + if len(raw_data) == len(self._state_labels): + data_format = 1 + raw_data2 = [raw_data] + elif int(size_ratio) == size_ratio: + data_format = 2 + size_ratio = int(size_ratio) + # make the list into chunks the size of state_labels for easier + # processing + raw_data2 = np.zeros([size_ratio, len(self._state_labels)]) + for i in range(size_ratio): + raw_data2[i][:] = raw_data[ + i * len(self._state_labels):(i + 1)*len( + self._state_labels)] + else: + raise QiskitError("Data list is not an integer multiple " + "of the number of calibrated states") + + elif isinstance(raw_data, qiskit.result.result.Result): + + # extract out all the counts, re-call the function with the + # counts and push back into the new result + new_result = deepcopy(raw_data) + + new_counts_list = parallel_map( + self._apply_correction, + [resultidx for resultidx, _ in enumerate(raw_data.results)], + task_args=(raw_data, method)) + + for resultidx, new_counts in new_counts_list: + new_result.results[resultidx].data.counts = new_counts + + return new_result + + else: + raise QiskitError("Unrecognized type for raw_data.") + + if method == 'pseudo_inverse': + pinv_cal_mat = la.pinv(self._cal_matrix) + + # Apply the correction + for data_idx, _ in enumerate(raw_data2): + + if method == 'pseudo_inverse': + raw_data2[data_idx] = np.dot( + pinv_cal_mat, raw_data2[data_idx]) + + elif method == 'least_squares': + nshots = sum(raw_data2[data_idx]) + + def fun(x): + return sum( + (raw_data2[data_idx] - np.dot(self._cal_matrix, x))**2) + x0 = np.random.rand(len(self._state_labels)) + x0 = x0 / sum(x0) + cons = ({'type': 'eq', 'fun': lambda x: nshots - sum(x)}) + bnds = tuple((0, nshots) for x in x0) + res = minimize(fun, x0, method='SLSQP', + constraints=cons, bounds=bnds, tol=1e-6) + raw_data2[data_idx] = res.x + + else: + raise QiskitError("Unrecognized method.") + + if data_format == 2: + # flatten back out the list + raw_data2 = raw_data2.flatten() + + elif data_format == 0: + # convert back into a counts dictionary + new_count_dict = {} + for stateidx, state in enumerate(self._state_labels): + if raw_data2[0][stateidx] != 0: + new_count_dict[state] = raw_data2[0][stateidx] + + raw_data2 = new_count_dict + else: + # TODO: should probably change to: + # raw_data2 = raw_data2[0].tolist() + raw_data2 = raw_data2[0] + return raw_data2 + + def _apply_correction(self, resultidx, raw_data, method): + """Wrapper to call apply with a counts dictionary.""" + new_counts = self.apply( + raw_data.get_counts(resultidx), method=method) + return resultidx, new_counts + + +class TensoredFilter(): + """ + Tensored measurement error mitigation filter. + + Produced from a tensored measurement calibration fitter and can be applied + to data. + """ + + def __init__(self, + cal_matrices: np.matrix, + substate_labels_list: list, + mit_pattern: list): + """ + Initialize a tensored measurement error mitigation filter using + the cal_matrices from a tensored measurement calibration fitter. + A simple usage this class is explained [here] + (https://qiskit.org/documentation/tutorials/noise/3_measurement_error_mitigation.html). + + Args: + cal_matrices: the calibration matrices for applying the correction. + substate_labels_list: for each calibration matrix + a list of the states (as strings, states in the subspace) + mit_pattern: for each calibration matrix + a list of the logical qubit indices (as int, states in the subspace) + """ + + self._cal_matrices = cal_matrices + self._qubit_list_sizes = [] + self._indices_list = [] + self._substate_labels_list = [] + self.substate_labels_list = substate_labels_list + self._mit_pattern = mit_pattern + + @property + def cal_matrices(self): + """Return cal_matrices.""" + return self._cal_matrices + + @cal_matrices.setter + def cal_matrices(self, new_cal_matrices): + """Set cal_matrices.""" + self._cal_matrices = deepcopy(new_cal_matrices) + + @property + def substate_labels_list(self): + """Return _substate_labels_list""" + return self._substate_labels_list + + @substate_labels_list.setter + def substate_labels_list(self, new_substate_labels_list): + """Return _substate_labels_list""" + self._substate_labels_list = new_substate_labels_list + + # get the number of qubits in each subspace + self._qubit_list_sizes = [] + for _, substate_label_list in enumerate(self._substate_labels_list): + self._qubit_list_sizes.append( + int(np.log2(len(substate_label_list)))) + + # get the indices in the calibration matrix + self._indices_list = [] + for _, sub_labels in enumerate(self._substate_labels_list): + + self._indices_list.append( + {lab: ind for ind, lab in enumerate(sub_labels)}) + + @property + def qubit_list_sizes(self): + """Return _qubit_list_sizes.""" + return self._qubit_list_sizes + + @property + def nqubits(self): + """Return the number of qubits. See also MeasurementFilter.apply() """ + return sum(self._qubit_list_sizes) + + def apply(self, + raw_data: Union[qiskit.result.result.Result, dict], + method: str = 'least_squares', + meas_layout: List[int] = None): + """ + Apply the calibration matrices to results. + + Args: + raw_data (dict or Result): The data to be corrected. Can be in one of two forms: + + * A counts dictionary from results.get_counts + + * A Qiskit Result + + method (str): fitting method. The following methods are supported: + + * 'pseudo_inverse': direct inversion of the cal matrices. + Mitigated counts can contain negative values + and the sum of counts would not equal to the shots. + Mitigation is conducted qubit wise: + For each qubit, mitigate the whole counts using the calibration matrices + which affect the corresponding qubit. + For example, assume we are mitigating the 3rd bit of the 4-bit counts + using '2\times 2' calibration matrix `A_3`. + When mitigating the count of '0110' in this step, + the following formula is applied: + `count['0110'] = A_3^{-1}[1, 0]*count['0100'] + A_3^{-1}[1, 1]*count['0110']`. + + The total time complexity of this method is `O(m2^{n + t})`, + where `n` is the size of calibrated qubits, + `m` is the number of sets in `mit_pattern`, + and `t` is the size of largest set of mit_pattern. + If the `mit_pattern` is shaped like `[[0], [1], [2], ..., [n-1]]`, + which corresponds to the tensor product noise model without cross-talk, + then the time complexity would be `O(n2^n)`. + If the `mit_pattern` is shaped like `[[0, 1, 2, ..., n-1]]`, + which exactly corresponds to the complete error mitigation, + then the time complexity would be `O(2^(n+n)) = O(4^n)`. + + + * 'least_squares': constrained to have physical probabilities. + Instead of directly applying inverse calibration matrices, + this method solve a constrained optimization problem to find + the closest probability vector to the result from 'pseudo_inverse' method. + Sequential least square quadratic programming (SLSQP) is used + in the internal process. + Every updating step in SLSQP takes `O(m2^{n+t})` time. + Since this method is using the SLSQP optimization over + the vector with lenght `2^n`, the mitigation for 8 bit counts + with the `mit_pattern = [[0], [1], [2], ..., [n-1]]` would + take 10 seconds or more. + + * If `None`, 'least_squares' is used. + + meas_layout (list of int): the mapping from classical registers to qubits + + * If you measure qubit `2` to clbit `0`, `0` to `1`, and `1` to `2`, + the list becomes `[2, 0, 1]` + + * If `None`, flatten(mit_pattern) is used. + + Returns: + dict or Result: The corrected data in the same form as raw_data + + Raises: + QiskitError: if raw_data is not in a one of the defined forms. + """ + + all_states = count_keys(self.nqubits) + num_of_states = 2**self.nqubits + + if meas_layout is None: + meas_layout = [] + for qubits in self._mit_pattern: + meas_layout += qubits + + # check forms of raw_data + if isinstance(raw_data, dict): + # counts dictionary + # convert to list + raw_data2 = [np.zeros(num_of_states, dtype=float)] + for state, count in raw_data.items(): + stateidx = int(state, 2) + raw_data2[0][stateidx] = count + + elif isinstance(raw_data, qiskit.result.result.Result): + + # extract out all the counts, re-call the function with the + # counts and push back into the new result + new_result = deepcopy(raw_data) + + new_counts_list = parallel_map( + self._apply_correction, + [resultidx for resultidx, _ in enumerate(raw_data.results)], + task_args=(raw_data, method, meas_layout)) + + for resultidx, new_counts in new_counts_list: + new_result.results[resultidx].data.counts = new_counts + + return new_result + + else: + raise QiskitError("Unrecognized type for raw_data.") + + if method == 'pseudo_inverse': + pinv_cal_matrices = [] + for cal_mat in self._cal_matrices: + pinv_cal_matrices.append(la.pinv(cal_mat)) + + meas_layout = meas_layout[::-1] # reverse endian + qubits_to_clbits = [-1 for _ in range(max(meas_layout) + 1)] + for i, qubit in enumerate(meas_layout): + qubits_to_clbits[qubit] = i + + # Apply the correction + for data_idx, _ in enumerate(raw_data2): + + if method == 'pseudo_inverse': + for pinv_cal_mat, pos_qubits, indices in zip(pinv_cal_matrices, + self._mit_pattern, + self._indices_list): + inv_mat_dot_x = np.zeros([num_of_states], dtype=float) + pos_clbits = [qubits_to_clbits[qubit] for qubit in pos_qubits] + for state_idx, state in enumerate(all_states): + first_index = self.compute_index_of_cal_mat(state, pos_clbits, indices) + for i in range(len(pinv_cal_mat)): # i is index of pinv_cal_mat + source_state = self.flip_state(state, i, pos_clbits) + second_index = self.compute_index_of_cal_mat(source_state, + pos_clbits, + indices) + inv_mat_dot_x[state_idx] += pinv_cal_mat[first_index, second_index]\ + * raw_data2[data_idx][int(source_state, 2)] + raw_data2[data_idx] = inv_mat_dot_x + + elif method == 'least_squares': + def fun(x): + mat_dot_x = deepcopy(x) + for cal_mat, pos_qubits, indices in zip(self._cal_matrices, + self._mit_pattern, + self._indices_list): + res_mat_dot_x = np.zeros([num_of_states], dtype=float) + pos_clbits = [qubits_to_clbits[qubit] for qubit in pos_qubits] + for state_idx, state in enumerate(all_states): + second_index = self.compute_index_of_cal_mat(state, pos_clbits, indices) + for i in range(len(cal_mat)): + target_state = self.flip_state(state, i, pos_clbits) + first_index =\ + self.compute_index_of_cal_mat(target_state, pos_clbits, indices) + res_mat_dot_x[int(target_state, 2)]\ + += cal_mat[first_index, second_index] * mat_dot_x[state_idx] + mat_dot_x = res_mat_dot_x + return sum((raw_data2[data_idx] - mat_dot_x) ** 2) + + x0 = np.random.rand(num_of_states) + x0 = x0 / sum(x0) + nshots = sum(raw_data2[data_idx]) + cons = ({'type': 'eq', 'fun': lambda x: nshots - sum(x)}) + bnds = tuple((0, nshots) for x in x0) + res = minimize(fun, x0, method='SLSQP', + constraints=cons, bounds=bnds, tol=1e-6) + raw_data2[data_idx] = res.x + + else: + raise QiskitError("Unrecognized method.") + + # convert back into a counts dictionary + new_count_dict = {} + for state_idx, state in enumerate(all_states): + if raw_data2[0][state_idx] != 0: + new_count_dict[state] = raw_data2[0][state_idx] + + return new_count_dict + + def flip_state(self, state: str, mat_index: int, flip_poses: List[int]) -> str: + """Flip the state according to the chosen qubit positions""" + flip_poses = [pos for i, pos in enumerate(flip_poses) if (mat_index >> i) & 1] + flip_poses = sorted(flip_poses) + new_state = "" + pos = 0 + for flip_pos in flip_poses: + new_state += state[pos:flip_pos] + new_state += str(int(state[flip_pos], 2) ^ 1) # flip the state + pos = flip_pos + 1 + new_state += state[pos:] + return new_state + + def compute_index_of_cal_mat(self, state: str, pos_qubits: List[int], indices: dict) -> int: + """Return the index of (pseudo inverse) calibration matrix for the input quantum state""" + sub_state = "" + for pos in pos_qubits: + sub_state += state[pos] + return indices[sub_state] + + def _apply_correction(self, + resultidx: int, + raw_data: qiskit.result.result.Result, + method: str, + meas_layout: List[int]): + """Wrapper to call apply with a counts dictionary.""" + new_counts = self.apply( + raw_data.get_counts(resultidx), method=method, meas_layout=meas_layout) + return resultidx, new_counts diff --git a/data/source_files/clean/9809f7ae327a.py b/data/source_files/clean/9809f7ae327a.py new file mode 100644 index 0000000000000000000000000000000000000000..86095983c39bff7a689e2233b004ba39842ac699 --- /dev/null +++ b/data/source_files/clean/9809f7ae327a.py @@ -0,0 +1,58 @@ +# coding=utf-8 +# Copyright 2018 The Google AI Language Team Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# Lint as: python3 +"""Sentencize the raw wikitext103.""" + +import tensorflow.compat.v1 as tf + +app = tf.app +flags = tf.flags +gfile = tf.gfile +logging = tf.logging + +flags.DEFINE_string("wiki103_raw", None, + "Path to raw wikitext103 train corpus.") +flags.DEFINE_string("output_path", None, + "Path to output the processed dataset.") + +FLAGS = flags.FLAGS + + +def main(_): + with open(FLAGS.wiki103_raw, "r") as f: + data = f.read().strip().split("\n") + + data = [x.split(" . ") for x in data if x.strip() and x.strip()[0] != "="] + + sentences = [] + for para in data: + for sent in para: + sentences.append(sent + ".") + data = "\n".join(sentences) + + data = data.replace(" @.@ ", ".").replace(" @-@ ", "-").replace(" ,", ",") + data = data.replace(" \'", "\'").replace(" )", ")").replace("( ", "(") + data = data.replace(" ;", ";") + + data = "\n".join([x for x in data.split("\n") if len(x.split()) > 3]) + + logging.info("length = %d", len(data.split("\n"))) + + with open(FLAGS.output_path, "w") as f: + f.write(data) + + +if __name__ == "__main__": + app.run(main) diff --git a/data/source_files/clean/985515e1b34b.py b/data/source_files/clean/985515e1b34b.py new file mode 100644 index 0000000000000000000000000000000000000000..8a2014bc56418a4e4967160efe3f9656c573b77f --- /dev/null +++ b/data/source_files/clean/985515e1b34b.py @@ -0,0 +1,54 @@ +# Set up configuration variables + +__all__ = ['custom_viewer', 'qglue', 'test'] + +import os + +import sys + +from pkg_resources import get_distribution, DistributionNotFound + +try: + __version__ = get_distribution('glue-core').version +except DistributionNotFound: + __version__ = 'undefined' + +from ._mpl_backend import MatplotlibBackendSetter +sys.meta_path.append(MatplotlibBackendSetter()) + +from glue.viewers.custom.helper import custom_viewer + +# Load user's configuration file +from .config import load_configuration +env = load_configuration() + +from .qglue import qglue + +from .main import load_plugins # noqa + + +def test(no_optional_skip=False): + from pytest import main + root = os.path.abspath(os.path.dirname(__file__)) + args = [root, '-x'] + if no_optional_skip: + args.append('--no-optional-skip') + return main(args=args) + + +from glue._settings_helpers import load_settings +load_settings() + + +# In PyQt 5.5+, PyQt overrides the default exception catching and fatally +# crashes the Qt application without printing out any details about the error. +# Below we revert the exception hook to the original Python one. Note that we +# can't just do sys.excepthook = sys.__excepthook__ otherwise PyQt will detect +# the default excepthook is in place and override it. + + +def handle_exception(exc_type, exc_value, exc_traceback): + sys.__excepthook__(exc_type, exc_value, exc_traceback) + + +sys.excepthook = handle_exception diff --git a/data/source_files/clean/9b31cca2e395.py b/data/source_files/clean/9b31cca2e395.py new file mode 100644 index 0000000000000000000000000000000000000000..812eae9e0a007577935e4a756403808aa1018593 --- /dev/null +++ b/data/source_files/clean/9b31cca2e395.py @@ -0,0 +1,134 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# coding: utf-8 +# pylint: disable= arguments-differ +# pylint: disable= missing-docstring +"Addtional image transforms." + +import random +import math +import numpy as np +from mxnet import image, nd +from mxnet.gluon import Block + + +__all__ = ['RandomCrop', 'RandomErasing'] + + +class RandomCrop(Block): + """Randomly crop `src` with `size` (width, height). + Padding is optional. + Upsample result if `src` is smaller than `size`. + + Parameters + ---------- + size : int or tuple of (W, H) + Size of the final output. + pad: int or tuple + if int, size of the zero-padding + if tuple, number of values padded to the edges of each axis. + ((before_1, after_1), ... (before_N, after_N)) unique pad widths for each axis. + ((before, after),) yields same before and after pad for each axis. + (pad,) or int is a shortcut for before = after = pad width for all axes. + interpolation : int + Interpolation method for resizing. By default uses bilinear + interpolation. See OpenCV's resize function for available choices. + + + Inputs: + - **data**: input tensor with (Hi x Wi x C) shape. + Outputs: + - **out**: output tensor with (size[0] x size[1] x C) or (size x size x C) shape. + """ + + def __init__(self, size, pad=None, interpolation=2): + super(RandomCrop, self).__init__() + numeric_types = (float, int, np.generic) + if isinstance(size, numeric_types): + size = (size, size) + self._args = (size, interpolation) + self.pad = ((pad, pad), (pad, pad), (0, 0)) if isinstance(pad, int) else pad + def forward(self, x): + if self.pad: + return image.random_crop(nd.array( + np.pad(x.asnumpy(), self.pad, mode='constant', constant_values=0)), *self._args)[0] + else: + return image.random_crop(x, *self._args)[0] + +class RandomErasing(Block): + """Randomly erasing the area in `src` between `s_min` and `s_max` with `probability`. + `ratio` controls the ratio between width and height. + `mean` means the value in erasing area. + + Parameters + ---------- + probability : float + Probability of erasing. + s_min : float + Min area to all area. + s_max : float + Max area to all area. + ratio : float + The ratio between width and height. + mean : int or tuple of (R, G, B) + The value in erasing area. + + + Inputs: + - **data**: input tensor with (Hi x Wi x C) shape. + Outputs: + - **out**: output tensor with (Hi x Wi x C) shape. + """ + + def __init__(self, probability=0.5, s_min=0.02, s_max=0.4, ratio=0.3, + mean=(125.31, 122.96, 113.86)): + super(RandomErasing, self).__init__() + self.probability = probability + self.mean = mean + self.s_min = s_min + self.s_max = s_max + self.ratio = ratio + + def forward(self, x): + if not isinstance(self.probability, float): + raise TypeError('Got inappropriate size arg') + if not isinstance(self.s_min, float): + raise TypeError('Got inappropriate size arg') + if not isinstance(self.s_max, float): + raise TypeError('Got inappropriate size arg') + if not isinstance(self.ratio, float): + raise TypeError('Got inappropriate size arg') + if not isinstance(self.mean, (int, tuple)): + raise TypeError('Got inappropriate size arg') + + if random.uniform(0, 1) > self.probability: + return x + + width, height, _ = x.shape + area = width * height + target_area = random.uniform(self.s_min, self.s_max) * area + aspect_ratio = random.uniform(self.ratio, 1/self.ratio) + w = int(round(math.sqrt(target_area * aspect_ratio))) + h = int(round(math.sqrt(target_area / aspect_ratio))) + if w < width and h < height: + x1 = random.randint(0, width - w) + y1 = random.randint(0, height - h) + x[x1:x1+w, y1:y1+h, 0] = self.mean[0] + x[x1:x1+w, y1:y1+h, 1] = self.mean[1] + x[x1:x1+w, y1:y1+h, 2] = self.mean[2] + return x diff --git a/data/source_files/clean/9b4e8007fc1d.py b/data/source_files/clean/9b4e8007fc1d.py new file mode 100644 index 0000000000000000000000000000000000000000..86f19d8269d91051babd1a81669ee8409fe871bc --- /dev/null +++ b/data/source_files/clean/9b4e8007fc1d.py @@ -0,0 +1,43 @@ +import numpy as np +from keras import backend as K +import os +import sys + +K.set_image_dim_ordering('tf') + + +def patch_path(path): + return os.path.join(os.path.dirname(__file__), path) + + +def main(): + sys.path.append(patch_path('..')) + + data_dir_path = patch_path('very_large_data') + model_dir_path = patch_path('models/UCF-101') + + from keras_video_classifier.library.convolutional import CnnVideoClassifier + from keras_video_classifier.library.utility.ucf.UCF101_loader import load_ucf, scan_ucf_with_labels + config_file_path = CnnVideoClassifier.get_config_file_path(model_dir_path) + weight_file_path = CnnVideoClassifier.get_weight_file_path(model_dir_path) + + np.random.seed(42) + + load_ucf(data_dir_path) + + predictor = CnnVideoClassifier() + predictor.load_model(config_file_path, weight_file_path) + + videos = scan_ucf_with_labels(data_dir_path, [label for (label, label_index) in predictor.labels.items()]) + + video_file_path_list = np.array([file_path for file_path in videos.keys()]) + np.random.shuffle(video_file_path_list) + + for video_file_path in video_file_path_list: + label = videos[video_file_path] + predicted_label = predictor.predict(video_file_path) + print('predicted: ' + predicted_label + ' actual: ' + label) + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/data/source_files/clean/9bb4c0bf7227.py b/data/source_files/clean/9bb4c0bf7227.py new file mode 100644 index 0000000000000000000000000000000000000000..6abef106632056c480a54511ff7725bfc1193a55 --- /dev/null +++ b/data/source_files/clean/9bb4c0bf7227.py @@ -0,0 +1,116 @@ +import stl_path + +class MyNDRPlugin(): + def __init__(self): + pass + + def pre_iteration(self, finding_max_rate, run_results=None, **kwargs): + """ Function ran before each iteration. + + :parameters: + finding_max_rate: boolean + Indicates whether we are running for the first time, trying to find the max rate. In this is the case, the run_results will be None. + + run_results: dict + A dictionary that contains the following keys: + queue_full_percentage: Percentage of packets that are queued. + + drop_rate_percentage: Percentage of packets that were dropped. + + rate_tx_bps: TX rate in bps. + + rate_rx_bps: RX rate in bps. + + tx_util: TX utilization percentage. + + latency: Latency groups. + + cpu_util: CPU utilization percentage. + + tx_pps: TX in pps. + + rx_pps: RX in pps. + + tx_bps: TX in bps. + + rx_bps: RX in bps. + + bw_per_core: Bandwidth per core. + + rate_p: Running rate in percentage out of max. + + total_tx_L1: Total TX L1. + + total_rx_L1: Total RX L1. + + iteration: Description of iteration (not necessarily a number) + + Pay attention: The rate is of the upcoming iteration. All the rest are of the previous iteration. + + kwargs: dict + List of tunables passed as parameters. + + """ + # Pre iteration function. This function will run before TRex transmits to the DUT. + # Could use this to better prepare the DUT, for example define shapers, policers, increase buffers and queues. + # You can receive tunables in the command line, through the kwargs argument. + pass + + def post_iteration(self, finding_max_rate, run_results, **kwargs): + """ Function ran after each iteration. + + :parameters: + finding_max_rate: boolean + Indicates whether we are running for the first time, trying to find the max rate. If this is the case, some values of run_results (like iteration for example) are not relevant. + + run_results: dict + A dictionary that contains the following keys: + queue_full_percentage: Percentage of packets that are queued. + + drop_rate_percentage: Percentage of packets that were dropped. + + rate_tx_bps: TX rate in bps. + + rate_rx_bps: RX rate in bps. + + tx_util: TX utilization percentage. + + latency: Latency groups. + + cpu_util: CPU utilization percentage. + + tx_pps: TX in pps. + + rx_pps: RX in pps. + + tx_bps: TX in bps. + + rx_bps: RX in bps. + + bw_per_core: Bandwidth per core. + + rate_p: Running rate in percentage out of max. + + total_tx_L1: Total TX L1. + + total_rx_L1: Total RX L1. + + iteration: Description of iteration (not necessarily a number) + + kwargs: dict + List of tunables passed as parameters. + + :returns: + bool: should stop the benchmarking or not. + + """ + # Post iteration function. This function will run after TRex transmits to the DUT. + # Could use this to decide if to continue the benchmark after querying the DUT post run. The DUT might be overheated or any other thing that might make you want to stop the run. + # You can receive tunables in the command line, through the kwargs argument. + should_stop = False + return should_stop + + +# dynamic load of python module +def register(): + return MyNDRPlugin() \ No newline at end of file diff --git a/data/source_files/clean/9c655d5908ce.py b/data/source_files/clean/9c655d5908ce.py new file mode 100644 index 0000000000000000000000000000000000000000..81053c6c0f8dac07d6cae3bc4a12cf5b1f575105 --- /dev/null +++ b/data/source_files/clean/9c655d5908ce.py @@ -0,0 +1,68 @@ +# Copyright 2015 OpenStack Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +from alembic import op +from oslo_utils import uuidutils +import sqlalchemy as sa + +from neutron.db import rbac_db_models + +"""rbac_qos_policy + +Revision ID: c6c112992c9 +Revises: 8a6d8bdae39 +Create Date: 2015-11-25 18:45:03.831359 + +""" + +# revision identifiers, used by Alembic. + +revision = 'c6c112992c9' +down_revision = 'e3278ee65050' +depends_on = ('15e43b934f81',) + +qos_rbacs = sa.Table( + 'qospolicyrbacs', sa.MetaData(), + sa.Column('id', sa.String(length=36), nullable=False), + sa.Column('tenant_id', sa.String(length=255), + nullable=True), + sa.Column('target_tenant', sa.String(length=255), + nullable=False), + sa.Column('action', sa.String(length=255), nullable=False), + sa.Column('object_id', sa.String(length=36), nullable=False)) + +# A simple model of the qos_policies table with only the fields needed for +# the migration. +qos_policy = sa.Table('qos_policies', sa.MetaData(), + sa.Column('id', sa.String(length=36), nullable=False), + sa.Column('tenant_id', + sa.String(length=255)), + sa.Column('shared', sa.Boolean(), nullable=False)) + + +def upgrade(): + op.bulk_insert(qos_rbacs, get_values()) + op.drop_column('qos_policies', 'shared') + + +def get_values(): + session = sa.orm.Session(bind=op.get_bind()) + values = [] + for row in session.query(qos_policy).filter(qos_policy.c.shared).all(): + values.append({'id': uuidutils.generate_uuid(), 'object_id': row[0], + 'tenant_id': row[1], 'target_tenant': '*', + 'action': rbac_db_models.ACCESS_SHARED}) + session.commit() + return values diff --git a/data/source_files/clean/9dc2299143fb.py b/data/source_files/clean/9dc2299143fb.py new file mode 100644 index 0000000000000000000000000000000000000000..8a19876a956cc7df8eee4ce39d6fc5531c4cfc7c --- /dev/null +++ b/data/source_files/clean/9dc2299143fb.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +""" +Tencent is pleased to support the open source community by making BK-BASE 蓝鲸基础平台 available. +Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. +BK-BASE 蓝鲸基础平台 is licensed under the MIT License. +License for BK-BASE 蓝鲸基础平台: +-------------------------------------------------------------------- +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +""" + + +from copy import deepcopy + +from datamanage.pro import exceptions as dm_pro_errors +from datamanage.utils.api import MetaApi +from datamanage.pro.utils.time import utc_to_local, str_to_datetime +from datamanage.pro.lifecycle.models_dict import ( + DATASET_CREATE_MAPPINGS, + DATASET_CREATE_EVENT_INFO_DICT, + DataTraceShowType, + ComplexSearchBackendType, + DataTraceFinishStatus, +) + + +def get_dataset_create_info(dataset_id, dataset_type): + """获取数据足迹中和数据创建相关信息 + + :param dataset_id: 数据id + :param dataset_type: 数据类型 + + :return: 数据创建相关信息 + :rtype: list + """ + # 1)从dgraph中获取数据创建相关信息 + data_set_create_info_statement = """ + { + get_dataset_create_info(func: eq(%s, "%s")){created_by created_at} + } + """ % ( + DATASET_CREATE_MAPPINGS[dataset_type]['data_set_pk'], + dataset_id, + ) + query_result = MetaApi.complex_search( + {"backend_type": ComplexSearchBackendType.DGRAPH.value, "statement": data_set_create_info_statement}, raw=True + ) + create_info_ret = query_result['data']['data']['get_dataset_create_info'] + if not (isinstance(create_info_ret, list) and create_info_ret): + raise dm_pro_errors.GetDataSetCreateInfoError(message_kv={'dataset_id': dataset_id}) + + # 2)得到格式化创建信息 + create_trace_dict = deepcopy(DATASET_CREATE_EVENT_INFO_DICT) + create_trace_dict.update( + { + "sub_type": dataset_type, + "sub_type_alias": DATASET_CREATE_MAPPINGS[dataset_type]['data_set_create_alias'], + "description": DATASET_CREATE_MAPPINGS[dataset_type]['data_set_create_alias'], + "created_at": utc_to_local(create_info_ret[0]['created_at']), + "created_by": create_info_ret[0]['created_by'], + "show_type": DataTraceShowType.DISPLAY.value, + "datetime": str_to_datetime(utc_to_local(create_info_ret[0]['created_at'])), + "status": DataTraceFinishStatus.STATUS, + "status_alias": DataTraceFinishStatus.STATUS_ALIAS, + } + ) + return [create_trace_dict] diff --git a/data/source_files/clean/9f33016871b5.py b/data/source_files/clean/9f33016871b5.py new file mode 100644 index 0000000000000000000000000000000000000000..86524c143ea8ba1817f21135f1c0c27360fa74e8 --- /dev/null +++ b/data/source_files/clean/9f33016871b5.py @@ -0,0 +1,113 @@ +import os +import os.path as osp + +import numpy as np +from joblib import Parallel, delayed +from tensorflow.keras.utils import get_file +from tqdm import tqdm + +from spektral.data import Dataset, Graph +from spektral.utils import label_to_one_hot, sparse +from spektral.utils.io import load_csv, load_sdf + +ATOM_TYPES = [1, 6, 7, 8, 9] +BOND_TYPES = [1, 2, 3, 4] + + +class QM9(Dataset): + """ + The QM9 chemical data set of small molecules. + + In this dataset, nodes represent atoms and edges represent chemical bonds. + There are 5 possible atom types (H, C, N, O, F) and 4 bond types (single, + double, triple, aromatic). + + Node features represent the chemical properties of each atom and include: + + - The atomic number, one-hot encoded; + - The atom's position in the X, Y, and Z dimensions; + - The atomic charge; + - The mass difference from the monoisotope; + + The edge features represent the type of chemical bond between two atoms, + one-hot encoded. + + Each graph has an 19-dimensional label for regression. + + **Arguments** + + - `amount`: int, load this many molecules instead of the full dataset + (useful for debugging). + - `n_jobs`: number of CPU cores to use for reading the data (-1, to use all + available cores). + """ + + url = "https://deepchemdata.s3-us-west-1.amazonaws.com/datasets/gdb9.tar.gz" + + def __init__(self, amount=None, n_jobs=1, **kwargs): + self.amount = amount + self.n_jobs = n_jobs + super().__init__(**kwargs) + + def download(self): + get_file( + "qm9.tar.gz", + self.url, + extract=True, + cache_dir=self.path, + cache_subdir=self.path, + ) + os.remove(osp.join(self.path, "qm9.tar.gz")) + + def read(self): + print("Loading QM9 dataset.") + sdf_file = osp.join(self.path, "gdb9.sdf") + data = load_sdf(sdf_file, amount=self.amount) # Internal SDF format + + def read_mol(mol): + x = np.array([atom_to_feature(atom) for atom in mol["atoms"]]) + a, e = mol_to_adj(mol) + return x, a, e + + data = Parallel(n_jobs=self.n_jobs)( + delayed(read_mol)(mol) for mol in tqdm(data, ncols=80) + ) + x_list, a_list, e_list = list(zip(*data)) + + # Load labels + labels_file = osp.join(self.path, "gdb9.sdf.csv") + labels = load_csv(labels_file) + labels = labels.set_index("mol_id").values + if self.amount is not None: + labels = labels[: self.amount] + + return [ + Graph(x=x, a=a, e=e, y=y) + for x, a, e, y in zip(x_list, a_list, e_list, labels) + ] + + +def atom_to_feature(atom): + atomic_num = label_to_one_hot(atom["atomic_num"], ATOM_TYPES) + coords = atom["coords"] + charge = atom["charge"] + iso = atom["iso"] + + return np.concatenate((atomic_num, coords, [charge, iso]), -1) + + +def mol_to_adj(mol): + row, col, edge_features = [], [], [] + for bond in mol["bonds"]: + start, end = bond["start_atom"], bond["end_atom"] + row += [start, end] + col += [end, start] + edge_features += [bond["type"]] * 2 + + a, e = sparse.edge_index_to_matrix( + edge_index=np.array((row, col)).T, + edge_weight=np.ones_like(row), + edge_features=label_to_one_hot(edge_features, BOND_TYPES), + ) + + return a, e diff --git a/data/source_files/clean/a03ab9aeccb4.py b/data/source_files/clean/a03ab9aeccb4.py new file mode 100644 index 0000000000000000000000000000000000000000..d9c4cf9fb1ad31300587d3e24030d9670ed150d3 --- /dev/null +++ b/data/source_files/clean/a03ab9aeccb4.py @@ -0,0 +1,91 @@ +"""Lowest-common-denominator implementations of platform functionality.""" +from __future__ import absolute_import, division, print_function, with_statement + +import errno +import socket + +from tornado.platform import interface + + +class Waker(interface.Waker): + """Create an OS independent asynchronous pipe. + + For use on platforms that don't have os.pipe() (or where pipes cannot + be passed to select()), but do have sockets. This includes Windows + and Jython. + """ + def __init__(self): + # Based on Zope async.py: http://svn.zope.org/zc.ngi/trunk/src/zc/ngi/async.py + + self.writer = socket.socket() + # Disable buffering -- pulling the trigger sends 1 byte, + # and we want that sent immediately, to wake up ASAP. + self.writer.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) + + count = 0 + while 1: + count += 1 + # Bind to a local port; for efficiency, let the OS pick + # a free port for us. + # Unfortunately, stress tests showed that we may not + # be able to connect to that port ("Address already in + # use") despite that the OS picked it. This appears + # to be a race bug in the Windows socket implementation. + # So we loop until a connect() succeeds (almost always + # on the first try). See the long thread at + # http://mail.zope.org/pipermail/zope/2005-July/160433.html + # for hideous details. + a = socket.socket() + a.bind(("127.0.0.1", 0)) + a.listen(1) + connect_address = a.getsockname() # assigned (host, port) pair + try: + self.writer.connect(connect_address) + break # success + except socket.error as detail: + if (not hasattr(errno, 'WSAEADDRINUSE') or + detail[0] != errno.WSAEADDRINUSE): + # "Address already in use" is the only error + # I've seen on two WinXP Pro SP2 boxes, under + # Pythons 2.3.5 and 2.4.1. + raise + # (10048, 'Address already in use') + # assert count <= 2 # never triggered in Tim's tests + if count >= 10: # I've never seen it go above 2 + a.close() + self.writer.close() + raise socket.error("Cannot bind trigger!") + # Close `a` and try again. Note: I originally put a short + # sleep() here, but it didn't appear to help or hurt. + a.close() + + self.reader, addr = a.accept() + self.reader.setblocking(0) + self.writer.setblocking(0) + a.close() + self.reader_fd = self.reader.fileno() + + def fileno(self): + return self.reader.fileno() + + def write_fileno(self): + return self.writer.fileno() + + def wake(self): + try: + self.writer.send(b"x") + except (IOError, socket.error): + pass + + def consume(self): + try: + while True: + result = self.reader.recv(1024) + if not result: + break + except (IOError, socket.error): + pass + + def close(self): + self.reader.close() + self.writer.close() diff --git a/data/source_files/clean/a1f9bba6c881.py b/data/source_files/clean/a1f9bba6c881.py new file mode 100644 index 0000000000000000000000000000000000000000..86350332b9c46bb259c547e1b3c963ac7c8f647c --- /dev/null +++ b/data/source_files/clean/a1f9bba6c881.py @@ -0,0 +1,239 @@ +from datetime import datetime +from kubernetes import client +from kubernetes.client.rest import ApiException +import os +import time +import yaml + +from tests import config as conf +import tests.utils as ut + + +def remove_clusterrole_binding(shipper_name, crb_name): + # remove clusterrolebind + k8s_client = client.RbacAuthorizationV1Api() + try: + k8s_client.delete_cluster_role_binding(crb_name) + print(f"\nsuccessfully deleted: {crb_name}") + except Exception as e: + print(f"\n{shipper_name} cluster role binding deletion has failed, please manually delete {crb_name}:") + print(f"kubectl delete clusterrolebinding {crb_name}") + + +def filebeat_teardown(namespace): + # remove clusterrolebind + # TODO: find a solution for sharing the name both here and in the kube object + crb_name = f"filebeat-cluster-role-binding-{namespace}" + remove_clusterrole_binding("filebeat", crb_name) + + +def fluent_bit_teardown(namespace): + # remove clusterrolebind + # TODO: find a solution for sharing the name both here and in the kube object + crb_name = f"fluent-bit-clusterrole-binding-{namespace}" + remove_clusterrole_binding("fluent-bit", crb_name) + + +def add_elastic_cluster(namespace): + print("\nDeploying ElasticSearch\n") + add_deployment_dir(namespace, conf.ELASTIC_CONF_DIR) + + +def add_filebeat_cluster(namespace): + print("\nDeploying FileBeat\n") + add_deployment_dir(namespace, conf.FILEBEAT_CONF_DIR) + + +def add_fluent_bit_cluster(namespace): + print("\nDeploying Fluent-bit\n") + add_deployment_dir(namespace, conf.FLUENT_BIT_CONF_DIR) + + +def add_kibana_cluster(namespace): + print("\nDeploying Kibana\n") + add_deployment_dir(namespace, conf.KIBANA_CONF_DIR) + + +def add_logstash_cluster(namespace): + print("\nDeploying LogStash\n") + add_deployment_dir(namespace, conf.LOGSTASH_CONF_DIR) + + +def add_deployment_dir(namespace, dir_path, delete=False): + with open(os.path.join(dir_path, 'dep_order.txt')) as f: + dep_order = f.readline() + dep_lst = [x.strip() for x in dep_order.split(',')] + print(dep_lst) + + phrases_to_replace = ["(? timeout: + raise Exception(f"Timeout waiting for {obj_name} to be ready") + diff --git a/data/source_files/clean/a2576bff34ae.py b/data/source_files/clean/a2576bff34ae.py new file mode 100644 index 0000000000000000000000000000000000000000..76fc510648fa61f30ccc12c1c9b02c19d255e9c6 --- /dev/null +++ b/data/source_files/clean/a2576bff34ae.py @@ -0,0 +1,34 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + +import torch + +from neuralcompression.functional import soft_round, soft_round_inverse + + +def test_soft_round_inverse(): + x = torch.linspace(-2.0, 2.0, 50) + + torch.testing.assert_close( + x, + soft_round_inverse(x, alpha=1e-13), + ) + + x = torch.tensor([-1.25, -0.75, 0.75, 1.25]) + + torch.testing.assert_close( + x, + soft_round_inverse(soft_round(x, alpha=2.0), alpha=2.0), + ) + + for offset in range(-5, 5): + x = torch.linspace(offset + 0.001, offset + 0.999, 100) + + torch.testing.assert_close( + torch.ceil(x) - 0.5, + soft_round_inverse(x, alpha=5000.0), + atol=0.001, + rtol=0.002, + ) diff --git a/data/source_files/clean/a3060596bc92.py b/data/source_files/clean/a3060596bc92.py new file mode 100644 index 0000000000000000000000000000000000000000..7cb54fa0b7a5c349c3088529c91a97ac9de21c8e --- /dev/null +++ b/data/source_files/clean/a3060596bc92.py @@ -0,0 +1,74 @@ +# coding: utf-8 +# Module: commands +# Created on: 28.07.2015 +# Author: Roman Miroshnychenko aka Roman V.M. (romanvm@yandex.ua) +# Licence: GPL v.3: http://www.gnu.org/copyleft/gpl.html +""" +Context menu commands +""" + +import sys +import xbmc +import xbmcgui +import json_requests as jsonrq +from simpleplugin import Addon + +addon = Addon('plugin.video.yatp') +_ = addon.initialize_gettext() + + +def show_torrent_info(info_hash): + """ + Display current torrent info + + :param info_hash: + :return: + """ + torr_info = jsonrq.get_torrent_info(info_hash) + info_dialog = xbmcgui.DialogProgress() + info_dialog.create(torr_info['name']) + while not info_dialog.iscanceled(): + info_dialog.update(torr_info['progress'], + _('state: {0}; seeds: {1}; peers: {2}').format( + torr_info['state'], + torr_info['num_seeds'], + torr_info['num_peers'] + ), + _('size: {0}MB; DL speed: {1}KB/s; UL speed: {2}KB/s').format( + torr_info['size'], + torr_info['dl_speed'], + torr_info['ul_speed'] + ), + _('total DL: {0}MB; total UL: {1}MB').format( + torr_info['total_download'], + torr_info['total_upload']) + ) + xbmc.sleep(1000) + torr_info = jsonrq.get_torrent_info(info_hash) + + +if __name__ == '__main__': + if sys.argv[1] == 'pause': + jsonrq.pause_torrent(sys.argv[2]) + elif sys.argv[1] == 'resume': + jsonrq.resume_torrent(sys.argv[2]) + elif sys.argv[1] == 'delete' and xbmcgui.Dialog().yesno( + _('Confirm delete'), + _('Do you really want to delete the torrent?')): + jsonrq.remove_torrent(sys.argv[2], False) + elif sys.argv[1] == 'delete_with_files'and xbmcgui.Dialog().yesno( + _('Confirm delete'), + _('Do you really want to delete the torrent with files?'), + _('Warning: The files will be deleted permanently!')): + jsonrq.remove_torrent(sys.argv[2], True) + elif sys.argv[1] == 'pause_all': + jsonrq.pause_all() + elif sys.argv[1] == 'resume_all': + jsonrq.resume_all() + elif sys.argv[1] == 'show_info': + show_torrent_info(sys.argv[2]) + elif sys.argv[1] == 'restore_finished': + jsonrq.restore_finished(sys.argv[2]) + else: + addon.log_debug('Command cancelled or invalid command: {0}'.format(sys.argv[1])) + xbmc.executebuiltin('Container.Refresh') diff --git a/data/source_files/clean/a94fea8369fc.py b/data/source_files/clean/a94fea8369fc.py new file mode 100644 index 0000000000000000000000000000000000000000..86612e58c1d3c9004b21a40197263a8e6dc182a5 --- /dev/null +++ b/data/source_files/clean/a94fea8369fc.py @@ -0,0 +1,193 @@ +# coding=utf-8 +# Copyright 2020 The TF-Agents Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +r"""Generic TF-Agents training function for bandits.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +from absl import logging + +import tensorflow as tf # pylint: disable=g-explicit-tensorflow-version-import +from tf_agents.drivers import dynamic_step_driver +from tf_agents.eval import metric_utils +from tf_agents.metrics import tf_metrics +from tf_agents.policies import policy_saver +from tf_agents.replay_buffers import tf_uniform_replay_buffer + +tf = tf.compat.v2 + +AGENT_CHECKPOINT_NAME = 'agent' +STEP_CHECKPOINT_NAME = 'step' +CHECKPOINT_FILE_PREFIX = 'ckpt' + + +def get_replay_buffer(data_spec, + batch_size, + steps_per_loop): + """Return a `TFUniformReplayBuffer` for the given `agent`.""" + buf = tf_uniform_replay_buffer.TFUniformReplayBuffer( + data_spec=data_spec, + batch_size=batch_size, + max_length=steps_per_loop) + return buf + + +def set_expected_shape(experience, num_steps): + def set_time_dim(input_tensor, steps): + tensor_shape = input_tensor.shape.as_list() + tensor_shape[1] = steps + input_tensor.set_shape(tensor_shape) + tf.nest.map_structure(lambda t: set_time_dim(t, num_steps), experience) + + +def get_training_loop_fn(driver, replay_buffer, agent, steps): + """Returns a `tf.function` that runs the driver and training loops. + + Args: + driver: an instance of `Driver`. + replay_buffer: an instance of `ReplayBuffer`. + agent: an instance of `TFAgent`. + steps: an integer indicating how many driver steps should be + executed and presented to the trainer during each training loop. + """ + def training_loop(): + """Returns a `tf.function` that runs the training loop.""" + driver.run() + batch_size = driver.env.batch_size + dataset = replay_buffer.as_dataset( + sample_batch_size=batch_size, + num_steps=steps, + single_deterministic_pass=True) + experience, unused_info = tf.data.experimental.get_single_element(dataset) + set_expected_shape(experience, steps) + loss_info = agent.train(experience) + replay_buffer.clear() + return loss_info + return training_loop + + +def restore_and_get_checkpoint_manager(root_dir, agent, metrics, step_metric): + """Restores from `root_dir` and returns a function that writes checkpoints.""" + trackable_objects = {metric.name: metric for metric in metrics} + trackable_objects[AGENT_CHECKPOINT_NAME] = agent + trackable_objects[STEP_CHECKPOINT_NAME] = step_metric + checkpoint = tf.train.Checkpoint(**trackable_objects) + checkpoint_manager = tf.train.CheckpointManager(checkpoint=checkpoint, + directory=root_dir, + max_to_keep=5) + latest = checkpoint_manager.latest_checkpoint + if latest is not None: + logging.info('Restoring checkpoint from %s.', latest) + checkpoint.restore(latest) + logging.info('Successfully restored to step %s.', step_metric.result()) + else: + logging.info('Did not find a pre-existing checkpoint. ' + 'Starting from scratch.') + return checkpoint_manager + + +def train(root_dir, + agent, + environment, + training_loops, + steps_per_loop, + additional_metrics=(), + training_data_spec_transformation_fn=None): + """Perform `training_loops` iterations of training. + + Checkpoint results. + + If one or more baseline_reward_fns are provided, the regret is computed + against each one of them. Here is example baseline_reward_fn: + + def baseline_reward_fn(observation, per_action_reward_fns): + rewards = ... # compute reward for each arm + optimal_action_reward = ... # take the maximum reward + return optimal_action_reward + + Args: + root_dir: path to the directory where checkpoints and metrics will be + written. + agent: an instance of `TFAgent`. + environment: an instance of `TFEnvironment`. + training_loops: an integer indicating how many training loops should be run. + steps_per_loop: an integer indicating how many driver steps should be + executed and presented to the trainer during each training loop. + additional_metrics: Tuple of metric objects to log, in addition to default + metrics `NumberOfEpisodes`, `AverageReturnMetric`, and + `AverageEpisodeLengthMetric`. + training_data_spec_transformation_fn: Optional function that transforms the + data items before they get to the replay buffer. + """ + + # TODO(b/127641485): create evaluation loop with configurable metrics. + if training_data_spec_transformation_fn is None: + data_spec = agent.policy.trajectory_spec + else: + data_spec = training_data_spec_transformation_fn( + agent.policy.trajectory_spec) + replay_buffer = get_replay_buffer(data_spec, environment.batch_size, + steps_per_loop) + + # `step_metric` records the number of individual rounds of bandit interaction; + # that is, (number of trajectories) * batch_size. + step_metric = tf_metrics.EnvironmentSteps() + metrics = [ + tf_metrics.NumberOfEpisodes(), + tf_metrics.AverageEpisodeLengthMetric(batch_size=environment.batch_size) + ] + list(additional_metrics) + + if isinstance(environment.reward_spec(), dict): + metrics += [tf_metrics.AverageReturnMultiMetric( + reward_spec=environment.reward_spec(), + batch_size=environment.batch_size)] + else: + metrics += [ + tf_metrics.AverageReturnMetric(batch_size=environment.batch_size)] + + if training_data_spec_transformation_fn is not None: + add_batch_fn = lambda data: replay_buffer.add_batch( # pylint: disable=g-long-lambda + training_data_spec_transformation_fn(data)) + else: + add_batch_fn = replay_buffer.add_batch + + observers = [add_batch_fn, step_metric] + metrics + + driver = dynamic_step_driver.DynamicStepDriver( + env=environment, + policy=agent.collect_policy, + num_steps=steps_per_loop * environment.batch_size, + observers=observers) + + training_loop = get_training_loop_fn( + driver, replay_buffer, agent, steps_per_loop) + checkpoint_manager = restore_and_get_checkpoint_manager( + root_dir, agent, metrics, step_metric) + train_step_counter = tf.compat.v1.train.get_or_create_global_step() + saver = policy_saver.PolicySaver(agent.policy, train_step=train_step_counter) + + summary_writer = tf.summary.create_file_writer(root_dir) + summary_writer.set_as_default() + for i in range(training_loops): + training_loop() + metric_utils.log_metrics(metrics) + for metric in metrics: + metric.tf_summaries(train_step=step_metric.result()) + checkpoint_manager.save() + if i % 100 == 0: + saver.save(os.path.join(root_dir, 'policy_%d' % step_metric.result())) diff --git a/data/source_files/clean/ac447d486aa3.py b/data/source_files/clean/ac447d486aa3.py new file mode 100644 index 0000000000000000000000000000000000000000..8aa8401fd27f8fa99c12308b325e2e4f0cfa3068 --- /dev/null +++ b/data/source_files/clean/ac447d486aa3.py @@ -0,0 +1,93 @@ +''' + This file contains test cases for tflearn +''' + +import tensorflow.compat.v1 as tf +import tflearn +import unittest + +class TestActivations(unittest.TestCase): + ''' + This class contains test cases for the functions in tflearn/activations.py + ''' + PLACES = 4 # Number of places to match when testing floating point values + + def test_linear(self): + f = tflearn.linear + + # Case 1 + x = tf.placeholder(tf.float32, shape=()) + self.assertEqual(f(x), x) + + # Case 2 + x = tf.placeholder(tf.int64, shape=()) + self.assertEqual(f(x), x) + + def test_tanh(self): + f = tflearn.tanh + x = tf.placeholder(tf.float32, shape=()) + + with tf.Session() as sess: + # Case 1 + self.assertEqual(sess.run(f(x), feed_dict={x:0}), 0) + + # Case 2 + self.assertAlmostEqual(sess.run(f(x), feed_dict={x:0.5}), + 0.4621, places=TestActivations.PLACES) + + # Case 3 + self.assertAlmostEqual(sess.run(f(x), feed_dict={x:-0.25}), + -0.2449, places=TestActivations.PLACES) + + def test_leaky_relu(self): + f = lambda x: tflearn.leaky_relu(x, alpha=0.2) + x = tf.placeholder(tf.float32, shape=()) + + with tf.Session() as sess: + # Case 1 + self.assertEqual(sess.run(f(x), feed_dict={x:0}), 0) + + # Case 2 + self.assertAlmostEqual(sess.run(f(x), feed_dict={x:1}), + 1, places=TestActivations.PLACES) + + # Case 3 + self.assertAlmostEqual(sess.run(f(x), feed_dict={x:-1}), + -0.2, places=TestActivations.PLACES) + + # Case 4 + self.assertAlmostEqual(sess.run(f(x), feed_dict={x:-5}), + -1, places=TestActivations.PLACES) + + def test_apply_activation(self): + lrelu_02 = lambda x: tflearn.leaky_relu(x, alpha=0.2) + x = tf.constant(-0.25, tf.float32) + + with tf.Session() as sess: + # Case 1: 'linear' + self.assertEqual( + sess.run(tflearn.activation(x, 'linear')), + -0.25) + + # Case 2: 'relu' + self.assertEqual( + sess.run(tflearn.activation(x, 'relu')), + 0) + + # Case 3: 'leaky_relu' + self.assertAlmostEqual( + sess.run(tflearn.activation(x, 'leaky_relu')), + -0.025, places=TestActivations.PLACES) + + # Case 4: 'tanh' + self.assertAlmostEqual( + sess.run(tflearn.activation(x, 'tanh')), + -0.2449, places=TestActivations.PLACES) + + # Case 5: lrelu_02 (callable) + self.assertAlmostEqual( + sess.run(tflearn.activation(x, lrelu_02)), + -0.05, places=TestActivations.PLACES) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/data/source_files/clean/aebf14e895a5.py b/data/source_files/clean/aebf14e895a5.py new file mode 100644 index 0000000000000000000000000000000000000000..6b3dd632291d2f985432a2f2e2e3bd67cb5c5d46 --- /dev/null +++ b/data/source_files/clean/aebf14e895a5.py @@ -0,0 +1,448 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +__all__ = ['WorkspaceArgs', 'Workspace'] + +@pulumi.input_type +class WorkspaceArgs: + def __init__(__self__, *, + resource_group_name: pulumi.Input[str], + description: Optional[pulumi.Input[str]] = None, + friendly_name: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None): + """ + The set of arguments for constructing a Workspace resource. + :param pulumi.Input[str] resource_group_name: The name of the resource group in which to + create the Virtual Desktop Workspace. Changing the resource group name forces + a new resource to be created. + :param pulumi.Input[str] description: A description for the Virtual Desktop Workspace. + :param pulumi.Input[str] friendly_name: A friendly name for the Virtual Desktop Workspace. + :param pulumi.Input[str] location: The location/region where the Virtual Desktop Workspace is located. Changing the location/region forces a new resource to be created. + :param pulumi.Input[str] name: The name of the Virtual Desktop Workspace. Changing the name + forces a new resource to be created. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: A mapping of tags to assign to the resource. + """ + pulumi.set(__self__, "resource_group_name", resource_group_name) + if description is not None: + pulumi.set(__self__, "description", description) + if friendly_name is not None: + pulumi.set(__self__, "friendly_name", friendly_name) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if tags is not None: + pulumi.set(__self__, "tags", tags) + + @property + @pulumi.getter(name="resourceGroupName") + def resource_group_name(self) -> pulumi.Input[str]: + """ + The name of the resource group in which to + create the Virtual Desktop Workspace. Changing the resource group name forces + a new resource to be created. + """ + return pulumi.get(self, "resource_group_name") + + @resource_group_name.setter + def resource_group_name(self, value: pulumi.Input[str]): + pulumi.set(self, "resource_group_name", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + A description for the Virtual Desktop Workspace. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter(name="friendlyName") + def friendly_name(self) -> Optional[pulumi.Input[str]]: + """ + A friendly name for the Virtual Desktop Workspace. + """ + return pulumi.get(self, "friendly_name") + + @friendly_name.setter + def friendly_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "friendly_name", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location/region where the Virtual Desktop Workspace is located. Changing the location/region forces a new resource to be created. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Virtual Desktop Workspace. Changing the name + forces a new resource to be created. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + A mapping of tags to assign to the resource. + """ + return pulumi.get(self, "tags") + + @tags.setter + def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "tags", value) + + +@pulumi.input_type +class _WorkspaceState: + def __init__(__self__, *, + description: Optional[pulumi.Input[str]] = None, + friendly_name: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + resource_group_name: Optional[pulumi.Input[str]] = None, + tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None): + """ + Input properties used for looking up and filtering Workspace resources. + :param pulumi.Input[str] description: A description for the Virtual Desktop Workspace. + :param pulumi.Input[str] friendly_name: A friendly name for the Virtual Desktop Workspace. + :param pulumi.Input[str] location: The location/region where the Virtual Desktop Workspace is located. Changing the location/region forces a new resource to be created. + :param pulumi.Input[str] name: The name of the Virtual Desktop Workspace. Changing the name + forces a new resource to be created. + :param pulumi.Input[str] resource_group_name: The name of the resource group in which to + create the Virtual Desktop Workspace. Changing the resource group name forces + a new resource to be created. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: A mapping of tags to assign to the resource. + """ + if description is not None: + pulumi.set(__self__, "description", description) + if friendly_name is not None: + pulumi.set(__self__, "friendly_name", friendly_name) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if resource_group_name is not None: + pulumi.set(__self__, "resource_group_name", resource_group_name) + if tags is not None: + pulumi.set(__self__, "tags", tags) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + A description for the Virtual Desktop Workspace. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter(name="friendlyName") + def friendly_name(self) -> Optional[pulumi.Input[str]]: + """ + A friendly name for the Virtual Desktop Workspace. + """ + return pulumi.get(self, "friendly_name") + + @friendly_name.setter + def friendly_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "friendly_name", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location/region where the Virtual Desktop Workspace is located. Changing the location/region forces a new resource to be created. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Virtual Desktop Workspace. Changing the name + forces a new resource to be created. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="resourceGroupName") + def resource_group_name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the resource group in which to + create the Virtual Desktop Workspace. Changing the resource group name forces + a new resource to be created. + """ + return pulumi.get(self, "resource_group_name") + + @resource_group_name.setter + def resource_group_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "resource_group_name", value) + + @property + @pulumi.getter + def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + A mapping of tags to assign to the resource. + """ + return pulumi.get(self, "tags") + + @tags.setter + def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "tags", value) + + +class Workspace(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[str]] = None, + friendly_name: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + resource_group_name: Optional[pulumi.Input[str]] = None, + tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + __props__=None): + """ + Manages a Virtual Desktop Workspace. + + ## Example Usage + + ```python + import pulumi + import pulumi_azure as azure + + example = azure.core.ResourceGroup("example", location="West Europe") + workspace = azure.desktopvirtualization.Workspace("workspace", + location=example.location, + resource_group_name=example.name, + friendly_name="FriendlyName", + description="A description of my workspace") + ``` + + ## Import + + Virtual Desktop Workspaces can be imported using the `resource id`, e.g. + + ```sh + $ pulumi import azure:desktopvirtualization/workspace:Workspace example /subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/myGroup1/providers/Microsoft.DesktopVirtualization/workspaces/myworkspace + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] description: A description for the Virtual Desktop Workspace. + :param pulumi.Input[str] friendly_name: A friendly name for the Virtual Desktop Workspace. + :param pulumi.Input[str] location: The location/region where the Virtual Desktop Workspace is located. Changing the location/region forces a new resource to be created. + :param pulumi.Input[str] name: The name of the Virtual Desktop Workspace. Changing the name + forces a new resource to be created. + :param pulumi.Input[str] resource_group_name: The name of the resource group in which to + create the Virtual Desktop Workspace. Changing the resource group name forces + a new resource to be created. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: A mapping of tags to assign to the resource. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: WorkspaceArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages a Virtual Desktop Workspace. + + ## Example Usage + + ```python + import pulumi + import pulumi_azure as azure + + example = azure.core.ResourceGroup("example", location="West Europe") + workspace = azure.desktopvirtualization.Workspace("workspace", + location=example.location, + resource_group_name=example.name, + friendly_name="FriendlyName", + description="A description of my workspace") + ``` + + ## Import + + Virtual Desktop Workspaces can be imported using the `resource id`, e.g. + + ```sh + $ pulumi import azure:desktopvirtualization/workspace:Workspace example /subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/myGroup1/providers/Microsoft.DesktopVirtualization/workspaces/myworkspace + ``` + + :param str resource_name: The name of the resource. + :param WorkspaceArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(WorkspaceArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[str]] = None, + friendly_name: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + resource_group_name: Optional[pulumi.Input[str]] = None, + tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + __props__=None): + if opts is None: + opts = pulumi.ResourceOptions() + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.version is None: + opts.version = _utilities.get_version() + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = WorkspaceArgs.__new__(WorkspaceArgs) + + __props__.__dict__["description"] = description + __props__.__dict__["friendly_name"] = friendly_name + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + if resource_group_name is None and not opts.urn: + raise TypeError("Missing required property 'resource_group_name'") + __props__.__dict__["resource_group_name"] = resource_group_name + __props__.__dict__["tags"] = tags + super(Workspace, __self__).__init__( + 'azure:desktopvirtualization/workspace:Workspace', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[str]] = None, + friendly_name: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + resource_group_name: Optional[pulumi.Input[str]] = None, + tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None) -> 'Workspace': + """ + Get an existing Workspace resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] description: A description for the Virtual Desktop Workspace. + :param pulumi.Input[str] friendly_name: A friendly name for the Virtual Desktop Workspace. + :param pulumi.Input[str] location: The location/region where the Virtual Desktop Workspace is located. Changing the location/region forces a new resource to be created. + :param pulumi.Input[str] name: The name of the Virtual Desktop Workspace. Changing the name + forces a new resource to be created. + :param pulumi.Input[str] resource_group_name: The name of the resource group in which to + create the Virtual Desktop Workspace. Changing the resource group name forces + a new resource to be created. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: A mapping of tags to assign to the resource. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _WorkspaceState.__new__(_WorkspaceState) + + __props__.__dict__["description"] = description + __props__.__dict__["friendly_name"] = friendly_name + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["resource_group_name"] = resource_group_name + __props__.__dict__["tags"] = tags + return Workspace(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[str]]: + """ + A description for the Virtual Desktop Workspace. + """ + return pulumi.get(self, "description") + + @property + @pulumi.getter(name="friendlyName") + def friendly_name(self) -> pulumi.Output[Optional[str]]: + """ + A friendly name for the Virtual Desktop Workspace. + """ + return pulumi.get(self, "friendly_name") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location/region where the Virtual Desktop Workspace is located. Changing the location/region forces a new resource to be created. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the Virtual Desktop Workspace. Changing the name + forces a new resource to be created. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="resourceGroupName") + def resource_group_name(self) -> pulumi.Output[str]: + """ + The name of the resource group in which to + create the Virtual Desktop Workspace. Changing the resource group name forces + a new resource to be created. + """ + return pulumi.get(self, "resource_group_name") + + @property + @pulumi.getter + def tags(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + A mapping of tags to assign to the resource. + """ + return pulumi.get(self, "tags") + diff --git a/data/source_files/clean/b186e55eb723.py b/data/source_files/clean/b186e55eb723.py new file mode 100644 index 0000000000000000000000000000000000000000..0ad8ce46348b78515a8db8b2c9bc54898f1ab6f9 --- /dev/null +++ b/data/source_files/clean/b186e55eb723.py @@ -0,0 +1,30 @@ +import operator_benchmark as op_bench +import torch +import numpy +from . import configs + +"""EmbeddingBag Operator Benchmark""" + +class EmbeddingBagBenchmark(op_bench.TorchBenchmarkBase): + def init(self, embeddingbags, dim, mode, input_size, offset, sparse, include_last_offset, device): + self.embedding = torch.nn.EmbeddingBag( + num_embeddings=embeddingbags, + embedding_dim=dim, + mode=mode, + include_last_offset=include_last_offset, + sparse=sparse).to(device=device) + numpy.random.seed((1 << 32) - 1) + self.input = torch.tensor(numpy.random.randint(0, embeddingbags, input_size), device=device).long() + offsets = torch.LongTensor([offset], device=device) + self.offset = torch.cat((offsets, torch.tensor([self.input.size(0)], dtype=torch.long)), 0) + self.set_module_name('embeddingbag') + + def forward(self): + return self.embedding(self.input, self.offset) + +op_bench.generate_pt_test(configs.embeddingbag_short_configs, EmbeddingBagBenchmark) +op_bench.generate_pt_gradient_test(configs.embeddingbag_short_configs, EmbeddingBagBenchmark) + + +if __name__ == "__main__": + op_bench.benchmark_runner.main() diff --git a/data/source_files/clean/b6939d391a23.py b/data/source_files/clean/b6939d391a23.py new file mode 100644 index 0000000000000000000000000000000000000000..86bb18dffc0306993885a2bc13f98c2bb5b4a5b0 --- /dev/null +++ b/data/source_files/clean/b6939d391a23.py @@ -0,0 +1,199 @@ +"""Monte Carlo receding horizon control.""" + +from abc import ABC, abstractmethod +from multiprocessing import Pipe, Process + +import gym +from stable_baselines.common.vec_env import CloudpickleWrapper + +from aprl.common.mujoco import MujocoState, ResettableEnv + + +class MujocoResettableWrapper(ResettableEnv, gym.Wrapper): + """Converts a MujocoEnv into a ResettableEnv. + + Note all MuJoCo environments are resettable.""" + + def __init__(self, env): + """Wraps a MujocoEnv, adding get_state and set_state methods. + :param env: a MujocoEnv. NOTE: it must not be wrapped in a TimeLimit.""" + if hasattr(env, "_max_episode_steps"): + raise TypeError( + "Environment must not have a time limit " "(try passing in env.unwrapped instead)." + ) + gym.Wrapper.__init__(self, env) + self.sim = env.unwrapped.sim + + def get_state(self): + """Serializes the qpos and qvel state of the MuJoCo emulator.""" + return MujocoState.from_mjdata(self.sim.data).flatten() + + def set_state(self, x): + """Restores qpos and qvel, calling forward() to derive other values.""" + state = MujocoState.from_flattened(x, self.sim) + state.set_mjdata(self.sim.data) + self.sim.forward() # put mjData in consistent state + + def reset(self): + """See base class.""" + return self.env.reset() + + def step(self, a): + """See base class.""" + return self.env.step(a) + + +class MonteCarlo(ABC): + """Selects an action for a ResettableEnv by random search. Randomly samples + fixed-length sequences of actions. Evaluates each trajectory in the + environment, resetting the state to the original after each trajectory.""" + + @abstractmethod + def __init__(self, horizon, trajectories): + """Constructs a MonteCarlo instance for env. + :param horizon: the length of the trajectories to search over. + :param trajectories: the number of trajectories to evaluate.""" + self.horizon = horizon + self.trajectories = trajectories + + @abstractmethod + def seed(self, seed): + """Sets a seed for the PRNG for the action sequences. + :param seed (int): a seed.""" + pass + + @abstractmethod + def best_action(self, state): + """Returns the best action out of a random search of action sequences. + + Generates self.trajectories action sequences, each of length + self.horizon. The cumulative reward of each action sequence is computed, + starting from state. The function returns the first action and the + cumulative reward of the action sequences with the largest cumulative + reward. + :param state: a value returned by env.get_state(). + :return (action, reward): the best action found and associated reward.""" + pass + + +class MonteCarloSingle(MonteCarlo): + """Selects an action for a ResettableEnv by random search. + See base class for details. This implementation is not parallelized.""" + + def __init__(self, env, horizon, trajectories): + """See base class.""" + super().__init__(horizon, trajectories) + self.env = env + + def seed(self, seed): + """Sets a seed for the PRNG for the action sequences. + :param seed (int): a seed.""" + self.env.action_space.np_random.seed(seed) + + def best_action(self, state): + """Returns the best action out of a random search of action sequences. + See base class for details. + + Search takes place in a single environment, which is reset to state + before evaluating each action sequence.""" + res = [] + for _ in range(self.trajectories): + self.env.set_state(state) + us = [self.env.action_space.sample() for _ in range(self.horizon)] + total_rew = 0 + for u in us: + _ob, rew, done, _info = self.env.step(u) + total_rew += rew + if done: + break + res.append((us[0], total_rew)) + self.env.set_state(state) + best = max(res, key=lambda x: x[1]) + return best + + +def _worker(remote, parent_remote, dynamic_fn_wrapper, horizon, trajectories): + parent_remote.close() + dynamics = dynamic_fn_wrapper.var() + dynamics.reset() + mc = MonteCarloSingle(dynamics, horizon, trajectories) + try: + while True: + cmd, x = remote.recv() + if cmd == "seed": + mc.seed(x) + elif cmd == "search": + best_u, best_r = mc.best_action(x) + remote.send((best_u, best_r)) + elif cmd == "close": + remote.close() + break + else: + raise NotImplementedError + except KeyboardInterrupt: + print("MonteCarloParallel worker: got KeyboardInterrupt") + finally: + dynamics.close() + + +class MonteCarloParallel(MonteCarlo): + """Like MonteCarlo, but performs the random search in parallel.""" + + # This implementation is inspired by Baselines SubprocVecEnv. + def __init__(self, env_fns, horizon, trajectories, seed=0): + """Launch subprocess workers and store configuration parameters. + :param env_fns (list<()->ResettableEnv>): list of thunks. + :param horizon (int): length of trajectories to search over. + :param trajectories (int): minimum number of trajectories to evaluate. + It will be rounded up to the nearest multiple of len(make_env).""" + super().__init__(horizon, trajectories) + nremotes = len(env_fns) + # Integer ceiling of self.trajectories / nworkers + traj_per_worker = (self.trajectories - 1) // nremotes + 1 + + pipes = [Pipe() for _ in range(nremotes)] + self.remotes, self.work_remotes = zip(*pipes) + worker_cfgs = zip(self.work_remotes, self.remotes, env_fns) + self.ps = [] + for i, (work_remote, remote, dynamic_fn) in enumerate(worker_cfgs): + args = (work_remote, remote, CloudpickleWrapper(dynamic_fn), horizon, traj_per_worker) + process = Process(target=_worker, args=args) + process.daemon = True + # If the main process crashes, we should not cause things to hang + process.start() + self.ps.append(process) + for remote in self.work_remotes: + remote.close() + + def seed(self, seed): + """See base class.""" + for i, remote in enumerate(self.remotes): + remote.send(("seed", seed + i)) + + def best_action(self, state): + """Returns the best action out of a random search of action sequences.""" + for remote in self.remotes: + remote.send(("search", state)) + results = [remote.recv() for remote in self.remotes] + best = max(results, key=lambda x: x[1]) + return best + + def close(self): + """Shuts down parallel workers.""" + for remote in self.remotes: + remote.send(("close", None)) + for p in self.ps: + p.join() + + +def receding_horizon(monte_carlo, env): + """Receding horizon control + :param monte_carlo(MonteCarlo): a Monte Carlo controller for env or a clone of env. + :param env(ResettableEnv): a resettable environment.""" + while True: + state = env.get_state() + a, _seq_rew = monte_carlo.best_action(state) + ob, rew, done, info = env.step(a) + yield a, ob, rew, done, info + if done: + break diff --git a/data/source_files/clean/ba500fcbb03c.py b/data/source_files/clean/ba500fcbb03c.py new file mode 100644 index 0000000000000000000000000000000000000000..86e873cdab8920252696e3d917e54b578dd9f428 --- /dev/null +++ b/data/source_files/clean/ba500fcbb03c.py @@ -0,0 +1,86 @@ +import warnings +from typing import Any, Callable, Optional, Tuple + +from tensorboard.backend.event_processing import event_accumulator +from torch.utils.tensorboard import SummaryWriter + +from tianshou.utils.logger.base import LOG_DATA_TYPE, BaseLogger + + +class TensorboardLogger(BaseLogger): + """A logger that relies on tensorboard SummaryWriter by default to visualize \ + and log statistics. + + :param SummaryWriter writer: the writer to log data. + :param int train_interval: the log interval in log_train_data(). Default to 1000. + :param int test_interval: the log interval in log_test_data(). Default to 1. + :param int update_interval: the log interval in log_update_data(). Default to 1000. + :param int save_interval: the save interval in save_data(). Default to 1 (save at + the end of each epoch). + """ + + def __init__( + self, + writer: SummaryWriter, + train_interval: int = 1000, + test_interval: int = 1, + update_interval: int = 1000, + save_interval: int = 1, + ) -> None: + super().__init__(train_interval, test_interval, update_interval) + self.save_interval = save_interval + self.last_save_step = -1 + self.writer = writer + + def write(self, step_type: str, step: int, data: LOG_DATA_TYPE) -> None: + for k, v in data.items(): + self.writer.add_scalar(k, v, global_step=step) + + def save_data( + self, + epoch: int, + env_step: int, + gradient_step: int, + save_checkpoint_fn: Optional[Callable[[int, int, int], None]] = None, + ) -> None: + if save_checkpoint_fn and epoch - self.last_save_step >= self.save_interval: + self.last_save_step = epoch + save_checkpoint_fn(epoch, env_step, gradient_step) + self.write("save/epoch", epoch, {"save/epoch": epoch}) + self.write("save/env_step", env_step, {"save/env_step": env_step}) + self.write( + "save/gradient_step", gradient_step, + {"save/gradient_step": gradient_step} + ) + + def restore_data(self) -> Tuple[int, int, int]: + ea = event_accumulator.EventAccumulator(self.writer.log_dir) + ea.Reload() + + try: # epoch / gradient_step + epoch = ea.scalars.Items("save/epoch")[-1].step + self.last_save_step = self.last_log_test_step = epoch + gradient_step = ea.scalars.Items("save/gradient_step")[-1].step + self.last_log_update_step = gradient_step + except KeyError: + epoch, gradient_step = 0, 0 + try: # offline trainer doesn't have env_step + env_step = ea.scalars.Items("save/env_step")[-1].step + self.last_log_train_step = env_step + except KeyError: + env_step = 0 + + return epoch, env_step, gradient_step + + +class BasicLogger(TensorboardLogger): + """BasicLogger has changed its name to TensorboardLogger in #427. + + This class is for compatibility. + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + warnings.warn( + "Deprecated soon: BasicLogger has renamed to TensorboardLogger in #427." + ) + super().__init__(*args, **kwargs) diff --git a/data/source_files/clean/bc59895adba1.py b/data/source_files/clean/bc59895adba1.py new file mode 100644 index 0000000000000000000000000000000000000000..864003328f8b49eae739c102dea7da6313ecab13 --- /dev/null +++ b/data/source_files/clean/bc59895adba1.py @@ -0,0 +1,87 @@ +# import Kratos +import KratosMultiphysics +import KratosMultiphysics.StructuralMechanicsApplication as StructuralMechanicsApplication +import KratosMultiphysics.CSharpWrapperApplication as CSharpWrapperApplication +import run_cpp_unit_tests + +# Import Kratos "wrapper" for unittests +import KratosMultiphysics.KratosUnittest as KratosUnittest + +# Import subprocess +import subprocess + +# Using kratos_utilities +import KratosMultiphysics.kratos_utilities as kratos_utilities +if kratos_utilities.CheckIfApplicationsAvailable("ExternalSolversApplication"): + has_external_solvers_application = True +else: + has_external_solvers_application = False + +# Import the tests o test_classes to create the suits +## SMALL TESTS + +## NIGTHLY TESTS + +## VALIDATION TESTS + +def AssembleTestSuites(): + ''' Populates the test suites to run. + + Populates the test suites to run. At least, it should pupulate the suites: + "small", "nighlty" and "all" + + Return + ------ + + suites: A dictionary of suites + The set of suites with its test_cases added. + ''' + suites = KratosUnittest.KratosSuites + + # Create a test suit with the selected tests (Small tests): + smallSuite = suites['small'] + + # Create a test suit with the selected tests plus all small tests + nightlySuite = suites['nightly'] + + ### BEGIN SMALL SUITE ### + + ### END SMALL SUITE ### + + ### BEGIN NIGHTLY SUITE ### + + ### END VALIDATION SUITE ### + + ### BEGIN VALIDATION SUITE ### + + # For very long tests that should not be in nighly and you can use to validate + validationSuite = suites['validation'] + validationSuite.addTests(nightlySuite) + + ### END VALIDATION ### + + # Create a test suit that contains all the tests: + allSuite = suites['all'] + allSuite.addTests(nightlySuite) # Already contains the smallSuite + validationSuite.addTests(allSuite) # Validation contains all + + # Manual list for debugging + #allSuite.addTests( + #KratosUnittest.TestLoader().loadTestsFromTestCases([ + #### STANDALONE + #### SMALL + #### NIGTHLY + #### VALIDATION + #]) + #) + + return suites + +if __name__ == '__main__': + KratosMultiphysics.Logger.PrintInfo("Unittests", "\nRunning cpp unit tests ...") + run_cpp_unit_tests.run() + KratosMultiphysics.Logger.PrintInfo("Unittests", "Finished running cpp unit tests!") + + KratosMultiphysics.Logger.PrintInfo("Unittests", "\nRunning python tests ...") + KratosUnittest.runTests(AssembleTestSuites()) + KratosMultiphysics.Logger.PrintInfo("Unittests", "Finished python tests!") diff --git a/data/source_files/clean/bf74c86796e4.py b/data/source_files/clean/bf74c86796e4.py new file mode 100644 index 0000000000000000000000000000000000000000..7c4a4e05ac30862172f332ac22daa59c8c1ecce1 --- /dev/null +++ b/data/source_files/clean/bf74c86796e4.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# -*- coding: gbk -*- +# Date: 2019/2/22 +# Created by 冰河 +# Description 将生成的bindshell.exe提交到vscan.novirusthanks.org检测 +# 用法 python check_virus.py -f bindshell.exe +# 博客 https://blog.csdn.net/l1028386804 + +import re +import httplib +import time +import os +import optparse +from urlparse import urlparse + + +def printResults(url): + status = 200 + host = urlparse(url)[1] + path = urlparse(url)[2] + + if 'analysis' not in path: + while status != 302: + conn = httplib.HTTPConnection(host) + conn.request('GET', path) + resp = conn.getresponse() + status = resp.status + print '[+] Scanning file...' + conn.close() + time.sleep(15) + + print '[+] Scan Complete.' + path = path.replace('file', 'analysis') + conn = httplib.HTTPConnection(host) + conn.request('GET', path) + resp = conn.getresponse() + data = resp.read() + conn.close() + + reResults = re.findall(r'Detection rate:.*\)', data) + htmlStripRes = reResults[1]. \ + replace('<font color=\'red\'>', ''). \ + replace('</font>', '') + print '[+] ' + str(htmlStripRes) + + +def uploadFile(fileName): + print "[+] Uploading file to NoVirusThanks..." + fileContents = open(fileName, 'rb').read() + + header = {'Content-Type': 'multipart/form-data; \ + boundary=----WebKitFormBoundaryF17rwCZdGuPNPT9U'} + + params = "------WebKitFormBoundaryF17rwCZdGuPNPT9U" + params += "\r\nContent-Disposition: form-data; " + \ + "name=\"upfile\"; filename=\"" + str(fileName) + "\"" + params += "\r\nContent-Type: " + \ + "application/octet stream\r\n\r\n" + params += fileContents + params += "\r\n------WebKitFormBoundaryF17rwCZdGuPNPT9U" + params += "\r\nContent-Disposition: form-data; " + \ + "name=\"submitfile\"\r\n" + params += "\r\nSubmit File\r\n" + params += "------WebKitFormBoundaryF17rwCZdGuPNPT9U--\r\n" + conn = httplib.HTTPConnection('vscan.novirusthanks.org') + conn.request("POST", "/", params, header) + response = conn.getresponse() + location = response.getheader('location') + conn.close() + return location + + +def main(): + parser = optparse.OptionParser('usage %prog -f ') + parser.add_option('-f', dest='fileName', type='string', \ + help='specify filename') + (options, args) = parser.parse_args() + fileName = options.fileName + + if fileName == None: + print parser.usage + exit(0) + elif os.path.isfile(fileName) == False: + print '[+] ' + fileName + ' does not exist.' + exit(0) + else: + loc = uploadFile(fileName) + printResults(loc) + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/data/source_files/clean/c2337dc8cffc.py b/data/source_files/clean/c2337dc8cffc.py new file mode 100644 index 0000000000000000000000000000000000000000..7c419b5717a91fec1bbd9b0db3fdfc3ceb131303 --- /dev/null +++ b/data/source_files/clean/c2337dc8cffc.py @@ -0,0 +1,51 @@ +from __future__ import absolute_import, division, print_function, unicode_literals + +from unittest import TestCase +from beast.env.ReadEnvFile import read_env_file + +from beast.util import Terminal +Terminal.CAN_CHANGE_COLOR = False + +JSON = """ +{ + "FOO": "foo", + "BAR": "bar bar bar", + "CPPFLAGS": "-std=c++11 -frtti -fno-strict-aliasing -DWOMBAT" +}""" + +ENV = """ +# An env file. + +FOO=foo +export BAR="bar bar bar" +CPPFLAGS=-std=c++11 -frtti -fno-strict-aliasing -DWOMBAT + +# export BAZ=baz should be ignored. + +""" + +RESULT = { + 'FOO': 'foo', + 'BAR': 'bar bar bar', + 'CPPFLAGS': '-std=c++11 -frtti -fno-strict-aliasing -DWOMBAT', + } + +BAD_ENV = ENV + """ +This line isn't right. +NO SPACES IN NAMES="valid value" +""" + +class test_ReadEnvFile(TestCase): + def test_read_json(self): + self.assertEqual(read_env_file(JSON), RESULT) + + def test_read_env(self): + self.assertEqual(read_env_file(ENV), RESULT) + + def test_read_env_error(self): + errors = [] + self.assertEqual(read_env_file(BAD_ENV, errors.append), RESULT) + self.assertEqual(errors, [ + "WARNING: Didn't understand the following environment file lines:", + "11. >>> This line isn't right.", + '12. >>> NO SPACES IN NAMES="valid value"']) diff --git a/data/source_files/clean/c2a7bf304f8a.py b/data/source_files/clean/c2a7bf304f8a.py new file mode 100644 index 0000000000000000000000000000000000000000..6abec40d890d6b8f05f738693cce2c79127a8924 --- /dev/null +++ b/data/source_files/clean/c2a7bf304f8a.py @@ -0,0 +1,202 @@ +# +# -*- coding: utf-8 -*- +"""Development related tasks to be run with 'invoke'""" + +import os +import pathlib +import shutil + +import invoke + +TASK_ROOT = pathlib.Path(__file__).resolve().parent +TASK_ROOT_STR = str(TASK_ROOT) + + +# shared function +def rmrf(items, verbose=True): + """Silently remove a list of directories or files""" + if isinstance(items, str): + items = [items] + + for item in items: + if verbose: + print("Removing {}".format(item)) + shutil.rmtree(item, ignore_errors=True) + # rmtree doesn't remove bare files + try: + os.remove(item) + except FileNotFoundError: + pass + + +# create namespaces +namespace = invoke.Collection() +namespace_clean = invoke.Collection('clean') +namespace.add_collection(namespace_clean, 'clean') + +##### +# +# pytest, pylint, and codecov +# +##### + + +@invoke.task +def pytest(context, junit=False, pty=True, append_cov=False): + """Run tests and code coverage using pytest""" + ROOT_PATH = TASK_ROOT.parent.parent + + with context.cd(str(ROOT_PATH)): + command_str = 'pytest --cov=cmd2_myplugin --cov-report=term --cov-report=html' + if append_cov: + command_str += ' --cov-append' + if junit: + command_str += ' --junitxml=junit/test-results.xml' + command_str += ' ' + str((TASK_ROOT / 'tests').relative_to(ROOT_PATH)) + context.run(command_str, pty=pty) + + +namespace.add_task(pytest) + + +@invoke.task +def pytest_clean(context): + """Remove pytest cache and code coverage files and directories""" + # pylint: disable=unused-argument + with context.cd(TASK_ROOT_STR): + dirs = ['.pytest_cache', '.cache', '.coverage'] + rmrf(dirs) + + +namespace_clean.add_task(pytest_clean, 'pytest') + + +@invoke.task +def pylint(context): + """Check code quality using pylint""" + context.run('pylint --rcfile=cmd2_myplugin/pylintrc cmd2_myplugin') + + +namespace.add_task(pylint) + + +@invoke.task +def pylint_tests(context): + """Check code quality of test suite using pylint""" + context.run('pylint --rcfile=tests/pylintrc tests') + + +namespace.add_task(pylint_tests) + + +##### +# +# build and distribute +# +##### +BUILDDIR = 'build' +DISTDIR = 'dist' + + +@invoke.task +def build_clean(context): + """Remove the build directory""" + # pylint: disable=unused-argument + rmrf(BUILDDIR) + + +namespace_clean.add_task(build_clean, 'build') + + +@invoke.task +def dist_clean(context): + """Remove the dist directory""" + # pylint: disable=unused-argument + rmrf(DISTDIR) + + +namespace_clean.add_task(dist_clean, 'dist') + + +@invoke.task +def eggs_clean(context): + """Remove egg directories""" + # pylint: disable=unused-argument + dirs = set() + dirs.add('.eggs') + for name in os.listdir(os.curdir): + if name.endswith('.egg-info'): + dirs.add(name) + if name.endswith('.egg'): + dirs.add(name) + rmrf(dirs) + + +namespace_clean.add_task(eggs_clean, 'eggs') + + +@invoke.task +def bytecode_clean(context): + """Remove __pycache__ directories and *.pyc files""" + # pylint: disable=unused-argument + dirs = set() + for root, dirnames, files in os.walk(os.curdir): + if '__pycache__' in dirnames: + dirs.add(os.path.join(root, '__pycache__')) + for file in files: + if file.endswith(".pyc"): + dirs.add(os.path.join(root, file)) + print("Removing __pycache__ directories and .pyc files") + rmrf(dirs, verbose=False) + + +namespace_clean.add_task(bytecode_clean, 'bytecode') + +# +# make a dummy clean task which runs all the tasks in the clean namespace +clean_tasks = list(namespace_clean.tasks.values()) + + +@invoke.task(pre=list(namespace_clean.tasks.values()), default=True) +def clean_all(context): + """Run all clean tasks""" + # pylint: disable=unused-argument + pass + + +namespace_clean.add_task(clean_all, 'all') + + +@invoke.task(pre=[clean_all]) +def sdist(context): + """Create a source distribution""" + context.run('python setup.py sdist') + + +namespace.add_task(sdist) + + +@invoke.task(pre=[clean_all]) +def wheel(context): + """Build a wheel distribution""" + context.run('python setup.py bdist_wheel') + + +namespace.add_task(wheel) + +# +# these two tasks are commented out so you don't +# accidentally run them and upload this template to pypi +# + +# @invoke.task(pre=[sdist, wheel]) +# def pypi(context): +# """Build and upload a distribution to pypi""" +# context.run('twine upload dist/*') +# namespace.add_task(pypi) + +# @invoke.task(pre=[sdist, wheel]) +# def pypi_test(context): +# """Build and upload a distribution to https://test.pypi.org""" +# context.run('twine upload --repository-url https://test.pypi.org/legacy/ dist/*') +# namespace.add_task(pypi_test) diff --git a/data/source_files/clean/c49bac88050e.py b/data/source_files/clean/c49bac88050e.py new file mode 100644 index 0000000000000000000000000000000000000000..0a01272b6dc30ae670eab0e73c74a21ff812e409 --- /dev/null +++ b/data/source_files/clean/c49bac88050e.py @@ -0,0 +1,364 @@ +from functools import partial + +from corpustools.corpus.classes import Word +from corpustools.symbolsim.edit_distance import edit_distance +from corpustools.symbolsim.khorsi import khorsi +from corpustools.symbolsim.phono_edit_distance import phono_edit_distance +from corpustools.symbolsim.phono_align import Aligner +from corpustools.multiproc import filter_mp, score_mp + + +def _is_edit_distance_neighbor(w, query, sequence_type, max_distance): + w_len = len(getattr(w, sequence_type)) + query_len = len(getattr(query, sequence_type)) + if w_len > query_len+max_distance: + return False + if w_len < query_len-max_distance: + return False + return edit_distance(getattr(w, sequence_type), getattr(query, sequence_type), + sequence_type, max_distance) <= max_distance + + +def _is_phono_edit_distance_neighbor(w, query, sequence_type, specifier, max_distance): + return phono_edit_distance(getattr(w, sequence_type), getattr(query, sequence_type), sequence_type, specifier) <= max_distance + + +def _is_khorsi_neighbor(w, query, freq_base, sequence_type, max_distance): + return khorsi(getattr(w, sequence_type), getattr(query, sequence_type), freq_base, sequence_type, max_distance) >= max_distance + + +def neighborhood_density_all_words(corpus_context, tierdict, tier_type = None, sequence_type = None, + algorithm = 'edit_distance', max_distance = 1, output_format = 'spelling', + num_cores = -1, settable_attr = None, collapse_homophones = False, + stop_check = None, call_back = None): + """Calculate the neighborhood density of all words in the corpus and + adds them as attributes of the words. + + Parameters + ---------- + corpus_context : CorpusContext + Context manager for a corpus + algorithm : str + The algorithm used to determine distance + max_distance : float, optional + Maximum edit distance from the queried word to consider a word a neighbor. + stop_check : callable, optional + Optional function to check whether to gracefully terminate early + call_back : callable, optional + Optional function to supply progress information during the function + settable_attr: string + Name of attribute that neighbourhood density results will be assigned to + """ + function = partial(neighborhood_density, corpus_context, + tierdict = tierdict, + tier_type = tier_type, + sequence_type = sequence_type, + algorithm = algorithm, + max_distance = max_distance, + collapse_homophones = collapse_homophones) + if call_back is not None: + call_back('Calculating neighborhood densities...') + call_back(0,len(corpus_context)) + cur = 0 + + results = dict() + last_value_removed = None + last_key_removed = None + if num_cores == -1 or num_cores == 1: + + for w in corpus_context: + if stop_check is not None and stop_check(): + return + if last_value_removed: + tierdict[last_key_removed].append(last_value_removed) + w_sequence = getattr(w, corpus_context.sequence_type) + last_key_removed = str(w_sequence) + for i, item in enumerate(tierdict[last_key_removed]): + if str(item) == str(w): + last_value_removed = tierdict[last_key_removed].pop(i) + break + res = neighborhood_density(corpus_context, w, tierdict, + tier_type = tier_type, + sequence_type = sequence_type, + algorithm = algorithm, + max_distance = max_distance, + collapse_homophones = collapse_homophones) + results[str(w)] = [getattr(r, output_format) for r in res[1]] + setattr(w.original, settable_attr.name, res[0]) + + + # for w in corpus_context: + # if stop_check is not None and stop_check(): + # return + # cur += 1 + # call_back(cur) + # res = function(w) + # results[str(w)] = [getattr(r, output_format) for r in res[1]] + # setattr(w.original, settable_attr.name, res[0]-1) + # #the -1 is to account for the fact that words are counted as their own neighbour, and this is incorrect + # #subtracting 1 here is easier than fixing the neighbourhood density algorithm + else: + iterable = ((w,) for w in corpus_context) + neighbors = score_mp(iterable, function, num_cores, call_back, stop_check, chunk_size = 1) + for n in neighbors: + #Have to look up the key, then look up the object due to how + #multiprocessing pickles objects + setattr(corpus_context.corpus.find(corpus_context.corpus.key(n[0])), + #corpus_context.attribute.name, n[1][0]) + settable_attr.name, n[1][0]) + + return results + +def neighborhood_density(corpus_context, query, tierdict, + algorithm = 'edit_distance', max_distance = 1, collapse_homophones = False, + force_quadratic = False, file_type = None, tier_type=None, sequence_type = None, + stop_check = None, call_back = None): + """Calculate the neighborhood density of a particular word in the corpus. + + Parameters + ---------- + corpus_context : CorpusContext + Context manager for a corpus + query : Word + The word whose neighborhood density to calculate. + algorithm : str + The algorithm used to determine distance + max_distance : float, optional + Maximum edit distance from the queried word to consider a word a neighbor + force_quadratic : bool + Force use of the less efficient quadratic algorithm even when finding edit + distance of 1 neighborhoods + stop_check : callable, optional + Optional function to check whether to gracefully terminate early + call_back : callable, optional + Optional function to supply progress information during the function + + Returns + ------- + tuple(int, set) + Tuple of the number of neighbors and the set of neighbor Words. + """ + + matches = [] + query = ensure_query_is_word(query, corpus_context, corpus_context.sequence_type, tier_type) + + if call_back is not None: + call_back('Finding neighbors for {}...'.format(query)) + call_back(0,len(corpus_context)) + cur = 0 + + if algorithm == 'edit_distance' and max_distance == 1 and not force_quadratic: + return fast_neighborhood_density(corpus_context, query, corpus_context.sequence_type, tier_type, tierdict, + file_type=file_type, collapse_homophones=collapse_homophones) + + if algorithm == 'edit_distance': + is_neighbor = partial(_is_edit_distance_neighbor, + sequence_type = corpus_context.sequence_type, + max_distance = max_distance) + elif algorithm == 'phono_edit_distance': + is_neighbor = partial(_is_phono_edit_distance_neighbor, + specifier = corpus_context.specifier, + sequence_type = corpus_context.sequence_type, + max_distance = max_distance) + elif algorithm == 'khorsi': + freq_base = corpus_context.get_frequency_base() + is_neighbor = partial(_is_khorsi_neighbor, + freq_base = freq_base, + sequence_type = corpus_context.sequence_type, + max_distance = max_distance) + for w in corpus_context: + if stop_check is not None and stop_check(): + return + if call_back is not None: + cur += 1 + if cur % 10 == 0: + call_back(cur) + if not is_neighbor(w, query): + continue + matches.append(w) + neighbors = set(matches)-set([query]) + + return (len(neighbors), neighbors) + + +def fast_neighborhood_density(corpus_context, query, sequence_type, tier_type, + tierdict, file_type=None, trans_delimiter='.', collapse_homophones = False): + """Generates all neighbors of edit distance <= 1 and searches + for them in corpus_context. + + Will be faster than neighborhood_density when: + n > m * (1 + s), where + n: number of words in corpus + m: length of query + s: size of segment inventory + """ + + neighbors = list() + query = ensure_query_is_word(query, corpus_context, sequence_type, tier_type, file_type=file_type) + + for candidate in generate_neighbor_candidates(corpus_context, query, sequence_type): + if tier_type.att_type == 'tier': + cand_str = trans_delimiter.join(candidate) + else: + cand_str = ''.join(candidate) + + if cand_str in tierdict: + for w in tierdict[cand_str]: + w_sequence = getattr(w, sequence_type) + if collapse_homophones and any(getattr(word, sequence_type) == w_sequence for word in neighbors): + continue + else: + neighbors.append(w) + return (len(neighbors), neighbors) + +def generate_neighbor_candidates(corpus_context, query, sequence_type): + sequence = getattr(query, sequence_type) + yield [str(c) for c in sequence] + for i in range(len(sequence)): + yield [str(c) for c in sequence[:i]] + [str(c) for c in sequence[i+1:]] # deletion + for char in corpus_context.inventory: + if str(char) not in ['#', sequence[i]]: + yield [str(c) for c in sequence[:i]] + [str(char)] + [str(c) for c in sequence[i:]] # insertion + yield [str(c) for c in sequence[:i]] + [str(char)] + [str(c) for c in sequence[i+1:]] # substitution + for char in corpus_context.inventory: # final pass to get insertion at len+1 + if str(char) not in ['#', sequence[i]]: + yield [str(c) for c in sequence[:]] + [str(char)] # insertion + +def find_mutation_minpairs_all_words(corpus_context, tierdict, tier_type = None, num_cores = -1, collapse_homophones = False, + stop_check = None, call_back = None): + + function = partial(find_mutation_minpairs, corpus_context, tier_type=tier_type, collapse_homophones = collapse_homophones) + if call_back is not None: + call_back('Calculating neighborhood densities...') + call_back(0,len(corpus_context)) + cur = 0 + + results = dict() + last_value_removed = None + last_key_removed = None + if num_cores == -1 or num_cores == 1: + for w in corpus_context: + if stop_check is not None and stop_check(): + return + if last_value_removed: + tierdict[last_key_removed].append(last_value_removed) + w_sequence = getattr(w, corpus_context.sequence_type) + last_key_removed = str(w_sequence) + for i, item in enumerate(tierdict[last_key_removed]): + if str(item) == str(w): + last_value_removed = tierdict[last_key_removed].pop(i) + break + res = find_mutation_minpairs(corpus_context, w, + tier_type=tier_type, collapse_homophones = collapse_homophones) + results[str(w)] = res[1] + setattr(w.original, corpus_context.attribute.name, res[0]) + + # for w in corpus_context: + # if stop_check is not None and stop_check(): + # return + # cur += 1 + # call_back(cur) + # res = function(w) + # results[str(w)] = res[1]#[str(r) for r in res[1]] + # setattr(w.original, corpus_context.attribute.name, res[0]) + else: + iterable = ((w,) for w in corpus_context) + neighbors = score_mp(iterable, function, num_cores, call_back, stop_check, chunk_size= 1) + for n in neighbors: + #Have to look up the key, then look up the object due to how + #multiprocessing pickles objects + setattr(corpus_context.corpus.find(corpus_context.corpus.key(n[0])), corpus_context.attribute.name, n[1][0]) + + return results + +def find_mutation_minpairs(corpus_context, query, tier_type = None, collapse_homophones = False, + stop_check = None, call_back = None): + """Find all minimal pairs of the query word based only on segment + mutations (not deletions/insertions) + + Parameters + ---------- + corpus_context : CorpusContext + Context manager for a corpus + query : Word + The word whose minimal pairs to find + stop_check : callable or None + Optional function to check whether to gracefully terminate early + call_back : callable or None + Optional function to supply progress information during the function + + Returns + ------- + list + The found minimal pairs for the queried word + """ + matches = [] + sequence_type = corpus_context.sequence_type + query = ensure_query_is_word(query, corpus_context, corpus_context.sequence_type, tier_type) + if call_back is not None: + call_back('Finding neighbors...') + call_back(0,len(corpus_context)) + cur = 0 + al = Aligner(features_tf=False, ins_penalty=float('inf'), del_penalty=float('inf'), sub_penalty=1) + for w in corpus_context: + w_sequence = getattr(w, sequence_type) + query_sequence = getattr(query, sequence_type) + if stop_check is not None and stop_check(): + return + if call_back is not None: + cur += 1 + if cur % 10 == 0: + call_back(cur) + if (len(w_sequence) > len(query_sequence)+1 or + len(w_sequence) < len(query_sequence)-1): + continue + m = al.make_similarity_matrix(query_sequence, w_sequence) + if m[-1][-1]['f'] != 1: + continue + + w_sequence = getattr(w, sequence_type) + if collapse_homophones and any(getattr(m, sequence_type) == w_sequence for m in matches): + continue + else: + #matches.append(str(w_sequence)) + matches.append(w) + + matches = [m.spelling for m in matches] + neighbors = list(set(matches)-set([str(query_sequence)])) + return (len(neighbors), neighbors) + +def ensure_query_is_word(query, corpus, sequence_type, tier_type, trans_delimiter='.', file_type=None): + + if isinstance(query, Word): + query_word = query + else: + if tier_type.att_type == 'spelling': + if file_type == sequence_type: + query_word = Word(**{sequence_type: list(query)}) + else: + query_word = query.replace(trans_delimiter, '') + query_word = Word(**{sequence_type: list(query_word)}) + + elif tier_type.att_type == 'tier': + if file_type == sequence_type: + query_with̠td = '.'.join(query) if '.' not in query else query + for entry in corpus: + corpus_word_with_td = str(getattr(entry, sequence_type)) + if query_with̠td == corpus_word_with_td: # if a word in corpus has the same transcription + return entry # that word in the corpus is to be referred to. + + # the following should be run if no word found in corpus with the transcription + new_query = parse(query, trans_delimiter) + query_word = Word(**{sequence_type: new_query}) + else: # if file contains spelling + try: + query_word = corpus.corpus.find(query) + except KeyError: + # if the word in the file can't be found in the corpus + new_query = parse(query, trans_delimiter) + query_word = Word(**{sequence_type: list(new_query)}) + + return query_word + +def parse(word, delimiter): + return word.split(delimiter) if delimiter in word else list(word) \ No newline at end of file diff --git a/data/source_files/clean/c7153b8df594.py b/data/source_files/clean/c7153b8df594.py new file mode 100644 index 0000000000000000000000000000000000000000..d9cdaf9a83cf7f7590823c87b5b4ab6e714294e0 --- /dev/null +++ b/data/source_files/clean/c7153b8df594.py @@ -0,0 +1,132 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: MIT-0 +__copyright__ = ('Copyright Amazon.com, Inc. or its affiliates. ' + 'All Rights Reserved.') +__version__ = '2.7.1' +__license__ = 'MIT-0' +__author__ = 'Akihiro Nakajima' +__url__ = 'https://github.com/aws-samples/siem-on-amazon-opensearch-service' + +import hashlib +import json +import os +import tarfile +import urllib.error +import urllib.parse +import urllib.request + +import boto3 + +# get var from lambda environment +try: + s3bucket_name = os.environ['s3bucket_name'] + license_key = os.environ['license_key'] +except KeyError: + raise Exception('ERROR: impossible to get lambda environment') +s3key_prefix = os.environ.get('s3key_prefix', 'GeoLite2/') + +s3 = boto3.resource('s3') +bucket = s3.Bucket(s3bucket_name) +url = 'https://download.maxmind.com/app/geoip_download?' +put_files = ['GeoLite2-City', 'GeoLite2-ASN', 'GeoLite2-Country'] + + +def download_file(filename): + for suffix in ['tar.gz', 'tar.gz.sha256']: + values = {'edition_id': filename, 'license_key': license_key, + 'suffix': suffix} + data = urllib.parse.urlencode(values) + try: + urllib.request.urlretrieve( + url + data, filename='/tmp/' + filename + '.' + suffix) + except urllib.error.HTTPError as err: + if err.status == 401: + return err.status + print(err) + raise Exception('ERROR: http error') + except Exception as err: + print(err) + raise Exception('ERROR: ' + err) + print('INFO: ' + filename + ' was downloaded') + return 200 + + +def put_to_s3(filename): + with open('/tmp/' + filename + '.tar.gz.sha256') as f: + checksum = f.read().split()[0] + print('INFO: Checksum: ' + checksum) + + with open('/tmp/' + filename + '.tar.gz', 'rb') as f: + calcurated_checksum = hashlib.sha256(f.read()).hexdigest() + + if checksum not in calcurated_checksum: + print('ERROR: checksum is different. download is failed') + return False + + with tarfile.open('/tmp/' + filename + '.tar.gz', 'r:gz') as tf: + directory = tf.getmembers()[0].name + tf.extractall(path='/tmp/') + mmdb = directory + '/' + filename + '.mmdb' + s3obj = s3key_prefix + filename + '.mmdb' + bucket.upload_file('/tmp/' + mmdb, s3obj) + print('INFO: uploaded {0} to s3://{1}/{2}'.format( + mmdb, s3bucket_name, s3obj)) + + +def send(event, context, responseStatus, responseData, physicalResourceId=None, + noEcho=False): + # https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-lambda-function-code-cfnresponsemodule.html + responseUrl = event['ResponseURL'] + print(responseUrl) + + response_body = {} + response_body['Status'] = responseStatus + response_body['Reason'] = ('See the details in CloudWatch Log Stream: ' + '' + context.log_stream_name) + response_body['PhysicalResourceId'] = ( + physicalResourceId or context.log_stream_name) + response_body['StackId'] = event['StackId'] + response_body['RequestId'] = event['RequestId'] + response_body['LogicalResourceId'] = event['LogicalResourceId'] + response_body['NoEcho'] = noEcho + response_body['Data'] = responseData + + json_response_body = json.dumps(response_body) + + print('Response body:\n' + json_response_body) + + headers = {'content-type': 'application/json', } + req = urllib.request.Request( + event['ResponseURL'], json_response_body.encode(), + headers=headers, method='PUT') + try: + res = urllib.request.urlopen(req) + print('Status code: ' + str(res.status)) + except Exception as e: + print('send(..) failed executing requests.put(..): ' + str(e)) + + +def lambda_handler(event, context): + physicalResourceId = 'geoipdb' + status = 'None' + if event: + print(json.dumps(event)) + try: + for filename in put_files: + status = download_file(filename) + if status == 401: + break + put_to_s3(filename) + except Exception as e: + print(e) + if event and 'RequestType' in event: + response = {'failed_reason': e} + send(event, context, 'FAILED', response, physicalResourceId) + + if event and 'RequestType' in event: + if status == 401: + response = {'status': 'invalide_license_key'} + else: + response = {'status': 'downloaded'} + send(event, context, 'SUCCESS', response, physicalResourceId) + return(json.dumps(response)) diff --git a/data/source_files/clean/c86c523ed053.py b/data/source_files/clean/c86c523ed053.py new file mode 100644 index 0000000000000000000000000000000000000000..d9efc68d74f0ff6411265258b8ee1094b0fa820e --- /dev/null +++ b/data/source_files/clean/c86c523ed053.py @@ -0,0 +1,50 @@ +from pytest import raises +from discopy.cartesian import * + + +def test_Box_repr(): + f = Box('f', 1, 2, lambda x: (x, x)) + assert "Box('f', 1, 2" in repr(f) + + +def test_Function_str(): + f = Function(2, 1, lambda x, y: x + y) + assert 'Function(dom=2, cod=1,' in str(f) + + +def test_Function_call(): + f = Swap(2, 1) + values = (2, 3) + with raises(TypeError) as err: + f(*values) + assert str(err.value) == messages.expected_input_length(f, values) + + +def test_Function_then(): + f, g = Function(2, 1, lambda x, y: x + y), Function(1, 1, lambda x: x + 1) + assert Function.id(2).then(*(f, g))(20, 21) == 42 + + +def test_Function_then_err(): + f = Function(2, 1, lambda x, y: x + y) + g = (lambda x: x, ) + with raises(TypeError) as err: + f >> g + assert str(err.value) == messages.type_err(Function, g) + g = Function.id(2) + with raises(AxiomError) as err: + f >> g + assert str(err.value) == messages.does_not_compose(f, g) + + +def test_Function_tensor(): + assert Function.id(3)(1, 2, 3)\ + == Function.id(0).tensor(*(3 * [Function.id(1)]))(1, 2, 3) + + +def test_Function_tensor_err(): + f = Function(2, 1, lambda x, y: x + y) + g = (lambda x: x, ) + with raises(TypeError) as err: + f @ g + assert str(err.value) == messages.type_err(Function, g) diff --git a/data/source_files/clean/c953b65d83d5.py b/data/source_files/clean/c953b65d83d5.py new file mode 100644 index 0000000000000000000000000000000000000000..86b8aba13af33d7534f429cc7d5eda4e95f58299 --- /dev/null +++ b/data/source_files/clean/c953b65d83d5.py @@ -0,0 +1,324 @@ +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +import json +import logging +import os +import unittest + +from telemetry.core import browser_finder +from telemetry.core import exceptions +from telemetry.core import extension_to_load +from telemetry.core import util +from telemetry.core.backends.chrome import cros_interface +from telemetry.unittest import options_for_unittests + +class CrOSAutoTest(unittest.TestCase): + def setUp(self): + options = options_for_unittests.GetCopy() + self._cri = cros_interface.CrOSInterface(options.cros_remote, + options.cros_ssh_identity) + self._is_guest = options.browser_type == 'cros-chrome-guest' + self._username = '' if self._is_guest else options.browser_options.username + self._password = options.browser_options.password + + def _IsCryptohomeMounted(self): + """Returns True if cryptohome is mounted""" + cryptohomeJSON, _ = self._cri.RunCmdOnDevice(['/usr/sbin/cryptohome', + '--action=status']) + cryptohomeStatus = json.loads(cryptohomeJSON) + return (cryptohomeStatus['mounts'] and + cryptohomeStatus['mounts'][0]['mounted']) + + def _CreateBrowser(self, autotest_ext=False, auto_login=True): + """Finds and creates a browser for tests. if autotest_ext is True, + also loads the autotest extension""" + options = options_for_unittests.GetCopy() + + if autotest_ext: + extension_path = os.path.join(os.path.dirname(__file__), 'autotest_ext') + self._load_extension = extension_to_load.ExtensionToLoad( + path=extension_path, + browser_type=options.browser_type, + is_component=True) + options.extensions_to_load = [self._load_extension] + + browser_to_create = browser_finder.FindBrowser(options) + self.assertTrue(browser_to_create) + options.browser_options.create_browser_with_oobe = True + options.browser_options.auto_login = auto_login + b = browser_to_create.Create() + b.Start() + return b + + def _GetAutotestExtension(self, browser): + """Returns the autotest extension instance""" + extension = browser.extensions[self._load_extension] + self.assertTrue(extension) + return extension + + def _GetLoginStatus(self, browser): + extension = self._GetAutotestExtension(browser) + self.assertTrue(extension.EvaluateJavaScript( + "typeof('chrome.autotestPrivate') != 'undefined'")) + extension.ExecuteJavaScript(''' + window.__login_status = null; + chrome.autotestPrivate.loginStatus(function(s) { + window.__login_status = s; + }); + ''') + return util.WaitFor( + lambda: extension.EvaluateJavaScript('window.__login_status'), 10) + + def testCryptohomeMounted(self): + """Verifies cryptohome mount status for regular and guest user and when + logged out""" + with self._CreateBrowser() as b: + self.assertEquals(1, len(b.tabs)) + self.assertTrue(b.tabs[0].url) + self.assertTrue(self._IsCryptohomeMounted()) + + chronos_fs = self._cri.FilesystemMountedAt('/home/chronos/user') + self.assertTrue(chronos_fs) + if self._is_guest: + self.assertEquals(chronos_fs, 'guestfs') + else: + home, _ = self._cri.RunCmdOnDevice(['/usr/sbin/cryptohome-path', + 'user', self._username]) + self.assertEquals(self._cri.FilesystemMountedAt(home.rstrip()), + chronos_fs) + + self.assertFalse(self._IsCryptohomeMounted()) + self.assertEquals(self._cri.FilesystemMountedAt('/home/chronos/user'), + '/dev/mapper/encstateful') + + def testLoginStatus(self): + """Tests autotestPrivate.loginStatus""" + with self._CreateBrowser(autotest_ext=True) as b: + login_status = self._GetLoginStatus(b) + self.assertEquals(type(login_status), dict) + + self.assertEquals(not self._is_guest, login_status['isRegularUser']) + self.assertEquals(self._is_guest, login_status['isGuest']) + self.assertEquals(login_status['email'], self._username) + self.assertFalse(login_status['isScreenLocked']) + + def _IsScreenLocked(self, browser): + return self._GetLoginStatus(browser)['isScreenLocked'] + + def _LockScreen(self, browser): + self.assertFalse(self._IsScreenLocked(browser)) + + extension = self._GetAutotestExtension(browser) + self.assertTrue(extension.EvaluateJavaScript( + "typeof chrome.autotestPrivate.lockScreen == 'function'")) + logging.info('Locking screen') + extension.ExecuteJavaScript('chrome.autotestPrivate.lockScreen();') + + logging.info('Waiting for the lock screen') + def ScreenLocked(): + return (browser.oobe and + browser.oobe.EvaluateJavaScript("typeof Oobe == 'function'") and + browser.oobe.EvaluateJavaScript( + "typeof Oobe.authenticateForTesting == 'function'")) + util.WaitFor(ScreenLocked, 10) + self.assertTrue(self._IsScreenLocked(browser)) + + def _AttemptUnlockBadPassword(self, browser): + logging.info('Trying a bad password') + def ErrorBubbleVisible(): + return not browser.oobe.EvaluateJavaScript(''' + document.getElementById('bubble').hidden + ''') + self.assertFalse(ErrorBubbleVisible()) + browser.oobe.ExecuteJavaScript(''' + Oobe.authenticateForTesting('%s', 'bad'); + ''' % self._username) + util.WaitFor(ErrorBubbleVisible, 10) + self.assertTrue(self._IsScreenLocked(browser)) + + def _UnlockScreen(self, browser): + logging.info('Unlocking') + browser.oobe.ExecuteJavaScript(''' + Oobe.authenticateForTesting('%s', '%s'); + ''' % (self._username, self._password)) + util.WaitFor(lambda: not browser.oobe, 10) + self.assertFalse(self._IsScreenLocked(browser)) + + def testScreenLock(self): + """Tests autotestPrivate.screenLock""" + with self._CreateBrowser(autotest_ext=True) as browser: + self._LockScreen(browser) + self._AttemptUnlockBadPassword(browser) + self._UnlockScreen(browser) + + def testLogout(self): + """Tests autotestPrivate.logout""" + with self._CreateBrowser(autotest_ext=True) as b: + extension = self._GetAutotestExtension(b) + try: + extension.ExecuteJavaScript('chrome.autotestPrivate.logout();') + except (exceptions.BrowserConnectionGoneException, + exceptions.BrowserGoneException): + pass + util.WaitFor(lambda: not self._IsCryptohomeMounted(), 20) + + def _SwitchRegion(self, region): + self._cri.RunCmdOnDevice(['stop', 'ui']) + + # Change VPD (requires RW-enabled firmware). + # To save time, region and initial_timezone are not set. + vpd = {'initial_locale': region.language_code, + 'keyboard_layout': region.keyboard} + + for (key, value) in vpd.items(): + self._cri.RunCmdOnDevice(['vpd', '-s', '"%s"="%s"' % (key, value)]) + + # Remove cached files to clear initial locale info and force regeneration. + self._cri.RunCmdOnDevice(['rm', '/home/chronos/Local\ State']) + self._cri.RunCmdOnDevice(['rm', '/home/chronos/.oobe_completed']) + self._cri.RunCmdOnDevice(['dump_vpd_log', '--force']) + + self._cri.RunCmdOnDevice(['start', 'ui']) + + def _OobeHasOption(self, browser, selectId, value): + hasOptionJs = ''' + // Check that the option is present, and selected if it is the default. + (function hasOption(selectId, value, isDefault) { + var options = document.getElementById(selectId).options; + for (var i = 0; i < options.length; i++) { + if (options[i].value == value) { + // The option is present. Make sure it's selected if necessary. + return !isDefault || options.selectedIndex == i; + } + } + return false; + })("%s", "%s", %s); + ''' + return browser.oobe.EvaluateJavaScript( + hasOptionJs % (selectId, value, 'true')) + + def _ResolveLanguage(self, locale): + # If the locale matches a language but not the country, fall back to + # an existing locale. See ui/base/l10n/l10n_util.cc. + lang, _, region = map(str.lower, locale.partition('-')) + if not region: + return "" + + # Map from other countries to a localized country + if lang == 'es' and region == 'es': + return 'es-419' + if lang == 'zh': + if region in ('hk', 'mo'): + return 'zh-TW' + return 'zh-CN' + if lang == 'en': + if region in ('au', 'ca', 'nz', 'za'): + return 'en-GB' + return 'en-US' + + # No mapping found + return "" + + def testOobeLocalization(self): + """Tests different region configurations at OOBE""" + # Save the original device localization settings. + # To save time, only read initial_locale and keyboard_layout. + initial_region = self.Region('', '', '', '', '') + initial_region.language_code, _ = self._cri.RunCmdOnDevice( + ['vpd', '-g', 'initial_locale']) + initial_region.keyboard, _ = self._cri.RunCmdOnDevice( + ['vpd', '-g', 'keyboard_layout']) + + for region in self.REGIONS_LIST: + self._SwitchRegion(region) + with self._CreateBrowser(auto_login=False) as browser: + # Ensure the dropdown lists have been created. + util.WaitFor(lambda: browser.oobe.EvaluateJavaScript( + 'document.getElementById("language-select") != null'), + 10) + + # Find the language, or an acceptable fallback value. + languageFound = self._OobeHasOption(browser, + 'language-select', + region.language_code) + if not languageFound: + fallback = self._ResolveLanguage(region.language_code) + self.assertTrue(fallback and + self._OobeHasOption(browser, + 'language-select', + fallback)) + + # Find the keyboard layout. + self.assertTrue(self._OobeHasOption( + browser, 'keyboard-select', region.keyboard)) + + # Test is finished. Restore original region settings. + self._SwitchRegion(initial_region) + + # The Region class and region list will be available in regions.py. + class Region(object): + def __init__(self, region_code, keyboard, time_zone, language_code, + keyboard_mechanical_layout, description=None, notes=None): + self.region_code = region_code + self.keyboard = keyboard + self.time_zone = time_zone + self.language_code = language_code + self.keyboard_mechanical_layout = keyboard_mechanical_layout + self.description = description or region_code + self.notes = notes + + class Enum(frozenset): + def __getattr__(self, name): + if name in self: + return name + raise AttributeError + + KeyboardMechanicalLayout = Enum(['ANSI', 'ISO', 'JIS', 'ABNT2']) + _KML = KeyboardMechanicalLayout + REGIONS_LIST = [ + Region('au', 'xkb:us::eng', 'Australia/Sydney', 'en-AU', _KML.ANSI, + 'Australia'), + Region('ca.ansi', 'xkb:us::eng', 'America/Toronto', 'en-CA', _KML.ANSI, + 'Canada (US keyboard)', + 'Canada with US (ANSI) keyboard; see http://goto/cros-canada'), + Region('ca.fr', 'xkb:ca::fra', 'America/Toronto', 'fr-CA', _KML.ISO, + 'Canada (French keyboard)', + ('Canadian French (ISO) keyboard. The most common configuration for ' + 'Canadian French SKUs. See http://goto/cros-canada')), + Region('ca.hybrid', 'xkb:ca:eng:eng', 'America/Toronto', 'en-CA', _KML.ISO, + 'Canada (hybrid)', + ('Canada with hybrid xkb:ca:eng:eng + xkb:ca::fra keyboard (ISO), ' + 'defaulting to English language and keyboard. Used only if there ' + 'needs to be a single SKU for all of Canada. See ' + 'http://goto/cros-canada')), + Region('ca.multix', 'xkb:ca:multix:fra', 'America/Toronto', 'fr-CA', + _KML.ISO, 'Canada (multilingual)', + ("Canadian Multilingual keyboard; you probably don't want this. See " + "http://goto/cros-canada")), + Region('de', 'xkb:de::ger', 'Europe/Berlin', 'de', _KML.ISO, 'Germany'), + Region('fi', 'xkb:fi::fin', 'Europe/Helsinki', 'fi', _KML.ISO, 'Finland'), + Region('fr', 'xkb:fr::fra', 'Europe/Paris', 'fr', _KML.ISO, 'France'), + Region('gb', 'xkb:gb:extd:eng', 'Europe/London', 'en-GB', _KML.ISO, 'UK'), + Region('ie', 'xkb:gb:extd:eng', 'Europe/Dublin', 'en-GB', _KML.ISO, + 'Ireland'), + Region('in', 'xkb:us::eng', 'Asia/Calcutta', 'en-US', _KML.ANSI, 'India'), + Region('my', 'xkb:us::eng', 'Asia/Kuala_Lumpur', 'ms', _KML.ANSI, + 'Malaysia'), + Region('nl', 'xkb:us:intl:eng', 'Europe/Amsterdam', 'nl', _KML.ANSI, + 'Netherlands'), + Region('nordic', 'xkb:se::swe', 'Europe/Stockholm', 'en-US', _KML.ISO, + 'Nordics', + ('Unified SKU for Sweden, Norway, and Denmark. This defaults ' + 'to Swedish keyboard layout, but starts with US English language ' + 'for neutrality. Use if there is a single combined SKU for Nordic ' + 'countries.')), + Region('se', 'xkb:se::swe', 'Europe/Stockholm', 'sv', _KML.ISO, 'Sweden', + ("Use this if there separate SKUs for Nordic countries (Sweden, " + "Norway, and Denmark), or the device is only shipping to Sweden. " + "If there is a single unified SKU, use 'nordic' instead.")), + Region('sg', 'xkb:us::eng', 'Asia/Singapore', 'en-GB', _KML.ANSI, + 'Singapore'), + Region('us', 'xkb:us::eng', 'America/Los_Angeles', 'en-US', _KML.ANSI, + 'United States'), + ] diff --git a/data/source_files/clean/c96a4641f9cb.py b/data/source_files/clean/c96a4641f9cb.py new file mode 100644 index 0000000000000000000000000000000000000000..8ad221c93a5fce8d825d0b6b80fc2f401b373d9b --- /dev/null +++ b/data/source_files/clean/c96a4641f9cb.py @@ -0,0 +1,304 @@ +#!/usr/bin/env python +# +# Copyright 2016 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Generate Android.bp for Skia from GN configuration. + +import json +import os +import pprint +import string +import subprocess +import tempfile + +import gn_to_bp_utils + +# First we start off with a template for Android.bp, +# with holes for source lists and include directories. +bp = string.Template('''// This file is autogenerated by gn_to_bp.py. + +cc_library_static { + name: "libskia", + cflags: [ + $cflags + ], + + cppflags:[ + $cflags_cc + ], + + export_include_dirs: [ + $export_includes + ], + + local_include_dirs: [ + $local_includes + ], + + srcs: [ + $srcs + ], + + arch: { + arm: { + srcs: [ + $arm_srcs + ], + + neon: { + srcs: [ + $arm_neon_srcs + ], + }, + }, + + arm64: { + srcs: [ + $arm64_srcs + ], + }, + + mips: { + srcs: [ + $none_srcs + ], + }, + + mips64: { + srcs: [ + $none_srcs + ], + }, + + x86: { + srcs: [ + $x86_srcs + ], + cflags: [ + // Clang seems to think new/malloc will only be 4-byte aligned + // on x86 Android. We're pretty sure it's actually 8-byte + // alignment. tests/OverAlignedTest.cpp has more information, + // and should fail if we're wrong. + "-Wno-over-aligned" + ], + }, + + x86_64: { + srcs: [ + $x86_srcs + ], + }, + }, + + defaults: ["skia_deps", + "skia_pgo", + ], +} + +// Build libskia with PGO by default. +// Location of PGO profile data is defined in build/soong/cc/pgo.go +// and is separate from skia. +// To turn it off, set ANDROID_PGO_NO_PROFILE_USE environment variable +// or set enable_profile_use property to false. +cc_defaults { + name: "skia_pgo", + pgo: { + instrumentation: true, + profile_file: "hwui/hwui.profdata", + benchmarks: ["hwui", "skia"], + enable_profile_use: true, + }, +} + +// "defaults" property to disable profile use for Skia tools and benchmarks. +cc_defaults { + name: "skia_pgo_no_profile_use", + defaults: [ + "skia_pgo", + ], + pgo: { + enable_profile_use: false, + }, +} + +cc_defaults { + name: "skia_deps", + shared_libs: [ + "libEGL", + "libGLESv2", + "libdng_sdk", + "libexpat", + "libft2", + "libheif", + "libicui18n", + "libicuuc", + "libjpeg", + "liblog", + "libpiex", + "libpng", + "libvulkan", + "libz", + "libcutils", + "libnativewindow", + ], + static_libs: [ + "libarect", + "libsfntly", + "libwebp-decode", + "libwebp-encode", + ], + group_static_libs: true, +} + +cc_defaults { + name: "skia_tool_deps", + defaults: [ + "skia_deps", + "skia_pgo_no_profile_use" + ], + static_libs: [ + "libjsoncpp", + "libskia", + ], + cflags: [ + "-Wno-unused-parameter", + "-Wno-unused-variable", + ], +} + +cc_test { + name: "skia_dm", + + defaults: [ + "skia_tool_deps" + ], + + local_include_dirs: [ + $dm_includes + ], + + srcs: [ + $dm_srcs + ], + + shared_libs: [ + "libbinder", + "libutils", + ], +} + +cc_test { + name: "skia_nanobench", + + defaults: [ + "skia_tool_deps" + ], + + local_include_dirs: [ + $nanobench_includes + ], + + srcs: [ + $nanobench_srcs + ], + + data: [ + "resources/*", + ], +}''') + +# We'll run GN to get the main source lists and include directories for Skia. +gn_args = { + 'is_official_build': 'true', + 'skia_enable_tools': 'true', + 'skia_enable_skottie': 'false', # requires rapidjson third-party + 'skia_use_libheif': 'true', + 'skia_use_vulkan': 'true', + 'target_cpu': '"none"', + 'target_os': '"android"', + 'skia_vulkan_header': '"Skia_Vulkan_Android.h"', +} + +js = gn_to_bp_utils.GenerateJSONFromGN(gn_args) + +def strip_slashes(lst): + return {str(p.lstrip('/')) for p in lst} + +srcs = strip_slashes(js['targets']['//:skia']['sources']) +cflags = strip_slashes(js['targets']['//:skia']['cflags']) +cflags_cc = strip_slashes(js['targets']['//:skia']['cflags_cc']) +local_includes = strip_slashes(js['targets']['//:skia']['include_dirs']) +export_includes = strip_slashes(js['targets']['//:public']['include_dirs']) +defines = [str(d) for d in js['targets']['//:skia']['defines']] + +dm_srcs = strip_slashes(js['targets']['//:dm']['sources']) +dm_includes = strip_slashes(js['targets']['//:dm']['include_dirs']) + +nanobench_target = js['targets']['//:nanobench'] +nanobench_srcs = strip_slashes(nanobench_target['sources']) +nanobench_includes = strip_slashes(nanobench_target['include_dirs']) + +gn_to_bp_utils.GrabDependentValues(js, '//:skia', 'sources', srcs, None) +gn_to_bp_utils.GrabDependentValues(js, '//:dm', 'sources', dm_srcs, 'skia') +gn_to_bp_utils.GrabDependentValues(js, '//:nanobench', 'sources', + nanobench_srcs, 'skia') + +# skcms is a little special, kind of a second-party library. +srcs .add("third_party/skcms/skcms.c") +local_includes.add("third_party/skcms") +dm_includes .add("third_party/skcms") + +# No need to list headers. +srcs = {s for s in srcs if not s.endswith('.h')} +dm_srcs = {s for s in dm_srcs if not s.endswith('.h')} +nanobench_srcs = {s for s in nanobench_srcs if not s.endswith('.h')} + +cflags = gn_to_bp_utils.CleanupCFlags(cflags) +cflags_cc = gn_to_bp_utils.CleanupCCFlags(cflags_cc) + +# We need to add the include path to the vulkan defines and header file set in +# then skia_vulkan_header gn arg that is used for framework builds. +local_includes.add("platform_tools/android/vulkan") +export_includes.add("platform_tools/android/vulkan") + +here = os.path.dirname(__file__) +defs = gn_to_bp_utils.GetArchSources(os.path.join(here, 'opts.gni')) + +gn_to_bp_utils.WriteUserConfig('include/config/SkUserConfig.h', defines) + +# Turn a list of strings into the style bpfmt outputs. +def bpfmt(indent, lst, sort=True): + if sort: + lst = sorted(lst) + return ('\n' + ' '*indent).join('"%s",' % v for v in lst) + +# OK! We have everything to fill in Android.bp... +with open('Android.bp', 'w') as f: + print >>f, bp.substitute({ + 'export_includes': bpfmt(8, export_includes), + 'local_includes': bpfmt(8, local_includes), + 'srcs': bpfmt(8, srcs), + 'cflags': bpfmt(8, cflags, False), + 'cflags_cc': bpfmt(8, cflags_cc), + + 'arm_srcs': bpfmt(16, defs['armv7']), + 'arm_neon_srcs': bpfmt(20, defs['neon']), + 'arm64_srcs': bpfmt(16, defs['arm64'] + + defs['crc32']), + 'none_srcs': bpfmt(16, defs['none']), + 'x86_srcs': bpfmt(16, defs['sse2'] + + defs['ssse3'] + + defs['sse41'] + + defs['sse42'] + + defs['avx' ] + + defs['hsw' ]), + + 'dm_includes' : bpfmt(8, dm_includes), + 'dm_srcs' : bpfmt(8, dm_srcs), + + 'nanobench_includes' : bpfmt(8, nanobench_includes), + 'nanobench_srcs' : bpfmt(8, nanobench_srcs), + }) diff --git a/data/source_files/clean/ca94c5502737.py b/data/source_files/clean/ca94c5502737.py new file mode 100644 index 0000000000000000000000000000000000000000..868dd7b75196bf80f589754ce91dc36872de638a --- /dev/null +++ b/data/source_files/clean/ca94c5502737.py @@ -0,0 +1,273 @@ +import FWCore.ParameterSet.Config as cms + +# handle normal mixing or premixing +def getHcalDigitizer(process): + if hasattr(process,'mixData'): + return process.mixData + if hasattr(process,'mix') and hasattr(process.mix,'digitizers') and hasattr(process.mix.digitizers,'hcal'): + return process.mix.digitizers.hcal + return None + +def getHGCalDigitizer(process,section): + if hasattr(process,'mix') and hasattr(process.mix,'digitizers'): + if section == 'EE' and hasattr(process.mix.digitizers,'hgceeDigitizer'): + return process.mix.digitizers.hgceeDigitizer + elif section == 'FH' and hasattr(process.mix.digitizers,'hgchefrontDigitizer'): + return process.mix.digitizers.hgchefrontDigitizer + elif section == 'BH' and hasattr(process.mix.digitizers,'hgchebackDigitizer'): + return process.mix.digitizers.hgchebackDigitizer + elif section == 'HFNose' and hasattr(process.mix.digitizers,'hfnoseDigitizer'): + return process.mix.digitizers.hfnoseDigitizer + return None + +# change assumptions about lumi rate +def setScenarioHLLHC(module,scenarioHLLHC): + if scenarioHLLHC=="nominal": + from CalibCalorimetry.HcalPlugins.HBHEDarkening_cff import _years_LHC, _years_HLLHC_nominal + module.years = _years_LHC + _years_HLLHC_nominal + elif scenarioHLLHC=="ultimate": + from CalibCalorimetry.HcalPlugins.HBHEDarkening_cff import _years_LHC, _years_HLLHC_ultimate + module.years = _years_LHC + _years_HLLHC_ultimate + return module + +# turnon = True enables default, False disables +# recalibration and darkening always together +def ageHB(process,turnon,scenarioHLLHC): + if turnon: + from CalibCalorimetry.HcalPlugins.HBHEDarkening_cff import HBDarkeningEP + process.HBDarkeningEP = HBDarkeningEP + process.HBDarkeningEP = setScenarioHLLHC(process.HBDarkeningEP,scenarioHLLHC) + hcaldigi = getHcalDigitizer(process) + if hcaldigi is not None: hcaldigi.HBDarkening = cms.bool(turnon) + if hasattr(process,'es_hardcode'): + process.es_hardcode.HBRecalibration = cms.bool(turnon) + return process + +def ageHE(process,turnon,scenarioHLLHC): + if turnon: + from CalibCalorimetry.HcalPlugins.HBHEDarkening_cff import HEDarkeningEP + process.HEDarkeningEP = HEDarkeningEP + process.HEDarkeningEP = setScenarioHLLHC(process.HEDarkeningEP,scenarioHLLHC) + hcaldigi = getHcalDigitizer(process) + if hcaldigi is not None: hcaldigi.HEDarkening = cms.bool(turnon) + if hasattr(process,'es_hardcode'): + process.es_hardcode.HERecalibration = cms.bool(turnon) + return process + +def ageHF(process,turnon): + hcaldigi = getHcalDigitizer(process) + if hcaldigi is not None: hcaldigi.HFDarkening = cms.bool(turnon) + if hasattr(process,'es_hardcode'): + process.es_hardcode.HFRecalibration = cms.bool(turnon) + return process + +def agedHFNose(process,algo=0): + from SimCalorimetry.HGCalSimProducers.hgcalDigitizer_cfi import HFNose_setEndOfLifeNoise + process = HFNose_setEndOfLifeNoise(process,byDose=True,byDoseAlgo=algo) + return process + +def agedHGCal(process,algo=0): + from SimCalorimetry.HGCalSimProducers.hgcalDigitizer_cfi import HGCal_setEndOfLifeNoise + process = HGCal_setEndOfLifeNoise(process,byDose=True,byDoseAlgo=algo) + return process + +def realisticHGCalStartup(process): + from SimCalorimetry.HGCalSimProducers.hgcalDigitizer_cfi import HGCal_setRealisticStartupNoise + process = HGCal_setRealisticStartupNoise(process) + return process + +# needs lumi to set proper ZS thresholds (tbd) +def ageSiPM(process,turnon,lumi): + process.es_hardcode.hbUpgrade.doRadiationDamage = turnon + process.es_hardcode.heUpgrade.doRadiationDamage = turnon + + # todo: determine ZS threshold adjustments + + # adjust PF thresholds for increased noise + # based on: https://baylor.box.com/s/w32ja75krcbxcycyifexu28dwlgrj7wg + hcal_lumis = [300, 1000, 3000, 4500, 1e10] + hcal_thresholds = { + 300: { + "seed": [0.5, 0.625, 0.75, 0.75], + "rec": [0.4, 0.5, 0.6, 0.6], + }, + 1000: { + "seed": [1.0, 1.5, 1.5, 1.5], + "rec": [0.8, 1.2, 1.2, 1.2], + }, + 3000: { + "seed": [1.25, 2.5, 2.5, 2.5], + "rec": [1.0, 2.0, 2.0, 2.0], + }, + 4500: { + "seed": [1.5, 3.0, 3.0, 3.0], + "rec": [1.25, 2.5, 2.5, 2.5], + }, + } + ctmodules = ['calotowermaker','caloTowerForTrk','caloTowerForTrkPreSplitting','towerMaker','towerMakerWithHO'] + for ilumi, hcal_lumi in enumerate(hcal_lumis[:-1]): + if lumi >= hcal_lumi and lumi < hcal_lumis[ilumi+1]: + if hasattr(process,'particleFlowClusterHBHE'): + process.particleFlowClusterHBHE.seedFinder.thresholdsByDetector[0].seedingThreshold = hcal_thresholds[hcal_lumi]["seed"] + process.particleFlowClusterHBHE.initialClusteringStep.thresholdsByDetector[0].gatheringThreshold = hcal_thresholds[hcal_lumi]["rec"] + process.particleFlowClusterHBHE.pfClusterBuilder.recHitEnergyNorms[0].recHitEnergyNorm = hcal_thresholds[hcal_lumi]["rec"] + process.particleFlowClusterHBHE.pfClusterBuilder.positionCalc.logWeightDenominatorByDetector[0].logWeightDenominator = hcal_thresholds[hcal_lumi]["rec"] + process.particleFlowClusterHBHE.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector[0].logWeightDenominator = hcal_thresholds[hcal_lumi]["rec"] + if hasattr(process,'particleFlowClusterHCAL'): + process.particleFlowClusterHCAL.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector[0].logWeightDenominator = hcal_thresholds[hcal_lumi]["rec"] + if hasattr(process,'particleFlowRecHitHBHE'): + process.particleFlowRecHitHBHE.producers[0].qualityTests[0].cuts[0].threshold = hcal_thresholds[hcal_lumi]["rec"] + for ctmod in ctmodules: + if hasattr(process,ctmod): + getattr(process,ctmod).HBThreshold1 = hcal_thresholds[hcal_lumi]["rec"][0] + getattr(process,ctmod).HBThreshold2 = hcal_thresholds[hcal_lumi]["rec"][1] + getattr(process,ctmod).HBThreshold = hcal_thresholds[hcal_lumi]["rec"][-1] + break + + return process + +def ageHcal(process,lumi,instLumi,scenarioHLLHC): + hcaldigi = getHcalDigitizer(process) + if hcaldigi is not None: hcaldigi.DelivLuminosity = cms.double(float(lumi)) # integrated lumi in fb-1 + + # these lines need to be further activated by turning on 'complete' aging for HF + if hasattr(process,'g4SimHits'): + process.g4SimHits.HCalSD.InstLuminosity = cms.double(float(instLumi)) + process.g4SimHits.HCalSD.DelivLuminosity = cms.double(float(lumi)) + + # recalibration and darkening always together + if hasattr(process,'es_hardcode'): + process.es_hardcode.iLumi = cms.double(float(lumi)) + + # functions to enable individual subdet aging + process = ageHB(process,True,scenarioHLLHC) + process = ageHE(process,True,scenarioHLLHC) + process = ageHF(process,True) + process = ageSiPM(process,True,lumi) + + return process + +def turn_on_HB_aging(process): + process = ageHB(process,True,"") + return process + +def turn_off_HB_aging(process): + process = ageHB(process,False,"") + return process + +def turn_on_HE_aging(process): + process = ageHE(process,True,"") + return process + +def turn_off_HE_aging(process): + process = ageHE(process,False,"") + return process + +def turn_on_HF_aging(process): + process = ageHF(process,True) + return process + +def turn_off_HF_aging(process): + process = ageHF(process,False) + return process + +def turn_off_SiPM_aging(process): + process = ageSiPM(process,False,0.0) + return process + +def hf_complete_aging(process): + if hasattr(process,'g4SimHits'): + process.g4SimHits.HCalSD.HFDarkening = cms.untracked.bool(True) + hcaldigi = getHcalDigitizer(process) + if hcaldigi is not None: hcaldigi.HFDarkening = cms.untracked.bool(False) + return process + +def ageEcal(process,lumi,instLumi): + if hasattr(process,'g4SimHits'): + #these lines need to be further activiated by tuning on 'complete' aging for ecal + process.g4SimHits.ECalSD.InstLuminosity = cms.double(instLumi) + process.g4SimHits.ECalSD.DelivLuminosity = cms.double(float(lumi)) + + # available conditions + ecal_lumis = [300,1000,3000,4500] + ecal_conditions = [ + ['EcalIntercalibConstantsRcd','EcalIntercalibConstants_TL{:d}_upgrade_8deg_v2_mc'], + ['EcalIntercalibConstantsMCRcd','EcalIntercalibConstantsMC_TL{:d}_upgrade_8deg_v2_mc'], + ['EcalLaserAPDPNRatiosRcd','EcalLaserAPDPNRatios_TL{:d}_upgrade_8deg_mc'], + ['EcalPedestalsRcd','EcalPedestals_TL{:d}_upgradeTIA_8deg_mc'], + ['EcalTPGLinearizationConstRcd','EcalTPGLinearizationConst_TL{:d}_upgrade_8deg_mc'], + ] + + # update PF thresholds, based on https://indico.cern.ch/event/653123/contributions/2659235/attachments/1491385/2318364/170711_upsg_ledovskoy.pdf + ecal_thresholds = { + 300 : 0.103, + 1000 : 0.175, + 3000 : 0.435, + 4500 : 0.707, + } + ecal_seed_multiplier = 2.5 + + # try to get conditions + if int(lumi) in ecal_lumis: + if not hasattr(process.GlobalTag,'toGet'): + process.GlobalTag.toGet=cms.VPSet() + for ecal_condition in ecal_conditions: + process.GlobalTag.toGet.append(cms.PSet( + record = cms.string(ecal_condition[0]), + tag = cms.string(ecal_condition[1].format(int(lumi))), + connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS") + ) + ) + if hasattr(process,"particleFlowClusterECALUncorrected"): + _seeds = process.particleFlowClusterECALUncorrected.seedFinder.thresholdsByDetector + for iseed in range(0,len(_seeds)): + if _seeds[iseed].detector.value()=="ECAL_BARREL": + _seeds[iseed].seedingThreshold = cms.double(ecal_thresholds[int(lumi)]*ecal_seed_multiplier) + _clusters = process.particleFlowClusterECALUncorrected.initialClusteringStep.thresholdsByDetector + for icluster in range(0,len(_clusters)): + if _clusters[icluster].detector.value()=="ECAL_BARREL": + _clusters[icluster].gatheringThreshold = cms.double(ecal_thresholds[int(lumi)]) + + return process + +def ecal_complete_aging(process): + if hasattr(process,'g4SimHits'): + process.g4SimHits.ECalSD.AgeingWithSlopeLY = cms.untracked.bool(True) + if hasattr(process,'ecal_digi_parameters'): + process.ecal_digi_parameters.UseLCcorrection = cms.untracked.bool(False) + return process + +def customise_aging_300(process): + process=ageHcal(process,300,5.0e34,"nominal") + process=ageEcal(process,300,5.0e34) + return process + +def customise_aging_1000(process): + process=ageHcal(process,1000,5.0e34,"nominal") + process=turn_off_HE_aging(process) #avoid conflict between HGCal and Hcal in phase2 geom configuration + process=ageEcal(process,1000,5.0e34) + return process + +def customise_aging_3000(process): + process=ageHcal(process,3000,5.0e34,"nominal") + process=turn_off_HE_aging(process) #avoid conflict between HGCal and Hcal in phase2 geom configuration + process=ageEcal(process,3000,5.0e34) + process=agedHGCal(process) + process=agedHFNose(process) + return process + +def customise_aging_3000_ultimate(process): + process=ageHcal(process,3000,7.5e34,"ultimate") + process=turn_off_HE_aging(process) #avoid conflict between HGCal and Hcal in phase2 geom configuration + process=ageEcal(process,3000,7.5e34) + process=agedHGCal(process) + process=agedHFNose(process) + return process + +def customise_aging_4500_ultimate(process): + process=ageHcal(process,4500,7.5e34,"ultimate") + process=turn_off_HE_aging(process) #avoid conflict between HGCal and Hcal in phase2 geom configuration + process=ageEcal(process,4500,7.5e34) + process=agedHGCal(process) + process=agedHFNose(process) + return process diff --git a/data/source_files/clean/cb4a1fcb517b.py b/data/source_files/clean/cb4a1fcb517b.py new file mode 100644 index 0000000000000000000000000000000000000000..d9b4cabd9071c90b544409b5b87e3302450b1278 --- /dev/null +++ b/data/source_files/clean/cb4a1fcb517b.py @@ -0,0 +1,336 @@ +########################################################################## +# +# Copyright (c) 2010-2012, Image Engine Design Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * 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. +# +# * Neither the name of Image Engine Design nor the names of any +# other contributors to this software 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 OWNER 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. +# +########################################################################## + +from __future__ import with_statement + +import os +import sys +import shutil +import unittest +import IECore + +class TestBasicPreset( unittest.TestCase ) : + + def testCopy( self ) : + + testObj = IECore.Parameterised( "testParameterised1" ) + testObj.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", True ), + IECore.FloatParameter( "b", "", 1.0 ), + ] + ) + + testObj2 = IECore.Parameterised( "testParameterised2" ) + testObj2.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", False ), + IECore.FloatParameter( "c", "", 0.0 ), + ] + ) + + p = IECore.BasicPreset( testObj, testObj.parameters() ) + + self.assertTrue( p.applicableTo( testObj, testObj.parameters() ) ) + self.assertFalse( p.applicableTo( testObj2, testObj2.parameters() ) ) + + testObj.parameters()["a"].setTypedValue( False ) + testObj.parameters()["b"].setTypedValue( 0.0 ) + + p( testObj, testObj.parameters() ) + + self.assertEqual( testObj.parameters()["a"].getTypedValue(), True ) + self.assertEqual( testObj.parameters()["b"].getTypedValue(), 1.0 ) + + p2 = IECore.BasicPreset( testObj, testObj.parameters(), parameters=( testObj.parameters()["a"], ) ) + + self.assertTrue( p2.applicableTo( testObj, testObj.parameters() ) ) + self.assertTrue( p2.applicableTo( testObj2, testObj.parameters() ) ) + + p2( testObj2, testObj2.parameters() ) + + self.assertEqual( testObj2.parameters()["a"].getTypedValue(), True ) + self.assertEqual( testObj2.parameters()["c"].getTypedValue(), 0.0 ) + + def testLoad( self ) : + + testObj = IECore.Parameterised( "testParameterised1" ) + testObj.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", True ), + IECore.FloatParameter( "b", "", 1.0 ), + ] + ) + + testObj2 = IECore.Parameterised( "testParameterised1" ) + testObj2.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", False ), + IECore.FloatParameter( "c", "", 0.0 ), + ] + ) + + savePath = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "data", "basicPreset" ) ) + + messageHandler = IECore.CapturingMessageHandler() + with messageHandler : + + p = IECore.BasicPreset( os.path.join( savePath, "basicPresetLoadTest", "basicPresetLoadTest-1.cob" ) ) + + self.assertEqual( len( messageHandler.messages ), 0 ) + + self.assertTrue( p.applicableTo( testObj, testObj.parameters() ) ) + self.assertFalse( p.applicableTo( testObj2, testObj2.parameters() ) ) + + testObj.parameters()["a"].setTypedValue( False ) + testObj.parameters()["b"].setTypedValue( 0.0 ) + + p( testObj, testObj.parameters() ) + + self.assertEqual( testObj.parameters()["a"].getTypedValue(), True ) + self.assertEqual( testObj.parameters()["b"].getTypedValue(), 1.0 ) + + def testSave( self ) : + + testObj = IECore.Parameterised( "testParameterised1" ) + testObj.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", True ), + IECore.FloatParameter( "b", "", 1.0 ), + ] + ) + + testObj2 = IECore.Parameterised( "testParameterised1" ) + testObj2.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", False ), + IECore.FloatParameter( "c", "", 0.0 ), + ] + ) + + savePath = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "data", "basicPreset" ) ) + + preset = IECore.BasicPreset( testObj, testObj.parameters() ) + + # Save for the classLoader and check its there, we test the 'loadability' later... + preset.save( savePath, "basicPresetTest" ) + self.assertTrue( os.path.isfile( os.path.join( savePath, "basicPresetTest", "basicPresetTest-1.cob" ) ) ) + self.assertTrue( os.path.isfile( os.path.join( savePath, "basicPresetTest", "basicPresetTest-1.py" ) ) ) + + # save without the classLoader and check its there + preset.save( savePath, "basicPresetTest", classLoadable=False ) + self.assertTrue( os.path.isfile( os.path.join( savePath, "basicPresetTest.cob" ) ) ) + + # reload + p = IECore.BasicPreset( os.path.join( savePath, "basicPresetTest.cob" ) ) + + self.assertTrue( p.applicableTo( testObj, testObj.parameters() ) ) + self.assertFalse( p.applicableTo( testObj2, testObj2.parameters() ) ) + + testObj.parameters()["a"].setTypedValue( False ) + testObj.parameters()["b"].setTypedValue( 0.0 ) + + p( testObj, testObj.parameters() ) + + self.assertEqual( testObj.parameters()["a"].getTypedValue(), True ) + self.assertEqual( testObj.parameters()["b"].getTypedValue(), 1.0 ) + + preset2 = IECore.BasicPreset( testObj, testObj.parameters(), parameters=( testObj.parameters()["a"], ) ) + preset2.save( savePath, "basicPresetTest2", classLoadable=False ) + + #reload + p2 = IECore.BasicPreset( os.path.join( savePath, "basicPresetTest2.cob" ) ) + + self.assertTrue( p2.applicableTo( testObj, testObj.parameters() ) ) + self.assertTrue( p2.applicableTo( testObj2, testObj.parameters() ) ) + + p2( testObj2, testObj2.parameters() ) + + self.assertEqual( testObj2.parameters()["a"].getTypedValue(), True ) + self.assertEqual( testObj2.parameters()["c"].getTypedValue(), 0.0 ) + + def testClassLoader( self ) : + + testObj = IECore.Parameterised( "testParameterised1" ) + testObj.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", True ), + IECore.FloatParameter( "b", "", 1.0 ), + ] + ) + + savePath = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "data", "basicPreset" ) ) + preset = IECore.BasicPreset( testObj, testObj.parameters() ) + preset.save( savePath, "basicPresetTestClassLoader" ) + + # make sure that no messages are emitted during loading + messageHandler = IECore.CapturingMessageHandler() + with messageHandler : + + loader = IECore.ClassLoader( IECore.SearchPath( savePath ) ) + p = loader.load( "basicPresetTestClassLoader" )() + + self.assertEqual( len( messageHandler.messages ), 0 ) + + self.assertTrue( isinstance( p, IECore.BasicPreset ) ) + + p.metadata() + + def testClasses( self ) : + + testObj = IECore.Parameterised( "testParameterised1" ) + testObj.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", True ), + IECore.ClassParameter( "b", "", "IECORE_OP_PATHS", os.path.join( "maths", "multiply" ), 2 ), + ] + ) + + testObj2 = IECore.Parameterised( "testParameterised2" ) + testObj2.parameters().addParameters( + [ + IECore.ClassParameter( "c", "", "IECORE_OP_PATHS" ), + ] + ) + + classes1 = testObj.parameters()["b"].getClass( True ) + classes2 = testObj2.parameters()["c"].getClass( True ) + self.assertNotEqual( classes1[1:], classes2[1:] ) + + p = IECore.BasicPreset( testObj, testObj.parameters()["b"] ) + + self.assertTrue( p.applicableTo( testObj, testObj.parameters()["b"] ) ) + self.assertFalse( p.applicableTo( testObj, testObj.parameters() ) ) + self.assertTrue( p.applicableTo( testObj2, testObj2.parameters()["c"] ) ) + + p( testObj2, testObj2.parameters()["c"] ) + + classes1 = testObj.parameters()["b"].getClass( True ) + classes2 = testObj2.parameters()["c"].getClass( True ) + + self.assertEqual( classes1[1:], classes2[1:] ) + + def testClassVectors( self ) : + + testObj = IECore.Parameterised( "testParameterised1" ) + testObj.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", True ), + IECore.ClassVectorParameter( "b", "", "IECORE_OP_PATHS" ), + ] + ) + + testObj.parameters()["b"].setClasses( + [ + ( "mult", os.path.join( "maths", "multiply" ), 2 ), + ( "coIO", "compoundObjectInOut", 1 ), + ] + ) + + testObj2 = IECore.Parameterised( "testParameterised2" ) + testObj2.parameters().addParameters( + [ + IECore.ClassVectorParameter( "c", "", "IECORE_OP_PATHS" ), + ] + ) + + classes1 = [ c[1:] for c in testObj.parameters()["b"].getClasses( True ) ] + classes2 = [ c[1:] for c in testObj2.parameters()["c"].getClasses( True ) ] + + self.assertNotEqual( classes1, classes2 ) + + p = IECore.BasicPreset( testObj, testObj.parameters()["b"] ) + + self.assertTrue( p.applicableTo( testObj, testObj.parameters()["b"] ) ) + self.assertFalse( p.applicableTo( testObj, testObj.parameters() ) ) + self.assertTrue( p.applicableTo( testObj2, testObj2.parameters()["c"] ) ) + + p( testObj2, testObj2.parameters()["c"] ) + + classes1 = [ c[1:] for c in testObj.parameters()["b"].getClasses( True ) ] + classes2 = [ c[1:] for c in testObj2.parameters()["c"].getClasses( True ) ] + + self.assertEqual( classes1, classes2 ) + + def testCompoundVectorParameter( self ) : + + p = IECore.Parameterised( "test" ) + p.parameters().addParameters( + [ + IECore.BoolParameter( "a", "", False ), + IECore.CompoundVectorParameter( + "c", + "", + members = [ + IECore.StringVectorParameter( "s", "", IECore.StringVectorData() ), + IECore.BoolVectorParameter( "b", "", IECore.BoolVectorData() ), + ] + ) + ] + ) + + p["c"]["s"].setValue( IECore.StringVectorData( [ "1", "2", "3" ] ) ) + p["c"]["b"].setValue( IECore.BoolVectorData( [ True, False, True ] ) ) + + v = p.parameters().getValue().copy() + + preset = IECore.BasicPreset( p, p.parameters() ) + + self.assertTrue( preset.applicableTo( p, p.parameters() ) ) + + p.parameters().setValue( p.parameters().defaultValue ) + self.assertNotEqual( p.parameters().getValue(), v ) + + preset( p, p.parameters() ) + + self.assertEqual( p.parameters().getValue(), v ) + + def tearDown( self ) : + + savePath = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "data", "basicPreset" ) ) + paths = ( + os.path.join( savePath, "basicPresetTest" ), + os.path.join( savePath, "basicPresetTest.cob" ), + os.path.join( savePath, "basicPresetTest2.cob" ), + os.path.join( savePath, "basicPresetTestClassLoader" ), + ) + + for p in paths : + if os.path.isdir( p ) : + shutil.rmtree( p ) + elif os.path.isfile( p ) : + os.remove( p ) + +if __name__ == "__main__": + unittest.main() diff --git a/data/source_files/clean/cdb08f4d273a.py b/data/source_files/clean/cdb08f4d273a.py new file mode 100644 index 0000000000000000000000000000000000000000..7cee8f95a77e8d2ded7b9467b41b6c25c5fb7cdf --- /dev/null +++ b/data/source_files/clean/cdb08f4d273a.py @@ -0,0 +1,75 @@ +# Copyright (c) 2017-present, Facebook, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +############################################################################## + +"""VGG16 from https://arxiv.org/abs/1409.1556.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +from core.config import cfg + + +def add_VGG16_conv5_body(model): + model.Conv('data', 'conv1_1', 3, 64, 3, pad=1, stride=1) + model.Relu('conv1_1', 'conv1_1') + model.Conv('conv1_1', 'conv1_2', 64, 64, 3, pad=1, stride=1) + model.Relu('conv1_2', 'conv1_2') + model.MaxPool('conv1_2', 'pool1', kernel=2, pad=0, stride=2) + model.Conv('pool1', 'conv2_1', 64, 128, 3, pad=1, stride=1) + model.Relu('conv2_1', 'conv2_1') + model.Conv('conv2_1', 'conv2_2', 128, 128, 3, pad=1, stride=1) + model.Relu('conv2_2', 'conv2_2') + model.MaxPool('conv2_2', 'pool2', kernel=2, pad=0, stride=2) + model.StopGradient('pool2', 'pool2') + model.Conv('pool2', 'conv3_1', 128, 256, 3, pad=1, stride=1) + model.Relu('conv3_1', 'conv3_1') + model.Conv('conv3_1', 'conv3_2', 256, 256, 3, pad=1, stride=1) + model.Relu('conv3_2', 'conv3_2') + model.Conv('conv3_2', 'conv3_3', 256, 256, 3, pad=1, stride=1) + model.Relu('conv3_3', 'conv3_3') + model.MaxPool('conv3_3', 'pool3', kernel=2, pad=0, stride=2) + model.Conv('pool3', 'conv4_1', 256, 512, 3, pad=1, stride=1) + model.Relu('conv4_1', 'conv4_1') + model.Conv('conv4_1', 'conv4_2', 512, 512, 3, pad=1, stride=1) + model.Relu('conv4_2', 'conv4_2') + model.Conv('conv4_2', 'conv4_3', 512, 512, 3, pad=1, stride=1) + model.Relu('conv4_3', 'conv4_3') + model.MaxPool('conv4_3', 'pool4', kernel=2, pad=0, stride=2) + model.Conv('pool4', 'conv5_1', 512, 512, 3, pad=1, stride=1) + model.Relu('conv5_1', 'conv5_1') + model.Conv('conv5_1', 'conv5_2', 512, 512, 3, pad=1, stride=1) + model.Relu('conv5_2', 'conv5_2') + model.Conv('conv5_2', 'conv5_3', 512, 512, 3, pad=1, stride=1) + blob_out = model.Relu('conv5_3', 'conv5_3') + return blob_out, 512, 1. / 16. + + +def add_VGG16_roi_fc_head(model, blob_in, dim_in, spatial_scale): + model.RoIFeatureTransform( + blob_in, + 'pool5', + blob_rois='rois', + method=cfg.FAST_RCNN.ROI_XFORM_METHOD, + resolution=7, + sampling_ratio=cfg.FAST_RCNN.ROI_XFORM_SAMPLING_RATIO, + spatial_scale=spatial_scale + ) + model.FC('pool5', 'fc6', dim_in * 7 * 7, 4096) + model.Relu('fc6', 'fc6') + model.FC('fc6', 'fc7', 4096, 4096) + blob_out = model.Relu('fc7', 'fc7') + return blob_out, 4096 diff --git a/data/source_files/clean/d199807b678d.py b/data/source_files/clean/d199807b678d.py new file mode 100644 index 0000000000000000000000000000000000000000..862a6e4ef7c112a1f58f960d0cfe8a4298a64c51 --- /dev/null +++ b/data/source_files/clean/d199807b678d.py @@ -0,0 +1,119 @@ +from typing import Dict, List, Any + +from ..df.types import Definition +from ..df.base import op +from ..util.data import traverse_get + +MAPPING = Definition(name="mapping", primitive="map") +MAPPING_TRAVERSE = Definition(name="mapping_traverse", primitive="List[str]") +MAPPING_KEY = Definition(name="key", primitive="str") +MAPPING_VALUE = Definition(name="value", primitive="generic") + + +@op( + name="dffml.mapping.extract", + inputs={"mapping": MAPPING, "traverse": MAPPING_TRAVERSE}, + outputs={"value": MAPPING_VALUE}, +) +def mapping_extract_value(mapping: Dict[str, Any], traverse: List[str]): + """ + Extracts value from a given mapping. + + Parameters + ---------- + mapping : dict + The mapping to extract the value from. + traverse : list[str] + A list of keys to traverse through the mapping dictionary and extract the values. + + Returns + ------- + dict + A dictionary containing the value of the keys. + + Examples + -------- + + >>> import asyncio + >>> from dffml import * + >>> + >>> dataflow = DataFlow.auto(mapping_extract_value, GetSingle) + >>> + >>> dataflow.seed.append( + ... Input( + ... value=[mapping_extract_value.op.outputs["value"].name], + ... definition=GetSingle.op.inputs["spec"], + ... ) + ... ) + >>> inputs = [ + ... Input( + ... value={"key1": {"key2": 42}}, + ... definition=mapping_extract_value.op.inputs["mapping"], + ... ), + ... Input( + ... value=["key1", "key2"], + ... definition=mapping_extract_value.op.inputs["traverse"], + ... ), + ... ] + >>> + >>> async def main(): + ... async for ctx, result in MemoryOrchestrator.run(dataflow, inputs): + ... print(result) + >>> + >>> asyncio.run(main()) + {'value': 42} + """ + return {"value": traverse_get(mapping, *traverse)} + + +@op( + name="dffml.mapping.create", + inputs={"key": MAPPING_KEY, "value": MAPPING_VALUE}, + outputs={"mapping": MAPPING}, +) +def create_mapping(key: str, value: Any): + """ + Creates a mapping of a given key and value. + + Parameters + ---------- + key : str + The key for the mapping. + value : Any + The value for the mapping. + + Returns + ------- + dict + A dictionary containing the mapping created. + + Examples + -------- + + >>> import asyncio + >>> from dffml import * + >>> + >>> dataflow = DataFlow.auto(create_mapping, GetSingle) + >>> dataflow.seed.append( + ... Input( + ... value=[create_mapping.op.outputs["mapping"].name], + ... definition=GetSingle.op.inputs["spec"], + ... ) + ... ) + >>> inputs = [ + ... Input( + ... value="key1", definition=create_mapping.op.inputs["key"], + ... ), + ... Input( + ... value=42, definition=create_mapping.op.inputs["value"], + ... ), + ... ] + >>> + >>> async def main(): + ... async for ctx, result in MemoryOrchestrator.run(dataflow, inputs): + ... print(result) + >>> + >>> asyncio.run(main()) + {'mapping': {'key1': 42}} + """ + return {"mapping": {key: value}} diff --git a/data/source_files/clean/d2e8b7aa1e82.py b/data/source_files/clean/d2e8b7aa1e82.py new file mode 100644 index 0000000000000000000000000000000000000000..863c0ed7e6b8dca169d56f2c58a602b033d4bb29 --- /dev/null +++ b/data/source_files/clean/d2e8b7aa1e82.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Author: Florian Boudin +# Date: 10-02-2018 + +"""ExpandRank keyphrase extraction model. + +Graph-based ranking approach to keyphrase extraction described in: + +* Xiaojun Wan and Jianguo Xiao. + Single Document Keyphrase Extraction Using Neighborhood Knowledge. + *In proceedings of AAAI*, pages 855-860, 2008. + +""" + +from __future__ import print_function +from __future__ import division +from __future__ import unicode_literals +from __future__ import absolute_import + +from onmt.keyphrase.pke.unsupervised import SingleRank +from onmt.keyphrase.pke.base import LoadFile + +import networkx as nx +import logging + + +class ExpandRank(SingleRank): + """ExpandRank keyphrase extraction model. + + Parameterized example:: + + import pke + import string + from nltk.corpus import stopwords + + # 1. create an ExpandRank extractor. + extractor = pke.unsupervised.ExpandRank() + + # 2. load the content of the document. + extractor.load_document(input='path/to/input.xml') + + # 3. select the the longest sequences of nouns and adjectives, that do + # not contain punctuation marks or stopwords as candidates. + pos = {'NOUN', 'PROPN', 'ADJ'} + stoplist = list(string.punctuation) + stoplist += ['-lrb-', '-rrb-', '-lcb-', '-rcb-', '-lsb-', '-rsb-'] + stoplist += stopwords.words('english') + extractor.candidate_selection(pos=pos, stoplist=stoplist) + + # 4. weight the candidates using the sum of their word's scores that are + # computed using random walk. In the graph, nodes are words (nouns + # and adjectives only) that are connected if they occur in a window + # of 10 words. A set of extra documents should be provided to expand + # the graph. + expanded_documents = [('path/to/input1.xml', similarity1), + ('path/to/input2.xml', similarity2)] + extractor.candidate_weighting(window=10, + pos=pos, + expanded_documents=expanded_documents, + format='corenlp') + + # 5. get the 10-highest scored candidates as keyphrases + keyphrases = extractor.get_n_best(n=10) + + """ + + def __init__(self): + """ Redefining initializer for ExpandRank. """ + + super(ExpandRank, self).__init__() + + def expand_word_graph(self, + input_file, + similarity, + window=10, + pos=None): + """Expands the word graph using the given document. + + Args: + input_file (str): path to the input file. + similarity (float): similarity for weighting edges. + window (int): the window within the sentence for connecting two + words in the graph, defaults to 10. + pos (set): the set of valid pos for words to be considered as nodes + in the graph, defaults to ('NOUN', 'PROPN', 'ADJ'). + """ + + # define default pos tags set + if pos is None: + pos = {'NOUN', 'PROPN', 'ADJ'} + + # initialize document loader + doc = LoadFile() + + # read document + doc.load_document(input=input_file, + language=self.language, + normalization=self.normalization) + + # flatten document and initialize nodes + sequence = [] + + for sentence in doc.sentences: + for j, node in enumerate(sentence.stems): + if node not in self.graph and sentence.pos[j] in pos: + self.graph.add_node(node) + sequence.append((node, sentence.pos[j])) + + # loop through sequence to build the edges in the graph + for j, node_1 in enumerate(sequence): + for k in range(j + 1, min(j + window, len(sequence))): + node_2 = sequence[k] + if node_1[1] in pos and node_2[1] in pos \ + and node_1[0] != node_2[0]: + if not self.graph.has_edge(node_1[0], node_2[0]): + self.graph.add_edge(node_1[0], node_2[0], weight=0) + self.graph[node_1[0]][node_2[0]]['weight'] += similarity + + def candidate_weighting(self, + window=10, + pos=None, + expanded_documents=None, + normalized=False): + """Candidate ranking using random walk. + + Args: + window (int): the window within the sentence for connecting two + words in the graph, defaults to 10. + pos (set): the set of valid pos for words to be considered as nodes + in the graph, defaults to ('NOUN', 'PROPN', 'ADJ'). + expanded_documents (list): the set of documents to expand the graph, + should be a list of tuples (input_path, similarity). Defaults to + empty list, i.e. no expansion. + normalized (False): normalize keyphrase score by their length, + defaults to False. + """ + + # define default pos tags set + if pos is None: + pos = {'NOUN', 'PROPN', 'ADJ'} + + if expanded_documents is None: + expanded_documents = [] + logging.warning('No neighbor documents provided for ExpandRank.') + + # build the word graph + self.build_word_graph(window=window, pos=pos) + + # expand the word graph + for input_file, similarity in expanded_documents: + self.expand_word_graph(input_file=input_file, + similarity=similarity, + window=window, + pos=pos) + + # compute the word scores using random walk + w = nx.pagerank_scipy(self.graph, alpha=0.85, weight='weight') + + # loop through the candidates + for k in self.candidates.keys(): + tokens = self.candidates[k].lexical_form + self.weights[k] = sum([w[t] for t in tokens]) + if normalized: + self.weights[k] /= len(tokens) diff --git a/data/source_files/clean/d3728f31c0db.py b/data/source_files/clean/d3728f31c0db.py new file mode 100644 index 0000000000000000000000000000000000000000..8a58853ac66bc8f5b8cfad78774a49e43b593fba --- /dev/null +++ b/data/source_files/clean/d3728f31c0db.py @@ -0,0 +1,69 @@ +# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood +# Copyright (c) 2009 The Hewlett-Packard Development Company +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# 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; +# neither the name of the copyright holders 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 +# OWNER 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. + +from slicc.ast.DeclAST import DeclAST +from slicc.symbols.Type import Type + +class TypeDeclAST(DeclAST): + def __init__(self, slicc, type_ast, pairs, field_asts): + super(TypeDeclAST, self).__init__(slicc, pairs) + + self.type_ast = type_ast + self.field_asts = field_asts + + def __repr__(self): + return "[TypeDecl: %r]" % (self.type_ast) + + def files(self, parent=None): + if "external" in self: + return set() + + if parent: + ident = "%s_%s" % (parent, self.type_ast.ident) + else: + ident = self.type_ast.ident + return set(("%s.hh" % ident, "%s.cc" % ident)) + + def generate(self): + ident = str(self.type_ast) + machine = self.symtab.state_machine + + # Make the new type + new_type = Type(self.symtab, ident, self.location, self.pairs, + self.state_machine) + + if machine: + machine.addType(new_type) + + self.symtab.newSymbol(new_type) + self.symtab.pushFrame() + + # Add all of the fields of the type to it + for field in self.field_asts: + field.generate(new_type) + + self.symtab.popFrame() diff --git a/data/source_files/clean/d3c7051a19d9.py b/data/source_files/clean/d3c7051a19d9.py new file mode 100644 index 0000000000000000000000000000000000000000..0ad33111935325f80d27dfada02fe97074254f24 --- /dev/null +++ b/data/source_files/clean/d3c7051a19d9.py @@ -0,0 +1,56 @@ +# Copyright 2016-present CERN – European Organization for Nuclear Research +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from datetime import datetime + +from qf_lib.common.tickers.tickers import Ticker +from qf_lib.containers.dataframe.prices_dataframe import PricesDataFrame + + +class FutureContract(object): + """ Class representing a single future contract. + + The FutureContract is a simple class representing one futures contract. The FutureContract objects are used by the + FuturesChain, in order to provide the contracts chaining possibilities. It requires 3 parameters: ticker, which is + the symbol of the specific future contract (e.g. BloombergFutureTicker(“CTZ9 Comdty”)), expiration date of the + contract and a PricesDataFrame, containing dates with price field values. + + Parameters + ---------- + ticker: Ticker + symbol of the future contract + exp_date: datetime + expiration date + data: PricesDataFrame + data frame containing dates with price fields values + """ + def __init__(self, ticker: Ticker, exp_date: datetime, data: PricesDataFrame): + self.ticker = ticker + self.exp_date = exp_date + self.data = data + + def __str__(self): + return 'Contract: ticker: {}, expiration date: {}'.format( + self.ticker, self.exp_date) + + def __eq__(self, other): + if self is other: + return True + + if not isinstance(other, FutureContract): + return False + + return (self.ticker, self.exp_date, self.data) == (other.ticker, other.exp_date, other.data) + + def __hash__(self): + return hash((self.ticker, self.exp_date, self.data)) diff --git a/data/source_files/clean/d48ae4dcf1bd.py b/data/source_files/clean/d48ae4dcf1bd.py new file mode 100644 index 0000000000000000000000000000000000000000..76f8632c56e75a6a31f710898b1568e855cfd849 --- /dev/null +++ b/data/source_files/clean/d48ae4dcf1bd.py @@ -0,0 +1,295 @@ +# coding: spec + +from interactor.commander.store import store, load_commands + +from photons_app.mimic.event import Events +from photons_app import helpers as hp + +from photons_canvas.points.simple_messages import Set64 + +from unittest import mock +import pytest + + +@pytest.fixture() +def store_clone(): + load_commands() + return store.clone() + + +@pytest.fixture() +def final_future(): + fut = hp.create_future() + try: + yield fut + finally: + fut.cancel() + + +@pytest.fixture() +async def sender(devices, final_future): + async with devices.for_test(final_future) as sender: + yield sender + + +@pytest.fixture() +async def make_server(store_clone, server_wrapper, FakeTime, MockedCallLater, sender, final_future): + with FakeTime() as t: + async with MockedCallLater(t) as m: + async with server_wrapper(store_clone, sender, final_future) as server: + yield server, m + + +@pytest.fixture() +def server(make_server): + return make_server[0] + + +@pytest.fixture() +def m(make_server): + return make_server[1] + + +@pytest.fixture(autouse=True) +def set_async_timeout(request): + request.applymarker(pytest.mark.async_timeout(15)) + + +describe "Animation Commands": + + async it "can get info and help", server, m: + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/info"}, + json_output={"animations": {}, "paused": []}, + ) + + got = await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/help"}, + ) + assert b"Available animations include" in got + assert b"* dice" in got + assert b"To see options for a particular animation, run this again" in got + + got = await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/help", "args": {"animation_name": "dice"}}, + ) + assert b"dice animation" in got + assert b"This animation has the following options:" in got + assert b"colour range options" in got + + async it "can control an animation", server, m: + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/info"}, + json_output={"animations": {}, "paused": []}, + ) + + identity = "first" + got = await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/start", "args": {"identity": identity}}, + ) + + assert "animations" in got + assert got["animations"] == [identity] + assert got["started"] == identity + + identity2 = "second" + got = await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/start", "args": {"identity": identity2}}, + ) + + assert "animations" in got + identities = [identity, identity2] + assert got["animations"] == identities + assert got["started"] == identity2 + + info = await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/info"}, + ) + assert info == {"animations": {identity: mock.ANY, identity2: mock.ANY}, "paused": []} + + # pause + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/pause", "args": {"pause": identity}}, + json_output={"animations": identities, "paused": [identity], "pausing": [identity]}, + ) + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/pause", "args": {"pause": identity2}}, + json_output={ + "animations": identities, + "paused": identities, + "pausing": [identity2], + }, + ) + + # resume + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/resume", "args": {"resume": identity2}}, + json_output={ + "animations": identities, + "paused": [identity], + "resuming": [identity2], + }, + ) + + # pause multiple + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/pause", "args": {"pause": identities}}, + json_output={"animations": identities, "paused": identities, "pausing": identities}, + ) + + # resume + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/resume", "args": {"resume": identities}}, + json_output={ + "animations": identities, + "paused": [], + "resuming": identities, + }, + ) + + # pause + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/pause", "args": {"pause": identity}}, + json_output={"animations": identities, "paused": [identity], "pausing": [identity]}, + ) + + # info + info = await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/info"}, + ) + assert info["animations"] == {identity: mock.ANY, identity2: mock.ANY} + assert info["paused"] == [identity] + + # stop + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/stop", "args": {"stop": identity}}, + json_output={ + "animations": [identity, identity2], + "paused": [identity], + "stopping": [identity], + }, + ) + + await m.add(0.5) + + # info + info = await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/info"}, + ) + assert info["animations"] == {identity2: mock.ANY} + assert info["paused"] == [] + + async it "pausing an animation actually pauses the animation", devices, server, m: + tile = devices["tile"] + io = tile.io["MEMORY"] + store = devices.store(tile) + store.clear() + + first_set_64 = tile.attrs.event_waiter.wait_for_incoming(io, Set64) + + # start + got = await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/start", "args": {"animations": [["balls", {"every": 3}]]}}, + ) + identity = got["started"] + + await first_set_64 + now = store.count(Events.INCOMING(tile, io, pkt=Set64)) + assert now > 0 + await m.add(5) + now2 = store.count(Events.INCOMING(tile, io, pkt=Set64)) + assert now2 > now + + identity = got["started"] + await m.add(5) + assert store.count(Events.INCOMING(tile, io, pkt=Set64)) > now + + # pause + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/pause", "args": {"pause": [identity]}}, + ) + await m.add(5) + store.clear() + await m.add(5) + assert store.count(Events.INCOMING(tile, io, pkt=Set64)) == 0 + + # resume + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/resume", "args": {"resume": [identity]}}, + ) + + await m.add(5) + assert store.count(Events.INCOMING(tile, io, pkt=Set64)) > 0 + + # stop + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/stop", "args": {"stop": [identity]}}, + ) + store.clear() + await m.add(5) + store.clear() + + await m.add(5) + assert store.count(Events.INCOMING(tile, io, pkt=Set64)) == 0 + + # info + await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/info"}, + json_output={"animations": {}, "paused": []}, + ) + + async it "can get information", server, m: + # start + got = await server.assertCommand( + "/v1/lifx/command", + {"command": "animation/start", "args": {"animations": [["balls", {"every": 0.3}]]}}, + ) + identity = got["started"] + + info = await server.assertCommand("/v1/lifx/command", {"command": "animation/info"}) + + assert info["paused"] == [] + + assert identity in info["animations"] + assert info["animations"][identity]["animations_ran"] == 1 + assert info["animations"][identity]["current_animation"] == { + "name": "balls", + "options": { + "ball_colors": "", + "fade_amount": 0.02, + "num_balls": 5, + "rate": " 1>", + }, + "started": mock.ANY, + } + + assert info["animations"][identity]["options"]["combined"] + assert "unlocked" in info["animations"][identity]["options"]["pauser"] + assert info["animations"][identity]["options"]["noisy_network"] == 0 + + specific = await server.assertCommand( + "/v1/lifx/command", {"command": "animation/info", "args": {"identity": identity}} + ) + info["animations"][identity]["current_animation"]["started"] = mock.ANY + assert info["animations"][identity] == specific diff --git a/data/source_files/clean/d4a9d78d0281.py b/data/source_files/clean/d4a9d78d0281.py new file mode 100644 index 0000000000000000000000000000000000000000..d4c7b73306f8c0594f64a791f8292624d0ac8d82 --- /dev/null +++ b/data/source_files/clean/d4a9d78d0281.py @@ -0,0 +1,233 @@ +import time +import os +import sys +import shutil +import json +import argparse +from zipfile import ZipFile +from contextlib import contextmanager +from datetime import datetime +from Tests.private_build.upload_packs_private import download_and_extract_index, update_index_with_priced_packs, \ + extract_packs_artifacts +from Tests.Marketplace.marketplace_services import init_storage_client +from Tests.scripts.utils.log_util import install_logging +from Tests.scripts.utils import logging_wrapper as logging + +MAX_SECONDS_TO_WAIT_FOR_LOCK = 600 +LOCK_FILE_PATH = 'lock.txt' + + +@contextmanager +def lock_and_unlock_dummy_index(public_storage_bucket, dummy_index_lock_path): + try: + acquire_dummy_index_lock(public_storage_bucket, dummy_index_lock_path) + yield + except Exception: + logging.exception("Error in dummy index lock context manager.") + finally: + release_dummy_index_lock(public_storage_bucket, dummy_index_lock_path) + + +def change_pack_price_to_zero(path_to_pack_metadata): + with open(path_to_pack_metadata, 'r') as pack_metadata_file: + pack_metadata = json.load(pack_metadata_file) + + pack_metadata['price'] = 0 + with open(path_to_pack_metadata, 'w') as pack_metadata_file: + json.dump(pack_metadata, pack_metadata_file, indent=4) + + +def change_packs_price_to_zero(public_index_folder_path): + paths_to_packs_in_merged_index = [pack_dir.path for pack_dir in os.scandir(public_index_folder_path) if + pack_dir.is_dir()] + for path_to_pack in paths_to_packs_in_merged_index: + path_to_pack_metadata = os.path.join(path_to_pack, 'metadata.json') + change_pack_price_to_zero(path_to_pack_metadata) + + +def merge_private_index_into_public_index(public_index_folder_path, private_index_folder_path): + packs_in_private_index = [pack_dir.name for pack_dir in os.scandir(private_index_folder_path) if pack_dir.is_dir()] + for pack_name in packs_in_private_index: + path_to_pack_in_private_index = os.path.join(private_index_folder_path, pack_name) + path_to_pack_in_public_index = os.path.join(public_index_folder_path, pack_name) + shutil.copy(path_to_pack_in_private_index, path_to_pack_in_public_index) + + +def upload_modified_index(public_index_folder_path, extract_destination_path, public_ci_dummy_index_blob, build_number, + private_packs): + """Upload updated index zip to cloud storage. + + Args: + public_index_folder_path (str): public index folder full path. + extract_destination_path (str): extract folder full path. + public_ci_dummy_index_blob (Blob): google cloud storage object that represents the dummy index.zip blob. + build_number (str): circleCI build number, used as an index revision. + private_packs (list): List of private packs and their price. + + """ + with open(os.path.join(public_index_folder_path, "index.json"), "w+") as index_file: + for private_pack in private_packs: + private_pack['price'] = 0 + index = { + 'revision': build_number, + 'modified': datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ'), + 'packs': private_packs + } + json.dump(index, index_file, indent=4) + + index_zip_name = os.path.basename(public_index_folder_path) + index_zip_path = shutil.make_archive(base_name=public_index_folder_path, format="zip", + root_dir=extract_destination_path, base_dir=index_zip_name) + try: + public_ci_dummy_index_blob.reload() + public_ci_dummy_index_blob.cache_control = "no-cache,max-age=0" # disabling caching for index blob + public_ci_dummy_index_blob.upload_from_filename(index_zip_path) + + logging.success("Finished uploading index.zip to storage.") + except Exception: + logging.exception("Failed in uploading index. Mismatch in index file generation.") + sys.exit(1) + finally: + shutil.rmtree(public_index_folder_path) + + +def option_handler(): + """Validates and parses script arguments. + + Returns: + Namespace: Parsed arguments object. + + """ + parser = argparse.ArgumentParser(description="Store packs in cloud storage.") + # disable-secrets-detection-start + parser.add_argument('-b', '--public_bucket_name', help="CI public bucket name", required=True) + parser.add_argument('-pb', '--private_bucket_name', help="CI private bucket name", required=True) + parser.add_argument('-s', '--service_account', + help=("Path to gcloud service account, is for circleCI usage. " + "For local development use your personal account and " + "authenticate using Google Cloud SDK by running: " + "`gcloud auth application-default login` and leave this parameter blank. " + "For more information go to: " + "https://googleapis.dev/python/google-api-core/latest/auth.html"), + required=False) + parser.add_argument('-n', '--ci_build_number', + help="CircleCi build number (will be used as hash revision at index file)", required=True) + parser.add_argument('-e', '--extract_public_index_path', help="Full path of folder to extract the public index", + required=True) + parser.add_argument('-sb', '--storage_base_path', help="Storage base path of the directory to upload to.", + required=False) + parser.add_argument('-p', '--pack_name', help="Modified pack to upload to gcs.") + parser.add_argument('-a', '--artifacts_path', help="The full path of packs artifacts", required=True) + parser.add_argument('-ea', '--extract_artifacts_path', help="Full path of folder to extract wanted packs", + required=True) + parser.add_argument('-di', '--dummy_index_dir_path', help="Full path to the dummy index in the private CI bucket", + required=True) + + # disable-secrets-detection-end + return parser.parse_args() + + +def is_dummy_index_locked(public_storage_bucket, dummy_index_lock_path): + dummy_index_lock_blob = public_storage_bucket.blob(dummy_index_lock_path) + return dummy_index_lock_blob.exists() + + +def lock_dummy_index(public_storage_bucket, dummy_index_lock_path): + dummy_index_lock_blob = public_storage_bucket.blob(dummy_index_lock_path) + with open(LOCK_FILE_PATH, 'w') as lock_file: + lock_file.write('locked') + + with open(LOCK_FILE_PATH, 'rb') as lock_file: + dummy_index_lock_blob.upload_from_file(lock_file) + + +def acquire_dummy_index_lock(public_storage_bucket, dummy_index_lock_path): + total_seconds_waited = 0 + while is_dummy_index_locked(public_storage_bucket, dummy_index_lock_path): + if total_seconds_waited >= MAX_SECONDS_TO_WAIT_FOR_LOCK: + logging.critical("Error: Failed too long to acquire lock, exceeded max wait time.") + sys.exit(1) + + if total_seconds_waited % 60 == 0: + # Printing a message every minute to keep the machine from dying due to no output + logging.info("Waiting to acquire lock.") + + total_seconds_waited += 10 + time.sleep(10) + + lock_dummy_index(public_storage_bucket, dummy_index_lock_path) + + +def release_dummy_index_lock(public_storage_bucket, dummy_index_lock_path): + dummy_index_lock_blob = public_storage_bucket.blob(dummy_index_lock_path) + dummy_index_lock_blob.delete() + os.remove(LOCK_FILE_PATH) + + +def add_private_packs_from_dummy_index(private_packs, dummy_index_blob): + downloaded_dummy_index_path = 'current_dummy_index.zip' + extracted_dummy_index_path = 'dummy_index' + dummy_index_json_path = os.path.join(extracted_dummy_index_path, 'index', 'index.json') + dummy_index_blob.download_to_filename(downloaded_dummy_index_path) + os.mkdir(extracted_dummy_index_path) + if os.path.exists(downloaded_dummy_index_path): + with ZipFile(downloaded_dummy_index_path, 'r') as index_zip: + index_zip.extractall(extracted_dummy_index_path) + + with open(dummy_index_json_path) as index_file: + index_json = json.load(index_file) + packs_from_dummy_index = index_json.get('packs', []) + for pack in private_packs: + is_pack_in_dummy_index = any( + [pack['id'] == dummy_index_pack['id'] for dummy_index_pack in packs_from_dummy_index]) + if not is_pack_in_dummy_index: + packs_from_dummy_index.append(pack) + + os.remove(downloaded_dummy_index_path) + shutil.rmtree(extracted_dummy_index_path) + return packs_from_dummy_index + + +def main(): + install_logging('prepare_public_index_for_private_testing.log', logger=logging) + upload_config = option_handler() + service_account = upload_config.service_account + build_number = upload_config.ci_build_number + public_bucket_name = upload_config.public_bucket_name + private_bucket_name = upload_config.private_bucket_name + storage_base_path = upload_config.storage_base_path + extract_public_index_path = upload_config.extract_public_index_path + changed_pack = upload_config.pack_name + extract_destination_path = upload_config.extract_artifacts_path + packs_artifacts_path = upload_config.artifacts_path + dummy_index_dir_path = upload_config.dummy_index_dir_path + dummy_index_path = os.path.join(dummy_index_dir_path, 'index.zip') + dummy_index_lock_path = os.path.join(dummy_index_dir_path, 'lock.txt') + + storage_client = init_storage_client(service_account) + public_storage_bucket = storage_client.bucket(public_bucket_name) + private_storage_bucket = storage_client.bucket(private_bucket_name) + + dummy_index_blob = public_storage_bucket.blob(dummy_index_path) + + with lock_and_unlock_dummy_index(public_storage_bucket, dummy_index_lock_path): + + extract_packs_artifacts(packs_artifacts_path, extract_destination_path) + public_index_folder_path, public_index_blob, _ = download_and_extract_index(public_storage_bucket, + extract_public_index_path, storage_base_path) + + # In order for the packs to be downloaded successfully, their price has to be 0 + change_packs_price_to_zero(public_index_folder_path) + + private_packs, private_index_path, private_index_blob = update_index_with_priced_packs(private_storage_bucket, + extract_destination_path, + public_index_folder_path, + changed_pack, True, + storage_base_path) + private_packs = add_private_packs_from_dummy_index(private_packs, dummy_index_blob) + upload_modified_index(public_index_folder_path, extract_public_index_path, dummy_index_blob, build_number, + private_packs) + + +if __name__ == '__main__': + main() diff --git a/data/source_files/clean/d4c7e80b406d.py b/data/source_files/clean/d4c7e80b406d.py new file mode 100644 index 0000000000000000000000000000000000000000..6ae26b063b0fbd07c2ce06161f218674d84af1d4 --- /dev/null +++ b/data/source_files/clean/d4c7e80b406d.py @@ -0,0 +1,34 @@ +# encoding: utf-8 + +import os + +import roms + +def console_roms_directory(configuration, console): + """ + If the user has specified a custom ROMs directory in consoles.txt then + return that. + + Otherwise, append the shortname of the console to the default ROMs + directory given by config.txt. + """ + if console.custom_roms_directory: + return console.custom_roms_directory + return os.path.join(roms.roms_directory(configuration), console.shortname) + +def path_is_rom(console, path): + """ + This function determines if a given path is actually a valid ROM file. + If a list of extensions is supplied for this console, we check if the path has a valid extension + If no extensions are defined for this console, we just accept any file + """ + if console.extensions == "": + return True + + # Normalize the extension based on the things we validly ignore. + # Aka capitalization, whitespace, and leading dots + normalize = lambda ext: ext.lower().strip().lstrip('.') + + (name, ext) = os.path.splitext(path) + valid_extensions = console.extensions.split(',') + return normalize(ext) in map(normalize, valid_extensions) diff --git a/data/source_files/clean/d6487a9499a5.py b/data/source_files/clean/d6487a9499a5.py new file mode 100644 index 0000000000000000000000000000000000000000..8a5f3213a4f40ad41fa4289061fc1bfb9a560419 --- /dev/null +++ b/data/source_files/clean/d6487a9499a5.py @@ -0,0 +1,220 @@ +# This source code is part of the Biotite package and is distributed +# under the 3-Clause BSD License. Please see 'LICENSE.rst' for further +# information. + +__name__ = "biotite" +__author__ = "Patrick Kunzmann" +__all__ = ["File", "TextFile", "InvalidFileError"] + +import abc +import io +import warnings +from .copyable import Copyable +import copy + + +class File(Copyable, metaclass=abc.ABCMeta): + """ + Base class for all file classes. + The constructor creates an empty file, that can be filled with data + using the class specific setter methods. + Conversely, the class method :func:`read()` reads a file from disk + (or a file-like object from other sources). + In order to write the instance content into a file the + :func:`write()` method is used. + """ + + def __init__(self): + # Support for deprecated instance method 'read()': + # When creating an instance, the 'read()' class method is + # replaced by the instance method, so that subsequent + # 'read()' calls are delegated to the instance method + self.read = self._deprecated_read + + @classmethod + @abc.abstractmethod + def read(cls, file): + """ + Parse a file (or file-like object). + + Parameters + ---------- + file : file-like object or str + The file to be read. + Alternatively a file path can be supplied. + + Returns + ------- + file_object : File + An instance from the respective :class:`File` subclass + representing the parsed file. + """ + pass + + + def _deprecated_read(self, file, *args, **kwargs): + """ + Support for deprecated instance method :func:`read()`. + + Internally this calls the :func:`read()` class method and + replaces the data in `self` with the data from the newly created + :class:`File` object + """ + warnings.warn( + "Instance method 'read()' is deprecated, " + "use class method instead", + DeprecationWarning + ) + cls = type(self) + new_file = cls.read(file, *args, **kwargs) + self.__dict__.update(new_file.__dict__) + + @abc.abstractmethod + def write(self, file): + """ + Write the contents of this :class:`File` object into a file. + + Parameters + ---------- + file_name : file-like object or str + The file to be written to. + Alternatively a file path can be supplied. + """ + pass + + +class TextFile(File, metaclass=abc.ABCMeta): + """ + Base class for all line based text files. + When reading a file, the text content is saved as list of strings, + one for each line. + When writing a file, this list is written into the file. + + Attributes + ---------- + lines : list + List of string representing the lines in the text file. + PROTECTED: Do not modify from outside. + """ + + def __init__(self): + super().__init__() + self.lines = [] + + @classmethod + def read(cls, file, *args, **kwargs): + # File name + if isinstance(file, str): + with open(file, "r") as f: + lines = f.read().splitlines() + # File object + else: + if not is_text(file): + raise TypeError("A file opened in 'text' mode is required") + lines = file.read().splitlines() + file_object = cls(*args, **kwargs) + file_object.lines = lines + return file_object + + @staticmethod + def read_iter(file): + """ + Create an iterator over each line of the given text file. + + Parameters + ---------- + file : file-like object or str + The file to be read. + Alternatively a file path can be supplied. + + Yields + ------ + line : str + The current line in the file. + """ + # File name + if isinstance(file, str): + with open(file, "r") as f: + while True: + line = f.readline() + if not line: + break + yield line + # File object + else: + if not is_text(file): + raise TypeError("A file opened in 'text' mode is required") + while True: + line = file.readline() + if not line: + break + yield line + + def write(self, file): + """ + Write the contents of this object into a file + (or file-like object). + + Parameters + ---------- + file_name : file-like object or str + The file to be written to. + Alternatively a file path can be supplied. + """ + if isinstance(file, str): + with open(file, "w") as f: + f.write("\n".join(self.lines) + "\n") + else: + if not is_text(file): + raise TypeError("A file opened in 'text' mode is required") + file.write("\n".join(self.lines) + "\n") + + def __copy_fill__(self, clone): + super().__copy_fill__(clone) + clone.lines = copy.copy(self.lines) + + def __str__(self): + return("\n".join(self.lines)) + + +class InvalidFileError(Exception): + """ + Indicates that the file is not suitable for the requested action, + either because the file does not contain the required data or + because the file is malformed. + """ + pass + + +def wrap_string(text, width): + """ + A much simpler and hence much more efficient version of + `textwrap.wrap()`. + + This function simply wraps the given `text` after `width` + characters, ignoring sentences, whitespaces, etc. + """ + lines = [] + for i in range(0, len(text), width): + lines.append(text[i : i+width]) + return lines + + +def is_binary(file): + if isinstance(file, io.BufferedIOBase): + return True + # for file wrappers, e.g. 'TemporaryFile' + elif hasattr(file, "file") and isinstance(file.file, io.BufferedIOBase): + return True + else: + return False + + +def is_text(file): + if isinstance(file, io.TextIOBase): + return True + # for file wrappers, e.g. 'TemporaryFile' + elif hasattr(file, "file") and isinstance(file.file, io.TextIOBase): + return True + else: + return False diff --git a/data/source_files/clean/d8ca53f3dc0a.py b/data/source_files/clean/d8ca53f3dc0a.py new file mode 100644 index 0000000000000000000000000000000000000000..d9efa4ffda8cacd286187e29ce110d292c7a1e64 --- /dev/null +++ b/data/source_files/clean/d8ca53f3dc0a.py @@ -0,0 +1,38 @@ +import clpy +import clpy.sparse.base + + +_preamble_atomic_add = ''' +#if __CUDA_ARCH__ < 600 +__device__ double atomicAdd(double* address, double val) { + unsigned long long* address_as_ull = + (unsigned long long*)address; + unsigned long long old = *address_as_ull, assumed; + do { + assumed = old; + old = atomicCAS(address_as_ull, assumed, + __double_as_longlong(val + + __longlong_as_double(assumed))); + } while (assumed != old); + return __longlong_as_double(old); +} +#endif +''' + + +def isintlike(x): + try: + return bool(int(x) == x) + except (TypeError, ValueError): + return False + + +def isscalarlike(x): + return clpy.isscalar(x) or (clpy.sparse.base.isdense(x) and x.ndim == 0) + + +def isshape(x): + if not isinstance(x, tuple) or len(x) != 2: + return False + m, n = x + return isintlike(m) and isintlike(n) diff --git a/data/source_files/clean/de966bcba616.py b/data/source_files/clean/de966bcba616.py new file mode 100644 index 0000000000000000000000000000000000000000..810dcd1a1c119a6c004be66c020243fbafedf1ee --- /dev/null +++ b/data/source_files/clean/de966bcba616.py @@ -0,0 +1,147 @@ +from typing import Optional +from botocore.client import BaseClient +from typing import Dict +from typing import Union +from botocore.paginate import Paginator +from botocore.waiter import Waiter +from typing import List + + +class Client(BaseClient): + def accept_invitation(self, DetectorId: str, InvitationId: str, MasterId: str) -> Dict: + pass + + def archive_findings(self, DetectorId: str, FindingIds: List) -> Dict: + pass + + def can_paginate(self, operation_name: str = None): + pass + + def create_detector(self, Enable: bool, ClientToken: str = None, FindingPublishingFrequency: str = None) -> Dict: + pass + + def create_filter(self, DetectorId: str, FindingCriteria: Dict, Name: str, Action: str = None, ClientToken: str = None, Description: str = None, Rank: int = None) -> Dict: + pass + + def create_ip_set(self, Activate: bool, DetectorId: str, Format: str, Location: str, Name: str, ClientToken: str = None) -> Dict: + pass + + def create_members(self, AccountDetails: List, DetectorId: str) -> Dict: + pass + + def create_sample_findings(self, DetectorId: str, FindingTypes: List = None) -> Dict: + pass + + def create_threat_intel_set(self, Activate: bool, DetectorId: str, Format: str, Location: str, Name: str, ClientToken: str = None) -> Dict: + pass + + def decline_invitations(self, AccountIds: List) -> Dict: + pass + + def delete_detector(self, DetectorId: str) -> Dict: + pass + + def delete_filter(self, DetectorId: str, FilterName: str) -> Dict: + pass + + def delete_invitations(self, AccountIds: List) -> Dict: + pass + + def delete_ip_set(self, DetectorId: str, IpSetId: str) -> Dict: + pass + + def delete_members(self, AccountIds: List, DetectorId: str) -> Dict: + pass + + def delete_threat_intel_set(self, DetectorId: str, ThreatIntelSetId: str) -> Dict: + pass + + def disassociate_from_master_account(self, DetectorId: str) -> Dict: + pass + + def disassociate_members(self, AccountIds: List, DetectorId: str) -> Dict: + pass + + def generate_presigned_url(self, ClientMethod: str = None, Params: Dict = None, ExpiresIn: int = None, HttpMethod: str = None): + pass + + def get_detector(self, DetectorId: str) -> Dict: + pass + + def get_filter(self, DetectorId: str, FilterName: str) -> Dict: + pass + + def get_findings(self, DetectorId: str, FindingIds: List, SortCriteria: Dict = None) -> Dict: + pass + + def get_findings_statistics(self, DetectorId: str, FindingStatisticTypes: List, FindingCriteria: Dict = None) -> Dict: + pass + + def get_invitations_count(self) -> Dict: + pass + + def get_ip_set(self, DetectorId: str, IpSetId: str) -> Dict: + pass + + def get_master_account(self, DetectorId: str) -> Dict: + pass + + def get_members(self, AccountIds: List, DetectorId: str) -> Dict: + pass + + def get_paginator(self, operation_name: str = None) -> Paginator: + pass + + def get_threat_intel_set(self, DetectorId: str, ThreatIntelSetId: str) -> Dict: + pass + + def get_waiter(self, waiter_name: str = None) -> Waiter: + pass + + def invite_members(self, AccountIds: List, DetectorId: str, DisableEmailNotification: bool = None, Message: str = None) -> Dict: + pass + + def list_detectors(self, MaxResults: int = None, NextToken: str = None) -> Dict: + pass + + def list_filters(self, DetectorId: str, MaxResults: int = None, NextToken: str = None) -> Dict: + pass + + def list_findings(self, DetectorId: str, FindingCriteria: Dict = None, MaxResults: int = None, NextToken: str = None, SortCriteria: Dict = None) -> Dict: + pass + + def list_invitations(self, MaxResults: int = None, NextToken: str = None) -> Dict: + pass + + def list_ip_sets(self, DetectorId: str, MaxResults: int = None, NextToken: str = None) -> Dict: + pass + + def list_members(self, DetectorId: str, MaxResults: int = None, NextToken: str = None, OnlyAssociated: str = None) -> Dict: + pass + + def list_threat_intel_sets(self, DetectorId: str, MaxResults: int = None, NextToken: str = None) -> Dict: + pass + + def start_monitoring_members(self, AccountIds: List, DetectorId: str) -> Dict: + pass + + def stop_monitoring_members(self, AccountIds: List, DetectorId: str) -> Dict: + pass + + def unarchive_findings(self, DetectorId: str, FindingIds: List) -> Dict: + pass + + def update_detector(self, DetectorId: str, Enable: bool = None, FindingPublishingFrequency: str = None) -> Dict: + pass + + def update_filter(self, DetectorId: str, FilterName: str, Action: str = None, Description: str = None, FindingCriteria: Dict = None, Rank: int = None) -> Dict: + pass + + def update_findings_feedback(self, DetectorId: str, Feedback: str, FindingIds: List, Comments: str = None) -> Dict: + pass + + def update_ip_set(self, DetectorId: str, IpSetId: str, Activate: bool = None, Location: str = None, Name: str = None) -> Dict: + pass + + def update_threat_intel_set(self, DetectorId: str, ThreatIntelSetId: str, Activate: bool = None, Location: str = None, Name: str = None) -> Dict: + pass diff --git a/data/source_files/clean/debac24ed27a.py b/data/source_files/clean/debac24ed27a.py new file mode 100644 index 0000000000000000000000000000000000000000..81411abc782bf9b1f6f3f22e5119bf12fc73f345 --- /dev/null +++ b/data/source_files/clean/debac24ed27a.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- +"""Classes (Python) to compute the Bandit UCB (Upper Confidence Bound) arm allocation and choosing the arm to pull next. + +See :mod:`moe.bandit.bandit_interface` for further details on bandit. + +""" +import copy + +from abc import abstractmethod + +from moe.bandit.bandit_interface import BanditInterface +from moe.bandit.utils import get_winning_arm_names_from_payoff_arm_name_list, get_equal_arm_allocations + + +class UCBInterface(BanditInterface): + + r"""Implementation of the constructor of UCB (Upper Confidence Bound) and method allocate_arms. The method get_ucb_payoff is implemented in subclass. + + A class to encapsulate the computation of bandit UCB. + The Algorithm: http://moodle.technion.ac.il/pluginfile.php/192340/mod_resource/content/0/UCB.pdf + + To inherit this class, a subclass needs to implement get_ucb_payoff + (see :func:`moe.bandit.ucb.ucb1.UCB1.get_ucb_payoff` for an example), everything else is already implemented. + + See :mod:`moe.bandit.bandit_interface` docs for further details. + + """ + + def __init__( + self, + historical_info, + subtype=None, + ): + """Construct a UCB object. + + :param historical_info: a dictionary of arms sampled + :type historical_info: dictionary of (str, SampleArm()) pairs (see :class:`moe.bandit.data_containers.SampleArm` for more details) + :param subtype: subtype of the UCB bandit algorithm (default: None) + :type subtype: str + + """ + self._historical_info = copy.deepcopy(historical_info) + self._subtype = subtype + + @staticmethod + def get_unsampled_arm_names(arms_sampled): + r"""Compute the set of unsampled arm names based on the given ``arms_sampled``.. + + Throws an exception when arms_sampled is empty. + + :param arms_sampled: a dictionary of arm name to :class:`moe.bandit.data_containers.SampleArm` + :type arms_sampled: dictionary of (str, SampleArm()) pairs + :return: set of names of the unsampled arms + :rtype: frozenset(str) + :raise: ValueError when ``arms_sampled`` are empty. + + """ + if not arms_sampled: + raise ValueError('arms_sampled is empty!') + + unsampled_arm_name_list = [name for name, sampled_arm in arms_sampled.iteritems() if sampled_arm.total == 0] + return frozenset(unsampled_arm_name_list) + + @abstractmethod + def get_ucb_payoff(self, sampled_arm, number_sampled): + r"""Compute the expected upper confidence bound payoff using the UCB subtype formula. + + See definition in subclasses for details. + + :param sampled_arm: a sampled arm + :type sampled_arm: :class:`moe.bandit.data_containers.SampleArm` + :param number_sampled: the overall number of pulls so far + :type number_sampled: int + :return: ucb payoff + :rtype: float64 + :raise: ValueError when ``sampled_arm`` is empty. + + """ + pass + + def allocate_arms(self): + r"""Compute the allocation to each arm given ``historical_info``, running bandit ``subtype`` endpoint. + + Computes the allocation to each arm based on the given subtype, and, historical info. + + Works with k-armed bandits (k >= 1). + + The Algorithm: http://moodle.technion.ac.il/pluginfile.php/192340/mod_resource/content/0/UCB.pdf + + If there is at least one unsampled arm, this method will choose to pull the unsampled arm + (randomly choose an unsampled arm if there are multiple unsampled arms). + If all arms are pulled at least once, this method will pull the optimal arm + (best expected upper confidence bound payoff). + + See :func:`moe.bandit.ucb.ucb_interface.UCBInterface.get_ucb_payoff` for details on how to compute the expected upper confidence bound payoff (expected UCB payoff) + + In case of a tie, the method will split the allocation among the optimal arms. + For example, if we have three arms (arm1, arm2, and arm3) with expected UCB payoff 0.5, 0.5, and 0.1 respectively. + We split the allocation between the optimal arms arm1 and arm2. + + ``{arm1: 0.5, arm2: 0.5, arm3: 0.0}`` + + :return: the dictionary of (arm, allocation) key-value pairs + :rtype: a dictionary of (str, float64) pairs + :raise: ValueError when ``sample_arms`` are empty. + + """ + arms_sampled = self._historical_info.arms_sampled + if not arms_sampled: + raise ValueError('sample_arms are empty!') + + return get_equal_arm_allocations(arms_sampled, self.get_winning_arm_names(arms_sampled)) + + def get_winning_arm_names(self, arms_sampled): + r"""Compute the set of winning arm names based on the given ``arms_sampled``.. + + Throws an exception when arms_sampled is empty. + + :param arms_sampled: a dictionary of arm name to :class:`moe.bandit.data_containers.SampleArm` + :type arms_sampled: dictionary of (str, SampleArm()) pairs + :return: set of names of the winning arms + :rtype: frozenset(str) + :raise: ValueError when ``arms_sampled`` are empty. + + """ + if not arms_sampled: + raise ValueError('arms_sampled is empty!') + + # If there exists an unsampled arm, return the names of the unsampled arms + unsampled_arm_names = self.get_unsampled_arm_names(arms_sampled) + if unsampled_arm_names: + return unsampled_arm_names + + number_sampled = sum([sampled_arm.total for sampled_arm in arms_sampled.itervalues()]) + + ucb_payoff_arm_name_list = [(self.get_ucb_payoff(sampled_arm, number_sampled), arm_name) for arm_name, sampled_arm in arms_sampled.iteritems()] + + return get_winning_arm_names_from_payoff_arm_name_list(ucb_payoff_arm_name_list) diff --git a/data/source_files/clean/e1c3a7ce9e28.py b/data/source_files/clean/e1c3a7ce9e28.py new file mode 100644 index 0000000000000000000000000000000000000000..6ad190f41233de2c7f9d3aa69edc83f906187598 --- /dev/null +++ b/data/source_files/clean/e1c3a7ce9e28.py @@ -0,0 +1,140 @@ +# -*- encoding: utf-8 -*- +# Copyright (c) 2019 European Organization for Nuclear Research (CERN) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from unittest import mock + +from watcher.common import exception +from watcher.decision_engine.datasources import manager +from watcher.decision_engine.model import model_root +from watcher.decision_engine.strategy import strategies +from watcher.tests import base +from watcher.tests.decision_engine.model import faker_cluster_state + + +class TestBaseStrategy(base.TestCase): + + def setUp(self): + super(TestBaseStrategy, self).setUp() + + # fake cluster + self.fake_c_cluster = faker_cluster_state.FakerModelCollector() + + p_c_model = mock.patch.object( + strategies.BaseStrategy, "compute_model", + new_callable=mock.PropertyMock) + self.m_c_model = p_c_model.start() + self.addCleanup(p_c_model.stop) + + p_audit_scope = mock.patch.object( + strategies.BaseStrategy, "audit_scope", + new_callable=mock.PropertyMock) + self.m_audit_scope = p_audit_scope.start() + self.addCleanup(p_audit_scope.stop) + + self.m_audit_scope.return_value = mock.Mock() + + self.m_c_model.return_value = model_root.ModelRoot() + self.strategy = strategies.DummyStrategy(config=mock.Mock()) + + +class TestBaseStrategyDatasource(TestBaseStrategy): + + def setUp(self): + super(TestBaseStrategyDatasource, self).setUp() + self.strategy = strategies.DummyStrategy( + config=mock.Mock(datasources=None)) + + @mock.patch.object(strategies.BaseStrategy, 'osc', None) + @mock.patch.object(manager, 'DataSourceManager') + @mock.patch.object(strategies.base, 'CONF') + def test_global_preference(self, m_conf, m_manager): + """Test if the global preference is used""" + + m_conf.watcher_datasources.datasources = \ + ['gnocchi', 'monasca', 'ceilometer'] + + # Make sure we access the property and not the underlying function. + m_manager.return_value.get_backend.return_value = \ + mock.NonCallableMock() + + # Access the property so that the configuration is read in order to + # get the correct datasource + self.strategy.datasource_backend + + m_manager.assert_called_once_with( + config=m_conf.watcher_datasources, osc=None) + + @mock.patch.object(strategies.BaseStrategy, 'osc', None) + @mock.patch.object(manager, 'DataSourceManager') + @mock.patch.object(strategies.base, 'CONF') + def test_global_preference_reverse(self, m_conf, m_manager): + """Test if the global preference is used with another order""" + + m_conf.watcher_datasources.datasources = \ + ['ceilometer', 'monasca', 'gnocchi'] + + # Make sure we access the property and not the underlying function. + m_manager.return_value.get_backend.return_value = \ + mock.NonCallableMock() + + # Access the property so that the configuration is read in order to + # get the correct datasource + self.strategy.datasource_backend + + m_manager.assert_called_once_with( + config=m_conf.watcher_datasources, osc=None) + + @mock.patch.object(strategies.BaseStrategy, 'osc', None) + @mock.patch.object(manager, 'DataSourceManager') + @mock.patch.object(strategies.base, 'CONF') + def test_strategy_preference_override(self, m_conf, m_manager): + """Test if the global preference can be overridden""" + + datasources = mock.Mock(datasources=['ceilometer']) + + self.strategy = strategies.DummyStrategy( + config=datasources) + + m_conf.watcher_datasources.datasources = \ + ['ceilometer', 'monasca', 'gnocchi'] + + # Access the property so that the configuration is read in order to + # get the correct datasource + self.strategy.datasource_backend + + m_manager.assert_called_once_with( + config=datasources, osc=None) + + +class TestBaseStrategyException(TestBaseStrategy): + + def setUp(self): + super(TestBaseStrategyException, self).setUp() + + def test_exception_model(self): + self.m_c_model.return_value = None + self.assertRaises( + exception.ClusterStateNotDefined, self.strategy.execute) + + def test_exception_stale_cdm(self): + self.fake_c_cluster.set_cluster_data_model_as_stale() + self.m_c_model.return_value = self.fake_c_cluster.cluster_data_model + + self.assertRaises( + # TODO(Dantali0n) This should return ClusterStale, + # improve set_cluster_data_model_as_stale(). + exception.ClusterStateNotDefined, + self.strategy.execute) diff --git a/data/source_files/clean/e22c87d1b034.py b/data/source_files/clean/e22c87d1b034.py new file mode 100644 index 0000000000000000000000000000000000000000..8630b3c80464d13f544a914873b82ed141f94bf1 --- /dev/null +++ b/data/source_files/clean/e22c87d1b034.py @@ -0,0 +1,285 @@ +''' +(c) 2011, 2012 Georgia Tech Research Corporation +This source code is released under the New BSD license. Please see +http://wiki.quantsoftware.org/index.php?title=QSTK_License +for license details. + +Created on Feb 20, 2011 +@author: John Cornwell +@organization: Georgia Institute of Technology +@contact: JohnWCornwellV@gmail.com +@summary: This is an implementation of the 1-KNN algorithm for ranking features quickly. + It uses the knn implementation. +@status: oneKNN functions correctly, optimized to use n^2/2 algorithm. +''' + +import matplotlib.pyplot as plt +from pylab import gca + +import itertools +import string +import numpy as np +import math +import knn + +from time import clock + + +''' +@summary: Query function for 1KNN, return value is a double between 0 and 1. + +@param naData: A 2D numpy array. Each row is a data point with the final column containing the classification. +''' +def oneKnn( naData ): + + + if naData.ndim != 2: + raise Exception( "Data should have two dimensions" ) + + lLen = naData.shape[0] + ''' # of dimensions, subtract one for classification ''' + lDim = naData.shape[1] - 1 + + ''' Start best distances as very large ''' + ldDistances = [1E300] * lLen + llIndexes = [-1] * lLen + + dDistance = 0.0; + + ''' Loop through finding closest neighbors ''' + for i in range( lLen ): + for j in range( i+1, lLen ): + + dDistance = 0.0 + for k in range( 0, lDim ): + dDistance += (naData[i][k] - naData[j][k])**2 + dDistance = math.sqrt( dDistance ) + + ''' Two distances to check, for i's best, and j's best ''' + if dDistance < ldDistances[i]: + ldDistances[i] = dDistance + llIndexes[i] = j + + if dDistance < ldDistances[j]: + ldDistances[j] = dDistance + llIndexes[j] = i + + lCount = 0 + ''' Now count # of matching pairs ''' + for i in range( lLen ): + if naData[i][-1] == naData[ llIndexes[i] ][-1]: + lCount = lCount + 1 + + return float(lCount) / lLen + + +''' Test function to plot results ''' +def _plotResults( naDist1, naDist2, lfOneKnn, lf5Knn ): + plt.clf() + + plt.subplot(311) + plt.scatter( naDist1[:,0], naDist1[:,1] ) + + plt.scatter( naDist2[:,0], naDist2[:,1], color='r' ) + + + #plt.ylabel( 'Feature 2' ) + #plt.xlabel( 'Feature 1' ) + #gca().annotate( '', xy=( .8, 0 ), xytext=( -.3 , 0 ), arrowprops=dict(facecolor='red', shrink=0.05) ) + gca().annotate( '', xy=( .7, 0 ), xytext=( 1.5 , 0 ), arrowprops=dict(facecolor='black', shrink=0.05) ) + plt.title( 'Data Distribution' ) + + plt.subplot(312) + + plt.plot( range( len(lfOneKnn) ), lfOneKnn ) + + plt.ylabel( '1-KNN Value' ) + #plt.xlabel( 'Distribution Merge' ) + + plt.title( '1-KNN Performance' ) + + plt.subplot(313) + + plt.plot( range( len(lf5Knn) ), lf5Knn ) + + plt.ylabel( '% Correct Classification' ) + #plt.xlabel( 'Distribution Merge' ) + + plt.title( '5-KNN Performance' ) + + plt.subplots_adjust() + + plt.show() + +''' Function to plot 2 distributions ''' +def _plotDist( naDist1, naDist2, i ): + plt.clf() + + plt.scatter( naDist1[:,0], naDist1[:,1] ) + + plt.scatter( naDist2[:,0], naDist2[:,1], color='r' ) + + + plt.ylabel( 'Feature 2' ) + plt.xlabel( 'Feature 1' ) + + plt.title( 'Iteration ' + str(i) ) + + plt.show() + +''' Function to test KNN performance ''' +def _knnResult( naData ): + + + ''' Split up data into training/testing ''' + lSplit = naData.shape[0] * .7 + naTrain = naData[:lSplit, :] + naTest = naData[lSplit:, :] + + knn.addEvidence( naTrain.astype(float), 1 ); + + ''' Query with last column omitted and 5 nearest neighbors ''' + naResults = knn.query( naTest[:,:-1], 5, 'mode') + + ''' Count returns which are correct ''' + lCount = 0 + for i, dVal in enumerate(naResults): + if dVal == naTest[i,-1]: + lCount = lCount + 1 + + dResult = float(lCount) / naResults.size + + return dResult + +''' Tests performance of 1-KNN ''' +def _test1(): + + ''' Generate three random samples to show the value of 1-KNN compared to 5KNN learner performance ''' + + for i in range(3): + + ''' Select one of three distributions ''' + if i == 0: + naTest1 = np.random.normal( loc=[0,0],scale=.25,size=[500,2] ) + naTest1 = np.hstack( (naTest1, np.zeros(500).reshape(-1,1) ) ) + + naTest2 = np.random.normal( loc=[1.5,0],scale=.25,size=[500,2] ) + naTest2 = np.hstack( (naTest2, np.ones(500).reshape(-1,1) ) ) + elif i == 1: + naTest1 = np.random.normal( loc=[0,0],scale=.25,size=[500,2] ) + naTest1 = np.hstack( (naTest1, np.zeros(500).reshape(-1,1) ) ) + + naTest2 = np.random.normal( loc=[1.5,0],scale=.1,size=[500,2] ) + naTest2 = np.hstack( (naTest2, np.ones(500).reshape(-1,1) ) ) + else: + naTest1 = np.random.normal( loc=[0,0],scale=.25,size=[500,2] ) + naTest1 = np.hstack( (naTest1, np.zeros(500).reshape(-1,1) ) ) + + naTest2 = np.random.normal( loc=[1.5,0],scale=.25,size=[250,2] ) + naTest2 = np.hstack( (naTest2, np.ones(250).reshape(-1,1) ) ) + + naOrig = np.vstack( (naTest1, naTest2) ) + naBoth = np.vstack( (naTest1, naTest2) ) + + ''' Keep track of runtimes ''' + t = clock() + cOneRuntime = t-t; + cKnnRuntime = t-t; + + lfResults = [] + lfKnnResults = [] + for i in range( 15 ): + #_plotDist( naTest1, naBoth[100:,:], i ) + + t = clock() + lfResults.append( oneKnn( naBoth ) ) + cOneRuntime = cOneRuntime + (clock() - t) + + t = clock() + lfKnnResults.append( _knnResult( np.random.permutation(naBoth) ) ) + cKnnRuntime = cKnnRuntime + (clock() - t) + + naBoth[500:,0] = naBoth[500:,0] - .1 + + print 'Runtime OneKnn:', cOneRuntime + print 'Runtime 5-KNN:', cKnnRuntime + _plotResults( naTest1, naTest2, lfResults, lfKnnResults ) + +''' Tests performance of 1-KNN ''' +def _test2(): + ''' Generate three random samples to show the value of 1-KNN compared to 5KNN learner performance ''' + + np.random.seed( 12345 ) + + ''' Create 5 distributions for each of the 5 attributes ''' + dist1 = np.random.uniform( -1, 1, 1000 ).reshape( -1, 1 ) + dist2 = np.random.uniform( -1, 1, 1000 ).reshape( -1, 1 ) + dist3 = np.random.uniform( -1, 1, 1000 ).reshape( -1, 1 ) + dist4 = np.random.uniform( -1, 1, 1000 ).reshape( -1, 1 ) + dist5 = np.random.uniform( -1, 1, 1000 ).reshape( -1, 1 ) + + lDists = [ dist1, dist2, dist3, dist4, dist5 ] + + ''' All features used except for distribution 4 ''' + distY = np.sin( dist1 ) + np.sin( dist2 ) + np.sin( dist3 ) + np.sin( dist5 ) + distY = distY.reshape( -1, 1 ) + + for i, fVal in enumerate( distY ): + if fVal >= 0: + distY[i] = 1 + else: + distY[i] = 0 + + for i in range( 1, 6 ): + + lsNames = [] + lf1Vals = [] + lfVals = [] + + for perm in itertools.combinations( '12345', i ): + + ''' set test distribution to first element ''' + naTest = lDists[ int(perm[0]) - 1 ] + sPerm = perm[0] + + ''' stack other distributions on ''' + for j in range( 1, len(perm) ): + sPerm = sPerm + str(perm[j]) + naTest = np.hstack( (naTest, lDists[ int(perm[j]) - 1 ] ) ) + + ''' finally stack y values ''' + naTest = np.hstack( (naTest, distY) ) + + lf1Vals.append( oneKnn( naTest ) ) + lfVals.append( _knnResult( np.random.permutation(naTest) ) ) + lsNames.append( sPerm ) + + ''' Plot results ''' + plt1 = plt.bar( np.arange(len(lf1Vals)), lf1Vals, .2, color='r' ) + plt2 = plt.bar( np.arange(len(lfVals)) + 0.2, lfVals, .2, color='b' ) + + plt.legend( (plt1[0], plt2[0]), ('1-KNN', 'KNN, K=5') ) + + plt.ylabel('1-KNN Value/KNN Classification') + plt.xlabel('Feature Set') + plt.title('Combinations of ' + str(i) + ' Features') + + plt.ylim( (0,1) ) + if len(lf1Vals) < 2: + plt.xlim( (-1,1) ) + + gca().xaxis.set_ticks( np.arange(len(lf1Vals)) + .2 ) + gca().xaxis.set_ticklabels( lsNames ) + + plt.show() + + + +if __name__ == '__main__': + + _test1() + #_test2() + + + + diff --git a/data/source_files/clean/e98ebd191cd4.py b/data/source_files/clean/e98ebd191cd4.py new file mode 100644 index 0000000000000000000000000000000000000000..862fb7f41889fb9ebdc1d283480d889b7dbfd294 --- /dev/null +++ b/data/source_files/clean/e98ebd191cd4.py @@ -0,0 +1,114 @@ +# Copyright(c) 2017, Dimitar Venkov +# @5devene, dimitar.ven@gmail.com +# www.badmonkeys.net + +import clr + +clr.AddReference('System.Windows.Forms') +clr.AddReference('System.Drawing') +from System.Drawing import Point, Color, Font +from System.Windows.Forms import * +from cStringIO import StringIO + +str_file = StringIO() +size1 = [30, 23] #height, width + +def tolist(obj1): + if hasattr(obj1,"__iter__"): return obj1 + else: return [obj1] + +def write_str(str1, GCL, str_file=str_file, size1=size1): + ln1 = len(str1) + if ln1 > size1[1]: + size1[1] = ln1 + + str_file.write("%s%s\n" % ("".join(GCL), str1) ) + +def list2str(l1, writeInd, GCL=None, GCint=-1, size1=size1): + if GCL is None: + GCL = [] + GCint += 1 + GCL.append(None) + for i, x in enumerate(l1): + GCL[GCint] = "[%i] " % i if writeInd else " " + if hasattr(x, "Id"): #is element + write_str("%s %i" % (x.ToString(), x.Id), GCL) + elif hasattr(x, "__iter__"): + if not x: + write_str("Empty List", GCL) + else: + list2str(x, writeInd, GCL, GCint, size1) + elif x is None: + write_str("null", GCL) + else: + write_str(x.ToString(), GCL) + size1[0] += 19 + GCL.pop(GCint) + GCint -= 1 + +class WatchBox(Form): + def __init__(self, t1): + self.Text = "SpringNodes: Expandable Watch Window" + self.BackColor = Color.FromArgb(40,40,40) + self.ControlBox = False + self.TopMost = True + self.FormBorderStyle = FormBorderStyle.Sizable + self.StartPosition = FormStartPosition.CenterScreen + self.Resize += self.resize1 + self.text1 = None + + self.button1 = Button() + self.button1.Text = 'Close' + self.button1.Font = Font("Calibri", 10) + self.button1.AutoSize = True + self.button1.Width = 200 + self.button1.ForeColor = Color.FromArgb(234,234,234) + self.button1.Click += self.save + self.Controls.Add(self.button1) + + self.box1 = RichTextBox() + self.box1.Multiline = True + self.box1.Location = Point(5, 5) + self.box1.Font = Font("Calibri", 12) + self.box1.BackColor = Color.FromArgb(53,53,53) + self.box1.ForeColor = Color.FromArgb(234,234,234) + self.box1.DetectUrls = True + self.box1.Text = t1 + self.Controls.Add(self.box1) + + def adjust_controls(self, height1, width1): + if height1 > 800: + height1 = 800 + self.box1.ScrollBars = RichTextBoxScrollBars.Vertical + if width1 < 23 : width1 = 23 + if width1 > 88: width1 = 88 + self.Width = 10 + (width1 + 2) * 9 #character width seems to vary between PCs + self.Height = height1 + 90 + self.box1.Width = self.Width - 17 + self.box1.Height = self.Height - 80 + self.button1.Location = Point(self.Width/2 - 103, self.Height - 70) + + def resize1(self, sender, event): + if self.Width < 210: self.Width = 230 + if self.Height < 120: self.Height = 120 + self.box1.Width = self.Width - 17 + self.box1.Height = self.Height - 80 + self.button1.Location = Point(self.Width/2 - 103, self.Height - 70) + + def save(self, sender, event): + self.text1 = self.box1.Text + self.Close() + +l1 = [] if IN[0] is None else tolist(IN[0]) +list2str(l1, IN[1]) +str_content = str_file.getvalue() +str_file.close() + +width1 = 100 +form = WatchBox(str_content) +form.adjust_controls(*size1) + +Application.Run(form) +OUT = form.text1 +Application.Exit() +form.Dispose() \ No newline at end of file diff --git a/data/source_files/clean/eaa5180db280.py b/data/source_files/clean/eaa5180db280.py new file mode 100644 index 0000000000000000000000000000000000000000..8a1cd65b30b7bbba4f6241ea55e68759c3f56fc4 --- /dev/null +++ b/data/source_files/clean/eaa5180db280.py @@ -0,0 +1,445 @@ +# -*- coding: utf-8 -*- +import os +import json + +from splash import defaults +from splash.utils import to_bytes, path_join_secure +from splash.errors import BadOption + + +class RenderOptions(object): + """ + Options that control how to render a response. + """ + + _REQUIRED = object() + + def __init__(self, data, max_timeout): + self.data = data + self.max_timeout = max_timeout + + @classmethod + def raise_error(cls, argument, description, type='bad_argument', **kwargs): + params = { + 'type': type, + 'argument': argument, + 'description': description + } + params.update(kwargs) + raise BadOption(params) + + @classmethod + def fromrequest(cls, request, max_timeout): + """ + Initialize options from a Twisted Request. + """ + + # 1. GET / POST data + data = {key.decode('utf-8'): values[0].decode('utf-8') for key, values + in request.args.items()} + if request.method == b'POST': + content_type = request.getHeader(b'content-type') + if content_type: + request.content.seek(0) + + # 2. application/json POST data + if b'application/json' in content_type: + try: + content = request.content.read().decode('utf-8') + data.update(json.loads(content)) + except ValueError as e: + raise BadOption({ + 'type': 'invalid_json', + 'description': "Can't decode JSON", + 'message': str(e), + }) + + # 3. js_source from application/javascript POST requests + if b'application/javascript' in content_type: + data['js_source'] = request.content.read().decode('utf-8') + request.content.seek(0) + + data['uid'] = id(request) + return cls(data, max_timeout) + + def get_expired_args(self, cache): + """ + Return a list of argument names from load_args which can't be loaded + """ + return cache.get_missing(self.get_load_args().items()) + + def save_args_to_cache(self, cache): + """ + Process save_args and put all values to cache. + Return a list of (name, key) pairs. + """ + save_args = self.get_save_args() + save_values = [self.data.get(name) for name in save_args] + keys = cache.add_many(save_values) + return list(zip(save_args, keys)) + + def load_cached_args(self, cache): + load_args = self.get_load_args() + for name, key in (load_args or {}).items(): + self.data[name] = cache[key] + + def get(self, name, default=_REQUIRED, type=str, range=None): + value = self.data.get(name) + if value is not None: + if type is not None: + try: + value = type(value) + except ValueError: + msg = "Argument %r has a wrong type" % (name,) + self.raise_error(name, msg, required_type=type.__name__) + if range is not None and not (range[0] <= value <= range[1]): + self.raise_error(name, 'Argument is out of the allowed range', + min=range[0], max=range[1], value=value) + return value + elif default is self._REQUIRED: + self.raise_error(name, 'Required argument is missing: %s' % name, + type='argument_required') + else: + return default + + def _get_bool(self, name, default=_REQUIRED): + return self.get(name, default, type=int, range=(0, 1)) + + def _get_url(self, name, default=_REQUIRED): + url = self.get(name, default, type=None) + if isinstance(url, bytes): + url = url.decode('utf8') + return url + + def get_uid(self): + return self.get('uid') + + def get_url(self): + return self._get_url("url") + + def get_baseurl(self): + return self._get_url("baseurl", default=None) + + def get_wait(self): + return self.get("wait", defaults.WAIT_TIME, type=float, + range=(0, self.get_timeout())) + + def get_timeout(self): + default = min(self.max_timeout, defaults.TIMEOUT) + return self.get("timeout", default, type=float, + range=(0, self.max_timeout)) + + def get_resource_timeout(self): + return self.get("resource_timeout", defaults.RESOURCE_TIMEOUT, + type=float, range=(0, 1e6)) + + def get_response_body(self): + return self._get_bool("response_body", defaults.RESPONSE_BODY_ENABLED) + + def get_request_body(self): + return self._get_bool("request_body", defaults.REQUEST_BODY_ENABLED) + + def get_images(self): + return self._get_bool("images", defaults.AUTOLOAD_IMAGES) + + def get_proxy(self): + return self.get("proxy", default=None) + + def get_js_source(self): + return self.get("js_source", default=None) + + def get_width(self): + return self.get("width", None, type=int, range=(1, defaults.MAX_WIDTH)) + + def get_height(self): + return self.get("height", None, type=int, + range=(1, defaults.MAX_HEIGTH)) + + def get_scale_method(self): + scale_method = self.get("scale_method", defaults.IMAGE_SCALE_METHOD) + allowed_scale_methods = ['raster', 'vector'] + if scale_method not in allowed_scale_methods: + self.raise_error( + argument='scale_method', + description="Invalid 'scale_method': %s" % scale_method, + allowed=allowed_scale_methods, + received=scale_method, + ) + + return scale_method + + def get_quality(self): + return self.get("quality", defaults.JPEG_QUALITY, type=int, range=(0, 100)) + + def get_http_method(self): + method = self.get("http_method", "GET") + if method.upper() not in ["POST", "GET"]: + self.raise_error("http_method", "Unsupported HTTP method {}".format(method)) + return method + + def get_body(self): + body = self.get("body", None, to_bytes) + method = self.get("http_method", "GET").upper() + if method == 'GET' and body: + self.raise_error("body", "GET request should not have a body") + return body + + def get_render_all(self, wait=None): + result = self._get_bool("render_all", False) + if result == 1 and wait == 0: + self.raise_error("render_all", + "Pass non-zero 'wait' to render full webpage") + return result + + def get_lua_source(self): + return self.get("lua_source") + + def get_js_profile(self, js_profiles_path): + js_profile = self.get("js", default=None) + if not js_profile: + return js_profile + + if js_profiles_path is None: + self.raise_error('js', + 'Javascript profiles are not enabled on server') + + try: + profile_dir = path_join_secure(js_profiles_path, js_profile) + except ValueError as e: + # security check fails + print(e) + self.raise_error('js', 'Javascript profile does not exist') + + if not os.path.isdir(profile_dir): + self.raise_error('js', 'Javascript profile does not exist') + + return profile_dir + + def get_headers(self): + headers = self.get("headers", default=None, type=None) + + if headers is None: + return headers + + if not isinstance(headers, (list, tuple, dict)): + self.raise_error( + argument='headers', + description="'headers' must be either a JSON array of " + "(name, value) pairs or a JSON object" + ) + + if isinstance(headers, (list, tuple)): + for el in headers: + string_only = all(isinstance(e, str) for e in el) + if not (isinstance(el, (list, tuple)) and len(el) == 2 and string_only): + self.raise_error( + argument='headers', + description="'headers' must be either a JSON array of " + "(name, value) pairs or a JSON object" + ) + + return headers + + def get_save_args(self): + save_args = self.get("save_args", default=None, type=None) + if save_args is None: + return [] + + if isinstance(save_args, str): + # comma-separated string + save_args = save_args.split(',') + + if not isinstance(save_args, list): + self.raise_error( + argument="save_args", + description="'save_args' should be either a comma-separated " + "string or a JSON array with argument names", + ) + + # JSON array + if not all(isinstance(a, str) for a in save_args): + self.raise_error( + argument="save_args", + description="'save_args' should be a list of strings", + ) + return save_args + + def get_load_args(self): + load_args = self.get("load_args", default=None, type=None) + if load_args is None: + return {} + + if isinstance(load_args, str): + try: + load_args = dict( + kv.split("=", 1) for kv in load_args.split(';') + ) + except ValueError: + self.raise_error( + argument="load_args", + description="'load_args' string value is not a " + "semicolon-separated list of name=hash pairs" + ) + + if not isinstance(load_args, dict): + self.raise_error( + argument="load_args", + description="'load_args' should be either a JSON object with " + "argument hashes or a semicolon-separated list " + "of name=hash pairs" + ) + + return load_args + + def get_viewport(self, wait=None): + viewport = self.get("viewport", defaults.VIEWPORT_SIZE) + + if viewport == 'full': + if wait == 0: + self.raise_error("viewport", + "Pass non-zero 'wait' to render full webpage") + else: + try: + validate_size_str(viewport) + except ValueError as e: + self.raise_error("viewport", str(e)) + return viewport + + def get_filters(self, pool=None, adblock_rules=None): + filter_names = self.get('filters', '') + filter_names = [f for f in filter_names.split(',') if f] + + if pool is None and adblock_rules is None: # skip validation + return filter_names + + if not filter_names: + return filter_names + + if pool is not None: + adblock_rules = pool.network_manager_factory.adblock_rules + if adblock_rules is None: + self.raise_error( + "filters", + "Invalid filter names: %s" % (filter_names,) + ) + + if adblock_rules is not None: + unknown_filters = adblock_rules.get_unknown_filters(filter_names) + if unknown_filters: + self.raise_error( + "filters", + "Invalid filter names: %s" % (unknown_filters,) + ) + + return filter_names + + def get_allowed_domains(self): + allowed_domains = self.get("allowed_domains", default=None) + if allowed_domains is not None: + return allowed_domains.split(',') + + def get_allowed_content_types(self): + content_types = self.get("allowed_content_types", default=['*']) + if isinstance(content_types, str): + content_types = list(filter(None, content_types.split(','))) + return content_types + + def get_forbidden_content_types(self): + content_types = self.get("forbidden_content_types", default=[]) + if isinstance(content_types, str): + content_types = list(filter(None, content_types.split(','))) + return content_types + + def get_html5_media(self): + return self._get_bool("html5_media", defaults.HTML5_MEDIA_ENABLED) + + def get_engine(self, browser_engines_enabled=None): + engine = self.get("engine", default="webkit", type=str) + if engine not in {"webkit", "chromium"}: + self.raise_error("engine", "Unknown render engine {}".format(engine)) + if browser_engines_enabled is not None: + if engine not in browser_engines_enabled: + self.raise_error("engine", "Disabled render engine {}".format(engine)) + return engine + + def get_http2(self): + engine = self.get_engine() + if self.get_engine() == "webkit": + default = defaults.WEBKIT_HTTP2_ENABLED + else: + assert engine == 'chromium' + default = defaults.CHROMIUM_HTTP2_ENABLED + return self._get_bool("http2", default) + + def get_common_params(self, js_profiles_path): + wait = self.get_wait() + return { + 'url': self.get_url(), + 'baseurl': self.get_baseurl(), + 'wait': wait, + 'resource_timeout': self.get_resource_timeout(), + 'viewport': self.get_viewport(wait), + 'render_all': self.get_render_all(wait), + 'images': self.get_images(), + 'headers': self.get_headers(), + 'proxy': self.get_proxy(), + 'js_profile': self.get_js_profile(js_profiles_path), + 'js_source': self.get_js_source(), + 'http_method': self.get_http_method(), + 'body': self.get_body(), + 'html5_media': self.get_html5_media(), + 'http2': self.get_http2(), + # 'lua': self.get_lua(), + } + + def get_image_params(self): + return { + 'width': self.get_width(), + 'height': self.get_height(), + 'scale_method': self.get_scale_method() + } + + def get_png_params(self): + return self.get_image_params() + + def get_jpeg_params(self): + params = {'quality': self.get_quality()} + params.update(self.get_image_params()) + return params + + def get_include_params(self): + return dict( + html=self._get_bool("html", defaults.DO_HTML), + iframes=self._get_bool("iframes", defaults.DO_IFRAMES), + png=self._get_bool("png", defaults.DO_PNG), + jpeg=self._get_bool("jpeg", defaults.DO_JPEG), + script=self._get_bool("script", defaults.SHOW_SCRIPT), + console=self._get_bool("console", defaults.SHOW_CONSOLE), + history=self._get_bool("history", defaults.SHOW_HISTORY), + har=self._get_bool("har", defaults.SHOW_HAR), + ) + + +def validate_size_str(size_str): + """ + Validate size string in WxH format. + + Can be used to validate both viewport and window size strings. Does not + special-case ``'full'`` viewport. Raises ``ValueError`` if anything goes + wrong. + + :param size_str: string to validate + + """ + max_width = defaults.VIEWPORT_MAX_WIDTH + max_heigth = defaults.VIEWPORT_MAX_HEIGTH + max_area = defaults.VIEWPORT_MAX_AREA + try: + w, h = map(int, size_str.split('x')) + except ValueError: + raise ValueError("Invalid viewport format: %s" % size_str) + else: + if not ((0 < w <= max_width) and (0 < h <= max_heigth) and + (w * h < max_area)): + raise ValueError("Viewport (%dx%d, area=%d) is out of range (%dx%d, area=%d)" % + (w, h, w * h, max_width, max_heigth, max_area)) diff --git a/data/source_files/clean/ead1642e9314.py b/data/source_files/clean/ead1642e9314.py new file mode 100644 index 0000000000000000000000000000000000000000..0a85751a815d71753d3e2aaa3ccbd06b815ba219 --- /dev/null +++ b/data/source_files/clean/ead1642e9314.py @@ -0,0 +1,133 @@ +import numpy as np +from sklearn.metrics import roc_curve, auc + + +def compute_error_auc(op_str, gt, pred, prob): + + # classification error + pred_int = (pred > prob).astype(np.int) + class_acc = (pred_int == gt).mean() * 100.0 + + # ROC - area under curve + fpr, tpr, thresholds = roc_curve(gt, pred) + roc_auc = auc(fpr, tpr) + + print op_str, ', class acc = %.3f, ROC AUC = %.3f' % (class_acc, roc_auc) + #return class_acc, roc_auc + + +def calc_average_precision(recall, precision): + + precision[np.isnan(precision)] = 0 + recall[np.isnan(recall)] = 0 + + # pascal'12 way + mprec = np.hstack((0, precision, 0)) + mrec = np.hstack((0, recall, 1)) + for ii in range(mprec.shape[0]-2, -1,-1): + mprec[ii] = np.maximum(mprec[ii], mprec[ii+1]) + inds = np.where(np.not_equal(mrec[1:], mrec[:-1]))[0]+1 + ave_prec = ((mrec[inds] - mrec[inds-1])*mprec[inds]).sum() + + return ave_prec + + +def remove_end_preds(nms_pos_o, nms_prob_o, gt_pos_o, durations, win_size): + # this filters out predictions and gt that are close to the end + # this is a bit messy because of the shapes of gt_pos_o + nms_pos = [] + nms_prob = [] + gt_pos = [] + for ii in range(len(nms_pos_o)): + valid_time = durations[ii] - win_size + gt_cur = gt_pos_o[ii] + if gt_cur.shape[0] > 0: + gt_pos.append(gt_cur[:, 0][gt_cur[:, 0] < valid_time][..., np.newaxis]) + else: + gt_pos.append(gt_cur) + + valid_preds = nms_pos_o[ii] < valid_time + nms_pos.append(nms_pos_o[ii][valid_preds]) + nms_prob.append(nms_prob_o[ii][valid_preds, 0][..., np.newaxis]) + return nms_pos, nms_prob, gt_pos + + +def prec_recall_1d(nms_pos_o, nms_prob_o, gt_pos_o, durations, detection_overlap, win_size, remove_eof=True): + """ + nms_pos, nms_prob, and gt_pos are lists of numpy arrays specifying detection + position, detection probability and GT position. + Each list entry is a different file. + Each entry in nms_pos is an array of length num_entries. For nms_prob and + gt_pos its an array of size (num_entries, 1). + + durations is a array of the length of the number of files with each entry + containing that file length in seconds. + detection_overlap determines if a prediction is counted as correct or not. + win_size is used to ignore predictions and ground truth at the end of an + audio file. + + returns + precision: fraction of retrieved instances that are relevant. + recall: fraction of relevant instances that are retrieved. + """ + + if remove_eof: + # filter out the detections in both ground truth and predictions that are too + # close to the end of the file - dont count them during eval + nms_pos, nms_prob, gt_pos = remove_end_preds(nms_pos_o, nms_prob_o, gt_pos_o, durations, win_size) + else: + nms_pos = nms_pos_o + nms_prob = nms_prob_o + gt_pos = gt_pos_o + + # loop through each file + true_pos = [] # correctly predicts the ground truth + false_pos = [] # says there is a detection but isn't + for ii in range(len(nms_pos)): + num_preds = nms_pos[ii].shape[0] + + if num_preds > 0: # check to make sure it contains something + num_gt = gt_pos[ii].shape[0] + + # for each set of predictions label them as true positive or false positive (i.e. 1-tp) + tp = np.zeros(num_preds) + distance_to_gt = np.abs(gt_pos[ii].ravel()-nms_pos[ii].ravel()[:, np.newaxis]) + within_overlap = (distance_to_gt <= detection_overlap) + + # remove duplicate detections - assign to valid detection with highest prob + for jj in range(num_gt): + inds = np.where(within_overlap[:, jj])[0] # get the indices of all valid predictions + if inds.shape[0] > 0: + max_prob = np.argmax(nms_prob[ii][inds]) + selected_pred = inds[max_prob] + within_overlap[selected_pred, :] = False + tp[selected_pred] = 1 # set as true positives + true_pos.append(tp) + false_pos.append(1 - tp) + + # calc precision and recall - sort confidence in descending order + # PASCAL style + conf = np.concatenate(nms_prob)[:, 0] + num_gt = np.concatenate(gt_pos).shape[0] + inds = np.argsort(conf)[::-1] + true_pos_cat = np.concatenate(true_pos)[inds].astype(float) + false_pos_cat = np.concatenate(false_pos)[inds].astype(float) # i.e. 1-true_pos_cat + + if (conf == conf[0]).sum() == conf.shape[0]: + # all the probability values are the same therefore we will not sweep + # the curve and instead will return a single value + true_pos_sum = true_pos_cat.sum() + false_pos_sum = false_pos_cat.sum() + + recall = np.asarray([true_pos_sum / float(num_gt)]) + precision = np.asarray([(true_pos_sum / (false_pos_sum + true_pos_sum))]) + + elif inds.shape[0] > 0: + # otherwise produce a list of values + true_pos_cum = np.cumsum(true_pos_cat) + false_pos_cum = np.cumsum(false_pos_cat) + + recall = true_pos_cum / float(num_gt) + precision = (true_pos_cum / (false_pos_cum + true_pos_cum)) + + return precision, recall diff --git a/data/source_files/clean/ee7221030be4.py b/data/source_files/clean/ee7221030be4.py new file mode 100644 index 0000000000000000000000000000000000000000..d4b30ff4f1cdba84270695cf02e3415880246ea6 --- /dev/null +++ b/data/source_files/clean/ee7221030be4.py @@ -0,0 +1,154 @@ +import numpy as np +import unittest + +from pydlm.modeler.trends import trend +from pydlm.modeler.seasonality import seasonality +from pydlm.modeler.builder import builder +from pydlm.base.kalmanFilter import kalmanFilter + + +class testKalmanFilter(unittest.TestCase): + + + def setUp(self): + self.kf1 = kalmanFilter(discount=[1]) + self.kf0 = kalmanFilter(discount=[1e-10]) + self.kf11 = kalmanFilter(discount=[1, 1]) + self.trend0 = trend(degree=0, discount=1, w=1.0) + self.trend0_90 = trend(degree=0, discount=0.9, w=1.0) + self.trend0_98 = trend(degree=0, discount=0.98, w=1.0, name='a') + self.trend1 = trend(degree=1, discount=1, w=1.0) + + + def testForwardFilter(self): + dlm = builder() + dlm.add(self.trend0) + dlm.initialize() + self.kf1.predict(dlm.model) + self.assertAlmostEqual(dlm.model.prediction.obs, 0) + + # the prior on the mean is zero, but observe 1, with + # discount = 1, one should expect the filterd mean to be 0.5 + self.kf1.forwardFilter(dlm.model, 1) + self.assertAlmostEqual(dlm.model.obs, 0.5) + self.assertAlmostEqual(dlm.model.prediction.obs, 0) + self.assertAlmostEqual(dlm.model.sysVar, 0.375) + + self.kf1.predict(dlm.model) + self.assertAlmostEqual(dlm.model.obs, 0.5) + self.assertAlmostEqual(dlm.model.prediction.obs, 0.5) + + dlm.initialize() + self.kf0.predict(dlm.model) + self.assertAlmostEqual(dlm.model.prediction.obs, 0) + + # the prior on the mean is zero, but observe 1, with discount = 0 + # one should expect the filtered mean close to 1 + self.kf0.forwardFilter(dlm.model, 1) + self.assertAlmostEqual(dlm.model.obs[0, 0], 1) + self.assertAlmostEqual(dlm.model.prediction.obs[0, 0], 0) + self.assertAlmostEqual(dlm.model.sysVar[0, 0], 0.5) + + self.kf0.predict(dlm.model) + self.assertAlmostEqual(dlm.model.obs[0, 0], 1) + self.assertAlmostEqual(dlm.model.prediction.obs[0, 0], 1) + + + def testForwardFilterMultiDim(self): + dlm = builder() + dlm.add(seasonality(period=2, discount=1, w=1.0)) + dlm.initialize() + + self.kf11.forwardFilter(dlm.model, 1) + self.assertAlmostEqual(dlm.model.state[0][0, 0], 0.33333333333) + self.assertAlmostEqual(dlm.model.state[1][0, 0], -0.33333333333) + + self.kf11.forwardFilter(dlm.model, -1) + self.assertAlmostEqual(dlm.model.state[0][0, 0], -0.5) + self.assertAlmostEqual(dlm.model.state[1][0, 0], 0.5) + + + def testBackwardSmoother(self): + dlm = builder() + dlm.add(self.trend0) + dlm.initialize() + + # with mean being 0 and observe 1 and 0 consectively, one shall + # expect the smoothed mean at 1 will be 1/3, for discount = 1 + self.kf1.forwardFilter(dlm.model, 1) + self.kf1.forwardFilter(dlm.model, 0) + self.kf1.backwardSmoother(dlm.model, \ + np.matrix([[0.5]]), \ + np.matrix([[0.375]])) + self.assertAlmostEqual(dlm.model.obs[0, 0], 1.0/3) + self.assertAlmostEqual(dlm.model.sysVar[0, 0], 0.18518519) + + + # second order trend with discount = 1. The smoothed result should be + # equal to a direct fit on the three data points, 0, 1, -1. Thus, the + # smoothed observation should be 0.0 + def testBackwardSmootherMultiDim(self): + dlm = builder() + dlm.add(self.trend1) + dlm.initialize() + + self.kf11.forwardFilter(dlm.model, 1) + state1 = dlm.model.state + cov1 = dlm.model.sysVar + + self.kf11.forwardFilter(dlm.model, -1) + self.kf11.backwardSmoother(dlm.model, \ + rawState = state1, \ + rawSysVar = cov1) + + self.assertAlmostEqual(dlm.model.obs[0, 0], 0.0) + + + def testMissingData(self): + dlm = builder() + dlm.add(self.trend0) + dlm.initialize() + + self.kf0.forwardFilter(dlm.model, 1) + self.assertAlmostEqual(dlm.model.obs[0, 0], 1.0) + self.assertAlmostEqual(dlm.model.obsVar[0, 0], 1.0) + + self.kf0.forwardFilter(dlm.model, None) + self.assertAlmostEqual(dlm.model.obs[0, 0], 1.0) + self.assertAlmostEqual(dlm.model.obsVar[0, 0]/1e10, 0.5) + + self.kf0.forwardFilter(dlm.model, None) + self.assertAlmostEqual(dlm.model.obs[0, 0], 1.0) + self.assertAlmostEqual(dlm.model.obsVar[0, 0]/1e10, 0.5) + + self.kf0.forwardFilter(dlm.model, 0) + self.assertAlmostEqual(dlm.model.obs[0, 0], 0.0) + + + def testMissingEvaluation(self): + dlm = builder() + dlm.add(self.trend0) + dlm.initialize() + + dlm.model.evaluation = np.matrix([[None]]) + self.kf1.forwardFilter(dlm.model, 1.0, dealWithMissingEvaluation = True) + self.assertAlmostEqual(dlm.model.obs, 0.0) + self.assertAlmostEqual(dlm.model.transition, 1.0) + + + def testEvolveMode(self): + dlm = builder() + dlm.add(self.trend0_90) + dlm.add(self.trend0_98) + dlm.initialize() + + kf2 = kalmanFilter(discount=[0.9, 0.98], + updateInnovation='component', + index=dlm.componentIndex) + kf2.forwardFilter(dlm.model, 1.0) + self.assertAlmostEqual(dlm.model.innovation[0, 1], 0.0) + self.assertAlmostEqual(dlm.model.innovation[1, 0], 0.0) + + +if __name__ == '__main__': + unittest.main() diff --git a/data/source_files/clean/eecf4b89e18a.py b/data/source_files/clean/eecf4b89e18a.py new file mode 100644 index 0000000000000000000000000000000000000000..86c7301877ec46ff5d214d67d7d24373229e91aa --- /dev/null +++ b/data/source_files/clean/eecf4b89e18a.py @@ -0,0 +1,405 @@ +# -*- coding: utf-8 -*- + + +""" + +The `TreeNode` class provides many helper functions that make the work +done in the `BinarySearchTree` class methods much easier. The +constructor for a `TreeNode`, along with these helper functions, is +shown below. As you can see, many of these helper functions help to +classify a node according to its own position as a child, (left or +right) and the kind of children the node has. The `TreeNode` class will +also explicitly keep track of the parent as an attribute of each node. +You will see why this is important when we discuss the implementation +for the `del` operator. + +One of the more interesting methods of `TreeNode` provides an interface +to simply iterate over all the keys in the tree in order. You already +know how to traverse a binary tree in order, using the `inorder` +traversal algorithm. However, because we want our iterator to operate +lazily, in this case we use the `yield` keyword to define our `__iter__` +method as a Python generator. Pay close attention to the `__iter__` +implementation as at first glance you might think that the code is +not recursive: in fact, because `__iter__` overrides the `for x +in` operation for iteration, it really is recursive! + +Our full implementation of `TreeNode` is provided below. It includes +three further methods `find_successor`, `find_min` and `splice_out` +which you can ignore for now as we will return to them later when +discussing deletion. + +""" + + +class TreeNode(object): + + def __init__(self, key, val, left=None, right=None, parent=None): + self.key = key + self.val = val + self.left = left + self.right = right + self.parent = parent + + def is_left_child(self): + return self.parent and self.parent.left == self + + def is_right_child(self): + return self.parent and self.parent.right == self + + def is_leaf(self): + return not (self.right or self.left) + + def has_any_children(self): + return self.right or self.left + + def has_both_children(self): + return self.right and self.left + + def has_one_child(self): + return self.has_any_children() and not self.has_both_children() + + def replace_node_data(self, key, val, left, right): + self.key = key + self.val = val + self.left = left + self.right = right + if self.left: + self.left.parent = self + if self.right: + self.right.parent = self + + def __iter__(self): + if self is None: + return + + if self.left: + # `in` calls `__iter__` so is recursive + for elem in self.left: + yield elem + + yield self.key + + if self.right: + # recurse again + for elem in self.right: + yield elem + + def find_successor(self): + if self.right: + return self.right.find_min() + + if self.parent is None: + return None + + if self.is_left_child(): + return self.parent + + self.parent.right = None + successor = self.parent.find_successor() + self.parent.right = self + return successor + + def find_min(self): + current = self + while current.left: + current = current.left + return current + + def splice_out(self): + if self.is_leaf(): + if self.is_left_child(): + self.parent.left = None + else: + self.parent.right = None + + else: + promoted_node = self.left or self.right + + if self.is_left_child(): + self.parent.left = promoted_node + else: + self.parent.right = promoted_node + promoted_node.parent = self.parent + + """ +Now that we have our `TreeNode` class we can begin to write +`BinarySearchTree` itself. Recall that the core functionality of this +class will be to enable `put`ing to and `get`ing from the tree, so we +begin our implementation with the `put` functionality. + +In order to enable the `tree[1] = 'foo'` style assignment interface for +our `BinarySearchTree` instances, we override the `__setitem__` magic +method. In this method we first check to see if the tree already has a +root. If there is not a root then we create a new `TreeNode` and set it +as the root of the tree. If a root node is already in place then `put` +calls the private, recursive, helper function `_put` to search the tree +according to the following algorithm: + +- Starting at the root of the tree, search the binary tree comparing + the new key to the key in the current node. If the new key is less + than the current node, search the left subtree. If the new key is + greater than the current node, search the right subtree. +- When there is no left (or right) child to search, we have found the + position in the tree where the new node should be installed. +- To add a node to the tree, create a new `TreeNode` object and insert + the object at the point discovered in the previous step. + +The code below shows the Python code for inserting a new +node in the tree. The `_put` function is written recursively following +the steps outlined above. Notice that when a new child is inserted into +the tree, the `node` is passed to the new tree as the parent. + +One important problem with our implementation of insert is that +duplicate keys are not handled properly. As our tree is implemented a +duplicate key will create a new node with the same key value in the +right subtree of the node having the original key. The result of this is +that the node with the new key will never be found during a search. A +better way to handle the insertion of a duplicate key is for the value +associated with the new key to replace the old value. We leave fixing +this bug as an exercise for you. +""" + + +class BinarySearchTree(object): + + TreeNodeClass = TreeNode + + def __init__(self): + self.root = None + self.size = 0 + + def __len__(self): + return self.size + + def __iter__(self): + return self.root.__iter__() + + def __setitem__(self, key, val): + if self.root: + self._put(key, val, self.root) + else: + self.root = self.TreeNodeClass(key, val) + self.size = self.size + 1 + + def _put(self, key, val, node): + if key < node.key: + if node.left: + self._put(key, val, node.left) + else: + node.left = self.TreeNodeClass(key, val, parent=node) + else: + if node.right: + self._put(key, val, node.right) + else: + node.right = self.TreeNodeClass(key, val, parent=node) + + """ + +The diagram below illustrates the process for inserting a new +node into a binary search tree. The lightly shaded nodes indicate the +nodes that were visited during the insertion process. + +![Inserting a node with key = 19](figures/binary-search-tree-put.png) + +Once the tree is constructed, the next task is to implement the +retrieval of a value for a given key. The `get` functionality is even easier +than the `put` functionality because we simply search the tree recursively +until we get to a non-matching leaf node or find a matching key. When +a matching key is found, the value stored in the val of the node is +returned. + +Again, inorder to enable a `tree[1]` retrieval interface, we overload +one of Python’s magic methods—in this case `__getitem__`. Just like with +`__setitem__`, the primary purpose of this method is to handle presence +and absence of a root node, and delegates the core `get` functionality +to `_get`. + +The search code in the `_get` method uses the same logic +for choosing the left or right child as the `_put` method. Notice that +the `_get` method returns a `TreeNode` to `__getitem__`, this allows `_get` to +be used as a flexible helper method for other `BinarySearchTree` methods +that may need to make use of other data from the `TreeNode` besides the +val. + +""" + def __getitem__(self, key): + if self.root: + result = self._get(key, self.root) + if result: + return result.val + raise KeyError + + def _get(self, key, node): + if not node: + return None + if node.key == key: + return node + if key < node.key: + return self._get(key, node.left) + return self._get(key, node.right) + + """ +Using `_get`, we can implement the `in` operation by writing a +`__contains__` method for the `BinarySearchTree`. The `__contains__` +method will simply call `_get` and return `True` if `_get` returns a +value, or `False` if it returns `None`. The code for `__contains__` is +shown below. + +""" + def __contains__(self, key): + return bool(self._get(key, self.root)) + """ + +Finally, we turn our attention to the most challenging method in the +binary search tree: the deletion of a key. The first task is +to find the node to delete by searching the tree. If the tree has more +than one node we search using the `_get` method to find the `TreeNode` +that needs to be removed. If the tree only has a single node, that means +we are removing the root of the tree, but we still must check to make +sure the key of the root matches the key that is to be deleted. In +either case if the key is not found the `del` operator raises an error. + +""" + def delete(self, key): + if self.size > 1: + node_to_remove = self._get(key, self.root) + if node_to_remove: + self.remove(node_to_remove) + self.size = self.size - 1 + return + elif self.size == 1 and self.root.key == key: + self.root = None + self.size = self.size - 1 + return + + raise KeyError('Error, key not in tree') + + def __delitem__(self, key): + self.delete(key) + """ + +Once we’ve found the node containing the key we want to delete, there +are three cases that we must consider: + +1. The node to be deleted has no children +2. The node to be deleted has only one child +3. The node to be deleted has two children + +The first case is straightforward. If +the current node has no children all we need to do is delete the node +and remove the reference to this node in the parent. The code for this +case is shown below. + +""" + def remove(self, node): + if node.is_leaf() and node.parent is not None: + if node == node.parent.left: + node.parent.left = None + else: + node.parent.right = None + """ +![Deleting Node 16, a node without +children](figures/binary-search-tree-delete-1.png) + +The second case is only slightly more complicated (see below). If a node +has only a single child, then we can simply promote the child to take +the place of its parent. The code for this case is shown in the next +code sample. As you look at this code you will see that there are six +cases to consider. Since the cases are symmetric with respect to either +having a left or right child we will just discuss the case where the +current node has a left child. The decision proceeds as follows: + +1. If the current node is a left child then we only need to update the + parent reference of the left child to point to the parent of the + current node, and then update the left child reference of the parent + to point to the current node’s left child. +2. If the current node is a right child then we only need to update the + parent reference of the right child to point to the parent of the + current node, and then update the right child reference of the + parent to point to the current node’s right child. +3. If the current node has no parent, it must be the root. In this case + we will just replace the `key`, `val`, `left`, and + `right` data by calling the `replace_node_data` method on + the root. + +Code for this decision process may look like: +""" + + elif node.has_one_child(): + promoted_node = node.left or node.right + + if node.is_left_child(): + promoted_node.parent = node.parent + node.parent.left = promoted_node + elif node.is_right_child(): + promoted_node.parent = node.parent + node.parent.right = promoted_node + else: + node.replace_node_data( + promoted_node.key, + promoted_node.val, + promoted_node.left, + promoted_node.right + ) + + """ +![Deleting node 25, a node that has a single +child](figures/binary-search-tree-delete-2.png) + +The third case is the most difficult case to handle (see below). If a +node has two children, then it is unlikely that we can simply promote +one of them to take the node’s place. We can, however, search the tree +for a node that can be used to replace the one scheduled for deletion. +What we need is a node that will preserve the binary search tree +relationships for both of the existing left and right subtrees. The node +that will do this is the node that has the next-largest key in the tree. +We call this node the **successor**, and we will look at a way to find +the successor shortly. The successor is guaranteed to have no more than +one child, so we know how to remove it using the two cases for deletion +that we have already implemented. Once the successor has been removed, +we simply put it in the tree in place of the node to be deleted. + +![Deleting node 5, a node with two +children](figures/binary-search-tree-delete-3.png) + +The code to handle the third case is shown below. Notice +that we make use of the helper methods `find_successor` and `find_min` to +find the successor. To remove the successor, we make use of the method +`splice_out`. The reason we use `splice_out` is that it goes directly to +the node we want to splice out and makes the right changes. We could +call `delete` recursively, but then we would waste time re-searching for +the key node. + +""" + else: # has both children + successor = node.find_successor() + if successor: + successor.splice_out() + node.key = successor.key + node.val = successor.val + """ + +The code to find the successor is shown above and as you can see is a +method of the `TreeNode` class. This code makes use of the same +properties of binary search trees that cause an inorder traversal to +print out the nodes in the tree from smallest to largest. There are +three cases to consider when looking for the successor: + +1. If the node has a right child, then the successor is the smallest + key in the right subtree. +2. If the node has no right child and is the left child of its parent, + then the parent is the successor. +3. If the node is the right child of its parent, and itself has no + right child, then the successor to this node is the successor of its + parent, excluding this node. + +The first condition is the only one that matters for us when deleting a +node from a binary search tree. + +The `find_min` method is called to find the minimum key in a subtree. You +should convince yourself that the minimum valued key in any binary +search tree is the leftmost child of the tree. Therefore the `find_min` +method simply follows the `left` references in each node of the +subtree until it reaches a node that does not have a left child. + +""" diff --git a/data/source_files/clean/f15e4bdacd9d.py b/data/source_files/clean/f15e4bdacd9d.py new file mode 100644 index 0000000000000000000000000000000000000000..7ceed4646921c1456f0b28f435da564f3dae7896 --- /dev/null +++ b/data/source_files/clean/f15e4bdacd9d.py @@ -0,0 +1,102 @@ +#!/usr/env/bin python +# -*- coding: utf-8 -*- +import io +import os +import sys +from shutil import rmtree +from setuptools import setup, find_packages, Command + +about = {} +here = os.path.abspath(os.path.dirname(__file__)) +with io.open(os.path.join(here, 'xmind2testcase', '__about__.py'), encoding='utf-8') as f: # custom + exec(f.read(), about) + +with io.open('README.md', encoding='utf-8') as f: + long_description = f.read() + +install_requires = [ # custom + "xmind", + "flask", + "arrow", +] + + +class PyPiCommand(Command): + """ Build and publish this package and make a tag. + Support: python setup.py pypi + Copied from requests_html + """ + user_options = [] + + @staticmethod + def status(s): + """Prints things in green color.""" + print('\033[0;32m{0}\033[0m'.format(s)) + + def initialize_options(self): + """ override + """ + pass + + def finalize_options(self): + """ override + """ + pass + + def run(self): + self.status('Building Source and Wheel (universal) distribution...') + os.system('{0} setup.py sdist bdist_wheel --universal'.format(sys.executable)) + + self.status('Uploading the package to PyPi via Twine...') + os.system('twine upload dist/*') + + self.status('Publishing git tags...') + os.system('git tag v{0}'.format(about['__version__'])) + os.system('git push --tags') + + try: + self.status('Removing current build artifacts...') + rmtree(os.path.join(here, 'dist')) + rmtree(os.path.join(here, 'build')) + rmtree(os.path.join(here, 'xmind2testcase.egg-info')) # custom + except OSError: + pass + + self.status('Congratulations! Upload PyPi and publish git tag successfully...') + sys.exit() + + +setup( + name=about['__title__'], + version=about['__version__'], + description=about['__description__'], + long_description=long_description, + long_description_content_type='text/markdown', + keywords=about['__keywords__'], + author=about['__author__'], + author_email=about['__author_email__'], + url=about['__url__'], + license=about['__license__'], + packages=find_packages(exclude=['tests', 'test.*', 'docs']), # custom + package_data={ # custom + '': ['README.md'], + 'webtool': ['static/*', 'static/css/*', 'static/guide/*', 'templates/*', 'schema.sql'], + }, + install_requires=install_requires, + extras_require={}, + python_requires='>=3.0, <4', # custom + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], + entry_points={ # custom + 'console_scripts': [ + 'xmind2testcase=xmind2testcase.cli:cli_main', + ] + }, + cmdclass={ + # python3 setup.py pypi + 'pypi': PyPiCommand + } +) diff --git a/data/source_files/clean/f1e0f078ce24.py b/data/source_files/clean/f1e0f078ce24.py new file mode 100644 index 0000000000000000000000000000000000000000..7c7958cdc1aac4d3672c25246775beb5da7fc72d --- /dev/null +++ b/data/source_files/clean/f1e0f078ce24.py @@ -0,0 +1,40 @@ + +from cloud.permission import Permission, NeedPermission +from cloud.message import error + +# Define the input output format of the function. +# This information is used when creating the *SDK*. +info = { + 'input_format': { + 'session_id': 'str', + 'field': 'str', + 'value?': 'str', + }, + 'output_format': { + 'user_id?': 'str', + }, + 'description': 'Set my information' +} + + +@NeedPermission(Permission.Run.Auth.set_me) +def do(data, resource): + body = {} + params = data['params'] + user = data['user'] + user_id = user['id'] + + field = params.get('field') + value = params.get('value', None) + + user = resource.db_get_item(user_id) + + # For security + if field in ['id', 'email', 'password_hash', 'salt', 'groups', 'login_method']: + body['error'] = error.FORBIDDEN_MODIFICATION + return body + else: + user[field] = value + resource.db_update_item(user_id, user) + body['user_id'] = user_id + return body diff --git a/data/source_files/clean/f2ca83c0ad80.py b/data/source_files/clean/f2ca83c0ad80.py new file mode 100644 index 0000000000000000000000000000000000000000..6b09e9510878cd225e1975781111b1e1feae8734 --- /dev/null +++ b/data/source_files/clean/f2ca83c0ad80.py @@ -0,0 +1,53 @@ +# Copyright (c) 2020 Xiaomi Corporation (author: Haowen Qiu) + +# See ../../../LICENSE for clarification regarding multiple authors + +import torch +from torch.utils.dlpack import to_dlpack + +from .fsa import Fsa +from _k2host import _is_valid +from _k2host import _is_top_sorted +from _k2host import _is_arc_sorted +from _k2host import _has_self_loops +from _k2host import _is_acyclic +from _k2host import _is_deterministic +from _k2host import _is_epsilon_free +from _k2host import _is_connected +from _k2host import _is_empty + + +def is_valid(fsa: Fsa) -> bool: + return _is_valid(fsa.get_base()) + + +def is_top_sorted(fsa: Fsa) -> bool: + return _is_top_sorted(fsa.get_base()) + + +def is_arc_sorted(fsa: Fsa) -> bool: + return _is_arc_sorted(fsa.get_base()) + + +def has_self_loops(fsa: Fsa) -> bool: + return _has_self_loops(fsa.get_base()) + + +def is_acyclic(fsa: Fsa) -> bool: + return _is_acyclic(fsa.get_base()) + + +def is_deterministic(fsa: Fsa) -> bool: + return _is_deterministic(fsa.get_base()) + + +def is_epsilon_free(fsa: Fsa) -> bool: + return _is_epsilon_free(fsa.get_base()) + + +def is_connected(fsa: Fsa) -> bool: + return _is_connected(fsa.get_base()) + + +def is_empty(fsa: Fsa) -> bool: + return _is_empty(fsa.get_base()) diff --git a/data/source_files/clean/f4d08a001f37.py b/data/source_files/clean/f4d08a001f37.py new file mode 100644 index 0000000000000000000000000000000000000000..7c95786ebe742f8164fbbe85994a95220ade7338 --- /dev/null +++ b/data/source_files/clean/f4d08a001f37.py @@ -0,0 +1,70 @@ +import numpy as np +from skimage.transform import resize +from skimage import measure +from skimage.measure import regionprops + +class OCROnObjects(): + + def __init__(self, license_plate): + character_objects = self.identify_boundary_objects(license_plate) + self.get_regions(character_objects, license_plate) + + def identify_boundary_objects(self, a_license_plate): + labelImage = measure.label(a_license_plate) + character_dimensions = (0.4*a_license_plate.shape[0], 0.85*a_license_plate.shape[0], 0.04*a_license_plate.shape[1], 0.15*a_license_plate.shape[1]) + minHeight, maxHeight, minWidth, maxWidth = character_dimensions + regionLists = regionprops(labelImage) + return regionLists + + def get_regions(self, character_objects, a_license_plate): + """ + used to map out regions where the license plate charcters are + the principle of connected component analysis and labelling + were used + + Parameters: + ----------- + a_license_plate: 2D numpy binary image of the license plate + + Returns: + -------- + a dictionary containing the index + fullscale: 3D array containig 2D array of each character + columnsVal: 1D array the starting column of each character + coordinates: + """ + cord = [] + counter=0 + column_list = [] + character_dimensions = (0.35*a_license_plate.shape[0], 0.60*a_license_plate.shape[0], 0.05*a_license_plate.shape[1], 0.15*a_license_plate.shape[1]) + minHeight, maxHeight, minWidth, maxWidth = character_dimensions + for regions in character_objects: + minimumRow, minimumCol, maximumRow, maximumCol = regions.bbox + character_height = maximumRow - minimumRow + character_width = maximumCol - minimumCol + roi = a_license_plate[minimumRow:maximumRow, minimumCol:maximumCol] + if character_height > minHeight and character_height < maxHeight and character_width > minWidth and character_width < maxWidth: + if counter == 0: + samples = resize(roi, (20,20)) + cord.append(regions.bbox) + counter += 1 + elif counter == 1: + roismall = resize(roi, (20,20)) + samples = np.concatenate((samples[None,:,:], roismall[None,:,:]), axis=0) + cord.append(regions.bbox) + counter+=1 + else: + roismall = resize(roi, (20,20)) + samples = np.concatenate((samples[:,:,:], roismall[None,:,:]), axis=0) + cord.append(regions.bbox) + column_list.append(minimumCol) + if len(column_list) == 0: + self.candidates = {} + else: + self.candidates = { + 'fullscale': samples, + 'coordinates': np.array(cord), + 'columnsVal': column_list + } + + return self.candidates \ No newline at end of file diff --git a/data/source_files/clean/f5291c280a95.py b/data/source_files/clean/f5291c280a95.py new file mode 100644 index 0000000000000000000000000000000000000000..6a7328e83cbca070a32d28d91e1af148c593184e --- /dev/null +++ b/data/source_files/clean/f5291c280a95.py @@ -0,0 +1,121 @@ +# Copyright (C) 2020. Huawei Technologies Co., Ltd. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +""" +Run an agent in it's own (independent) process. + +What Agent code does is out of our direct control, we want to avoid any interactions with global state that might be present in the SMARTS process. + +To protect and isolate Agents from any pollution of global state in the main SMARTS process, we spawn Agents in their fresh and independent python process. + +This script is called from within SMARTS to instantiate a remote agent. +The protocal is as follows: + +1. SMARTS calls: worker.py --port 5467 # sets a unique port per agent +2. worker.py will begin listening on port 5467. +3. SMARTS connects to (ip, 5467) as a client. +4. SMARTS calls `build()` rpc with `AgentSpec` as input. +5. worker.py recieves the `AgentSpec` instances and builds the Agent. +6. SMARTS calls `act()` rpc with observation as input and receives the actions as response from worker.py. +""" + +import argparse +import importlib +import logging +import os +import signal +import sys +from concurrent import futures + +import grpc + +from smarts.zoo import worker_pb2_grpc, worker_servicer + +# Front-load some expensive imports as to not block the simulation +modules = [ + "smarts.core.utils.pybullet", + "smarts.core.utils.sumo", + "smarts.core.sumo_road_network", + "numpy", + "sklearn", + "shapely", + "scipy", + "trimesh", + "panda3d", + "gym", + "ray", +] + +for mod in modules: + try: + importlib.import_module(mod) + except ImportError: + if mod == "ray": + print( + "You need to install the ray dependency using pip install -e .[train] first" + ) + if mod == "panda3d": + print( + "You need to install the panda3d dependency using pip install -e .[camera-obs] first" + ) + pass + + +# End front-loaded imports + +logging.basicConfig(level=logging.INFO) +log = logging.getLogger(f"worker.py - pid({os.getpid()})") + + +def serve(port): + ip = "[::]" + server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) + worker_pb2_grpc.add_WorkerServicer_to_server( + worker_servicer.WorkerServicer(), server + ) + server.add_insecure_port(f"{ip}:{port}") + server.start() + log.debug(f"Worker - ip({ip}), port({port}), pid({os.getpid()}): Started serving.") + + def stop_server(unused_signum, unused_frame): + server.stop(0) + log.debug( + f"Worker - ip({ip}), port({port}), pid({os.getpid()}): Received interrupt signal." + ) + + # Catch keyboard interrupt and terminate signal + signal.signal(signal.SIGINT, stop_server) + signal.signal(signal.SIGTERM, stop_server) + + # Wait to receive server termination signal + server.wait_for_termination() + log.debug(f"Worker - ip({ip}), port({port}), pid({os.getpid()}): Server exited") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser("Run an agent in an independent process.") + parser.add_argument( + "--port", + type=int, + required=True, + help="Port to listen for remote client connections.", + ) + + args = parser.parse_args() + serve(args.port) diff --git a/data/source_files/clean/f7bdb845998e.py b/data/source_files/clean/f7bdb845998e.py new file mode 100644 index 0000000000000000000000000000000000000000..812522326c06afbf43f1bd6cee31bd8b7b273277 --- /dev/null +++ b/data/source_files/clean/f7bdb845998e.py @@ -0,0 +1,247 @@ +from app import app +from flask import Flask, request, jsonify, g +import sqlite3 +import os +import json +from random import randint +from flask_jwt_extended import jwt_required +import datetime +from flask_mysqldb import MySQL +mysql = MySQL() + +def get_db(rom): + db = getattr(g, '_database', None) + if db is None: + db = g._database = sqlite3.connect(rom) + return db + +@app.teardown_appcontext +def close_connection(exception): + db = getattr(g, '_database', None) + if db is not None: + db.close() + +def check_value(value, type, rom): + adj='' + tm='' + value=float(value) + m = mysql.connection.cursor() + sql = "SELECT adj, tmp FROM sensors WHERE rom=%s" + m.execute(sql, [rom]) + sensor=m.fetchall() + for adj, tmp in sensor: + tmp=float(tmp) + adj=float(adj) + msg=[] + sql = "SELECT min, max, value1, value2, value3 FROM types WHERE type=%s" + m.execute(sql, [type]) + list=m.fetchall() + msg.append("IN VALUE: %f" % value) + msg.append(list) + m.close() + + if adj: + value=float(value)+(adj) + msg.append("ADJ: %d" % value) + for min, max, v1, v2, v3 in list: + if (value>=float(min)) and (value<=float(max)): + if(value==v1) or (value==v2) or (value==v3): + msg.append("filter 2 back to previous %f" % tmp) + value=tmp + else: + value=float(value) + else: + msg.append("filter 1 back to previous %f" % tmp) + value=tmp + + msg.append("VALUE OUT: %f" % value) + print(msg) + return value + + +def new_db(rom): + rom = rom+'.sql' + conn = sqlite3.connect(app.romdir+rom) + c = conn.cursor() + sql = "SELECT count() FROM sqlite_master WHERE type='table' AND name='def'" + c.execute(sql) + if c.fetchone()[0]==1: + print ("Database %s exists" %rom) + return True + else: + with app.app_context(): + db = get_db(app.romdir+rom) + with app.open_resource('schema/sensors_db_schema.sql', mode='r') as f: + db.cursor().executescript(f.read()) + db.commit() + print ("Database %s created" %rom) + return False + +def insert_db(rom,value): + rom = rom+'.sql' + conn = sqlite3.connect(app.romdir+rom) + c = conn.cursor() + sql = "SELECT count() FROM sqlite_master WHERE type='table' AND name='def'" + c.execute(sql) + if c.fetchone()[0]==1: + data = [value] + sql = "INSERT OR IGNORE INTO def (value) VALUES (?)" + c.execute(sql, data) + conn.commit() + conn.close() + print ("[ nettemp ][ sensor ] Database %s insert ok" %rom) + return True + else: + print ("[ nettemp ][ sensor ] Database %s not exist" %rom) + return False + +def update_sensor_tmp(rom,value): + m = mysql.connection.cursor() + rom1 = [rom] + sql="SELECT count(*) FROM sensors WHERE rom=%s" + m.execute(sql, rom1) + coun=m.fetchone() + if coun[0]==1: + if int(datetime.datetime.now().strftime("%M"))%5==0: + tmp_5ago=value + sql = "UPDATE sensors SET tmp=%s, tmp_5ago=%s, nodata='', time=CURRENT_TIMESTAMP() WHERE rom=%s" + data = [value,tmp_5ago,rom] + else: + sql = "UPDATE sensors SET tmp=%s, nodata='', time=CURRENT_TIMESTAMP() WHERE rom=%s" + data = [value,rom] + m.execute(sql, data) + # stat min max + data = [value, value, rom] + sql = "UPDATE sensors SET stat_min=%s, stat_min_time=CURRENT_TIMESTAMP() WHERE (stat_min>%s OR stat_min is null OR stat_min='0.0') AND rom=%s" + m.execute(sql, data) + sql = "UPDATE sensors SET stat_max=%s, stat_max_time=CURRENT_TIMESTAMP() WHERE (stat_max<%s OR stat_max is null OR stat_max='0.0') AND rom=%s" + m.execute(sql, data) + m.connection.commit() + m.close() + print ("[ nettemp ][ sensor ] Sensor %s updated" %rom) + return True + else: + print ("[ nettemp ][ sensor ] Sensor %s not exist" %rom) + return False + +def delete_db(rom): + rom=rom+'.sql' + if os.path.isfile(app.romdir+rom): + os.remove(rom) + print ("[ nettemp ][ sensor ] Database %s deleted" %rom) + return True + else: + print ("[ nettemp ][ sensor ] Database %s not exist" %rom) + return False + +def delete_sensor(id,rom): + data = [id, rom] + m = mysql.connection.cursor() + sql="DELETE FROM sensors WHERE id=? AND rom=%s" + m.execute(sql, data) + m.connection.commit() + m.close() + delete_db(rom) + print ("[ nettemp ][ sensor ] Sensor %s removed ok" %rom) + +def create_sensor(rom, data, data2, map_settings): + m = mysql.connection.cursor() + rom1 = [rom] + sql = "SELECT count(*) FROM sensors WHERE rom=%s" + m.execute(sql, rom1) + coun = m.fetchone() + if coun[0]==0: + sql = "INSERT INTO sensors (rom,type,device,ip,gpio,i2c,usb,name) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)" + m.execute(sql, data) + sql2 = "UPDATE sensors SET alarm='off', adj='0', charts='on', status='on', ch_group=%s, tmp_min='0', tmp_max='0', minmax='off', stat_min='0', stat_max='0', tmp_5ago='0', fiveago='on', map_id=%s, nodata_time='5', email_delay='10' WHERE rom=%s" + m.execute(sql2, data2) + map = "INSERT INTO maps (type, pos_x, pos_y, map_on, map_id, display_name) VALUES (%s, %s, %s, %s, %s, %s)" + m.execute(map, map_settings) + m.connection.commit() + m.close() + print ("[ nettemp ][ sensor ] Sensor %s added ok" %rom) + else: + print ("[ nettemp ][ sensor ] Sensor %s already exist" %rom) + return None + +def sensor(): + data = request.get_json() + for j in data: + rom = None + if 'rom' in j: + rom=j['rom'] + type = None + if 'type' in j: + type=j['type'] + + device = None + if 'device' in j: + device=j['device'] + + ip = None + if 'ip' in j: + ip = j['ip'] + + gpio = None + if 'gpio' in j: + gpio=j['gpio'] + + i2c = None + if 'i2c' in j: + i2c=j['i2c'] + + usb = None + if 'usb' in j: + usb=j['usb'] + + name = randint(1000,9000) + if 'name' in j: + name=j['name'] + if not j['name']: + name = randint(1000,9000) + + tmp = None + if 'tmp' in j: + tmp=j['tmp'] + + value = None + if 'value' in j: + value=j['value'] + + group = type + if 'group' in j: + group=j['group'] + + map_id = randint(1000,9000) + map_y = randint(50,600) + map_x = randint(50,600) + data = [rom, type, device, ip, gpio, i2c, usb, name] + data2 = [group, map_id, rom] + map_settings = [type, map_y, map_x, 'on', map_id, 'on'] + value=check_value(value, type, rom) + + + if insert_db(rom, value) == False: + new_db(rom) + insert_db(rom,value) + + if update_sensor_tmp(rom,value) == False: + create_sensor(rom,data,data2,map_settings) + update_sensor_tmp(rom,value) + + +@app.route('/sensor', methods=['POST']) +@jwt_required +def url_sensor(): + sensor() + return '', 200 + + +@app.route('/local', methods=['POST']) +def url_localhost(): + if request.remote_addr == '127.0.0.1': + sensor() + return 'Local' + else: + return '', 404 + diff --git a/data/source_files/clean/fa06a1a40d67.py b/data/source_files/clean/fa06a1a40d67.py new file mode 100644 index 0000000000000000000000000000000000000000..0aa0ecacfe2573f92054f8caab4ad37415452b90 --- /dev/null +++ b/data/source_files/clean/fa06a1a40d67.py @@ -0,0 +1,207 @@ +########################################################################## +# +# Copyright (c) 2013, John Haddon. All rights reserved. +# Copyright (c) 2013, Image Engine Design Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# * 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. +# +# * Neither the name of John Haddon nor the names of +# any other contributors to this software 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 OWNER 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. +# +########################################################################## + +import weakref +import imath + +import Gaffer +import GafferUI + +class ColorSwatchPlugValueWidget( GafferUI.PlugValueWidget ) : + + def __init__( self, plugs, **kw ) : + + self.__swatch = GafferUI.ColorSwatch() + + GafferUI.PlugValueWidget.__init__( self, self.__swatch, plugs, **kw ) + + ## \todo How do set maximum height with a public API? + self.__swatch._qtWidget().setMaximumHeight( 20 ) + + self._addPopupMenu( self.__swatch ) + + self.__swatch.buttonPressSignal().connect( Gaffer.WeakMethod( self.__buttonPress ), scoped = False ) + self.__swatch.dragBeginSignal().connect( Gaffer.WeakMethod( self.__dragBegin ), scoped = False ) + self.__swatch.dragEndSignal().connect( Gaffer.WeakMethod( self.__dragEnd ), scoped = False ) + self.__swatch.buttonReleaseSignal().connect( Gaffer.WeakMethod( self.__buttonRelease ), scoped = False ) + + self._updateFromPlugs() + + def setHighlighted( self, highlighted ) : + + GafferUI.PlugValueWidget.setHighlighted( self, highlighted ) + + self.__swatch.setHighlighted( highlighted ) + + def _updateFromPlugs( self ) : + + with self.getContext() : + value = _colorFromPlugs( self.getPlugs() ) + + self.__swatch.setColor( value ) + + def __buttonPress( self, widget, event ) : + + if event.buttons == event.Buttons.Left : + return True + + return False + + def __dragBegin( self, widget, event ) : + + GafferUI.Pointer.setCurrent( "rgba" ) + + return self.__swatch.getColor() + + def __dragEnd( self, widget, event ) : + + GafferUI.Pointer.setCurrent( None ) + + def __buttonRelease( self, widget, event ) : + + if event.button != event.Buttons.Left : + return False + + if not self._editable() : + return False + + _ColorPlugValueDialogue.acquire( self.getPlugs() ) + + return True + +def _colorFromPlugs( plugs ) : + + if not len( plugs ) : + return imath.Color4f( 0 ) + + # ColorSwatch only supports one colour, and doesn't have + # an "indeterminate" state, so when we have multiple plugs + # the best we can do is take an average. + return sum( p.getValue() for p in plugs ) / len( plugs ) + +## \todo Perhaps we could make this a part of the public API? Perhaps we could also make a +# PlugValueDialogue base class to share some of the work with the dialogue made by the +# SplinePlugValueWidget. Or perhaps the `acquire()` here and `NodeSetEditor.acquire()` should +# actually be functionality of CompoundEditor? +class _ColorPlugValueDialogue( GafferUI.ColorChooserDialogue ) : + + def __init__( self, plugs, parentWindow ) : + + GafferUI.ColorChooserDialogue.__init__( + self, + color = _colorFromPlugs( plugs ) + ) + + # we use these to decide which actions to merge into a single undo + self.__lastChangedReason = None + self.__mergeGroupId = 0 + + self.__colorChangedConnection = self.colorChooser().colorChangedSignal().connect( Gaffer.WeakMethod( self.__colorChanged ), scoped = False ) + self.confirmButton.clickedSignal().connect( Gaffer.WeakMethod( self.__buttonClicked ), scoped = False ) + self.cancelButton.clickedSignal().connect( Gaffer.WeakMethod( self.__buttonClicked ), scoped = False ) + + self.__plugs = plugs + self.__initialValues = { p : p.getValue() for p in self.__plugs } + + nodes = { p.node() for p in self.__plugs } + self.__plugSetConnections = [ n.plugSetSignal().connect( Gaffer.WeakMethod( self.__plugSet ), scoped = False ) for n in nodes ] + for node in nodes : + node.parentChangedSignal().connect( Gaffer.WeakMethod( self.__destroy ), scoped = False ) + + plug = next( iter( self.__plugs ) ) + if len( self.__plugs ) == 1 : + self.setTitle( plug.relativeName( plug.ancestor( Gaffer.ScriptNode ) ) ) + else : + self.setTitle( "{} plugs".format( len( self.__plugs ) ) ) + + self.__plugSet( plug ) + + parentWindow.addChildWindow( self, removeOnClose = True ) + + @classmethod + def acquire( cls, plugs ) : + + plug = next( iter( plugs ) ) + + script = plug.node().scriptNode() + scriptWindow = GafferUI.ScriptWindow.acquire( script ) + + for window in scriptWindow.childWindows() : + if isinstance( window, cls ) and window.__plugs == plugs : + window.setVisible( True ) + return window + + window = _ColorPlugValueDialogue( plugs, scriptWindow ) + window.setVisible( True ) + return False + + def __plugSet( self, plug ) : + + if plug in self.__plugs : + with Gaffer.BlockedConnection( self.__colorChangedConnection ) : + self.colorChooser().setColor( _colorFromPlugs( self.__plugs ) ) + + def __colorChanged( self, colorChooser, reason ) : + + if not GafferUI.ColorChooser.changesShouldBeMerged( self.__lastChangedReason, reason ) : + self.__mergeGroupId += 1 + self.__lastChangedReason = reason + + with Gaffer.UndoScope( + next( iter( self.__plugs ) ).ancestor( Gaffer.ScriptNode ), + mergeGroup = "ColorPlugValueDialogue%d%d" % ( id( self, ), self.__mergeGroupId ) + ) : + + with Gaffer.BlockedConnection( self.__plugSetConnections ) : + for plug in self.__plugs : + plug.setValue( self.colorChooser().getColor() ) + + def __buttonClicked( self, button ) : + + if button is self.cancelButton : + with Gaffer.UndoScope( next( iter( self.__plugs ) ).ancestor( Gaffer.ScriptNode ) ) : + for p, v in self.__initialValues.items() : + p.setValue( v ) + + self.parent().removeChild( self ) + # Workaround for https://bugreports.qt-project.org/browse/QTBUG-26761. + assert( not self.visible() ) + GafferUI.WidgetAlgo.keepUntilIdle( self ) + + def __destroy( self, *unused ) : + + self.parent().removeChild( self ) diff --git a/data/source_files/clean/fcd2bf7cb099.py b/data/source_files/clean/fcd2bf7cb099.py new file mode 100644 index 0000000000000000000000000000000000000000..0aa7bee18a6d9f952d21c773ce61328493a8b54b --- /dev/null +++ b/data/source_files/clean/fcd2bf7cb099.py @@ -0,0 +1,213 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# Import Local Modules + +import marvin +from nose.plugins.attrib import attr +from marvin.cloudstackTestCase import cloudstackTestCase +import unittest +from marvin.cloudstackAPI import * +from marvin.lib.utils import * +from marvin.lib.base import * +from marvin.lib.common import * +from marvin.codes import PASS, FAILED, SUCCESS, XEN_SERVER +from marvin.sshClient import SshClient +import requests +requests.packages.urllib3.disable_warnings() +import random +import string +import telnetlib +import os +import urllib.request, urllib.parse, urllib.error +import time +import tempfile +_multiprocess_shared_ = True + + +class TestBrowseUploadTemplate(cloudstackTestCase): + + """ + Tests for browser based upload template feature. Once all issues in test_browse_templates.py are fixed, this should be merged back + """ + @classmethod + def setUpClass(cls): + cls.testClient = super(TestBrowseUploadTemplate, cls).getClsTestClient() + cls.testdata = cls.testClient.getParsedTestDataConfig() + cls.apiclient = cls.testClient.getApiClient() + cls.hypervisor = cls.testClient.getHypervisorInfo() + cls._cleanup = [] + cls.cleanup = [] + + hosts = list_hosts( + cls.apiclient, + type="Routing" + ) + if hosts is None: + cls.SkipTest( + "There are no hypervisor's available. Check list hosts response") + + cls.uploadtemplateformat = "VHD" + cls.templatename = "test" + cls.templatehypervisor = "XenServer" + cls.templateostypeid = 142 + + cls.zone = get_zone(cls.apiclient, cls.testClient.getZoneForTests()) + cls.domain = get_domain(cls.apiclient) + cls.pod = get_pod(cls.apiclient, cls.zone.id) + + cls.account = Account.create( + cls.apiclient, + cls.testdata["account"], + domainid=cls.domain.id + ) + + cls._cleanup = [ + cls.account + ] + + def waitForSystemVMAgent(self, vmname): + timeout = self.testdata["timeout"] + + while True: + list_host_response = list_hosts( + self.apiclient, + name=vmname + ) + + if list_host_response and list_host_response[0].state == 'Up': + break + + if timeout == 0: + raise Exception("Timed out waiting for SSVM agent to be Up") + + time.sleep(self.testdata["sleep"]) + timeout = timeout - 1 + + def destroy_ssvm(self): + + list_ssvm_response = list_ssvms( + self.apiclient, + systemvmtype='secondarystoragevm', + state='Running', + zoneid=self.zone.id + ) + self.assertEqual( + isinstance(list_ssvm_response, list), + True, + "Check list response returns a valid list" + ) + ssvm_response = list_ssvm_response[0] + + old_name = ssvm_response.name + + self.debug("Destroying SSVM: %s" % ssvm_response.id) + cmd = destroySystemVm.destroySystemVmCmd() + cmd.id = ssvm_response.id + self.apiclient.destroySystemVm(cmd) + + timeout = self.testdata["timeout"] + while True: + list_ssvm_response = list_ssvms( + self.apiclient, + zoneid=self.zone.id, + systemvmtype='secondarystoragevm' + ) + if isinstance(list_ssvm_response, list): + if list_ssvm_response[0].state == 'Running': + break + if timeout == 0: + raise Exception("List SSVM call failed!") + + time.sleep(self.testdata["sleep"]) + timeout = timeout - 1 + + ssvm_response = list_ssvm_response[0] + + # Verify Name, Public IP, Private IP and Link local IP + # for newly created SSVM + self.assertNotEqual( + ssvm_response.name, + old_name, + "Check SSVM new name with name of destroyed SSVM" + ) + self.assertEqual( + hasattr(ssvm_response, 'privateip'), + True, + "Check whether SSVM has private IP field" + ) + + self.assertEqual( + hasattr(ssvm_response, 'linklocalip'), + True, + "Check whether SSVM has link local IP field" + ) + + self.assertEqual( + hasattr(ssvm_response, 'publicip'), + True, + "Check whether SSVM has public IP field" + ) + + # Wait for the agent to be up + self.waitForSystemVMAgent(ssvm_response.name) + + return + + @attr(tags = ["advanced", "advancedns", "smoke", "basic"], required_hardware="false") + def test_browser_upload_template_incomplete(self): + """ + Test browser based incomplete template upload, followed by SSVM destroy. Template should go to UploadAbandoned state and get cleaned up. + """ + try: + self.debug("========================= Test browser based incomplete template upload ========================") + + #Only register template, without uploading + cmd = getUploadParamsForTemplate.getUploadParamsForTemplateCmd() + cmd.zoneid = self.zone.id + cmd.format = self.uploadtemplateformat + cmd.name=self.templatename+self.account.name+(random.choice(string.ascii_uppercase)) + cmd.account=self.account.name + cmd.domainid=self.domain.id + cmd.displaytext=cmd.name + cmd.hypervisor=self.templatehypervisor + cmd.ostypeid=self.templateostypeid + template_response=self.apiclient.getUploadParamsForTemplate(cmd) + + #Destroy SSVM, and wait for new one to start + self.destroy_ssvm() + wait_for_cleanup(self.apiclient, ["expunge.delay", "expunge.interval"]) + #Verify that the template is cleaned up as part of sync-up during new SSVM start + list_template_response=Template.list( + self.apiclient, + id=template_response.id, + templatefilter="all", + zoneid=self.zone.id) + self.assertEqual(list_template_response, None, "Template is not cleaned up, some issue with template sync-up") + + except Exception as e: + self.fail("Exception occurred : %s" % e) + return + + @classmethod + def tearDownClass(self): + try: + self.apiclient = super(TestBrowseUploadTemplate, self).getClsTestClient().getApiClient() + cleanup_resources(self.apiclient, self._cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + return diff --git a/data/source_files/clean/fe35435938f5.py b/data/source_files/clean/fe35435938f5.py new file mode 100644 index 0000000000000000000000000000000000000000..81290326c9beb0af3fd98f2bdd52b65974d13cd3 --- /dev/null +++ b/data/source_files/clean/fe35435938f5.py @@ -0,0 +1,329 @@ +# coding=utf-8 +# Copyright 2018 The Google AI Language Team Authors and The HuggingFace Inc. team. +# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" PyTorch - TF 2.0 general utilities.""" + + +import logging +import os +import re + +import numpy + + +logger = logging.getLogger(__name__) + + +def convert_tf_weight_name_to_pt_weight_name(tf_name, start_prefix_to_remove=""): + """ Convert a TF 2.0 model variable name in a pytorch model weight name. + + Conventions for TF2.0 scopes -> PyTorch attribute names conversions: + - '$1___$2' is replaced by $2 (can be used to duplicate or remove layers in TF2.0 vs PyTorch) + - '_._' is replaced by a new level separation (can be used to convert TF2.0 lists in PyTorch nn.ModulesList) + + return tuple with: + - pytorch model weight name + - transpose: boolean indicating weither TF2.0 and PyTorch weights matrices are transposed with regards to each other + """ + tf_name = tf_name.replace(":0", "") # device ids + tf_name = re.sub( + r"/[^/]*___([^/]*)/", r"/\1/", tf_name + ) # '$1___$2' is replaced by $2 (can be used to duplicate or remove layers in TF2.0 vs PyTorch) + tf_name = tf_name.replace( + "_._", "/" + ) # '_._' is replaced by a level separation (can be used to convert TF2.0 lists in PyTorch nn.ModulesList) + tf_name = re.sub(r"//+", "/", tf_name) # Remove empty levels at the end + tf_name = tf_name.split("/") # Convert from TF2.0 '/' separators to PyTorch '.' separators + tf_name = tf_name[1:] # Remove level zero + + # When should we transpose the weights + transpose = bool(tf_name[-1] == "kernel" or "emb_projs" in tf_name or "out_projs" in tf_name) + + # Convert standard TF2.0 names in PyTorch names + if tf_name[-1] == "kernel" or tf_name[-1] == "embeddings" or tf_name[-1] == "gamma": + tf_name[-1] = "weight" + if tf_name[-1] == "beta": + tf_name[-1] = "bias" + + # Remove prefix if needed + tf_name = ".".join(tf_name) + if start_prefix_to_remove: + tf_name = tf_name.replace(start_prefix_to_remove, "", 1) + + return tf_name, transpose + + +##################### +# PyTorch => TF 2.0 # +##################### + + +def load_pytorch_checkpoint_in_tf2_model(tf_model, pytorch_checkpoint_path, tf_inputs=None, allow_missing_keys=False): + """ Load pytorch checkpoints in a TF 2.0 model + """ + try: + import tensorflow as tf # noqa: F401 + import torch # noqa: F401 + except ImportError: + logger.error( + "Loading a PyTorch model in TensorFlow, requires both PyTorch and TensorFlow to be installed. Please see " + "https://pytorch.org/ and https://www.tensorflow.org/install/ for installation instructions." + ) + raise + + pt_path = os.path.abspath(pytorch_checkpoint_path) + logger.info("Loading PyTorch weights from {}".format(pt_path)) + + pt_state_dict = torch.load(pt_path, map_location="cpu") + logger.info("PyTorch checkpoint contains {:,} parameters".format(sum(t.numel() for t in pt_state_dict.values()))) + + return load_pytorch_weights_in_tf2_model( + tf_model, pt_state_dict, tf_inputs=tf_inputs, allow_missing_keys=allow_missing_keys + ) + + +def load_pytorch_model_in_tf2_model(tf_model, pt_model, tf_inputs=None, allow_missing_keys=False): + """ Load pytorch checkpoints in a TF 2.0 model + """ + pt_state_dict = pt_model.state_dict() + + return load_pytorch_weights_in_tf2_model( + tf_model, pt_state_dict, tf_inputs=tf_inputs, allow_missing_keys=allow_missing_keys + ) + + +def load_pytorch_weights_in_tf2_model(tf_model, pt_state_dict, tf_inputs=None, allow_missing_keys=False): + """ Load pytorch state_dict in a TF 2.0 model. + """ + try: + import torch # noqa: F401 + import tensorflow as tf # noqa: F401 + from tensorflow.python.keras import backend as K + except ImportError: + logger.error( + "Loading a PyTorch model in TensorFlow, requires both PyTorch and TensorFlow to be installed. Please see " + "https://pytorch.org/ and https://www.tensorflow.org/install/ for installation instructions." + ) + raise + + if tf_inputs is None: + tf_inputs = tf_model.dummy_inputs + + if tf_inputs is not None: + tf_model(tf_inputs, training=False) # Make sure model is built + + # Adapt state dict - TODO remove this and update the AWS weights files instead + # Convert old format to new format if needed from a PyTorch state_dict + old_keys = [] + new_keys = [] + for key in pt_state_dict.keys(): + new_key = None + if "gamma" in key: + new_key = key.replace("gamma", "weight") + if "beta" in key: + new_key = key.replace("beta", "bias") + if new_key: + old_keys.append(key) + new_keys.append(new_key) + for old_key, new_key in zip(old_keys, new_keys): + pt_state_dict[new_key] = pt_state_dict.pop(old_key) + + # Make sure we are able to load PyTorch base models as well as derived models (with heads) + # TF models always have a prefix, some of PyTorch models (base ones) don't + start_prefix_to_remove = "" + if not any(s.startswith(tf_model.base_model_prefix) for s in pt_state_dict.keys()): + start_prefix_to_remove = tf_model.base_model_prefix + "." + + symbolic_weights = tf_model.trainable_weights + tf_model.non_trainable_weights + tf_loaded_numel = 0 + weight_value_tuples = [] + all_pytorch_weights = set(list(pt_state_dict.keys())) + for symbolic_weight in symbolic_weights: + sw_name = symbolic_weight.name + name, transpose = convert_tf_weight_name_to_pt_weight_name( + sw_name, start_prefix_to_remove=start_prefix_to_remove + ) + + # Find associated numpy array in pytorch model state dict + if name not in pt_state_dict: + if allow_missing_keys: + continue + raise AttributeError("{} not found in PyTorch model".format(name)) + + array = pt_state_dict[name].numpy() + + if transpose: + array = numpy.transpose(array) + + if len(symbolic_weight.shape) < len(array.shape): + array = numpy.squeeze(array) + elif len(symbolic_weight.shape) > len(array.shape): + array = numpy.expand_dims(array, axis=0) + + try: + assert list(symbolic_weight.shape) == list(array.shape) + except AssertionError as e: + e.args += (symbolic_weight.shape, array.shape) + raise e + + tf_loaded_numel += array.size + # logger.warning("Initialize TF weight {}".format(symbolic_weight.name)) + + weight_value_tuples.append((symbolic_weight, array)) + all_pytorch_weights.discard(name) + + K.batch_set_value(weight_value_tuples) + + if tf_inputs is not None: + tf_model(tf_inputs, training=False) # Make sure restore ops are run + + logger.info("Loaded {:,} parameters in the TF 2.0 model.".format(tf_loaded_numel)) + + logger.info("Weights or buffers not loaded from PyTorch model: {}".format(all_pytorch_weights)) + + return tf_model + + +##################### +# TF 2.0 => PyTorch # +##################### + + +def load_tf2_checkpoint_in_pytorch_model(pt_model, tf_checkpoint_path, tf_inputs=None, allow_missing_keys=False): + """ Load TF 2.0 HDF5 checkpoint in a PyTorch model + We use HDF5 to easily do transfer learning + (see https://github.com/tensorflow/tensorflow/blob/ee16fcac960ae660e0e4496658a366e2f745e1f0/tensorflow/python/keras/engine/network.py#L1352-L1357). + """ + try: + import tensorflow as tf # noqa: F401 + import torch # noqa: F401 + except ImportError: + logger.error( + "Loading a TensorFlow model in PyTorch, requires both PyTorch and TensorFlow to be installed. Please see " + "https://pytorch.org/ and https://www.tensorflow.org/install/ for installation instructions." + ) + raise + + import transformers + + logger.info("Loading TensorFlow weights from {}".format(tf_checkpoint_path)) + + # Instantiate and load the associated TF 2.0 model + tf_model_class_name = "TF" + pt_model.__class__.__name__ # Add "TF" at the beggining + tf_model_class = getattr(transformers, tf_model_class_name) + tf_model = tf_model_class(pt_model.config) + + if tf_inputs is None: + tf_inputs = tf_model.dummy_inputs + + if tf_inputs is not None: + tf_model(tf_inputs, training=False) # Make sure model is built + + tf_model.load_weights(tf_checkpoint_path, by_name=True) + + return load_tf2_model_in_pytorch_model(pt_model, tf_model, allow_missing_keys=allow_missing_keys) + + +def load_tf2_model_in_pytorch_model(pt_model, tf_model, allow_missing_keys=False): + """ Load TF 2.0 model in a pytorch model + """ + weights = tf_model.weights + + return load_tf2_weights_in_pytorch_model(pt_model, weights, allow_missing_keys=allow_missing_keys) + + +def load_tf2_weights_in_pytorch_model(pt_model, tf_weights, allow_missing_keys=False): + """ Load TF2.0 symbolic weights in a PyTorch model + """ + try: + import tensorflow as tf # noqa: F401 + import torch # noqa: F401 + except ImportError: + logger.error( + "Loading a TensorFlow model in PyTorch, requires both PyTorch and TensorFlow to be installed. Please see " + "https://pytorch.org/ and https://www.tensorflow.org/install/ for installation instructions." + ) + raise + + new_pt_params_dict = {} + current_pt_params_dict = dict(pt_model.named_parameters()) + + # Make sure we are able to load PyTorch base models as well as derived models (with heads) + # TF models always have a prefix, some of PyTorch models (base ones) don't + start_prefix_to_remove = "" + if not any(s.startswith(pt_model.base_model_prefix) for s in current_pt_params_dict.keys()): + start_prefix_to_remove = pt_model.base_model_prefix + "." + + # Build a map from potential PyTorch weight names to TF 2.0 Variables + tf_weights_map = {} + for tf_weight in tf_weights: + pt_name, transpose = convert_tf_weight_name_to_pt_weight_name( + tf_weight.name, start_prefix_to_remove=start_prefix_to_remove + ) + tf_weights_map[pt_name] = (tf_weight.numpy(), transpose) + + all_tf_weights = set(list(tf_weights_map.keys())) + loaded_pt_weights_data_ptr = {} + missing_keys_pt = [] + for pt_weight_name, pt_weight in current_pt_params_dict.items(): + # Handle PyTorch shared weight ()not duplicated in TF 2.0 + if pt_weight.data_ptr() in loaded_pt_weights_data_ptr: + new_pt_params_dict[pt_weight_name] = loaded_pt_weights_data_ptr[pt_weight.data_ptr()] + continue + + # Find associated numpy array in pytorch model state dict + if pt_weight_name not in tf_weights_map: + if allow_missing_keys: + missing_keys_pt.append(pt_weight_name) + continue + raise AttributeError("{} not found in TF 2.0 model".format(pt_weight_name)) + + array, transpose = tf_weights_map[pt_weight_name] + + if transpose: + array = numpy.transpose(array) + + if len(pt_weight.shape) < len(array.shape): + array = numpy.squeeze(array) + elif len(pt_weight.shape) > len(array.shape): + array = numpy.expand_dims(array, axis=0) + + try: + assert list(pt_weight.shape) == list(array.shape) + except AssertionError as e: + e.args += (pt_weight.shape, array.shape) + raise e + + # logger.warning("Initialize PyTorch weight {}".format(pt_weight_name)) + + new_pt_params_dict[pt_weight_name] = torch.from_numpy(array) + loaded_pt_weights_data_ptr[pt_weight.data_ptr()] = torch.from_numpy(array) + all_tf_weights.discard(pt_weight_name) + + missing_keys, unexpected_keys = pt_model.load_state_dict(new_pt_params_dict, strict=False) + missing_keys += missing_keys_pt + + if len(missing_keys) > 0: + logger.info( + "Weights of {} not initialized from TF 2.0 model: {}".format(pt_model.__class__.__name__, missing_keys) + ) + if len(unexpected_keys) > 0: + logger.info( + "Weights from TF 2.0 model not used in {}: {}".format(pt_model.__class__.__name__, unexpected_keys) + ) + + logger.info("Weights or buffers not loaded from TF 2.0 model: {}".format(all_tf_weights)) + + return pt_model diff --git a/data/source_files/manifest.json b/data/source_files/manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..53e56032b4d1de29a965b2fdb12a58ecb32463a5 --- /dev/null +++ b/data/source_files/manifest.json @@ -0,0 +1,3662 @@ +{ + "clean": [ + { + "hash": "cb4a1fcb517b", + "filename": "cb4a1fcb517b.py", + "lines": 336, + "size": 11342, + "stars": 386, + "repo": "ericmehl/cortex", + "path": "test/IECore/BasicPreset.py" + }, + { + "hash": "03a9ee616ef3", + "filename": "03a9ee616ef3.py", + "lines": 196, + "size": 6417, + "stars": 100, + "repo": "francescodonato/GPflux", + "path": "tests/gpflux/layers/test_latent_variable_layer.py" + }, + { + "hash": "617102a55e7d", + "filename": "617102a55e7d.py", + "lines": 71, + "size": 1972, + "stars": 208, + "repo": "danijoo/biotite", + "path": "src/biotite/copyable.py" + }, + { + "hash": "a03ab9aeccb4", + "filename": "a03ab9aeccb4.py", + "lines": 91, + "size": 3342, + "stars": 645, + "repo": "code-annotator/tornado-annotated", + "path": "src/tornado-3.2.2/tornado/platform/common.py" + }, + { + "hash": "c7153b8df594", + "filename": "c7153b8df594.py", + "lines": 132, + "size": 4632, + "stars": 92, + "repo": "aws-samples/siem-on-amazon-opensearch-service", + "path": "source/lambda/geoip_downloader/index.py" + }, + { + "hash": "46e001660b82", + "filename": "46e001660b82.py", + "lines": 360, + "size": 16276, + "stars": 90, + "repo": "PPTMiao/mtl-ssl", + "path": "slim/nets/inception_resnet_v2.py" + }, + { + "hash": "d8ca53f3dc0a", + "filename": "d8ca53f3dc0a.py", + "lines": 38, + "size": 946, + "stars": 142, + "repo": "fixstars/clpy", + "path": "clpy/sparse/util.py" + }, + { + "hash": "c86c523ed053", + "filename": "c86c523ed053.py", + "lines": 50, + "size": 1316, + "stars": 205, + "repo": "hwazni/discopy", + "path": "test/test_cartesian.py" + }, + { + "hash": "9dc2299143fb", + "filename": "9dc2299143fb.py", + "lines": 76, + "size": 3539, + "stars": 84, + "repo": "Chromico/bk-base", + "path": "src/api/datamanage/pro/lifecycle/data_trace/data_set_create.py" + }, + { + "hash": "eaa5180db280", + "filename": "eaa5180db280.py", + "lines": 445, + "size": 15868, + "stars": 3612, + "repo": "tashidexiaoL/splashnew", + "path": "splash/render_options.py" + }, + { + "hash": "985515e1b34b", + "filename": "985515e1b34b.py", + "lines": 54, + "size": 1432, + "stars": 550, + "repo": "HPLegion/glue", + "path": "glue/__init__.py" + }, + { + "hash": "3062ecd53cb9", + "filename": "3062ecd53cb9.py", + "lines": 78, + "size": 2538, + "stars": 457, + "repo": "jmorlana/pixloc", + "path": "pixloc/visualization/viz_3d.py" + }, + { + "hash": "42ffce808c3b", + "filename": "42ffce808c3b.py", + "lines": 78, + "size": 2714, + "stars": 2971, + "repo": "Project-MONAI/MONAI", + "path": "tests/test_subpixel_upsample.py" + }, + { + "hash": "439bd748ba75", + "filename": "439bd748ba75.py", + "lines": 340, + "size": 12126, + "stars": 4145, + "repo": "madhukarkm/NeMo", + "path": "nemo/collections/asr/parts/numba/rnnt_loss/rnnt_numpy.py" + }, + { + "hash": "1156729f8e7e", + "filename": "1156729f8e7e.py", + "lines": 85, + "size": 3749, + "stars": 67, + "repo": "nicole331/TWLight", + "path": "TWLight/applications/management/commands/send_coordinator_reminders.py" + }, + { + "hash": "5ffc696dc345", + "filename": "5ffc696dc345.py", + "lines": 175, + "size": 5639, + "stars": 624, + "repo": "samyoo78/NearPy", + "path": "nearpy/examples/example2.py" + }, + { + "hash": "d3728f31c0db", + "filename": "d3728f31c0db.py", + "lines": 69, + "size": 2786, + "stars": 135, + "repo": "qianlong4526888/haha", + "path": "src/mem/slicc/ast/TypeDeclAST.py" + }, + { + "hash": "d6487a9499a5", + "filename": "d6487a9499a5.py", + "lines": 220, + "size": 6445, + "stars": 208, + "repo": "danijoo/biotite", + "path": "src/biotite/file.py" + }, + { + "hash": "12581ac99721", + "filename": "12581ac99721.py", + "lines": 150, + "size": 5922, + "stars": 5905, + "repo": "Jesusown/electrum", + "path": "electrum/dnssec.py" + }, + { + "hash": "1d7b2e162edc", + "filename": "1d7b2e162edc.py", + "lines": 141, + "size": 3977, + "stars": 155, + "repo": "MidtownFellowship/libsaas", + "path": "libsaas/services/twilio/applications.py" + }, + { + "hash": "23b30f008578", + "filename": "23b30f008578.py", + "lines": 39, + "size": 1038, + "stars": 1471, + "repo": "upgradvisor/vyper", + "path": "tests/ast/nodes/test_from_node.py" + }, + { + "hash": "ac447d486aa3", + "filename": "ac447d486aa3.py", + "lines": 93, + "size": 2872, + "stars": 10882, + "repo": "kjanik70/tflearn", + "path": "tests/test.py" + }, + { + "hash": "788210038906", + "filename": "788210038906.py", + "lines": 35, + "size": 872, + "stars": 463, + "repo": "ciskoinch8/vimrc", + "path": "vimfiles/bundle/vim-python/submodules/pylint/tests/functional/s/super/super_with_arguments.py" + }, + { + "hash": "06e16975d4ac", + "filename": "06e16975d4ac.py", + "lines": 184, + "size": 8392, + "stars": 1121, + "repo": "fangd123/TextBrewer", + "path": "examples/cmrc2018_example/main.trainer.py" + }, + { + "hash": "c96a4641f9cb", + "filename": "c96a4641f9cb.py", + "lines": 304, + "size": 7627, + "stars": 2151, + "repo": "despairblue/esy-skia", + "path": "gn/gn_to_bp.py" + }, + { + "hash": "569e9c198e62", + "filename": "569e9c198e62.py", + "lines": 129, + "size": 4173, + "stars": 64, + "repo": "merito/small_eod", + "path": "backend-project/small_eod/autocomplete/tests/test_views.py" + }, + { + "hash": "60ccb349f496", + "filename": "60ccb349f496.py", + "lines": 47, + "size": 1994, + "stars": 92, + "repo": "mrkday/SATOSA", + "path": "tests/flows/test_consent.py" + }, + { + "hash": "1be285af847d", + "filename": "1be285af847d.py", + "lines": 45, + "size": 1199, + "stars": 302, + "repo": "AswinRetnakumar/Machina", + "path": "tests/optims/distributed_adamw_test.py" + }, + { + "hash": "d48ae4dcf1bd", + "filename": "d48ae4dcf1bd.py", + "lines": 295, + "size": 9238, + "stars": 51, + "repo": "Djelibeybi/photons", + "path": "apps/interactor/tests/commander/commands/test_animations.py" + }, + { + "hash": "a2576bff34ae", + "filename": "a2576bff34ae.py", + "lines": 34, + "size": 870, + "stars": 233, + "repo": "tallamjr/NeuralCompression", + "path": "tests/functional/test_soft_round_inverse.py" + }, + { + "hash": "c49bac88050e", + "filename": "c49bac88050e.py", + "lines": 364, + "size": 16092, + "stars": 97, + "repo": "PhonologicalCorpusTools/CorpusTools", + "path": "corpustools/neighdens/neighborhood_density.py" + }, + { + "hash": "80861ff6ee46", + "filename": "80861ff6ee46.py", + "lines": 40, + "size": 1189, + "stars": 50, + "repo": "nickmoreton/nhsx-website", + "path": "app/modules/ai_lab/migrations/0003_ailabcasestudy.py" + }, + { + "hash": "6bd49a8ce27c", + "filename": "6bd49a8ce27c.py", + "lines": 82, + "size": 3397, + "stars": 2611, + "repo": "Harshs27/lingvo", + "path": "lingvo/tasks/car/car_layers_test.py" + }, + { + "hash": "0952f49d1c2e", + "filename": "0952f49d1c2e.py", + "lines": 352, + "size": 12017, + "stars": 799, + "repo": "diCagri/content", + "path": "Packs/Pwned/Integrations/PwnedV2/PwnedV2.py" + }, + { + "hash": "85c4dfcff4bc", + "filename": "85c4dfcff4bc.py", + "lines": 37, + "size": 1195, + "stars": 1227, + "repo": "Clusks/alibi-detect", + "path": "alibi_detect/utils/tests/test_discretize.py" + }, + { + "hash": "360a872fc6e5", + "filename": "360a872fc6e5.py", + "lines": 61, + "size": 2268, + "stars": 128, + "repo": "motional/nuplan-devkit", + "path": "nuplan/planning/simulation/observation/idm/test/test_profile_idm_observation.py" + }, + { + "hash": "31ff7d58e709", + "filename": "31ff7d58e709.py", + "lines": 322, + "size": 7782, + "stars": 381, + "repo": "m4sterchain/mesapy", + "path": "pypy/interpreter/test/test_generator.py" + }, + { + "hash": "5f5af0d3afa7", + "filename": "5f5af0d3afa7.py", + "lines": 171, + "size": 7765, + "stars": 852, + "repo": "ckamtsikis/cmssw", + "path": "PhysicsTools/Heppy/python/analyzers/objects/TauAnalyzer.py" + }, + { + "hash": "3ec8fd0b4a93", + "filename": "3ec8fd0b4a93.py", + "lines": 79, + "size": 2374, + "stars": 281, + "repo": "Purple-PI/rlstructures", + "path": "tutorial/deprecated/tutorial_recurrent_policy/main_a2c.py" + }, + { + "hash": "324487b63865", + "filename": "324487b63865.py", + "lines": 138, + "size": 3974, + "stars": 30023, + "repo": "MrDelik/core", + "path": "homeassistant/components/zamg/weather.py" + }, + { + "hash": "54251d3de0bc", + "filename": "54251d3de0bc.py", + "lines": 79, + "size": 3091, + "stars": 103, + "repo": "JanSurft/tornado", + "path": "streams/readers/arff_reader.py" + }, + { + "hash": "f5291c280a95", + "filename": "f5291c280a95.py", + "lines": 121, + "size": 4202, + "stars": 554, + "repo": "idsc-frazzoli/SMARTS", + "path": "smarts/zoo/worker.py" + }, + { + "hash": "210e6fb50260", + "filename": "210e6fb50260.py", + "lines": 32, + "size": 1058, + "stars": 253, + "repo": "arvindmuralie77/gradsflow", + "path": "tests/dummies.py" + }, + { + "hash": "5b0bb172c22d", + "filename": "5b0bb172c22d.py", + "lines": 37, + "size": 965, + "stars": 455, + "repo": "zmxdream/FlexFlow", + "path": "python/flexflow/keras/datasets/cifar.py" + }, + { + "hash": "4a39c8df7306", + "filename": "4a39c8df7306.py", + "lines": 41, + "size": 1018, + "stars": 84, + "repo": "harshp8l/deep-learning-lang-detection", + "path": "data/train/python/6a98547230e4cc83fa248137ca0fde09ebb67dcfController.py" + }, + { + "hash": "2d1c1112bd6d", + "filename": "2d1c1112bd6d.py", + "lines": 65, + "size": 1811, + "stars": 1026, + "repo": "protagohhz/hivemind", + "path": "tests/test_custom_experts.py" + }, + { + "hash": "56314e7a26a0", + "filename": "56314e7a26a0.py", + "lines": 36, + "size": 1048, + "stars": 1723, + "repo": "ruler30cm/python-ds", + "path": "data_structures/stack/largest_rectangle_area_in_histogram.py" + }, + { + "hash": "146408d91490", + "filename": "146408d91490.py", + "lines": 150, + "size": 6133, + "stars": 17769, + "repo": "Robert-JunWang/pytorch-image-models", + "path": "timm/utils/checkpoint_saver.py" + }, + { + "hash": "3dcb1d7b4a12", + "filename": "3dcb1d7b4a12.py", + "lines": 221, + "size": 6326, + "stars": 1806, + "repo": "yoav-orca/pants", + "path": "src/python/pants/core/goals/check_test.py" + }, + { + "hash": "615ca63ee16d", + "filename": "615ca63ee16d.py", + "lines": 246, + "size": 10138, + "stars": 172, + "repo": "samsontmr/fairseq", + "path": "fairseq/models/bart/model.py" + }, + { + "hash": "4e590d6fb60b", + "filename": "4e590d6fb60b.py", + "lines": 123, + "size": 5074, + "stars": 1143, + "repo": "tomhoper/scibert", + "path": "scibert/models/text_classifier.py" + }, + { + "hash": "c2a7bf304f8a", + "filename": "c2a7bf304f8a.py", + "lines": 202, + "size": 4716, + "stars": 469, + "repo": "crotwell/cmd2", + "path": "plugins/template/tasks.py" + }, + { + "hash": "9bb4c0bf7227", + "filename": "9bb4c0bf7227.py", + "lines": 116, + "size": 4116, + "stars": 956, + "repo": "timgates42/trex-core", + "path": "scripts/automation/trex_control_plane/interactive/trex/examples/stl/ndr_plugin.py" + }, + { + "hash": "e1c3a7ce9e28", + "filename": "e1c3a7ce9e28.py", + "lines": 140, + "size": 5171, + "stars": 64, + "repo": "ajaytikoo/watcher", + "path": "watcher/tests/decision_engine/strategy/strategies/test_base.py" + }, + { + "hash": "5e5c66a78299", + "filename": "5e5c66a78299.py", + "lines": 173, + "size": 8165, + "stars": 141, + "repo": "wenhuchen/LogicNLG", + "path": "GPT-distributed.py" + }, + { + "hash": "7a2462313ab1", + "filename": "7a2462313ab1.py", + "lines": 278, + "size": 9901, + "stars": 3451, + "repo": "niits/BentoML", + "path": "bentoml/saved_bundle/loader.py" + }, + { + "hash": "d4c7e80b406d", + "filename": "d4c7e80b406d.py", + "lines": 34, + "size": 1119, + "stars": 578, + "repo": "reavessm/Ice", + "path": "ice/consoles.py" + }, + { + "hash": "88b8d70f4fe4", + "filename": "88b8d70f4fe4.py", + "lines": 45, + "size": 1590, + "stars": 2151, + "repo": "zipated/src", + "path": "tools/perf/contrib/oop_raster/oop_raster.py" + }, + { + "hash": "035f1addafef", + "filename": "035f1addafef.py", + "lines": 174, + "size": 8155, + "stars": 277, + "repo": "polivbr/pulumi-kubernetes", + "path": "sdk/python/pulumi_kubernetes/coordination/v1/_inputs.py" + }, + { + "hash": "8a13f8afeb71", + "filename": "8a13f8afeb71.py", + "lines": 58, + "size": 2042, + "stars": 476, + "repo": "ibaiGorordo/depthai", + "path": "log_system_information.py" + }, + { + "hash": "ead1642e9314", + "filename": "ead1642e9314.py", + "lines": 133, + "size": 5200, + "stars": 59, + "repo": "bgotthold-usgs/batdetect", + "path": "bat_train/evaluate.py" + }, + { + "hash": "860f547cf9e4", + "filename": "860f547cf9e4.py", + "lines": 51, + "size": 1744, + "stars": 571, + "repo": "lightsey/cinder", + "path": "cinder/tests/unit/fake_group_snapshot.py" + }, + { + "hash": "3573d0fd1100", + "filename": "3573d0fd1100.py", + "lines": 129, + "size": 5283, + "stars": 77, + "repo": "leelige/mindspore", + "path": "official/cv/c3d/src/c3d_model.py" + }, + { + "hash": "312f4f16416d", + "filename": "312f4f16416d.py", + "lines": 86, + "size": 2929, + "stars": 838, + "repo": "FlorianPoot/MicroPython_ESP32_psRAM_LoBo", + "path": "MicroPython_BUILD/components/micropython/esp32/modules_examples/mqtt_example.py" + }, + { + "hash": "fa06a1a40d67", + "filename": "fa06a1a40d67.py", + "lines": 207, + "size": 7202, + "stars": 561, + "repo": "ddesmond/gaffer", + "path": "python/GafferUI/ColorSwatchPlugValueWidget.py" + }, + { + "hash": "fcd2bf7cb099", + "filename": "fcd2bf7cb099.py", + "lines": 213, + "size": 7503, + "stars": 1131, + "repo": "ycyun/ablestack-cloud", + "path": "test/integration/component/test_browse_templates2.py" + }, + { + "hash": "4e132b54cd4a", + "filename": "4e132b54cd4a.py", + "lines": 103, + "size": 3783, + "stars": 63, + "repo": "zangobot/secml", + "path": "src/secml/adv/attacks/evasion/c_attack_evasion_pgd_exp.py" + }, + { + "hash": "83b5f3fff612", + "filename": "83b5f3fff612.py", + "lines": 214, + "size": 8070, + "stars": 864, + "repo": "ericlin8545/grover", + "path": "lm/validate.py" + }, + { + "hash": "8ff7006eba8b", + "filename": "8ff7006eba8b.py", + "lines": 75, + "size": 2776, + "stars": 1290, + "repo": "dfirpaul/Active-Directory-Exploitation-Cheat-Sheet-1", + "path": "Z - Tool Box/LaZagne/Windows/lazagne/softwares/windows/ppypykatz.py" + }, + { + "hash": "d3c7051a19d9", + "filename": "d3c7051a19d9.py", + "lines": 56, + "size": 2212, + "stars": 198, + "repo": "webclinic017/qf-lib", + "path": "qf_lib/containers/futures/future_contract.py" + }, + { + "hash": "6bc6fb7ee908", + "filename": "6bc6fb7ee908.py", + "lines": 251, + "size": 8390, + "stars": 85, + "repo": "danicarrion/carto-python", + "path": "carto/maps.py" + }, + { + "hash": "b186e55eb723", + "filename": "b186e55eb723.py", + "lines": 30, + "size": 1208, + "stars": 206, + "repo": "AndreasKaratzas/stonne", + "path": "pytorch-frontend/benchmarks/operator_benchmark/pt/embeddingbag_test.py" + }, + { + "hash": "08a5bdeb757f", + "filename": "08a5bdeb757f.py", + "lines": 102, + "size": 3972, + "stars": 9516, + "repo": "lfchener/dgl", + "path": "python/dgl/geometry/capi.py" + }, + { + "hash": "1b8bec287901", + "filename": "1b8bec287901.py", + "lines": 93, + "size": 3753, + "stars": 77, + "repo": "cpelley/improver", + "path": "improver_tests/precipitation_type/test_utilities.py" + }, + { + "hash": "26e2cb035967", + "filename": "26e2cb035967.py", + "lines": 51, + "size": 1994, + "stars": 2201, + "repo": "TolyaTalamanov/open_model_zoo", + "path": "tools/accuracy_checker/openvino/tools/accuracy_checker/postprocessor/clip_segmentation_mask.py" + }, + { + "hash": "4600f935ed1d", + "filename": "4600f935ed1d.py", + "lines": 59, + "size": 1925, + "stars": 756, + "repo": "isabella232/pynacl", + "path": "tests/test_utils.py" + }, + { + "hash": "4bc9509376c0", + "filename": "4bc9509376c0.py", + "lines": 40, + "size": 1090, + "stars": 315, + "repo": "jsnlp/snorkel-tutorials", + "path": "drybell/drybell_lfs_spark.py" + }, + { + "hash": "c2337dc8cffc", + "filename": "c2337dc8cffc.py", + "lines": 51, + "size": 1231, + "stars": 58, + "repo": "Ziftr/stellard", + "path": "src/beast/python/beast/env/ReadEnvFile_test.py" + }, + { + "hash": "bf74c86796e4", + "filename": "bf74c86796e4.py", + "lines": 93, + "size": 2794, + "stars": 52, + "repo": "ffffff0x/python-hacker", + "path": "com/binghe/hacker/tools/script/ak/check_virus.py" + }, + { + "hash": "62a6423feb5b", + "filename": "62a6423feb5b.py", + "lines": 283, + "size": 10143, + "stars": 357, + "repo": "ZephyrII/competitive_colaboration", + "path": "inverse_warp.py" + }, + { + "hash": "31976c91120b", + "filename": "31976c91120b.py", + "lines": 31, + "size": 934, + "stars": 179, + "repo": "jmviz/xd", + "path": "scripts/49-cat-logs.py" + }, + { + "hash": "4df191fa5942", + "filename": "4df191fa5942.py", + "lines": 65, + "size": 1844, + "stars": 244, + "repo": "wuyang1002431655/tango_with_django_19", + "path": "manuscript/link_checker.py" + }, + { + "hash": "6da87f727811", + "filename": "6da87f727811.py", + "lines": 52, + "size": 1418, + "stars": 725, + "repo": "rmccann01/playground", + "path": "pommerman/__init__.py" + }, + { + "hash": "47f9cb7a7222", + "filename": "47f9cb7a7222.py", + "lines": 293, + "size": 9270, + "stars": 30023, + "repo": "liangleslie/core", + "path": "tests/components/mysensors/conftest.py" + }, + { + "hash": "f1e0f078ce24", + "filename": "f1e0f078ce24.py", + "lines": 39, + "size": 997, + "stars": 53, + "repo": "hubaimaster/aws-interface", + "path": "aws_interface/cloud/auth/set_me.py" + }, + { + "hash": "12ad51890456", + "filename": "12ad51890456.py", + "lines": 94, + "size": 3410, + "stars": 263, + "repo": "ojipadeson/NLPGNN", + "path": "nlpgnn/gnn/RGCNConv.py" + }, + { + "hash": "f4d08a001f37", + "filename": "f4d08a001f37.py", + "lines": 70, + "size": 3074, + "stars": 147, + "repo": "nipunjain099/AutoGuard", + "path": "Models/License-Plate-Recognition-Nigerian-vehicles-master/License-Plate-Recognition-Nigerian-vehicles-master/ocr.py" + }, + { + "hash": "8dc2e031fff8", + "filename": "8dc2e031fff8.py", + "lines": 69, + "size": 2662, + "stars": 504, + "repo": "stefan-woerner/aqua", + "path": "qiskit/ml/datasets/iris.py" + }, + { + "hash": "a3060596bc92", + "filename": "a3060596bc92.py", + "lines": 74, + "size": 2684, + "stars": 54, + "repo": "mesabib/kodi.yatp", + "path": "plugin.video.yatp/libs/client/commands.py" + }, + { + "hash": "7645f390c515", + "filename": "7645f390c515.py", + "lines": 42, + "size": 1461, + "stars": 4238, + "repo": "khanhgithead/grr", + "path": "grr/server/grr_response_server/databases/db_yara_test_lib.py" + }, + { + "hash": "37d4f9f88c30", + "filename": "37d4f9f88c30.py", + "lines": 189, + "size": 7083, + "stars": 862, + "repo": "gpspelle/pose-estimation", + "path": "tf_pose/slim/nets/mobilenet/mobilenet_v2_test.py" + }, + { + "hash": "cdb08f4d273a", + "filename": "cdb08f4d273a.py", + "lines": 75, + "size": 3135, + "stars": 429, + "repo": "rsumner31/Detectron", + "path": "lib/modeling/VGG16.py" + }, + { + "hash": "f15e4bdacd9d", + "filename": "f15e4bdacd9d.py", + "lines": 102, + "size": 2913, + "stars": 537, + "repo": "yangjing1127/xmind2testcase", + "path": "setup.py" + }, + { + "hash": "830d0ef964f3", + "filename": "830d0ef964f3.py", + "lines": 348, + "size": 11128, + "stars": 790, + "repo": "loftwah/appscale", + "path": "AppServer/google/appengine/tools/devappserver2/login.py" + }, + { + "hash": "913235b0bf33", + "filename": "913235b0bf33.py", + "lines": 74, + "size": 2858, + "stars": 3633, + "repo": "rasimuvaikas/stanza", + "path": "stanza/models/common/dropout.py" + }, + { + "hash": "f2ca83c0ad80", + "filename": "f2ca83c0ad80.py", + "lines": 53, + "size": 1229, + "stars": 144, + "repo": "Jarvan-Wang/k2", + "path": "k2/python/host/k2host/properties.py" + }, + { + "hash": "19b684020dbe", + "filename": "19b684020dbe.py", + "lines": 245, + "size": 9304, + "stars": 640, + "repo": "zhoulhb/teleport", + "path": "server/www/packages/packages-windows/x86/ldap3/utils/asn1.py" + }, + { + "hash": "859980c575e3", + "filename": "859980c575e3.py", + "lines": 44, + "size": 1289, + "stars": 347, + "repo": "EasonC13/iota.py", + "path": "iota/commands/core/get_node_info.py" + }, + { + "hash": "5a1e492c171b", + "filename": "5a1e492c171b.py", + "lines": 70, + "size": 2342, + "stars": 74, + "repo": "ryanbsaunders/phantom-apps", + "path": "Apps/phdigitalshadows/dsapi/service/infrastructure_service.py" + }, + { + "hash": "69ef06a022e9", + "filename": "69ef06a022e9.py", + "lines": 166, + "size": 6938, + "stars": 1561, + "repo": "Justin-Fisher/webots", + "path": "tests/sources/test_clang_format.py" + }, + { + "hash": "aebf14e895a5", + "filename": "aebf14e895a5.py", + "lines": 447, + "size": 19209, + "stars": 109, + "repo": "henriktao/pulumi-azure", + "path": "sdk/python/pulumi_azure/desktopvirtualization/workspace.py" + }, + { + "hash": "9809f7ae327a", + "filename": "9809f7ae327a.py", + "lines": 58, + "size": 1719, + "stars": 1199, + "repo": "Xtuden-com/language", + "path": "language/bert_extraction/steal_bert_classifier/utils/wiki103_sentencize.py" + }, + { + "hash": "1e4f4a0023d8", + "filename": "1e4f4a0023d8.py", + "lines": 198, + "size": 7866, + "stars": 14668, + "repo": "ishtjot/susereumutep", + "path": "CodeAnalysis/SourceMeter_Interface/SourceMeter-8.2.0-x64-linux/Python/Tools/python/pylint/pyreverse/writer.py" + }, + { + "hash": "d199807b678d", + "filename": "d199807b678d.py", + "lines": 119, + "size": 3184, + "stars": 171, + "repo": "SGeetansh/dffml", + "path": "dffml/operation/mapping.py" + }, + { + "hash": "32e91de1fd25", + "filename": "32e91de1fd25.py", + "lines": 56, + "size": 1767, + "stars": 228, + "repo": "EvandoBlanco/juriscraper", + "path": "juriscraper/oral_args/united_states/federal_appellate/scotus.py" + }, + { + "hash": "e98ebd191cd4", + "filename": "e98ebd191cd4.py", + "lines": 114, + "size": 3144, + "stars": 51, + "repo": "mathematicalmichael/SpringNodes", + "path": "py/WatchDialog.py" + }, + { + "hash": "e22c87d1b034", + "filename": "e22c87d1b034.py", + "lines": 281, + "size": 9098, + "stars": 339, + "repo": "elxavicio/QSTK", + "path": "qstklearn/1knn.py" + }, + { + "hash": "83cc76b69a63", + "filename": "83cc76b69a63.py", + "lines": 75, + "size": 2842, + "stars": 6224, + "repo": "lviala-zaack/zephyr", + "path": "samples/modules/tensorflow/magic_wand/train/data_split_person.py" + }, + { + "hash": "a1f9bba6c881", + "filename": "a1f9bba6c881.py", + "lines": 238, + "size": 10632, + "stars": 586, + "repo": "josebalius/go-spacemesh", + "path": "tests/k8s_handler.py" + }, + { + "hash": "d2e8b7aa1e82", + "filename": "d2e8b7aa1e82.py", + "lines": 165, + "size": 6232, + "stars": 152, + "repo": "NaomiatLibrary/OpenNMT-kpg-release", + "path": "onmt/keyphrase/pke/unsupervised/graph_based/expandrank.py" + }, + { + "hash": "319db52d59c7", + "filename": "319db52d59c7.py", + "lines": 144, + "size": 5066, + "stars": 17143, + "repo": "nickmelnikov82/dash", + "path": "dash/long_callback/managers/celery_manager.py" + }, + { + "hash": "4b09fed9dd71", + "filename": "4b09fed9dd71.py", + "lines": 32, + "size": 827, + "stars": 15337, + "repo": "fairhopeweb/saleor", + "path": "saleor/order/migrations/0081_auto_20200406_0456.py" + }, + { + "hash": "71e2ec05a4ce", + "filename": "71e2ec05a4ce.py", + "lines": 84, + "size": 3469, + "stars": 202, + "repo": "jhpark428/studio", + "path": "function/python/brightics/function/textanalytics/regex.py" + }, + { + "hash": "bc59895adba1", + "filename": "bc59895adba1.py", + "lines": 87, + "size": 2584, + "stars": 778, + "repo": "lkusch/Kratos", + "path": "applications/CSharpWrapperApplication/tests/test_CSharpWrapperApplication.py" + }, + { + "hash": "9f33016871b5", + "filename": "9f33016871b5.py", + "lines": 113, + "size": 3361, + "stars": 2145, + "repo": "JonaBecher/spektral", + "path": "spektral/datasets/qm9.py" + }, + { + "hash": "1f0bd927f4f7", + "filename": "1f0bd927f4f7.py", + "lines": 56, + "size": 1112, + "stars": 711, + "repo": "johny-c/theano_exercises", + "path": "01_basics/01_building_expressions/02_vector_mat_soln.py" + }, + { + "hash": "a94fea8369fc", + "filename": "a94fea8369fc.py", + "lines": 193, + "size": 7362, + "stars": 3175, + "repo": "howards11/agents", + "path": "tf_agents/bandits/agents/examples/v2/trainer.py" + }, + { + "hash": "ca94c5502737", + "filename": "ca94c5502737.py", + "lines": 273, + "size": 12166, + "stars": 852, + "repo": "ckamtsikis/cmssw", + "path": "SLHCUpgradeSimulations/Configuration/python/aging.py" + }, + { + "hash": "268c7513da60", + "filename": "268c7513da60.py", + "lines": 201, + "size": 7182, + "stars": 3442, + "repo": "2yz/MMdnn", + "path": "mmdnn/conversion/caffe/writer.py" + }, + { + "hash": "0f721ae1b9ad", + "filename": "0f721ae1b9ad.py", + "lines": 87, + "size": 2997, + "stars": 4640, + "repo": "yangulei/tvm", + "path": "python/tvm/topi/hexagon/slice_ops/add_subtract_multiply.py" + }, + { + "hash": "c953b65d83d5", + "filename": "c953b65d83d5.py", + "lines": 324, + "size": 13716, + "stars": 231, + "repo": "Fusion-Rom/android_external_chromium_org", + "path": "chrome/test/telemetry/chromeos/login_unittest.py" + }, + { + "hash": "b6939d391a23", + "filename": "b6939d391a23.py", + "lines": 199, + "size": 7471, + "stars": 211, + "repo": "fkamrani/adversarial-policies", + "path": "src/aprl/agents/monte_carlo.py" + }, + { + "hash": "eecf4b89e18a", + "filename": "eecf4b89e18a.py", + "lines": 405, + "size": 15349, + "stars": 153, + "repo": "Web-Dev-Collaborative/algos", + "path": "book/trees/binary_search_tree.py" + }, + { + "hash": "921dcf5c8770", + "filename": "921dcf5c8770.py", + "lines": 240, + "size": 6656, + "stars": 61, + "repo": "Voxel-Fox-Ltd/Novus", + "path": "discord/types/interactions.py" + }, + { + "hash": "6f822a50fb9a", + "filename": "6f822a50fb9a.py", + "lines": 196, + "size": 7654, + "stars": 585, + "repo": "KevinKecc/caffe2", + "path": "caffe2/python/operator_test/partition_ops_test.py" + }, + { + "hash": "84b7031cbd25", + "filename": "84b7031cbd25.py", + "lines": 62, + "size": 2268, + "stars": 5378, + "repo": "st--/jupytext", + "path": "jupytext/kernels.py" + }, + { + "hash": "3fccec626716", + "filename": "3fccec626716.py", + "lines": 105, + "size": 3292, + "stars": 110, + "repo": "stjordanis/datar", + "path": "tests/test_base_table.py" + }, + { + "hash": "8e35b9de52d2", + "filename": "8e35b9de52d2.py", + "lines": 44, + "size": 1544, + "stars": 140, + "repo": "terra-dashboard/staketaxcsv", + "path": "src/sol/handle_metaplex.py" + }, + { + "hash": "ba500fcbb03c", + "filename": "ba500fcbb03c.py", + "lines": 86, + "size": 3220, + "stars": 4714, + "repo": "Aceticia/tianshou", + "path": "tianshou/utils/logger/tensorboard.py" + }, + { + "hash": "2e9e6abd090a", + "filename": "2e9e6abd090a.py", + "lines": 88, + "size": 3704, + "stars": 254, + "repo": "mail2nsrajesh/tempest", + "path": "tempest/tests/lib/services/compute/test_security_group_default_rules_client.py" + }, + { + "hash": "9b4e8007fc1d", + "filename": "9b4e8007fc1d.py", + "lines": 43, + "size": 1328, + "stars": 108, + "repo": "huynhtnhut97/keras-video-classifier", + "path": "demo/cnn_predict.py" + }, + { + "hash": "0b4d66d202fe", + "filename": "0b4d66d202fe.py", + "lines": 175, + "size": 5898, + "stars": 736, + "repo": "tuomijal/pmdarima", + "path": "pmdarima/preprocessing/endog/boxcox.py" + }, + { + "hash": "1e7e10bc6571", + "filename": "1e7e10bc6571.py", + "lines": 226, + "size": 9453, + "stars": 55, + "repo": "Daulbaev/adversarial-library", + "path": "adv_lib/utils/attack_utils.py" + }, + { + "hash": "9c655d5908ce", + "filename": "9c655d5908ce.py", + "lines": 68, + "size": 2300, + "stars": 1080, + "repo": "congnt95/neutron", + "path": "neutron/db/migration/alembic_migrations/versions/mitaka/contract/c6c112992c9_rbac_qos_policy.py" + }, + { + "hash": "3f5f590860dd", + "filename": "3f5f590860dd.py", + "lines": 372, + "size": 17308, + "stars": 93, + "repo": "sanger640/attMPTI", + "path": "dataloaders/loader.py" + }, + { + "hash": "de966bcba616", + "filename": "de966bcba616.py", + "lines": 147, + "size": 5229, + "stars": 119, + "repo": "cowboygneox/boto3_type_annotations", + "path": "boto3_type_annotations/boto3_type_annotations/guardduty/client.py" + }, + { + "hash": "6f07e5ed698f", + "filename": "6f07e5ed698f.py", + "lines": 117, + "size": 3234, + "stars": 213, + "repo": "antopen/alipay-sdk-python-all", + "path": "alipay/aop/api/domain/MetroOdItem.py" + }, + { + "hash": "3a8717abdef4", + "filename": "3a8717abdef4.py", + "lines": 408, + "size": 14970, + "stars": 65, + "repo": "foglamp/FogLAMP", + "path": "extras/python/fogbench/__main__.py" + }, + { + "hash": "97afbd1b0bf4", + "filename": "97afbd1b0bf4.py", + "lines": 491, + "size": 19888, + "stars": 182, + "repo": "paulineollitrault/qiskit-ignis", + "path": "qiskit/ignis/mitigation/measurement/filters.py" + }, + { + "hash": "1558dac1b3f9", + "filename": "1558dac1b3f9.py", + "lines": 260, + "size": 11115, + "stars": 66635, + "repo": "jonyg80/youtube-dl", + "path": "youtube_dl/extractor/turner.py" + }, + { + "hash": "3721f50853dc", + "filename": "3721f50853dc.py", + "lines": 372, + "size": 12570, + "stars": 2415, + "repo": "al3pht/cloud-custodian", + "path": "tests/zpill.py" + }, + { + "hash": "f7bdb845998e", + "filename": "f7bdb845998e.py", + "lines": 246, + "size": 6805, + "stars": 51, + "repo": "sosprz/nettemp", + "path": "app/sensor.py" + }, + { + "hash": "91edb6dccbbc", + "filename": "91edb6dccbbc.py", + "lines": 150, + "size": 5340, + "stars": 328, + "repo": "JamesTheZ/BladeDISC", + "path": "tao_compiler/mlir/disc/tests/glob_op_test.bzl" + }, + { + "hash": "fe35435938f5", + "filename": "fe35435938f5.py", + "lines": 329, + "size": 12950, + "stars": 5129, + "repo": "ari-holtzman/transformers", + "path": "src/transformers/modeling_tf_pytorch_utils.py" + }, + { + "hash": "9b31cca2e395", + "filename": "9b31cca2e395.py", + "lines": 134, + "size": 4927, + "stars": 5447, + "repo": "Kh4L/gluon-cv", + "path": "gluoncv/data/transforms/block.py" + }, + { + "hash": "debac24ed27a", + "filename": "debac24ed27a.py", + "lines": 138, + "size": 5777, + "stars": 966, + "repo": "dstoeckel/MOE", + "path": "moe/bandit/ucb/ucb_interface.py" + }, + { + "hash": "07c7264a775f", + "filename": "07c7264a775f.py", + "lines": 174, + "size": 4561, + "stars": 150, + "repo": "the-moliver/keras", + "path": "tests/keras/test_activations.py" + }, + { + "hash": "ee7221030be4", + "filename": "ee7221030be4.py", + "lines": 154, + "size": 5458, + "stars": 423, + "repo": "onnheimm/pydlm", + "path": "pydlm/tests/base/testKalmanFilter.py" + }, + { + "hash": "d4a9d78d0281", + "filename": "d4a9d78d0281.py", + "lines": 233, + "size": 11237, + "stars": 799, + "repo": "diCagri/content", + "path": "Tests/Marketplace/prepare_public_index_for_private_testing.py" + }, + { + "hash": "6968fa78ff3c", + "filename": "6968fa78ff3c.py", + "lines": 153, + "size": 5355, + "stars": 645, + "repo": "xuantan/viewfinder", + "path": "backend/services/apns_util.py" + } + ], + "messy": [ + { + "hash": "8f056225fcb5", + "filename": "8f056225fcb5.py", + "lines": 231, + "size": 5886, + "stars": 0, + "repo": "MTES-MCT/sparte", + "path": "public_data/serializers.py" + }, + { + "hash": "9b7afe9a1073", + "filename": "9b7afe9a1073.py", + "lines": 45, + "size": 1329, + "stars": 0, + "repo": "yuanz271/PyDSTool", + "path": "PyDSTool/core/context_managers.py" + }, + { + "hash": "2cf5b37f3314", + "filename": "2cf5b37f3314.py", + "lines": 123, + "size": 5290, + "stars": 0, + "repo": "steven-lang/rational_activations", + "path": "rational/mxnet/rationals.py" + }, + { + "hash": "7e55a2eec7d9", + "filename": "7e55a2eec7d9.py", + "lines": 131, + "size": 4411, + "stars": 0, + "repo": "gamearming/readthedocs", + "path": "readthedocs/donate/forms.py" + }, + { + "hash": "b2647563cd56", + "filename": "b2647563cd56.py", + "lines": 71, + "size": 3030, + "stars": 0, + "repo": "metux/chromium-deb", + "path": "content/test/gpu/gpu_tests/pixel_expectations.py" + }, + { + "hash": "cf83502047f5", + "filename": "cf83502047f5.py", + "lines": 53, + "size": 1832, + "stars": 0, + "repo": "Bhavya0020/Readopolis", + "path": "Backend/product/views.py" + }, + { + "hash": "9c892371385d", + "filename": "9c892371385d.py", + "lines": 46, + "size": 1469, + "stars": 0, + "repo": "hubogeri/python_training", + "path": "model/contact.py" + }, + { + "hash": "39daf83dff74", + "filename": "39daf83dff74.py", + "lines": 401, + "size": 12444, + "stars": 0, + "repo": "mhchia/trinity", + "path": "eth2/beacon/chains/base.py" + }, + { + "hash": "420435d267b7", + "filename": "420435d267b7.py", + "lines": 286, + "size": 10338, + "stars": 0, + "repo": "RenanPalmeira/pyboleto", + "path": "pyboleto/html.py" + }, + { + "hash": "dda0a29b947a", + "filename": "dda0a29b947a.py", + "lines": 337, + "size": 10492, + "stars": 0, + "repo": "raubvogel/nova", + "path": "nova/conf/hyperv.py" + }, + { + "hash": "0bdbe88d7d1a", + "filename": "0bdbe88d7d1a.py", + "lines": 106, + "size": 3625, + "stars": 0, + "repo": "gianscarpe/pytorch-lightning", + "path": "pytorch_lightning/plugins/environments/slurm_environment.py" + }, + { + "hash": "d228d40c6d8c", + "filename": "d228d40c6d8c.py", + "lines": 123, + "size": 3594, + "stars": 0, + "repo": "kim-sunghoon/DiracDeltaNet", + "path": "test.py" + }, + { + "hash": "e444a542540d", + "filename": "e444a542540d.py", + "lines": 429, + "size": 18041, + "stars": 0, + "repo": "actingweb/box-actingweb", + "path": "aw-actor-trust.py" + }, + { + "hash": "1c73481ac309", + "filename": "1c73481ac309.py", + "lines": 185, + "size": 8513, + "stars": 0, + "repo": "IamEld3st/RLBot", + "path": "src/main/python/rlbot/version.py" + }, + { + "hash": "666f4c354670", + "filename": "666f4c354670.py", + "lines": 114, + "size": 3400, + "stars": 0, + "repo": "np-hacs/ha-wyzeapi", + "path": "custom_components/wyzeapi/binary_sensor.py" + }, + { + "hash": "04e23b0b5d08", + "filename": "04e23b0b5d08.py", + "lines": 115, + "size": 5118, + "stars": 0, + "repo": "SFDigitalServices/pts-dispatcher-microservice-py", + "path": "service/transforms/export_submissions.py" + }, + { + "hash": "3454d2a1ff4d", + "filename": "3454d2a1ff4d.py", + "lines": 67, + "size": 2595, + "stars": 0, + "repo": "yshrdbrn/bigdata", + "path": "scripts/charts.py" + }, + { + "hash": "5aa390db76fb", + "filename": "5aa390db76fb.py", + "lines": 363, + "size": 15349, + "stars": 0, + "repo": "benjaminkrenn/abcvoting", + "path": "unittests.py" + }, + { + "hash": "fa0d79cee4a2", + "filename": "fa0d79cee4a2.py", + "lines": 43, + "size": 1106, + "stars": 0, + "repo": "Bot-Box/FiveCardStud", + "path": "src/modules/deuces/deck.py" + }, + { + "hash": "e8783f0f6da2", + "filename": "e8783f0f6da2.py", + "lines": 66, + "size": 2107, + "stars": 0, + "repo": "nuft/can-bootloader", + "path": "client/tests/test_config_read_tool.py" + }, + { + "hash": "5523ac693ecc", + "filename": "5523ac693ecc.py", + "lines": 170, + "size": 6899, + "stars": 0, + "repo": "wgifford/ray", + "path": "python/ray/experimental/workflow/execution.py" + }, + { + "hash": "5fb11d08823b", + "filename": "5fb11d08823b.py", + "lines": 73, + "size": 2211, + "stars": 0, + "repo": "aleasoluciones/infrabbitmq", + "path": "bin/ticker.py" + }, + { + "hash": "acda636b4109", + "filename": "acda636b4109.py", + "lines": 310, + "size": 16137, + "stars": 0, + "repo": "Tarpelite/UniNLP", + "path": "transformers/modeling_encoder_decoder.py" + }, + { + "hash": "afc593ff8c4c", + "filename": "afc593ff8c4c.py", + "lines": 81, + "size": 2131, + "stars": 0, + "repo": "rafaelols/airflow", + "path": "dags/treinos_igti/treino03.py" + }, + { + "hash": "5c981fb87601", + "filename": "5c981fb87601.py", + "lines": 63, + "size": 2853, + "stars": 0, + "repo": "the-muses-ltd/Multithreaded-Webcrawler-Cassandra-", + "path": "multithreaded_webcrawler.py" + }, + { + "hash": "8bf1ff66eee0", + "filename": "8bf1ff66eee0.py", + "lines": 52, + "size": 1969, + "stars": 0, + "repo": "aarkwright/ableton_devices", + "path": "MIDI Remote Scripts/Push2/mode_collector.py" + }, + { + "hash": "3490da06420f", + "filename": "3490da06420f.py", + "lines": 243, + "size": 5822, + "stars": 0, + "repo": "ostropunk/wikisourcesort", + "path": "wikisourcesort.py" + }, + { + "hash": "720c79fe24bb", + "filename": "720c79fe24bb.py", + "lines": 99, + "size": 3325, + "stars": 0, + "repo": "me-anton/radar-app", + "path": "backend/radar/engine/body_objects.py" + }, + { + "hash": "e74dec1c1520", + "filename": "e74dec1c1520.py", + "lines": 188, + "size": 6479, + "stars": 0, + "repo": "LedgerHQ/ledger-app-neo3", + "path": "tests/boilerplate_client/boilerplate_cmd.py" + }, + { + "hash": "127b93eb1647", + "filename": "127b93eb1647.py", + "lines": 283, + "size": 12904, + "stars": 0, + "repo": "PatrickSJacobs/qiskit-metal", + "path": "qiskit_metal/qlibrary/qubits/Transmon_Interdigitated.py" + }, + { + "hash": "73c72bfbe73b", + "filename": "73c72bfbe73b.py", + "lines": 408, + "size": 11757, + "stars": 0, + "repo": "AakankshaAshok/pandas", + "path": "pandas/core/apply.py" + }, + { + "hash": "4b961f90da33", + "filename": "4b961f90da33.py", + "lines": 46, + "size": 882, + "stars": 0, + "repo": "bugra-yilmaz/adventofcode2021", + "path": "day06/part1.py" + }, + { + "hash": "3edfecfa9fba", + "filename": "3edfecfa9fba.py", + "lines": 86, + "size": 1998, + "stars": 0, + "repo": "reloadware/stickybeak", + "path": "env_ci.py" + }, + { + "hash": "38da1794d617", + "filename": "38da1794d617.py", + "lines": 252, + "size": 10408, + "stars": 0, + "repo": "mmaryada27/mypy", + "path": "mypy/server/aststrip.py" + }, + { + "hash": "cad9715efddf", + "filename": "cad9715efddf.py", + "lines": 47, + "size": 834, + "stars": 0, + "repo": "Yash-s-Code-Camp/Python-Day-4", + "path": "main.py" + }, + { + "hash": "c7d0962264ec", + "filename": "c7d0962264ec.py", + "lines": 265, + "size": 8974, + "stars": 0, + "repo": "MarcoRosso/paperstream", + "path": "paperstream/create_diary.py" + }, + { + "hash": "57c192b0a642", + "filename": "57c192b0a642.py", + "lines": 36, + "size": 974, + "stars": 0, + "repo": "yavook/kiwi-scp", + "path": "kiwi_scp/commands/cmd_cmd.py" + }, + { + "hash": "f4de430f95d9", + "filename": "f4de430f95d9.py", + "lines": 40, + "size": 1721, + "stars": 0, + "repo": "Maxcutex/personal_ecommerce", + "path": "app/blueprints/department_blueprint.py" + }, + { + "hash": "536e863c3c34", + "filename": "536e863c3c34.py", + "lines": 74, + "size": 2635, + "stars": 0, + "repo": "erlendve/catalyst", + "path": "catalyst/exchange/live_graph_clock.py" + }, + { + "hash": "257a215fb333", + "filename": "257a215fb333.py", + "lines": 174, + "size": 6652, + "stars": 0, + "repo": "LeoLeiva/todo-challenge", + "path": "invera/api/tests.py" + }, + { + "hash": "2e6db999be23", + "filename": "2e6db999be23.py", + "lines": 92, + "size": 2577, + "stars": 0, + "repo": "Phaeton-lang/baselines", + "path": "superneurons/tools/img_val/main.py" + }, + { + "hash": "10b43d2d1e3a", + "filename": "10b43d2d1e3a.py", + "lines": 161, + "size": 5581, + "stars": 0, + "repo": "P1ayerOne/src", + "path": "otp/chat/ChatInputNormal.py" + }, + { + "hash": "1b1cfa03646b", + "filename": "1b1cfa03646b.py", + "lines": 50, + "size": 1493, + "stars": 0, + "repo": "zmanji/incubator-aurora", + "path": "src/test/python/apache/aurora/executor/test_status_manager.py" + }, + { + "hash": "9d4e5f709420", + "filename": "9d4e5f709420.py", + "lines": 81, + "size": 3494, + "stars": 0, + "repo": "wangqf1997/Human-injury-based-safety-decision-of-automated-vehicles", + "path": "Supplemental/A5. Collision estimation module/Con_est.py" + }, + { + "hash": "e727c891dc65", + "filename": "e727c891dc65.py", + "lines": 346, + "size": 11790, + "stars": 0, + "repo": "TontonTremblay/pixel-nerf", + "path": "train/train.py" + }, + { + "hash": "1fcb6a02d3ab", + "filename": "1fcb6a02d3ab.py", + "lines": 230, + "size": 6376, + "stars": 0, + "repo": "tmilliman/sir_to_netcdf", + "path": "qscatv2/make_seasonal_images.py" + }, + { + "hash": "273a3f8a3b29", + "filename": "273a3f8a3b29.py", + "lines": 42, + "size": 907, + "stars": 0, + "repo": "ExpertOfNone/expert_of_none", + "path": "base/admin.py" + }, + { + "hash": "20afb8e5092a", + "filename": "20afb8e5092a.py", + "lines": 46, + "size": 1477, + "stars": 0, + "repo": "rffontenelle/readthedocs.org", + "path": "readthedocs/settings/proxito/base.py" + }, + { + "hash": "f4b4806461dd", + "filename": "f4b4806461dd.py", + "lines": 118, + "size": 2854, + "stars": 0, + "repo": "vkumarma/Complete-Interpreter", + "path": "main.py" + }, + { + "hash": "475b6b33d620", + "filename": "475b6b33d620.py", + "lines": 173, + "size": 6369, + "stars": 0, + "repo": "gfjiangly/AerialDetection", + "path": "tools/aerial_detection.py" + }, + { + "hash": "f3e28c5ecbfb", + "filename": "f3e28c5ecbfb.py", + "lines": 121, + "size": 5066, + "stars": 0, + "repo": "groorj/cloud-regions", + "path": "aws-regions.py" + }, + { + "hash": "a60733716488", + "filename": "a60733716488.py", + "lines": 258, + "size": 10157, + "stars": 0, + "repo": "guowenying111/SEKE", + "path": "src/models/encoder.py" + }, + { + "hash": "a7af7e6fe3a5", + "filename": "a7af7e6fe3a5.py", + "lines": 489, + "size": 19710, + "stars": 0, + "repo": "sweptlaser/pclpy", + "path": "generators/generate_pybind11_bindings.py" + }, + { + "hash": "8b81a10027a3", + "filename": "8b81a10027a3.py", + "lines": 33, + "size": 1245, + "stars": 0, + "repo": "laoyigrace/subject", + "path": "subject/tests/functional/test_glance_replicator.py" + }, + { + "hash": "3c3eb9cf78bc", + "filename": "3c3eb9cf78bc.py", + "lines": 45, + "size": 1483, + "stars": 0, + "repo": "NIL-zhuang/NJU-Data-Integration", + "path": "StaticProcess/apriori.py" + }, + { + "hash": "6d62ae4e17f6", + "filename": "6d62ae4e17f6.py", + "lines": 31, + "size": 821, + "stars": 0, + "repo": "m-hintz-42/a-palm-tree", + "path": "palm_tree/coconut_1/models.py" + }, + { + "hash": "98c5f29240b9", + "filename": "98c5f29240b9.py", + "lines": 225, + "size": 6885, + "stars": 0, + "repo": "Zipfer/fuel-web", + "path": "network_checker/dhcp_checker/utils.py" + }, + { + "hash": "19c8963dd93e", + "filename": "19c8963dd93e.py", + "lines": 189, + "size": 6995, + "stars": 0, + "repo": "farzanaaswin0708/CNN-for-Visual-recognition", + "path": "Chest X-Ray Multilabel Image classification using CNN - Pytorch/Arch2.py" + }, + { + "hash": "bd581f14cf48", + "filename": "bd581f14cf48.py", + "lines": 32, + "size": 1344, + "stars": 0, + "repo": "HydeJackal/TwitterWeeklyNewsBot", + "path": "news_access.py" + }, + { + "hash": "bd90f84e7761", + "filename": "bd90f84e7761.py", + "lines": 213, + "size": 8847, + "stars": 0, + "repo": "owen-t/sagemaker-experiments-1", + "path": "tests/unit/test_trial_component.py" + }, + { + "hash": "34c845141b72", + "filename": "34c845141b72.py", + "lines": 234, + "size": 8379, + "stars": 0, + "repo": "amylittleyang/OtraCAD", + "path": "cadnano25/cadnano/part/xovercmds.py" + }, + { + "hash": "e8a7155bfbec", + "filename": "e8a7155bfbec.py", + "lines": 111, + "size": 4091, + "stars": 0, + "repo": "ednihs-yahska/unibrowser", + "path": "scraping/faqscraper.py" + }, + { + "hash": "c3fbb15b2577", + "filename": "c3fbb15b2577.py", + "lines": 110, + "size": 2600, + "stars": 0, + "repo": "ckousoulis/macos-messages", + "path": "messages/term_utils.py" + }, + { + "hash": "1a3d14ff0652", + "filename": "1a3d14ff0652.py", + "lines": 65, + "size": 2079, + "stars": 0, + "repo": "citrix-openstack-build/ironic", + "path": "ironic/tests/api/utils.py" + }, + { + "hash": "fe6dc7d06e56", + "filename": "fe6dc7d06e56.py", + "lines": 61, + "size": 2234, + "stars": 0, + "repo": "thewordisbird/bookshelf", + "path": "bookshelf/main/forms.py" + }, + { + "hash": "49cbaee2c42e", + "filename": "49cbaee2c42e.py", + "lines": 89, + "size": 3387, + "stars": 0, + "repo": "DanielM24/Romanian-sub-dialect-identificator", + "path": "main.py" + }, + { + "hash": "21bbf74d2d8b", + "filename": "21bbf74d2d8b.py", + "lines": 170, + "size": 6028, + "stars": 0, + "repo": "George-Polya/st-gcn", + "path": "feeder/feeder_ucf.py" + }, + { + "hash": "4543867f9f05", + "filename": "4543867f9f05.py", + "lines": 71, + "size": 2113, + "stars": 0, + "repo": "vmturbo/ceilometer", + "path": "ceilometer/data_processing/notifications.py" + }, + { + "hash": "1ea06667316a", + "filename": "1ea06667316a.py", + "lines": 30, + "size": 946, + "stars": 0, + "repo": "JalajaTR/cQube", + "path": "tests/src/Diksha_Reports/usage_by_textbook/download_all_collection_records.py" + }, + { + "hash": "b1bc55044f1a", + "filename": "b1bc55044f1a.py", + "lines": 61, + "size": 2654, + "stars": 0, + "repo": "severinbeauvais/sbc-auth", + "path": "auth-api/src/auth_api/resources/org_products.py" + }, + { + "hash": "a16e556ab84c", + "filename": "a16e556ab84c.py", + "lines": 88, + "size": 2740, + "stars": 0, + "repo": "iFishy/DomainApp", + "path": "remove_labels.py" + }, + { + "hash": "0313c3d1b130", + "filename": "0313c3d1b130.py", + "lines": 33, + "size": 947, + "stars": 0, + "repo": "SaizhuoWang/carefree-learn", + "path": "tests/unittests/test_zoo.py" + }, + { + "hash": "b374790e8e34", + "filename": "b374790e8e34.py", + "lines": 86, + "size": 3107, + "stars": 0, + "repo": "8ka1alu/heroku-global-py", + "path": "discordbot.py" + }, + { + "hash": "a59e8dc4ffa1", + "filename": "a59e8dc4ffa1.py", + "lines": 219, + "size": 9468, + "stars": 0, + "repo": "ealopez/pycroscopy", + "path": "examples/plot_spectral_unmixing.py" + }, + { + "hash": "f7088c0df30b", + "filename": "f7088c0df30b.py", + "lines": 113, + "size": 3743, + "stars": 0, + "repo": "foliant-docs/foliantcontrib.downloadfile", + "path": "test/test_downloadfile.py" + }, + { + "hash": "a2de461a48ed", + "filename": "a2de461a48ed.py", + "lines": 68, + "size": 3045, + "stars": 0, + "repo": "Lilium765/momoko", + "path": "question.py" + }, + { + "hash": "bf56855ec505", + "filename": "bf56855ec505.py", + "lines": 46, + "size": 1327, + "stars": 0, + "repo": "robfig/rules_proto", + "path": "python/library.bzl" + }, + { + "hash": "64b2adeeef54", + "filename": "64b2adeeef54.py", + "lines": 250, + "size": 9802, + "stars": 0, + "repo": "vpv11110000/pyss", + "path": "tests/test_preempt_return.py" + }, + { + "hash": "9df4fc781a63", + "filename": "9df4fc781a63.py", + "lines": 142, + "size": 4918, + "stars": 0, + "repo": "mckinly/cms-django", + "path": "src/cms/views/push_notifications/push_notification_sender.py" + }, + { + "hash": "1a534773f649", + "filename": "1a534773f649.py", + "lines": 40, + "size": 984, + "stars": 0, + "repo": "reevespaul/firebird-qa", + "path": "tests/functional/index/create/test_03.py" + }, + { + "hash": "58802a461c93", + "filename": "58802a461c93.py", + "lines": 150, + "size": 4318, + "stars": 0, + "repo": "emdeechege/Questionaire-API", + "path": "app/api/v1/views/auth_views.py" + }, + { + "hash": "2c0e54fb82db", + "filename": "2c0e54fb82db.py", + "lines": 96, + "size": 4314, + "stars": 0, + "repo": "s-avni/pint", + "path": "pint/testsuite/test_definitions.py" + }, + { + "hash": "c6df0134595f", + "filename": "c6df0134595f.py", + "lines": 63, + "size": 1244, + "stars": 0, + "repo": "Pil0u/adventofcode2020", + "path": "day08.py" + }, + { + "hash": "b00f9623a040", + "filename": "b00f9623a040.py", + "lines": 54, + "size": 1976, + "stars": 0, + "repo": "MarkMacDon/learndash-python", + "path": "src/learndash/api_resources/user.py" + }, + { + "hash": "76c274773ccc", + "filename": "76c274773ccc.py", + "lines": 109, + "size": 4322, + "stars": 0, + "repo": "TauferLab/PENGUIN", + "path": "dataProcessing.py" + }, + { + "hash": "27817926a143", + "filename": "27817926a143.py", + "lines": 82, + "size": 2385, + "stars": 0, + "repo": "airbornemint/PieCrust2", + "path": "piecrust/processing/util.py" + }, + { + "hash": "2fb8d147fcfc", + "filename": "2fb8d147fcfc.py", + "lines": 54, + "size": 1134, + "stars": 0, + "repo": "ChreSyr/baopig", + "path": "baopig/ressources/ressources.py" + }, + { + "hash": "621b5bc08685", + "filename": "621b5bc08685.py", + "lines": 309, + "size": 10282, + "stars": 0, + "repo": "glamod/glamod-misc", + "path": "bufr_extract_unique_stations.py" + }, + { + "hash": "0ccd89c328c2", + "filename": "0ccd89c328c2.py", + "lines": 51, + "size": 1564, + "stars": 0, + "repo": "jmacarthur/aoc2017", + "path": "day16/solve16.py" + }, + { + "hash": "6f869b875813", + "filename": "6f869b875813.py", + "lines": 38, + "size": 1419, + "stars": 0, + "repo": "w3x10e8/core", + "path": "tests/middleware/test_csrf_middleware.py" + }, + { + "hash": "a2d7a4633b12", + "filename": "a2d7a4633b12.py", + "lines": 116, + "size": 3644, + "stars": 0, + "repo": "yletallec/processmonitor", + "path": "processmonitor.py" + }, + { + "hash": "5b605f543b5d", + "filename": "5b605f543b5d.py", + "lines": 144, + "size": 4035, + "stars": 0, + "repo": "dedukun/MarkReport", + "path": "MarkReport/MarkReport.py" + }, + { + "hash": "94b2f20c5850", + "filename": "94b2f20c5850.py", + "lines": 46, + "size": 902, + "stars": 0, + "repo": "kjh9267/BOJ_Python", + "path": "DFS/13023.py" + }, + { + "hash": "1d8649714119", + "filename": "1d8649714119.py", + "lines": 177, + "size": 8498, + "stars": 0, + "repo": "tommy-waltmann/voting-ml", + "path": "voting_ml/main.py" + }, + { + "hash": "a24a6c4f079d", + "filename": "a24a6c4f079d.py", + "lines": 274, + "size": 12334, + "stars": 0, + "repo": "al-arz/the-tale", + "path": "src/the_tale/the_tale/game/heroes/tests/test_logic.py" + }, + { + "hash": "03f913083cba", + "filename": "03f913083cba.py", + "lines": 39, + "size": 1346, + "stars": 0, + "repo": "timofeymukha/postcipes", + "path": "postcipes/hydraulic_jump.py" + }, + { + "hash": "d7648d1163c3", + "filename": "d7648d1163c3.py", + "lines": 122, + "size": 4579, + "stars": 0, + "repo": "imsardine/jenkinsapi", + "path": "jenkinsapi/node.py" + }, + { + "hash": "005eaa8f796e", + "filename": "005eaa8f796e.py", + "lines": 141, + "size": 3427, + "stars": 0, + "repo": "cozek/code-practice", + "path": "queue/animal_queue.py" + }, + { + "hash": "6b7c7bb0171b", + "filename": "6b7c7bb0171b.py", + "lines": 145, + "size": 3677, + "stars": 0, + "repo": "bbornstein/aoc", + "path": "2021/day15/aoc-2021-d15.py" + }, + { + "hash": "e25f61b03cd1", + "filename": "e25f61b03cd1.py", + "lines": 106, + "size": 3208, + "stars": 0, + "repo": "rtobar/sdp-prototype", + "path": "src/tango_scaling_test/TestDeviceServer/__main__.py" + } + ], + "seen_hashes": [ + "d99779850b2f", + "fd202fd50dc1", + "142502deaca0", + "1ce49babb176", + "666f4c354670", + "420435d267b7", + "f623ff7c254f", + "e76e2ffca4af", + "681b6b6b695e", + "344f36d64d21", + "b3c13ee9c2f3", + "a18a7b4af7e0", + "ab17da793d43", + "204d5c0e32a1", + "3d976b0671ac", + "96e8c8eab942", + "4ffe24562d98", + "ad9b246954b6", + "ba85662b6fad", + "abd241ef6d5c", + "d04473f62a0f", + "2b44bc52dde4", + "5a4e6d0c74cd", + "998fdf123db2", + "1e6d6deda4f9", + "99ab48b5eac2", + "f3eab2c6fdac", + "a94fea8369fc", + "31cbcd0004e6", + "3060b1b80207", + "95b3674d74bf", + "464b78dcb5ab", + "513058cc058d", + "85bb2d73393b", + "833e8f93cbaa", + "e1b0a453c40a", + "699543ee8924", + "14719da409de", + "8bf1ff66eee0", + "c7ba8eaa5793", + "58802a461c93", + "57d29d710656", + "7a3c70d3ba3a", + "08b7c4073498", + "f3b5f80c496f", + "f29ce6cd0aaa", + "de966bcba616", + "bf487760dbef", + "e86316aec7cd", + "5b0bb172c22d", + "c4e914d1c88a", + "89ecad7c8687", + "19b684020dbe", + "b228e18473da", + "e6b4743948ed", + "530a7b118582", + "3845814b5377", + "ca08dbb49232", + "e3aa87938213", + "3cb5658aac85", + "49b6fd5fb978", + "a7af7e6fe3a5", + "c4a2b6a48851", + "5c0fa029d70b", + "c34d79cb609a", + "8f71a5d93309", + "1a49657eaee6", + "874189bbc394", + "f9e0a7f92072", + "6a56090b3d9e", + "0a0400e3bf16", + "491e2c4920df", + "ff48113b91e9", + "aa1aa8a90019", + "a94b8f2f8ec9", + "20bd4bb3326e", + "0085cb99fa7c", + "c2337dc8cffc", + "ba500fcbb03c", + "615ca63ee16d", + "698d8bb63300", + "2fdc7e278e87", + "1632e3a67ad3", + "069c1f1ba56b", + "5f69895bd378", + "3454d2a1ff4d", + "a03ab9aeccb4", + "9be4b9cb0498", + "2de9d8ab395c", + "d7b36fc77a43", + "d1a1af839b02", + "e59daf8b724b", + "db25a2087e85", + "f8ba88172c75", + "816273bf05f9", + "c728e4620e04", + "d4046288eae5", + "68df5ce96277", + "19e87ef899a4", + "201450dfc194", + "f087bbf7384f", + "7ff7e0bb9c2e", + "c6df0134595f", + "fbdb45d17131", + "9e40f558f01a", + "7509550ed6dd", + "843eb5976055", + "9068526af0be", + "a133891ea41d", + "0c3a513df1c6", + "80861ff6ee46", + "57aebd67461a", + "d13b8dd2375d", + "778e7b6e2cac", + "1e7e10bc6571", + "815b27ecdeed", + "8bdde3d90899", + "c0e01f91551b", + "54251d3de0bc", + "be4d0d0dbb45", + "7e06228da3e0", + "7d828f98134c", + "f022c2731ddb", + "6c111290e549", + "efb1b2c692c2", + "ca9d7caaade7", + "12ad51890456", + "57a73c4db3ea", + "44d7aaeb7d5c", + "906d930aea0a", + "36fa4969510a", + "b374790e8e34", + "d930bab41aa4", + "c31c6bfafc46", + "e19b065a54df", + "86416a10d950", + "7646a6a9449d", + "04e8a9a56b54", + "b2922de74204", + "e8ce33e33781", + "fb33f309f643", + "ceac8e98150b", + "7a51b991c367", + "9b31cca2e395", + "d199807b678d", + "8eb75b1a1ad9", + "5265d6f6b818", + "bd90f84e7761", + "8986447224dd", + "cd8d9cfc97c2", + "e596ade08040", + "d1683d26f921", + "e23588b09d33", + "e43ea0e0026c", + "07c023d604f1", + "655a1aa2e8fb", + "efa8bbbd8fa9", + "fac3a96e695d", + "b495be1cc01e", + "38da1794d617", + "7202261bc642", + "a2d7a4633b12", + "e2acaed528ad", + "ef8e046fc549", + "fa06a1a40d67", + "c6856c6d0746", + "08fa3b64bc75", + "df078cdc4fa8", + "a54aee25fdd1", + "add8ea056ce1", + "eecf4b89e18a", + "6e47b3555a9b", + "3fccec626716", + "96a8195089f7", + "4056b699f3a3", + "a89b917e75fb", + "1adc1d504add", + "00abe0084ea4", + "07c7264a775f", + "d7648d1163c3", + "840991719ec3", + "5c04635b95ab", + "1f0ffa0a9d15", + "04f49307e969", + "f165d711edf8", + "ba32ce14dae6", + "d3e37d424728", + "127b93eb1647", + "7f9a4d4dd758", + "98dacf305243", + "cf83502047f5", + "c7153b8df594", + "527d63995476", + "96df4d194b64", + "be5cd43385ec", + "6b8e26674d5d", + "0f08dd7aa5a5", + "e256105e7c62", + "eac779beab58", + "26cf39d6948d", + "b338f4399cc9", + "236a906dba5c", + "b2ccb1399308", + "6b09bae7a5c9", + "c3a7e25f39e9", + "83bf851949f6", + "9f3fd398ffae", + "37bd05c6bdcd", + "88bd5ef4d695", + "8f97e0c1eb2b", + "281840d4fa02", + "4ef8f75aa4f2", + "a0f31f1dec15", + "1b1cfa03646b", + "c7d0962264ec", + "10f832698b17", + "18e7207596a0", + "4f58b4795326", + "73608508974a", + "76aa1eb0d3ef", + "b4bd15d727f7", + "1d57c60867ac", + "91edb6dccbbc", + "e9503c3a870d", + "ffb39dbd93de", + "c3fbb15b2577", + "b6da799ea8af", + "4fc047e1e84f", + "c38c53527670", + "a6b6b32e20b2", + "c49bac88050e", + "cd29c86297a1", + "426011c1c3e2", + "b7a83feb36ed", + "76e1e2625254", + "fe2296c5a6a6", + "839010eb153e", + "0269d7b0ef58", + "f7088c0df30b", + "c18be66727b9", + "bd531aef9d54", + "5370825d8ad4", + "a41b2e74e54e", + "8ff7006eba8b", + "ece9c01218b4", + "05da3b9ad5a4", + "bc166cbadeea", + "49cbaee2c42e", + "b2647563cd56", + "5e5c66a78299", + "487e60d8c1cb", + "dd163d0d65a3", + "fa9015ca0a3c", + "20255aa32ba5", + "66c149ba7f9f", + "98f5dbc93cf1", + "c2728f7b4590", + "3a8717abdef4", + "4ffa07698e9f", + "c373c8b5ad13", + "0af78b02ca02", + "48318ad78bde", + "24e3fc5be0c8", + "346a1a08121d", + "859980c575e3", + "f5bd15801e31", + "c6d01d2fee73", + "5c360bce1b71", + "8555e0ee5017", + "8da5e6ff0db7", + "18e43bc7b678", + "37ae079cd518", + "8683617ada74", + "1715cbe73a22", + "5fe376d0e2a7", + "ad1ae2764118", + "0ccd89c328c2", + "4c314c9b40a4", + "9ed39991f77c", + "4f382b385219", + "d0637a474f28", + "35abccf4b56a", + "c28d12e32e18", + "6849545c9ae0", + "1e4dfbbd96ad", + "bc7871f7fc16", + "3e39948cbbd4", + "44f5cb512c82", + "de46e39bdf99", + "90a1d6db5e2b", + "69ef06a022e9", + "1519df14707d", + "b6110f98c21d", + "6b88edf5d098", + "396e383905c5", + "9c37731956ca", + "0e76f975d495", + "4dc428b0b235", + "423e6738f0e7", + "58d4c7cf9f4e", + "5ad944f56980", + "078c0aa87e2a", + "1dc94d1b7744", + "84b7031cbd25", + "b3f370bf5be4", + "8861c155c581", + "0dd0551f3b82", + "ce851f181a18", + "f2ca83c0ad80", + "c7798466410a", + "319db52d59c7", + "388d0d5035bc", + "286c3f27e8ae", + "05100a3775e4", + "0ea637ab5c26", + "e7929097e059", + "f461b7ef1755", + "df436c55cc61", + "4e132b54cd4a", + "759dc7710461", + "08b0a9d3b02c", + "60ccb349f496", + "6fc07583c16e", + "f903e9bcdebd", + "58bc1d9e14d7", + "289bdaad6bc5", + "035f1addafef", + "eadfa9a35578", + "699c15530524", + "472ef64de109", + "71e2ec05a4ce", + "a4fff332eb8f", + "b903d103a160", + "8d11e28d1637", + "0952f49d1c2e", + "d136ec2eecb5", + "0313c3d1b130", + "ef9ad9020f4d", + "b3235237b45d", + "17d9a27816a8", + "720c79fe24bb", + "a16e556ab84c", + "3edfecfa9fba", + "92ab2a074f59", + "dcd87d896b3b", + "257a215fb333", + "cdb08f4d273a", + "066683a0950d", + "a1c22de07cf5", + "07560affa47f", + "c225e39d7e34", + "bc59895adba1", + "8547cba5fe72", + "c3927ef31edf", + "bd581f14cf48", + "d2045712d9cc", + "a78dac65d9a5", + "c7216156c579", + "1a3d14ff0652", + "0f6d6a64732d", + "e79b6f64e5b8", + "146408d91490", + "4459a20d34bc", + "f1e0f078ce24", + "c8e2b985ba8e", + "ba5358c47506", + "f6506e4e42e8", + "0a0d27aa13e8", + "acda636b4109", + "1ca9e3d7c68d", + "ca52b0c33859", + "924ca351d5df", + "f014676eeecd", + "855e2c453672", + "debac24ed27a", + "3ac17e1508ea", + "779aa1fbaf69", + "5d9110157fce", + "6fae388605da", + "fdb81aa0bdc4", + "5b605f543b5d", + "1c73481ac309", + "ed6e4ebdb97a", + "4324d5e36169", + "e22c87d1b034", + "cdc61897adf1", + "ef130cb786e9", + "a02666abab40", + "817d3bdc8933", + "5dd9a44120fe", + "6db8f6f5be71", + "04781e5b3aa1", + "56314e7a26a0", + "297638b3e3f6", + "fb888f5186a1", + "d4a9d78d0281", + "78378cf0813c", + "3f169424c5c4", + "1d19df235598", + "e71c6e0c15c6", + "913235b0bf33", + "3062ecd53cb9", + "9f33016871b5", + "a291544483e7", + "8e6f9b50a7e1", + "03f913083cba", + "407196cd0834", + "87c0a699f046", + "63e4c4417740", + "4f1ad19ba9ed", + "6f233d9783bf", + "d6487a9499a5", + "b8cf7571746d", + "9bb5498e8d8d", + "c5242dcc3b4c", + "39daf83dff74", + "85ebc1fd169e", + "360a872fc6e5", + "51ee93c7b40e", + "8a35ae971da1", + "11af7ac6dd62", + "cf56ef37308d", + "a8b1e5562d6f", + "27328edb544b", + "031578db6d27", + "0681b6a4e210", + "6b7c7bb0171b", + "dc74f324f7db", + "d8f1e864c0a5", + "e2c7fd6a9093", + "ad8e437454d8", + "37306e907af4", + "527c5b89c47b", + "d5700b0af199", + "f604e55a66ca", + "6f869b875813", + "7aebe1b11442", + "9452a10b9313", + "e8a7155bfbec", + "654992cafa00", + "42d2c7558d58", + "c6ed99b280f3", + "538a52deed29", + "1a534773f649", + "04e23b0b5d08", + "4eb611db48ad", + "cbb4cb9eb886", + "99c8b7e015a4", + "11e066cad156", + "5c6a190739fc", + "32820d8212b5", + "1e2ecc3a9855", + "164e00b3dd64", + "e432184eb475", + "9c655d5908ce", + "71387fe8c8d0", + "c5f4280771d4", + "2b20ba0238f8", + "406fef640b57", + "d3d1db37312d", + "c2f84a5b2b54", + "a876592094da", + "c740be9b9231", + "569e9c198e62", + "f4d08a001f37", + "1d7b2e162edc", + "f34ad744398e", + "c86c523ed053", + "6cd6896858b1", + "aee9f3e9f8bd", + "8ed34fc74766", + "0cf418e00aa9", + "7ca14bd6114c", + "e727c891dc65", + "abf087b808e5", + "ddb5976d22f0", + "e74d014ed121", + "612e85a401e1", + "1769a16646d0", + "82831887b7f2", + "d8e1836a5e16", + "4c98f3da7020", + "6f07e5ed698f", + "4afbaac3705c", + "d228d40c6d8c", + "f2143062ffc1", + "756d024abf1a", + "9a1faef9c3a2", + "cbec5677ad79", + "ed9fd0b93dd7", + "e1fddad4902a", + "ead1642e9314", + "bfd53faccc60", + "d6b39e8e14a5", + "aa1a9ede2891", + "ab24e73f79a3", + "53ad682228b5", + "0434552e9ddf", + "646db44dd9f4", + "47f9cb7a7222", + "a2c9c5b191e8", + "494050ad67fb", + "48a110637114", + "77cb204c7ce8", + "f8ef13434039", + "80e92d8026d9", + "8346c1565441", + "ebaa5c10902c", + "ee4e9e87d254", + "f2ab10563ed7", + "c3f9011de1f2", + "82ab12d1f6fe", + "3c097a895ca3", + "f7bdb845998e", + "8327b99cccc3", + "24e1aa1e410b", + "2e6db999be23", + "8d0f78932f0d", + "f7bb8aadf5dd", + "cac46a2c422b", + "1479467edac0", + "d8ca53f3dc0a", + "e4c2c8ace65c", + "b202ad884451", + "22ce9b82fe6c", + "a3836c06ccf3", + "1b8bec287901", + "6f822a50fb9a", + "31671ac69a58", + "90c078b0ec5c", + "61fe06c7063c", + "52c922795899", + "36d21b2ac323", + "a51dfee88418", + "1ea06667316a", + "d1017558ed2b", + "1afbfcbdb396", + "6a771683d1e7", + "2440914891eb", + "9deaa87f407d", + "3573d0fd1100", + "0a438114a7e8", + "96a0d1aac03e", + "6a0772036c4d", + "abe6dbd4774d", + "00a0f7ea4e2c", + "04aefb2559bf", + "112aabba9509", + "fa108c64b3ca", + "9abaa49dc071", + "5a7ccbc0b4d8", + "3f185f350f10", + "a24a6c4f079d", + "47f9f1581e9f", + "830d0ef964f3", + "bc0247501e00", + "e89aad884976", + "d522abbda02d", + "19d2d17a8c73", + "79d11b21e9ae", + "676514d8edc7", + "244ddf0709a5", + "e320b2b8edd9", + "b5c77ea45ce6", + "4fcb4ddfb2e7", + "8dc2e031fff8", + "190d520953ab", + "efd9a3533f8c", + "ba0ec798bffc", + "703e32f28627", + "5e0a4bdaaed5", + "97b03043c6f3", + "e1c3a7ce9e28", + "d634b53cd478", + "fcd2bf7cb099", + "a8da2ba37a51", + "84493e8f3783", + "2c0f84e1eb1a", + "9b3f14d91a12", + "6d62ae4e17f6", + "1518a7a9a11d", + "c4a20b6c7198", + "c9e787bbe050", + "0f721ae1b9ad", + "e4d258fc84c7", + "8036949c749b", + "cd140af02ef3", + "d2e8b7aa1e82", + "e8ada9fae237", + "e5cddb4a311f", + "a0fb4effdeb5", + "7d4d58a40c59", + "18b9b83525c1", + "63d016e53794", + "d3728f31c0db", + "710b3c8be297", + "fcf0390fb2ce", + "ce93de8fd629", + "9a16db7180b0", + "5fb11d08823b", + "6227a166f688", + "db58e3807e75", + "52a25ebdd5ee", + "c491625b5500", + "6c4581b99ea5", + "f90cf9c037f8", + "412f8689b4a7", + "8ed1145ff9c2", + "34c845141b72", + "4002df2f58e8", + "a2e3b5edde8f", + "4600f935ed1d", + "88b8d70f4fe4", + "a4a255daf632", + "94b309bafa79", + "b9d5ff5e7463", + "e54481f0e510", + "3078eb7c27ec", + "faa9e1896a84", + "eb1d267eb8e3", + "38f874872425", + "d30e5cd25c1d", + "584e6566f44d", + "4bc9509376c0", + "8a87765e861e", + "8b81a10027a3", + "0dbf84be4f09", + "74c2c49fd4fe", + "29e8bfb99fb4", + "6d91c911db38", + "c3d55445a9af", + "2bfcd3d26d63", + "7d5495ce42c8", + "860f547cf9e4", + "d2d52630dbd9", + "a02930b263d6", + "dda5a91b1c2a", + "82ba9e0cda7f", + "88603d869af3", + "9d5458440127", + "878cf614b8ed", + "81909ea9d698", + "e4cc451b2e7d", + "a16da1ee795b", + "d1b52c25ff75", + "cdeee9e2c434", + "6a67e42c3dce", + "a631488fe860", + "5c6d2da8ae81", + "09ff7d6e71c5", + "dd7c823a85e1", + "fe4dd82ab7ea", + "9e153a70aa24", + "50f0237f3a49", + "396a6803a6e0", + "535e9dd12995", + "502956e458df", + "5390587c9d3c", + "7870ae2c7426", + "b55aeb5a5303", + "4b09fed9dd71", + "5fd81c093399", + "6d752adb5f7a", + "994de3235159", + "a2f67c034833", + "5fe2d131cfca", + "e79ad3550d2a", + "e7ec64fed057", + "196ae1b7cea0", + "73c72bfbe73b", + "dda0a29b947a", + "2d63416dbe40", + "94b2f20c5850", + "8668040914ea", + "e0a827da4c70", + "405ebba003c0", + "6f41db089699", + "747737eb994c", + "32032779dee9", + "def46c9408fa", + "087c4d4d7e5e", + "4921b3dbcbd5", + "24200a363008", + "77b6d6090015", + "1dba7cd5eab0", + "11e32fa979e8", + "b78cb29cac10", + "609e14b1dd86", + "83b5f3fff612", + "84d8f3ce20db", + "e5ab31a8a894", + "3ab3fb2cf386", + "4b961f90da33", + "aa3a04a4b258", + "b21cebad6748", + "d8ec500400c7", + "895523943a73", + "8c1bc99f8722", + "1fcb6a02d3ab", + "4e590d6fb60b", + "30c4d61af152", + "3721f50853dc", + "651eb7c5119b", + "d9a10e12e47f", + "10b43d2d1e3a", + "e115635103f6", + "9c6a9d8e47a9", + "73ef555424bc", + "816f350293f7", + "eaa01566a53b", + "f4de430f95d9", + "bc61f2ae0508", + "69eed16d0728", + "3fa13cb24298", + "3a3e05ce23f5", + "62a6423feb5b", + "9b7afe9a1073", + "b5e415f561a2", + "37d4f9f88c30", + "fa0d79cee4a2", + "818c3e7d571b", + "b8db8133246a", + "d448c8ced3b9", + "074c0c5c7c1d", + "212d12f8f9c8", + "ab73115d1747", + "fb943cfc0809", + "6f46136809c6", + "ec2af2af087d", + "0004d492081f", + "5c981fb87601", + "98c5f29240b9", + "85c4dfcff4bc", + "7f7579a21882", + "12a5a1baa178", + "200ad3260990", + "e5b79a22d160", + "7e55a2eec7d9", + "060ca754b472", + "63ea2ebb84d8", + "fff4f3ba9170", + "cd911024768f", + "b6538dd59772", + "5d70235576a1", + "d2fc332b6828", + "fb8b076e0cb5", + "6da87f727811", + "c299d30c7a38", + "ae22dd3701f2", + "4aabc7bdffed", + "0b2377aeae10", + "2ae0837227cb", + "d568f95a455f", + "ee6c17aa0771", + "c7373dee17b2", + "230fe03f32b5", + "5523ac693ecc", + "3dfbb3fed100", + "27817926a143", + "2e9e6abd090a", + "4880b3c7f354", + "af7cfd47a6a4", + "d29cb7c536be", + "5dba4732ef23", + "1fe56920d69c", + "eb8dd179d685", + "8cd322aee0df", + "b066fb73feee", + "2d220958d4fb", + "1f0bd927f4f7", + "0b404df6a9c2", + "61ff5e9fdb98", + "b48eaedcd540", + "31976c91120b", + "341c778bcc3e", + "bf74c86796e4", + "ae274e24be24", + "084112516423", + "7a0ef77f9a6a", + "268c7513da60", + "c6beb1c241ed", + "984817424c08", + "b18d5c274249", + "d3c7051a19d9", + "26e2cb035967", + "ddaa659a3332", + "2432ae0b0057", + "7134b8566cb7", + "e8d7b8564825", + "08a5bdeb757f", + "077e4c80fe33", + "efd22d50c80d", + "3ef47807ccfb", + "f2d895ee0f2b", + "60c36e4c43e3", + "9bb4c0bf7227", + "a7205f6e9239", + "7f21e96a4073", + "81db84d76870", + "55e2ba1dc112", + "83cc76b69a63", + "6fb2fb1c4a6f", + "19cd6f2e8070", + "dc6b1ff79068", + "148a1a3696de", + "5a5420edd6b2", + "7684c6119b5f", + "1f0975c0259c", + "f8da1e2af862", + "8c735bfe58d7", + "a0a5f98d75ff", + "8ee3fcddaafc", + "ea05d9e678d3", + "591876f0c2e9", + "6968fa78ff3c", + "99af24cd8c08", + "2c04f4d837e3", + "985515e1b34b", + "d7db08a1ed32", + "8091e5147f5b", + "cad9715efddf", + "59268848ae2f", + "495e2b00c072", + "5224b82d22b5", + "442438538d23", + "2291929ce6d5", + "33a937a127f1", + "e444a542540d", + "128ef3f88563", + "28d09fe0de6b", + "2042098755ac", + "259f6431200a", + "848f642f2472", + "a928cf294afb", + "63d6332e20a4", + "fa1e000f631e", + "7c63f6c8828b", + "b815f833863e", + "863919a93c8c", + "035be3a8f1bc", + "58a60b5a31d9", + "e01612eb33fc", + "6b448f55d1dd", + "51ad1f634849", + "3c3eb9cf78bc", + "ec3b20431e67", + "257e7605a3c7", + "0ffd84836441", + "cd58bbe524a6", + "18764a7c9e83", + "14036ba923c9", + "41e9e0a0767c", + "f37cdbccddd2", + "b00f9623a040", + "13e7d147b9cf", + "a3ecfd377e5a", + "a2e5be13f3e6", + "5bcf618e2522", + "ad1a6ea6634d", + "08589b45fe6f", + "3ded1b5ec032", + "3df87dbfd4cc", + "08d19cb6505d", + "ed834c04c316", + "ad5b779a932a", + "b0f93c85355a", + "868caebc550c", + "c009ecd7a5fd", + "f4b4806461dd", + "b4be877b2132", + "62b9cadde2aa", + "b6a279f8c649", + "0796c816d140", + "b36c23f8027b", + "72d2d551d74c", + "28ddf5d16840", + "a80abc5c8de3", + "ba13e82b3774", + "62d5ca07571c", + "2e0be196a1bb", + "f47328334bc3", + "8f056225fcb5", + "e8ec8204e41d", + "4c941ab5ce81", + "e5d17f59c458", + "442f02e86dde", + "233250b4e1a0", + "4ef64fe2083c", + "7ce7a4e1aee4", + "95e7a0afd487", + "463146f13cd1", + "e232e87974a0", + "210e6fb50260", + "c78366e5993f", + "f4a6260b11e7", + "90c081c01fdd", + "1b757f7fe0b7", + "8359381dd46e", + "09cbdb34682a", + "1372f1c1fda5", + "e5ce22fe9de7", + "8d57c187c211", + "4ef04681b3e3", + "3da3c5980359", + "185d362e2042", + "0e8e1c5b0fa7", + "5c8d73d1b7d3", + "0d5902f95ba2", + "dc309ce8ffcb", + "211d24432997", + "b37f0b858f46", + "cf85054c188a", + "d48ae4dcf1bd", + "76a224462cc7", + "c6f78682901d", + "dbefdcb5210e", + "f1d0e8448e45", + "d75cf6a5e5de", + "9bd4854a048e", + "cc9cd07b3f42", + "312066713da3", + "4df191fa5942", + "576565459115", + "07595eddd9d4", + "a6803bd57f8f", + "083a3cb36c58", + "9ac8d292d36b", + "98e47e55302e", + "a59e8dc4ffa1", + "19fada8b2297", + "edfef3ed40c8", + "58c3db96d472", + "4622ddfe445e", + "b7d3ba06cc4c", + "9b4e8007fc1d", + "26f1ce100d85", + "7acdaee550fd", + "029fb8709471", + "1a4f985f3cfa", + "f6577d918b78", + "8832525a69e8", + "c4ad3a761f69", + "a1fdb4cea27d", + "2bc956987c64", + "76c274773ccc", + "fb53d2fdae69", + "8576dd665ec0", + "b2e4452d6b4b", + "9125c461274f", + "d14268b4b4fe", + "91cb203ab483", + "df1fa40b1a34", + "c4360531e5f0", + "21306308643e", + "c953b65d83d5", + "08d19428a72b", + "73b7a63744a2", + "3bc33a329642", + "fd204f58ce17", + "491c072ce85f", + "e0a4f53a0fd6", + "828af1015231", + "3dad2ee08272", + "5e37d2cc188e", + "61ddf02de775", + "f8036aedcdb9", + "e83a831b23f2", + "6b4085d43edb", + "62e675282f11", + "3b5fb2c648be", + "2152e06cba84", + "ad01803f0653", + "ee7221030be4", + "2cbb0df5fe98", + "103f60bbab61", + "1f602327ecfe", + "0379815163a0", + "4a39c8df7306", + "324487b63865", + "8e8d58319d30", + "16263aa4fe62", + "5a1e492c171b", + "439bd748ba75", + "ac729a917393", + "3621d5bdc47f", + "b31ec4c940ba", + "13e9e9ee5c59", + "ef92cbacd938", + "179fb319c29d", + "32e91de1fd25", + "9c3e65215251", + "b6926c34ef86", + "60e6769ec83f", + "a1f9bba6c881", + "7645f390c515", + "08c5ed55fa44", + "a835162d3164", + "d4c7e80b406d", + "96dab9211b6e", + "eb239bbd39aa", + "b7872820667d", + "e9c8ccce9792", + "7a51f0c0c541", + "aa97985e411c", + "32dbea7095f1", + "d6ba4da66913", + "b0a84af56c64", + "00fa939a7761", + "8a13f8afeb71", + "17814bbd5b04", + "6e29fb6d1952", + "e72eb13502bb", + "562be1112d1f", + "d0e79b5a9865", + "0cb3078a06d5", + "c0ca8fa58b21", + "f15e4bdacd9d", + "40ab9804f46c", + "bbe419c14d79", + "273a3f8a3b29", + "6e7abe1be5ae", + "3aed0781e069", + "a3060596bc92", + "2abf85ca8bca", + "736cbcc238a4", + "ece5045c4dd7", + "39e7970604b1", + "8da7936fd8dd", + "8cf0b58b9ddd", + "7dd4062cb1b6", + "fe6dc7d06e56", + "27f8e28af8f0", + "b5456e72e96f", + "2750b31a5e0e", + "e2f3615405d1", + "90a704eee00d", + "20afb8e5092a", + "c64e7952595c", + "214f02f35e0b", + "47e0289ef5e2", + "29ae01f88ac3", + "2de252695e7b", + "2d10af3c9127", + "f7da966820b0", + "25498fa3df99", + "617102a55e7d", + "e64158f9a2cb", + "e8784aa309c8", + "3c5632687e79", + "017be4d4eb9f", + "3490da06420f", + "6bc6fb7ee908", + "08f4603740c4", + "22c7fd203379", + "3dcb1d7b4a12", + "5202332b7075", + "0ab745361f84", + "10d12ca82bc8", + "c722a84e8d7f", + "ccec827bbf3a", + "9de459c257a2", + "bcb5eb026a60", + "8d30207bae21", + "2e61c6031764", + "536e863c3c34", + "165496bb778d", + "9405474a8129", + "9da026e74a7f", + "2f51ecf42c79", + "fce7a90e3ab4", + "ca94c5502737", + "af650c142f25", + "2568ba5a00a3", + "0b35562b7155", + "9809f7ae327a", + "beb5318c1a13", + "57c75c086685", + "554ea65231f7", + "d283bb8ce4de", + "a0035b44f7d1", + "7ed9b577f61c", + "4ee008ca26c9", + "f38f10255e01", + "34e875fadf36", + "9df4fc781a63", + "42ffce808c3b", + "e559bb4e158c", + "73a5efc7ffd9", + "22700967ded8", + "f48c7f994cfa", + "59f0a6117652", + "b4ce20aeee7d", + "cb7774a32ac5", + "005eaa8f796e", + "2fb8d147fcfc", + "536031ea1d7c", + "698574a7e552", + "8d532b72f95c", + "f084e246b97f", + "ea60e48fb60e", + "ef46f9baefb2", + "847669120315", + "b4a58917186f", + "335cea2451a4", + "3ec8fd0b4a93", + "6612eaab7cb3", + "bc5da634cf9b", + "f3e28c5ecbfb", + "fba448826446", + "d2dad1a98a43", + "a2576bff34ae", + "5338cd47e803", + "c008053cdcb8", + "5f6382366bb5", + "a9e1769462cf", + "49baec594ee6", + "02b589306f57", + "e9bb532202c9", + "23b30f008578", + "1f880e6dd582", + "274579eed5c0", + "cd4500970301", + "7dbd2cee46b6", + "0e6170f16d69", + "4f73a0915bf8", + "4ea2ad6f5d0a", + "2d710b8109f8", + "788210038906", + "7b1907c7d02d", + "b4ddbe708123", + "55b1eacd8131", + "2cf5b37f3314", + "cb4a1fcb517b", + "d5938cdcd7ce", + "921dcf5c8770", + "7ad6b63951d0", + "66326c44a515", + "8ebb0e59dfb4", + "e86ca56c9a47", + "bcb8652de3a5", + "33038f27f1f1", + "44b29888dea5", + "64d7cd57adba", + "5aa390db76fb", + "4e51c73a5e8c", + "9252fc23db29", + "acaaa8cac787", + "9c892371385d", + "c2db6c1c708c", + "e9de95d7b96d", + "475b6b33d620", + "fee59a671060", + "64093b61002e", + "aa7385c5fc13", + "9975e3a56de9", + "fbc6c4ca6257", + "0d5c0098ff44", + "1be285af847d", + "04d311ddef33", + "c67e51254461", + "38c7a7108a91", + "c1e9e0a63735", + "c24d2e98de51", + "ea7b2ce61f75", + "ff4921b7d5a4", + "06e16975d4ac", + "63d8eed8fcdb", + "1e6ffa7ba488", + "e8783f0f6da2", + "80d0f53c3199", + "28da1f5a5252", + "312f4f16416d", + "5b015aa5035e", + "e74dec1c1520", + "b906e00e6d3d", + "57c192b0a642", + "623040f5a0fb", + "c481156f9437", + "a60733716488", + "1f133644d843", + "0eb72741e1d0", + "b6939d391a23", + "5e1ac5d46532", + "02c63a2a10e8", + "42433fdf5cbc", + "24e3fefbdd57", + "31ff7d58e709", + "31085f944f6d", + "9a621492f69e", + "adcc91740553", + "59c6474dbe5c", + "0f69d7bea77e", + "19c8963dd93e", + "124581cc0892", + "c2a7bf304f8a", + "afc593ff8c4c", + "376f1df10ae4", + "803184e68c67", + "050aab6c6e27", + "bd19e2fb9051", + "0b4d66d202fe", + "a8b3ee26d03d", + "fe96c060d0a5", + "c01752ff733a", + "cb4a54400204", + "c96a4641f9cb", + "91c8987ec058", + "4543867f9f05", + "b3f1e6f849ee", + "96ab0bd23ded", + "7487f33694f1", + "64b2adeeef54", + "ce9dcefa9872", + "2319e612920b", + "08e48b36f136", + "e98ebd191cd4", + "b2d4deb6b5a6", + "f67b736991ef", + "0bdbe88d7d1a", + "f3967d0cef81", + "4a16b8738aaf", + "246af5460787", + "8d40448e5376", + "4edb2aff1077", + "20e6e99900b2", + "3e322760d6b8", + "60c8d338dbf4", + "7c30ef2b8f3a", + "6472d6856a05", + "226618df7abc", + "a45e0df8d478", + "25c7d03af4a4", + "6f8f983d4e9e", + "d871e507db6d", + "bc93c299d958", + "1b9c70022bb7", + "55629169b449", + "ca1069b503a9", + "a220ea24473f", + "6e7653fc9fcd", + "6bd49a8ce27c", + "d942730fb489", + "1050a3add9dc", + "2a69a21c70f8", + "a2de461a48ed", + "efdd21065554", + "290eab77f4d4", + "5eb8fb758304", + "9a587cd0bc28", + "8e7a0deffa5c", + "c65c37b507a4", + "1d8649714119", + "85a84d1caebd", + "ac447d486aa3", + "382dd8bdea8b", + "d4c0f61c1281", + "9dc2299143fb", + "5f5af0d3afa7", + "9f9e68db7ed3", + "0e6a5bac5037", + "4970a45b31a8", + "290c40ca1072", + "9e70017f7079", + "4d2868f6b3ea", + "8e35b9de52d2", + "dd25100ac719", + "f5857ad8c936", + "21bbf74d2d8b", + "b75c096bc402", + "f72efa57778d", + "bea309c04014", + "b90c879832af", + "413b4e6d2d88", + "55600df6acec", + "b186e55eb723", + "7fc49aac4ccf", + "79b2a53324e5", + "12a10d9a4295", + "5980177206ae", + "bf56855ec505", + "03a9ee616ef3", + "e42bcf801a85", + "b5921c9a853d", + "8ccba0ca579b", + "31c27c236862", + "80bad008949e", + "504863e20f2b", + "37043ba1fa5b", + "12581ac99721", + "3c7a4d0b66e9", + "2d1c1112bd6d", + "b84cabfc5663", + "d2ca8ad04355", + "336bf89f3398", + "35b06501fd94", + "624f4fd91f0e", + "e696d671cdb0", + "23a178f91ded", + "0d25047530cc", + "d7c3612217a0", + "8fc97703463f", + "66a2df5e5656", + "af1a1bd3ec15", + "1af2ea4fe299", + "a366fbbdef19", + "3f5f590860dd", + "5ddfd8d227d7", + "11f4d081bcc6", + "954389263686", + "25a4772eac5a", + "6a8e5a7e5209", + "153bf2299641", + "938d4973d8a7", + "7a2462313ab1", + "df23385b2702", + "cd2e94ce42da", + "ddfa89e20d5b", + "86ccc7ba9528", + "25bc8825fdb5", + "9fcf3111eac5", + "5f9038ad7065", + "dbf4a6ae5e69", + "f5291c280a95", + "e79e535eda0e", + "5a6339062cb1", + "f90aac0f1f2a", + "d38bfc6d4d85", + "7333b9dd4e1d", + "1ebd5bfffc4d", + "edfeab4fc28e", + "5e12fa1b14f0", + "133266694714", + "ef4981aa5f27", + "49c0e51b554c", + "65c4c5bb2396", + "6b741e21ea28", + "97afbd1b0bf4", + "c72df3e14b7e", + "aebf14e895a5", + "0c9f30d250b8", + "2f562ac90712", + "6f8d5c6a4563", + "92c95113a445", + "52cdef5c699b", + "cf2d56c66c4a", + "c7e3b4209e15", + "d1cda9a74f75", + "100fa7fba560", + "151b96b260a5", + "1558dac1b3f9", + "1156729f8e7e", + "9e5ca6f7a7fc", + "510547e6e6a1", + "9d4e5f709420", + "9e32b326206e", + "2afb5a3603cb", + "f0273d7adfc3", + "e25f61b03cd1", + "c698e6d551bf", + "af09e614a336", + "1e4f4a0023d8", + "eaa5180db280", + "015486d70cae", + "37950cd7b218", + "e6a34804f7e2", + "36dca685bcde", + "ee85425e93b1", + "46e001660b82", + "3a6abf985929", + "b1bc55044f1a", + "e886114dbd77", + "e694df4a78d1", + "e0cca4b453c5", + "f0babf47cfa7", + "bd64ca2f44a7", + "f47e0b4eef4f", + "efa17d9d4444", + "6b11d84cd90c", + "27f031a35cfc", + "36d1a6a2470b", + "552af8c5619c", + "56fa44f1fa18", + "c2922cf602e1", + "c31fd49754d2", + "0e7c1ab3de2d", + "1ee30d6d2438", + "5fcb542dad01", + "d1b9683369de", + "48cd6b7afeea", + "5a1c91414c12", + "9f95431403e6", + "f276414c2d83", + "9ecb56b1cfcf", + "5ffc696dc345", + "ebe5c6bb4375", + "fe35435938f5", + "2c0e54fb82db", + "aece55d34ed1", + "0e96ddc342ac", + "a40b4fce5174", + "57e2bc55d2f1", + "d5694f8d72d4", + "fe85ee02259e", + "621b5bc08685" + ] +} \ No newline at end of file diff --git a/data/source_files/messy/005eaa8f796e.py b/data/source_files/messy/005eaa8f796e.py new file mode 100644 index 0000000000000000000000000000000000000000..8a85a524c6381c0f4e277dd284d072a8b41daaac --- /dev/null +++ b/data/source_files/messy/005eaa8f796e.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 + +from typing import Any, Union + + +class Animal: + def __init__(self, name: str) -> None: + self.name = name + + def set_order(self, order: int) -> None: + self.order = order + + def peek_order(self) -> int: + return self.order + + def __str__(self) -> str: + return f"{self.name}" + + +class Node: + def __init__(self, data: Any): + self.data = data + self.next_node = None + + +class LinkedList: + def __init__(self) -> None: + self.head = None + self.tail = None + + def __str__(self) -> str: + current = self.head + string = f"" + while current.next_node is not None: + string += f"{current.data} -> " + current = current.next_node + return string + "END" + + def is_empty(self) -> bool: + if self.head is None: + return True + else: + return False + + def insert(self, item: Any) -> None: + if self.is_empty(): + self.head = Node(item) + self.tail = self.head + else: + new_node = Node(item) + self.tail.next_node = new_node + self.tail = self.tail.next_node + + def remove(self) -> Any: + if self.head is None: + raise ("Empty LinkedList!") + else: + data = self.head.data + self.head = self.head.next_node + return data + + def peak(self): + return self.head.data + + +class Dog(Animal): + def __init__(self, name: str): + super().__init__(name) + + +class Cat(Animal): + def __init__(self, name: str): + super().__init__(name) + + +class AnimalQueue: + def __init__(self) -> None: + self.dogs = LinkedList() + self.cats = LinkedList() + self.order = 0 + + def enqueue(self, animal: Union[Dog, Cat]) -> None: + if not isinstance(animal, (Dog, Cat)): + raise Exception("Expected Dog or Cat!") + else: + animal.set_order(self.order) + self.order += 1 + if isinstance(animal, Dog): + self.dogs.insert(animal) + elif isinstance(animal, Cat): + self.cats.insert(animal) + + def dequeAny(self) -> Union[Dog, Cat]: + if self.dogs.is_empty(): + return self.dequeCat() + elif self.cats.is_empty(): + return self.dequeDog() + + if self.dogs.head.data.peek_order() > self.cats.head.data.peek_order(): + return self.dequeCat() + else: + return self.dequeDog() + + def print_cats(self) -> str: + string = "" + cat = self.cats.head + while cat is not None: + string += f"{cat.data.name} {cat.data.peek_order()} | " + cat = cat.next_node + return string + + def dequeDog(self) -> Dog: + return self.dogs.remove() + + def dequeCat(self) -> Cat: + return self.cats.remove() + + +def main(): + q = AnimalQueue() + dogs = [Dog("d1"), Dog("d2"), Dog("d3")] + cats = [Cat("c1"), Cat("c2"), Cat("c3")] + both = [] + while cats != []: + both.append(cats.pop()) + both.append(dogs.pop()) + [q.enqueue(animal) for animal in both] + + string = "" + for anim in both: + string += f"{anim.name} {anim.order} | " + print(string) + # print(q.print_cats()) + get = q.dequeDog() + print(get.order,get.name) + get = q.dequeAny() + print(get.order,get.name) + + +if __name__ == "__main__": + main() diff --git a/data/source_files/messy/0313c3d1b130.py b/data/source_files/messy/0313c3d1b130.py new file mode 100644 index 0000000000000000000000000000000000000000..8a541e67401b79ca7c42ad0362d81bb514bab960 --- /dev/null +++ b/data/source_files/messy/0313c3d1b130.py @@ -0,0 +1,33 @@ +import os +import cflearn +import platform +import unittest + +from cfdata.tabular import TabularDataset + +num_jobs = 0 if platform.system() == "Linux" else 2 +logging_folder = "__test_zoo__" + + +class TestZoo(unittest.TestCase): + @staticmethod + def _test_zoo_core(model: str) -> None: + x, y = TabularDataset.iris().xy + zoo_folder = os.path.join(logging_folder, f"__{model}__") + zoo = cflearn.Zoo(model) + for key, config in zoo.benchmarks.items(): + local_logging_folder = os.path.join(zoo_folder, key) + config["logging_folder"] = local_logging_folder + m = cflearn.make(model, **config).fit(x, y) + cflearn.evaluate(x, y, pipelines=m) + cflearn._rmtree(logging_folder) + + def test_fcnn_zoo(self) -> None: + self._test_zoo_core("fcnn") + + def test_tree_dnn_zoo(self) -> None: + self._test_zoo_core("tree_dnn") + + +if __name__ == "__main__": + unittest.main() diff --git a/data/source_files/messy/03f913083cba.py b/data/source_files/messy/03f913083cba.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7fb88f2b8f8ab7d00332f23a58d29ccc1392ee --- /dev/null +++ b/data/source_files/messy/03f913083cba.py @@ -0,0 +1,39 @@ +# This file is part of postcipes +# (c) Timofey Mukha +# The code is released under the MIT Licence. +# See LICENCE.txt and the Legal section in the README for more information + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from .postcipe import Postcipe +import turbulucid as tbl +from scipy.interpolate import interp1d +import numpy as np +import h5py + +__all__ = ["HydraulicJump"] + + +class HydraulicJump(Postcipe): + + def __init__(self, path): + Postcipe.__init__(self) + self.case = tbl.Case(path) + self.case['alphag'] = 1 - self.case['alpha.waterMean'] + self.U = self.case.boundary_data("inlet", sort="y")[1]['UMean'][0, 0] + + y_inlet = self.case.boundary_data("inlet", sort="y")[0][:, 1] + inlet_edge_length = tbl.edge_lengths(self.case, "inlet") + self.d = y_inlet[-1] + 0.5*inlet_edge_length[-1] + self.Fr1 = self.U/np.sqrt(9.81*self.d) + self.d2 = self.d*(np.sqrt(1 + 8*self.Fr1**2) - 1)/2 + self.Fr2 = self.U/np.sqrt(9.81*self.d2) + + iso05 = tbl.isoline(self.case, "alpha.waterMean", 0.5) + idx = iso05[:, 0].argsort() + self.xfs = iso05[idx, 0] + self.yfs = iso05[idx, 1] + + idx_toe = np.argmin(np.abs(self.d*1.1 - self.yfs[:int(self.yfs.size/2)])) + self.xtoe = self.xfs[idx_toe] diff --git a/data/source_files/messy/04e23b0b5d08.py b/data/source_files/messy/04e23b0b5d08.py new file mode 100644 index 0000000000000000000000000000000000000000..d9c6ca6076e88b29cf949f6ea50aa8a721054e5d --- /dev/null +++ b/data/source_files/messy/04e23b0b5d08.py @@ -0,0 +1,115 @@ +""" Export Submissions Transform module """ +#pylint: disable=too-few-public-methods +import pandas as pd +from .transform import TransformBase +from ..resources.field_configs import FieldConfigs +from ..resources.field_maps import FieldMaps + +class ExportSubmissionsTransform(TransformBase): + """ Transform for Export Submissions """ + def transform(self, data, sep): + """ + transform submissions from export + """ + output = list(map(self.get_data, data)) + output = list(map(self.pretty_format, output)) + output = [i for i in output if i is not None] + output = self.normalize(output) + output = self.to_csv(output, sep) + return output + + # pylint: disable=R0201 + def get_data(self, submission): + """ + Get data from submission object + """ + # skip permit type = existingPermitApplication submissions + #pylint: disable=too-many-nested-blocks + if submission['data']['permitType'] and submission['data']['permitType'] != 'existingPermitApplication': + output = {} + data = submission['data'] + + output['id'] = submission['_id'] + output['created'] = submission['created'] + #pylint: disable=too-many-nested-blocks + for key in data: + # flatten list values + if isinstance(data[key], list): + if len(data[key]) > 0: + if isinstance(data[key][0], (int, str)): + output[key] = ', '.join(map(str, data[key])) + else: + file_names = [] + for index, val in enumerate(data[key]): + # if storage, concat filename + if 'storage' in val and 'originalName' in val: + file_names.append(val['originalName']) + else: + output[key+str(index+1)] = val + + if len(file_names) > 0: + output[key] = ', '.join(file_names) + # flatten multi select values + elif isinstance(data[key], dict): + # building use code needs manual process + if FieldConfigs.is_building_use(key): + output[key] = self.convert_building_use(key, data[key], data) + # flatten nested address fields + elif FieldConfigs.is_nested_address_field(key): + output = self.convert_address_fields(key, data[key], output) + else: + multi_selects = [] + for multi_key, multi_value in data[key].items(): + if multi_value: + multi_selects.append(multi_key) + output[key] = ', '.join(multi_selects) + else: + output[key] = data[key] + return output + + def normalize(self, data): + """ + Normalize data into a flat structure into DataFrame + """ + dataframe = pd.json_normalize(data) + # update column names + dataframe.rename(columns=self.pretty_string, inplace=True) + + return dataframe + + def to_csv(self, dataframe, sep=','): + """ + Return CSV from DataFrame + """ + return dataframe.to_csv(index=False, sep=sep, line_terminator='\r\n') + + def pretty_format(self, data): + """ Pretty format data fields """ + output = {} + + if data: + data = self.set_pts_fields(data) + for key in data: + if self.datetime_valid(data[key]): + output[key] = self.pretty_time(data[key]) + else: + field_key = FieldConfigs.get_field_key(key, 'map') + phone_appnum_key = FieldConfigs.get_field_key(key, 'pretty') + if field_key is not None: + output[key] = FieldMaps.map_key_value(field_key, data[key]) + # manually add Fire Rating and proposed Fire Rating + if field_key == 'construction_type' and data[key] != '': + output = self.add_fire_rating(key, data[key], output) + # format phone numbers and building application number + elif phone_appnum_key is not None: + if phone_appnum_key == 'phone_fields': + output[key] = self.pretty_phonenumber(data[key]) + # cleanse characters that break the csv + elif isinstance(data[key], (str, bytes)): + output[key] = data[key].replace('\n', '\t').replace('|', '') + # relabel field, if necessary + relabel_field = FieldConfigs.get_relabel_fields(key) + if relabel_field: + output[relabel_field] = output.pop(key) + output = self.reorder_fields(output) + return output diff --git a/data/source_files/messy/0bdbe88d7d1a.py b/data/source_files/messy/0bdbe88d7d1a.py new file mode 100644 index 0000000000000000000000000000000000000000..d9be5eda54c6b03914f01c88d3b8d97dd5add586 --- /dev/null +++ b/data/source_files/messy/0bdbe88d7d1a.py @@ -0,0 +1,106 @@ +# Copyright The PyTorch Lightning team. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +import re + +from pytorch_lightning.plugins.environments.cluster_environment import ClusterEnvironment + +log = logging.getLogger(__name__) + + +class SLURMEnvironment(ClusterEnvironment): + """Cluster environment for training on a cluster managed by SLURM.""" + + @property + def creates_processes_externally(self) -> bool: + return True + + @staticmethod + def detect() -> bool: + """Returns ``True`` if the current process was launched on a SLURM cluster.""" + return "SLURM_NTASKS" in os.environ + + @property + def main_address(self) -> str: + # figure out the root node addr + slurm_nodelist = os.environ.get("SLURM_NODELIST") + if slurm_nodelist: + root_node = slurm_nodelist.split(" ")[0].split(",")[0] + else: + root_node = "127.0.0.1" + + root_node = self.resolve_root_node_address(root_node) + os.environ["MASTER_ADDR"] = root_node + log.debug(f"MASTER_ADDR: {os.environ['MASTER_ADDR']}") + return root_node + + @property + def main_port(self) -> int: + # ----------------------- + # SLURM JOB = PORT number + # ----------------------- + # this way every process knows what port to use + default_port = os.environ.get("SLURM_JOB_ID") + if default_port: + # use the last 4 numbers in the job id as the id + default_port = default_port[-4:] + # all ports should be in the 10k+ range + default_port = int(default_port) + 15000 + else: + default_port = 12910 + + # ----------------------- + # PORT NUMBER = MASTER_PORT + # ----------------------- + # in case the user passed it in + if "MASTER_PORT" in os.environ: + default_port = os.environ["MASTER_PORT"] + else: + os.environ["MASTER_PORT"] = str(default_port) + + log.debug(f"MASTER_PORT: {os.environ['MASTER_PORT']}") + + return int(default_port) + + def world_size(self) -> int: + return int(os.environ["SLURM_NTASKS"]) + + def set_world_size(self, size: int) -> None: + log.debug("SLURMEnvironment.set_world_size was called, but setting world size is not allowed. Ignored.") + + def global_rank(self) -> int: + return int(os.environ["SLURM_PROCID"]) + + def set_global_rank(self, rank: int) -> None: + log.debug("SLURMEnvironment.set_global_rank was called, but setting global rank is not allowed. Ignored.") + + def local_rank(self) -> int: + return int(os.environ["SLURM_LOCALID"]) + + def node_rank(self) -> int: + return int(os.environ["SLURM_NODEID"]) + + def resolve_root_node_address(self, root_node: str) -> str: + if "[" in root_node: + name, numbers = root_node.split("[", maxsplit=1) + number = numbers.split(",", maxsplit=1)[0] + if "-" in number: + number = number.split("-")[0] + + number = re.sub("[^0-9]", "", number) + root_node = name + number + + return root_node diff --git a/data/source_files/messy/0ccd89c328c2.py b/data/source_files/messy/0ccd89c328c2.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7a7334b3428135d28ee8a3da56e39eed250254 --- /dev/null +++ b/data/source_files/messy/0ccd89c328c2.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import sys +import copy +stage_length = 16 +stage = map(chr, range(ord('a'),ord('a')+stage_length)) + +def spin(amount): + """To save time, this function isn't used except at the end. + Normally, a counter marks the start of the stage and this changes + instead. """ + global stage + stage = stage[amount:] + stage[:amount] + +def swap(pos1, pos2): + global stage + (stage[pos1], stage[pos2]) = (stage[pos2], stage[pos1]) + +with open(sys.argv[1], 'rt') as f: + program = ",".join(f.readlines()).split(",") + +n = 0 +pos = 0 +arguments_list = [x[1:].strip().split("/") for x in program] +action_list = [x[0] for x in program] +history = [] + +# Change this to 1 for the solution to part 1. +iterations = 1000000000 + +while n': + text = self.__execMessage(text[1:]) + base.localAvatar.setChatAbsolute(text, CFSpeech | CFTimeout) + return + base.talkAssistant.sendOpenTalk(text) + if self.wantHistory: + self.addToHistory(text) + return + + def chatOverflow(self, overflowText): + self.sendChat(self.chatEntry.get()) + + def __execMessage(self, message): + if not ChatInputNormal.ExecNamespace: + ChatInputNormal.ExecNamespace = {} + exec('from pandac.PandaModules import *', globals(), self.ExecNamespace) + self.importExecNamespace() + try: + if not isClient(): + print('EXECWARNING ChatInputNormal eval: %s' % message) + printStack() + return str(eval(message, globals(), ChatInputNormal.ExecNamespace)) + except SyntaxError: + try: + if not isClient(): + print('EXECWARNING ChatInputNormal exec: %s' % message) + printStack() + exec(message, globals(), ChatInputNormal.ExecNamespace) + return 'ok' + except: + exception = sys.exc_info()[0] + extraInfo = sys.exc_info()[1] + if extraInfo: + return str(extraInfo) + else: + return str(exception) + + except: + exception = sys.exc_info()[0] + extraInfo = sys.exc_info()[1] + if extraInfo: + return str(extraInfo) + else: + return str(exception) + + def cancelButtonPressed(self): + self.chatEntry.set('') + self.chatMgr.fsm.request('mainMenu') + + def chatButtonPressed(self): + self.sendChat(self.chatEntry.get()) + + def importExecNamespace(self): + pass + + def addToHistory(self, text): + self.history = [text] + self.history[:self.historySize - 1] + self.historyIndex = 0 + + def getPrevHistory(self): + self.chatEntry.set(self.history[self.historyIndex]) + self.historyIndex += 1 + self.historyIndex %= len(self.history) + + def getNextHistory(self): + self.chatEntry.set(self.history[self.historyIndex]) + self.historyIndex -= 1 + self.historyIndex %= len(self.history) + + def setPos(self, posX, posY = None, posZ = None): + if posX and posY and posZ: + self.chatFrame.setPos(posX, posY, posZ) + else: + self.chatFrame.setPos(posX) diff --git a/data/source_files/messy/127b93eb1647.py b/data/source_files/messy/127b93eb1647.py new file mode 100644 index 0000000000000000000000000000000000000000..d9f0ba759404ab21f8b93c6f40fde8e030bbf8a1 --- /dev/null +++ b/data/source_files/messy/127b93eb1647.py @@ -0,0 +1,283 @@ +# -*- coding: utf-8 -*- + +# This code is part of Qiskit. +# +# (C) Copyright IBM 2017, 2021. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +#from math import * +from math import sin, cos +from qiskit_metal import draw, Dict +from qiskit_metal.qlibrary.core.base import QComponent +import numpy as np + +#from ... import config +#if not config.is_building_docs(): +# from qiskit_metal import is_true + + +class TransmonInterdigitated(QComponent): + """ + The base "TransmonInterdigitated" inherits the "QComponent" class. + + This creates a transmon pocket with two large pads connected by a Josephson + junction. Both pads have four interdigitated "fingers" which increase the + capacitance of the structure. There are three coupling capacitor pads with qpins + defined; these can be connected to other structures in a design using CPWs. + + Default Options: + * pad_width: '1000um' -- width of the large rectanglular pads on either side + of the junction + * pad_height: '300um' -- height of the large rectanglular pads on either side + of the junction + * finger_width: '50um' -- width of the "finger" on either side of the junction + * finger_height: '100um' -- height of the "finger" on the side of the junction + * finger_space: '50um' -- height of the Josephson Junction (equivalently; space + between two fingers) + * pad_pos_x: '0um' -- the internal coordinate defining the center of the bottom + rectangular pad + * pad_pos_y: '0um' -- the internal coordinate defining the center of the bottom + rectangular pad + * comb_width: '50um' -- the width of the four interdigitated combs connected to + either pad + * comb_space_vert: '50um' -- the space between the edge of a comb and the edge of + the opposite rectangular pad + * comb_space_hor: '50um' -- the space between adjacent interdigitated comb structures + * jj_width: '20um' -- the width of the Josephson Junction located between the two + fingers of the device + * cc_space: '50um' -- the space between the lower rectangular pad and the coupling + capacitor below it + * cc_width: '100um' -- the width of the coupling capacitor located below the bottom + rectangular pad + * cc_height: '100um' -- the height of the coupling capacitor located below the bottom + rectangular pad + * cc_topleft_space: '50um' -- the space between the upper rectangular pad and the top + left coupling capacitor + * cc_topleft_width: '100um' -- the width of the top left coupling capacitor pad + * cc_topleft_height: '100um' -- the height of the top left coupling capacitor pad + * cc_topright_space: '50um' -- the space between the upper rectangular pad and the + top right coupling capacitor + * cc_topright_width: '100um' -- the width of the top right coupling capacitor pad + * cc_topright_height: '100um' -- the height of the top right coupling capacitor pad + * position_x: '0um' -- the x-coordinate defining the center of the transmon pocket + on the chip + * position_y: '0um' -- the y-coordinate defining the center of the transmon pocket + on the chip + * rotation: '0.0' -- the angle at which the entire structure is rotated + * rotation_top_pad: '180' -- internal coordinate defining the angle of rotation + between top and bottom pads + * layer: '1' -- all objcets are drawn assuming they are part of the same layer on a + the chip + """ + + # Default drawing options + default_options = Dict(pad_width='1000um', + pad_height='300um', + finger_width='50um', + finger_height='100um', + finger_space='50um', + pad_pos_x='0um', + pad_pos_y='0um', + comb_width='50um', + comb_space_vert='50um', + comb_space_hor='50um', + jj_width='20um', + cc_space='50um', + cc_width='100um', + cc_height='100um', + cc_topleft_space='50um', + cc_topleft_width='100um', + cc_topleft_height='100um', + cc_topright_space='50um', + cc_topright_width='100um', + cc_topright_height='100um', + position_x='0um', + position_y='0um', + rotation='0.0', + rotation_top_pad='180', + layer='1') + """Default drawing options""" + + # Name prefix of component, if user doesn't provide name + component_metadata = Dict(short_name='component') + """Component metadata""" + + def make(self): + """Convert self.options into QGeometry.""" + + p = self.parse_options() # Parse the string options into numbers + + # draw the lower pad as a rectangle + pad_lower = draw.rectangle(p.pad_width, p.pad_height, p.pad_pos_x, + p.pad_pos_y) + + # draw the lower finger as a rectangle + finger_lower = draw.rectangle( + p.finger_width, p.finger_height, p.pad_pos_x, p.pad_pos_y + + 0.49999 * (p.pad_height) + 0.49999 * (p.finger_height)) + + # draw the Josephson Junction + rect_jj = draw.rectangle( + p.jj_width, p.finger_space, p.pad_pos_x, + 0.5 * (p.pad_height) + p.finger_height + 0.5 * (p.finger_space)) + + # draw the first comb to the right of the lower finger as a rectangle + comb1_lower = draw.rectangle( + p.comb_width, + (2 * p.finger_height + p.finger_space - p.comb_space_vert), + (0.5 * p.finger_width + p.comb_space_hor + 0.5 * p.comb_width), + (0.5 * p.pad_height + 0.5 * + (p.pad_pos_y + 0.5 * (p.pad_height) + 0.5 * (p.finger_height)))) + + # draw the second comb to the right of the lower finger by translating the first comb + comb2_lower = draw.translate(comb1_lower, + 2.0 * (p.comb_space_hor + p.comb_width), + 0.0) + + # draw the first comb to the left of the lower finger + comb3_lower = draw.rectangle( + p.comb_width, + (2 * p.finger_height + p.finger_space - p.comb_space_vert), + (-0.5 * p.finger_width - 2.0 * p.comb_space_hor - + 1.5 * p.comb_width), + (0.5 * p.pad_height + 0.5 * + (p.pad_pos_y + 0.5 * (p.pad_height) + 0.5 * (p.finger_height)))) + + # draw the second comb to the left of the lower finger + comb4_lower = draw.translate(comb3_lower, + -2.0 * (p.comb_space_hor + p.comb_width), + 0.0) + + coupling_capacitor = draw.rectangle( + p.cc_width, p.cc_height, p.pad_pos_x, + p.pad_pos_y - 0.5 * (p.pad_height) - p.cc_space - 0.5 * p.cc_height) + + cc_topleft = draw.rectangle( + p.cc_topleft_width, p.cc_topleft_height, + p.pad_pos_x - 0.5 * p.pad_width + 0.5 * p.cc_topleft_width, + p.pad_pos_y + 1.5 * p.pad_height + 2.0 * p.finger_height + + p.finger_space + p.cc_topleft_space + 0.5 * p.cc_topleft_height) + + cc_topright = draw.translate( + cc_topleft, + p.pad_width - 0.5 * p.cc_topleft_width - 0.5 * p.cc_topright_width, + 0.0) + + # merge the bottom elements + bottom = draw.union(pad_lower, finger_lower, comb1_lower, comb2_lower, + comb3_lower, comb4_lower) + + # create the top portion of the comb by translating and rotating + # the bottom portion of the comb + top = draw.translate(bottom, 0.0, p.pad_height + p.finger_space) + top = draw.rotate(top, p.rotation_top_pad) + + # merge everything into a single design + design = draw.union(bottom, top, rect_jj, coupling_capacitor, + cc_topleft, cc_topright) + + # draw the transmon pocket bounding box + pocket = draw.rectangle(1.5 * p.pad_width, 5.0 * p.pad_height) + + # the origin is originally set to the middle of the lower pad. + # Let's move it to the center of the JJ. + design = draw.translate( + design, 0.0, + -0.5 * p.pad_height - p.finger_height - 0.5 * p.finger_space) + + # now translate the final structure according to the user input + design = draw.rotate(design, p.rotation, origin=(0, 0)) + design = draw.translate(design, p.position_x, p.position_y) + + pocket = draw.rotate(pocket, p.rotation, origin=(0, 0)) + pocket = draw.translate(pocket, p.position_x, p.position_y) + + geom = {'design': design} + geom_pocket = {'pocket': pocket} + self.add_qgeometry('poly', geom, layer=p.layer, subtract=False) + self.add_qgeometry('poly', geom_pocket, layer=p.layer, subtract=True) + + ################################################################### + + # Add Qpin connections for coupling capacitors + + # define a function that both rotates and translates the + # qpin coordinates + def qpin_rotate_translate(x): + """ This function rotates the coordinates of the three qpins + according to the user inputs for "position_x", "position_y" + and "rotation". + """ + y = list(x) + z = [0.0, 0.0] + z[0] = y[0] * cos(p.rotation * 3.14159 / 180) - y[1] * sin( + p.rotation * 3.14159 / 180) + z[1] = y[0] * sin(p.rotation * 3.14159 / 180) + y[1] * cos( + p.rotation * 3.14159 / 180) + z[0] = z[0] + p.position_x + z[1] = z[1] + p.position_y + x = (z[0], z[1]) + return x + + # Add Qpin connections for the bottom coupling capacitor + + qp1a = (0.0, + -0.5 * p.pad_height - p.finger_height - 0.5 * p.finger_space) + qp1b = (0.0, -0.5 * p.pad_height - p.cc_space - p.cc_height - + 0.5 * p.pad_height - p.finger_height - 0.5 * p.finger_space) + + # rotate and translate the qpin coordinates + qp1a = qpin_rotate_translate(qp1a) + qp1b = qpin_rotate_translate(qp1b) + + self.add_pin('pin1', + points=np.array([qp1a, qp1b]), + width=0.01, + input_as_norm=True) + + # Add Qpin connections for top left coupling capacitor + + qp2a = (p.pad_pos_x - 0.5 * p.pad_width + 0.5 * p.cc_topleft_width, + p.pad_pos_y + 1.5 * p.pad_height + 2.0 * p.finger_height + + p.finger_space + p.cc_topleft_space + + 0.5 * p.cc_topleft_height - 0.5 * p.pad_height - + p.finger_height - 0.5 * p.finger_space) + qp2b = (p.pad_pos_x - 0.5 * p.pad_width, p.pad_pos_y + + 1.5 * p.pad_height + 2.0 * p.finger_height + p.finger_space + + p.cc_topleft_space + 0.5 * p.cc_topleft_height - + 0.5 * p.pad_height - p.finger_height - 0.5 * p.finger_space) + + qp2a = qpin_rotate_translate(qp2a) + qp2b = qpin_rotate_translate(qp2b) + + self.add_pin('pin2', + points=np.array([qp2a, qp2b]), + width=0.01, + input_as_norm=True) + + # Add Qpin connections for top right coupling capacitor + + qp3a = (p.pad_pos_x + 0.5 * p.pad_width - 0.5 * p.cc_topleft_width, + p.pad_pos_y + 1.5 * p.pad_height + 2.0 * p.finger_height + + p.finger_space + p.cc_topleft_space + + 0.5 * p.cc_topleft_height - 0.5 * p.pad_height - + p.finger_height - 0.5 * p.finger_space) + qp3b = (p.pad_pos_x + 0.5 * p.pad_width, p.pad_pos_y + + 1.5 * p.pad_height + 2.0 * p.finger_height + p.finger_space + + p.cc_topleft_space + 0.5 * p.cc_topleft_height - + 0.5 * p.pad_height - p.finger_height - 0.5 * p.finger_space) + + qp3a = qpin_rotate_translate(qp3a) + qp3b = qpin_rotate_translate(qp3b) + + self.add_pin('pin3', + points=np.array([qp3a, qp3b]), + width=0.01, + input_as_norm=True) diff --git a/data/source_files/messy/19c8963dd93e.py b/data/source_files/messy/19c8963dd93e.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3cfa083e8e8e57b0bc63b2f6a4954146234e99 --- /dev/null +++ b/data/source_files/messy/19c8963dd93e.py @@ -0,0 +1,190 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[ ]: + + +################################################################################ +# CSE 253: Programming Assignment 3 +# Winter 2019 +# Code author: Jenny Hamer (+ modifications by Tejash Desai) +# +# Filename: baseline_cnn.py +# +# Description: +# +# This file contains the starter code for the baseline architecture you will use +# to get a little practice with PyTorch and compare the results of with your +# improved architecture. +# +# Be sure to fill in the code in the areas marked #TODO. +################################################################################ + + +# PyTorch and neural network imports +import torch +from torch.autograd import Variable +import torch.nn as nn +import torch.nn.functional as func +import torch.nn.init as torch_init +import torch.optim as optim + +# Data utils and dataloader +import torchvision +from torchvision import transforms, utils +from xray_dataloader_zscored import ChestXrayDataset, create_split_loaders + +import matplotlib.pyplot as plt +import numpy as np +import os + + + +class Arch2CNN(nn.Module): + """ +<<<<<<< HEAD + conv1 -> maxpool -> conv2 -> maxpool -> conv3 -> conv4 ->maxpool -> conv5 -> conv6 -> maxpool -> conv7 -> conv8 -> maxpool -> fc1 -> fc2 -> fc3 (outputs) +======= + conv1 -> conv2 -> maxpool -> conv3 -> conv4 -> conv5 -> maxpool -> fc1 -> fc2 -> fc3 (outputs) +>>>>>>> 6652e3cfb72835ac4a7c802c9a703b59d5f63ae6 + """ + + def __init__(self): + super(Arch2CNN, self).__init__() + + # conv1: 1 input channel, 4 output channels, [3x3] kernel size + self.conv1 = nn.Conv2d(in_channels=1, out_channels=4, kernel_size=3) + + # Add batch-normalization to the outputs of conv1 + self.conv1_normed = nn.BatchNorm2d(4) + + # Initialized weights using the Xavier-Normal method + torch_init.xavier_normal_(self.conv1.weight) + self.pool1 = nn.MaxPool2d(kernel_size=3, stride=1) + + #TODO: Fill in the remaining initializations replacing each '_' with + # the necessary value based on the provided specs for each layer + + #TODO: conv2: 4 input channels, 8 output channels, [3x3] kernel, initialization: xavier + self.conv2 = nn.Conv2d(in_channels=4, out_channels=8, kernel_size=3) + self.conv2_normed = nn.BatchNorm2d(8) + torch_init.xavier_normal_(self.conv2.weight) + #Maxpool + self.pool2 = nn.MaxPool2d(kernel_size=3, stride=1) + + + #TODO: conv3: X input channels, 12 output channels, [8x8] kernel, initialization: xavier + self.conv3 = nn.Conv2d(in_channels=8, out_channels=16, kernel_size=3) + self.conv3_normed = nn.BatchNorm2d(16) + torch_init.xavier_normal_(self.conv3.weight) + #TODO: conv4: X input channels, 10 output channels, [6x6] kernel, initialization: xavier + self.conv4 = nn.Conv2d(in_channels=16, out_channels=16, kernel_size=3) + self.conv4_normed = nn.BatchNorm2d(16) + torch_init.xavier_normal_(self.conv4.weight) + self.pool3 = nn.MaxPool2d(kernel_size=3, stride=1) + #TODO: conv5: X input channels, 8 output channels, [5x5] kernel, initialization: xavier + self.conv5 = nn.Conv2d(in_channels=16, out_channels=8, kernel_size=3) + self.conv5_normed = nn.BatchNorm2d(8) + torch_init.xavier_normal_(self.conv5.weight) + + self.conv6 = nn.Conv2d(in_channels=8, out_channels=8, kernel_size=3) + self.conv6_normed = nn.BatchNorm2d(8) + torch_init.xavier_normal_(self.conv6.weight) + self.pool4 = nn.MaxPool2d(kernel_size=3, stride=1) + + #TODO: Apply max-pooling with a [3x3] kernel using tiling (*NO SLIDING WINDOW*) + self.conv7 = nn.Conv2d(in_channels=8, out_channels=8, kernel_size=3) + self.conv7_normed = nn.BatchNorm2d(8) + torch_init.xavier_normal_(self.conv7.weight) + + self.conv8 = nn.Conv2d(in_channels=8, out_channels=8, kernel_size=3) + self.conv8_normed = nn.BatchNorm2d(8) + torch_init.xavier_normal_(self.conv8.weight) + self.pool5 = nn.MaxPool2d(kernel_size=4, stride=4) + + + # Define 2 fully connected layers: + #TODO: fc1 + self.fc1 = nn.Linear(in_features=122*122*8, out_features=512) + + self.fc1_normed = nn.BatchNorm1d(512) + torch_init.xavier_normal_(self.fc1.weight) + + #TODO: fc2 + self.fc2 = nn.Linear(in_features=512, out_features=128) + self.fc2_normed = nn.BatchNorm1d(128) + torch_init.xavier_normal_(self.fc2.weight) + + #TODO: fc3 + self.fc3 = nn.Linear(in_features=128, out_features=14) + torch_init.xavier_normal_(self.fc3.weight) + + #TODO: Output layer: what should out_features be? + self.out_features = 14 + + + def forward(self, batch): + """Pass the batch of images through each layer of the network, applying + non-linearities after each layer. + + Note that this function *needs* to be called "forward" for PyTorch to + automagically perform the forward pass. + + Params: + ------- + - batch: (Tensor) An input batch of images + + Returns: + -------- + - logits: (Variable) The output of the network + """ + + # Apply first convolution, followed by ReLU non-linearity; + # use batch-normalization on its outputs + batch = func.rrelu(self.conv1_normed(self.conv1(batch))) + + batch = self.pool1(batch) + # Apply conv2 and conv3 similarly + batch = func.rrelu(self.conv2_normed(self.conv2(batch))) + batch = self.pool2(batch) + + batch = func.rrelu(self.conv3_normed(self.conv3(batch))) + batch = func.rrelu(self.conv4_normed(self.conv4(batch))) + batch = self.pool3(batch) + batch = func.rrelu(self.conv5_normed(self.conv5(batch))) + batch = func.rrelu(self.conv6_normed(self.conv6(batch))) + # Pass the output of conv3 to the pooling layer + batch = self.pool4(batch) + batch = func.rrelu(self.conv7_normed(self.conv7(batch))) + batch = func.rrelu(self.conv8_normed(self.conv8(batch))) + # Pass the output of conv3 to the pooling layer + batch = self.pool5(batch) + + # Reshape the output of the conv3 to pass to fully-connected layer + batch = batch.view(-1, self.num_flat_features(batch)) + + # Connect the reshaped features of the pooled conv3 to fc1 + batch = func.rrelu(self.fc1_normed(self.fc1(batch))) + batch = func.rrelu(self.fc2_normed(self.fc2(batch))) + + # Connect fc1 to fc2 - this layer is slightly different than the rest (why?) + batch = self.fc3(batch) + + + # Return the class predictions + #TODO: apply an activition function to 'batch' + #batch = func.sigmoid(batch) + return batch + + def num_flat_features(self, inputs): + + # Get the dimensions of the layers excluding the inputs + size = inputs.size()[1:] + # Track the number of features + num_features = 1 + + for s in size: + num_features *= s + + return num_features + diff --git a/data/source_files/messy/1a3d14ff0652.py b/data/source_files/messy/1a3d14ff0652.py new file mode 100644 index 0000000000000000000000000000000000000000..8a45566aab7d64963906b912efac019f5bac9c8e --- /dev/null +++ b/data/source_files/messy/1a3d14ff0652.py @@ -0,0 +1,65 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# -*- encoding: utf-8 -*- +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +""" +Utils for testing the API service. +""" + +import datetime +import json + +ADMIN_TOKEN = '4562138218392831' +MEMBER_TOKEN = '4562138218392832' + + +class FakeMemcache(object): + """Fake cache that is used for keystone tokens lookup.""" + + _cache = { + 'tokens/%s' % ADMIN_TOKEN: { + 'access': { + 'token': {'id': ADMIN_TOKEN}, + 'user': {'id': 'user_id1', + 'name': 'user_name1', + 'tenantId': '123i2910', + 'tenantName': 'mytenant', + 'roles': [{'name': 'admin'}] + }, + } + }, + 'tokens/%s' % MEMBER_TOKEN: { + 'access': { + 'token': {'id': MEMBER_TOKEN}, + 'user': {'id': 'user_id2', + 'name': 'user-good', + 'tenantId': 'project-good', + 'tenantName': 'goodies', + 'roles': [{'name': 'Member'}] + } + } + } + } + + def __init__(self): + self.set_key = None + self.set_value = None + self.token_expiration = None + + def get(self, key): + dt = datetime.datetime.now() + datetime.timedelta(minutes=5) + return json.dumps((self._cache.get(key), dt.strftime('%s'))) + + def set(self, key, value, timeout=None): + self.set_value = value + self.set_key = key diff --git a/data/source_files/messy/1a534773f649.py b/data/source_files/messy/1a534773f649.py new file mode 100644 index 0000000000000000000000000000000000000000..8a5fbb70b61ec5fc6c7b862f0da3b78b40dc8aa0 --- /dev/null +++ b/data/source_files/messy/1a534773f649.py @@ -0,0 +1,41 @@ +#coding:utf-8 +# +# id: functional.index.create.03 +# title: CREATE ASC INDEX +# decription: CREATE ASC INDEX +# +# Dependencies: +# CREATE DATABASE +# CREATE TABLE +# SHOW INDEX +# tracker_id: +# min_versions: [] +# versions: 1.0 +# qmid: functional.index.create.create_index_03 + +import pytest +from firebird.qa import db_factory, isql_act, Action + +# version: 1.0 +# resources: None + +substitutions_1 = [] + +init_script_1 = """CREATE TABLE t( a INTEGER); +commit;""" + +db_1 = db_factory(sql_dialect=3, init=init_script_1) + +test_script_1 = """CREATE ASC INDEX test ON t(a); +SHOW INDEX test;""" + +act_1 = isql_act('db_1', test_script_1, substitutions=substitutions_1) + +expected_stdout_1 = """TEST INDEX ON T(A)""" + +@pytest.mark.version('>=1.0') +def test_1(act_1: Action): + act_1.expected_stdout = expected_stdout_1 + act_1.execute() + assert act_1.clean_expected_stdout == act_1.clean_stdout + diff --git a/data/source_files/messy/1b1cfa03646b.py b/data/source_files/messy/1b1cfa03646b.py new file mode 100644 index 0000000000000000000000000000000000000000..8a0d48bd45e2a77d4024e66ae20d64213df72227 --- /dev/null +++ b/data/source_files/messy/1b1cfa03646b.py @@ -0,0 +1,50 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import time +from unittest import TestCase + +import mock +from mesos.interface.mesos_pb2 import TaskState + +from apache.aurora.executor.common.status_checker import StatusChecker +from apache.aurora.executor.status_manager import StatusManager + + +class FakeStatusChecker(StatusChecker): + def __init__(self): + self.call_count = 0 + + @property + def status(self): + if self.call_count == 2: + return TaskState.Value('TASK_KILLED') + self.call_count += 1 + return None + + +class TestStatusManager(TestCase): + def setUp(self): + self.callback_called = False + + def test_run(self): + checker = FakeStatusChecker() + def callback(result): + assert result == TaskState.Value('TASK_KILLED') + self.callback_called = True + mock_time = mock.Mock(spec=time) + status_manager = StatusManager(checker, callback, mock_time) + status_manager.run() + assert mock_time.sleep.call_count == 2 + assert self.callback_called is True diff --git a/data/source_files/messy/1c73481ac309.py b/data/source_files/messy/1c73481ac309.py new file mode 100644 index 0000000000000000000000000000000000000000..d9c3024853794c19d2ce2400c8d47311441430b2 --- /dev/null +++ b/data/source_files/messy/1c73481ac309.py @@ -0,0 +1,185 @@ +# Store the version here so: +# 1) we don't load dependencies by storing it in __init__.py +# 2) we can import it in setup.py for the same reason +# 3) we can import it into your module module +# https://stackoverflow.com/questions/458550/standard-way-to-embed-version-into-python-package +__version__ = '1.6.1' + +release_notes = { + '1.6.1': """ + Fixed GUI crash when loading certain RLBot config files with relative paths for agents. + Fixed agent preset loading to allow multiple agents to saved/loaded correctly if they have the same name. - ima9rd + """, + '1.6.0':""" + Add support for auto starting .NET executables. + """, + '1.5.1': """ + Fixed crash with GUI when no default RLBot.cfg file was found. + Updated GUI to launch Rocket League when clicking run if no Rocket League process is found. - ima9rd + """, + '1.5.0': """ + Adding a have_internet helper function to help streamline upgrade checks. - ima9rd + """, + '1.4.2': """ + Adding support for auto-running java bots during tournaments. To take advantage of this + in your bot, see https://github.com/RLBot/RLBotJavaExample/wiki/Auto-Launching-Java + + Plus bug fixes: + - Fixed a bug where auto-run executables would crash when trying to write to stderr. + - Dragging bots to another team in the GUI no longer breaks the config. + """, + '1.3.0': """ + Accurate ball prediction for Hoops and Dropshot modes! + - Kipje13, Marvin, NeverCast, et. al. + """, + '1.2.6': """ + Fixed a bug where field info was not extracted properly during dropshot mode. + It was reporting 2 goals rather than the expected 140. + """, + '1.2.5': """ + *************************************************** + * Fix for dodge cancels / half flips! - ccman32 * + *************************************************** + + Plus: + - Changing the rendering strategy for 3D lines that go past the camera. Formerly it was + "draw it, even though it's crazy sometimes", now it will be "don't draw it". + - Showing the rate that inputs are received for each player index when you press the + [home] key. Toggle back off with the [end] key. + - Fixed a bug where party_member_bot could get influenced by real controller input. + - Creating new presets in the GUI works better now. + - Got rid of the libpng warning seen when using the GUI. + - Giving specific error messages when cfg files are messed up. + """, + '1.2.2': """ + - Rearranged the GUI a bit, and made it load and track appearance configs more effectively. + - Fixed bug where RUN button behavior in the GUI would not work after killing bots. + """, + '1.2.0': """ + - We now offer a 'RigidBodyTick' thanks to whatisaphone! It's a lower-level representation of + physics data which updates at 120Hz and is not subject to interpolation. You can still make a + great bot without it, but this feature is quite nice for the scientists among us. + + See https://github.com/RLBot/RLBotPythonExample/wiki/Rigid-Body-Tick for more details! + + - Faster way to access ball prediction data in python. - Skyborg + """, + '1.1.3': """ + - Faster way to access ball prediction data in python. - Skyborg + - Java bots will now shut down when the python framework quits. This has been necessary recently + to avoid buggy situations. + - Shutting down the python framework will no longer attempt to kill bots twice in a row. + - Clicking on the "Run" button twice in a row in the GUI will no longer spawn duplicate processes. + """, + '1.1.2': """ + Faster way to access ball prediction data in python. - Skyborg + """, + '1.1.1': """ + You can now get information about the ball's status in Dropshot mode thanks to hallo_doei! + Read all about it at https://github.com/RLBot/RLBot/wiki/Dropshot + + Other changes: + - The loadout config for orange team is now respected again. - ccman32 + - Fixed a bug where the GUI would crash with a "KeyError". - hallo_doei + - Avoiding and suppressing some game crashes, and also restoring the + ability to get game tick data during replays and the postgame. - tarehart + - Fixed a bug where bots would dodge when they intended to double jump. -tarehart + """, + '1.0.6': """ + The latest Rocket League patch broke dodges for our bots; this update fixes it. + """, + '1.0.5': """ + Maximum size for a render message has been decreased again because many people experienced + errors related to memory access. The limit is now only double the original. + """, + '1.0.4': """ + - Maximum size for a render message has been increased by a factor of 100. This means you can + draw a lot of lines at once without getting errors. + - Boost amount for cars will now round up to the nearest integer, so 0.3% boost will now appear + as 1 instead of 0. + - Fixed a crash that would commonly happen after a match ends. As a side effect, you can no longer + see up-to-date player data during instant replays. + """, + '1.0.3': """ + Time for the big 1.0 release! We actually left "beta" a long time ago so this isn't as big + a milestone as the number implies, but we DO have two great new features! + + 1. Setting game state. You can manipulate the position, velocity, etc of the ball and the cars! + This can be a great help during bot development, and you can also get creative with it. Visit + the wiki for details and documentation - https://github.com/RLBot/RLBot/wiki/Manipulating-Game-State + Code written by hallo_doei, ccman32, and tarehart + + 2. Ball prediction. We now provide a list of future ball positions based on chip's excellent + physics modeling. Take advantage of this to do next-level wall reads, catches, and dribbles! You can + read about the math involved here: https://samuelpmish.github.io/notes/RocketLeague/ball_bouncing/ + Note: currently the wall bounces are only accurate on the standard arena, not hoops or dropshot. + Documentation and examples can be found here: https://github.com/RLBot/RLBot/wiki/Ball-Path-Prediction + Code written by chip and tarehart + + Bonus: + - You can now play on Salty Shores thanks to hallo_doei + - Bug fix for people with spaces in their file path by Zaptive + - Subprocess agent for future Rust support by whatisaphone + """, + '0.0.32': """ + More comprehensive fix for Rocket League patch 1.50. Compared to previous version: + - Dropshot tile data is fixed + - Boost pad data is fixed + - Loadout configuration is fixed + + Thanks to ccman32 and dtracers for delivering this fix quickly! + """, + '0.0.31': """ + Rapid response to Rocket League patch 1.50 with the following known issues: + - Dropshot tile data is missing + - Boost pad data is missing + - Loadout configuration is broken + + Thanks to ccman32 and dtracers for delivering this short-term fix quickly. + + We will follow this up with a proper fix as soon as possible. You may also choose to stay on + Rocket League 1.49 and RLBot 0.0.30, ask for instructions on discord. + """, + '0.0.30': """ + - New core dll that is less likely to break when Rocket League is patched - ccman32 and hallo-doei + - Fixed bug resulting in incorrect quickchat - dtracers + - Added more built-in colors to the python rendering manager - Eastvillage + - Fix for items with a ':' not showing up in the GUI - hallo-doei + - Fix for GUI not saving correct path - hallo-doei + - Fix for GUI crash when saving preset then canceling - hallo-doei + - Adding file checking before injection (Resolves #167) - Redox + - Fixed typo in rlbot.cfg - Redox + - Fancy release notes - tarehart and Skyborg + """ +} + +release_banner = """ + + ______ _ ______ _ + 10100 | ___ \ | | ___ \ | | 00101 + 110011 | |_/ / | | |_/ / ___ | |_ 110011 + 00110110 | /| | | ___ \/ _ \| __| 01101100 + 010010 | |\ \| |____| |_/ / (_) | |_ 010010 + 10010 \_| \_\_____/\____/ \___/ \__| 01001 + + +""" + + +def get_current_release_notes(): + if __version__ in release_notes: + return release_notes[__version__] + return '' + + +def get_help_text(): + return "Trouble? Ask on Discord at https://discord.gg/5cNbXgG " \ + "or report an issue at https://github.com/RLBot/RLBot/issues" + + +def print_current_release_notes(): + print(release_banner) + print("Version {}".format(__version__)) + print(get_current_release_notes()) + print(get_help_text()) + print("") diff --git a/data/source_files/messy/1d8649714119.py b/data/source_files/messy/1d8649714119.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7f7c81cefa2649d2218e763e7fb484932406a9 --- /dev/null +++ b/data/source_files/messy/1d8649714119.py @@ -0,0 +1,177 @@ +import numpy as np +import sklearn +import subprocess +from sklearn import model_selection, tree + +import data +import feature_selection +import model_sel +import os + +import matplotlib.pyplot as plt +import seaborn as sns + +def main(): + + #parameter space + list_test_size = [0.1,0.15,0.2] # decide this + list_ftsel_method = ['chi2','mutlinfo','pca','dt'] + list_num_features = [10,15,20] # decide this + list_Kfold = [3,5] + list_corr_threshold = [1,0.5,0.6,0.7] # decide this + + param_space = { + 'criterion': ['gini', 'entropy'], + 'max_depth': [2, 3, 4, 5, 7], + 'min_samples_split': [2, 5, 10], + 'min_samples_leaf': [2, 5, 10], + 'max_leaf_nodes': [2, 4, 6, 8, 10, 12, 15], + } + + repeat = 1 + + #output dictrionary list + list_output_dict = [] + + # output directory path + outdir = "../results/run1/" + + if(not os.path.isdir(outdir)): + os.mkdir(outdir) + + o_models_file = open(outdir+"models.csv","w") + o_models_file.write("test size,run num,ftsel method,Kfold,number of features,correlation threshold,best features,criterion,max_depth,max_leaf_nodes,min_samples_leaf,min_samples_split,training accuracy,test accuracy\n") + + #splitting data and weights into train, test (refer to optimal_params.py) + poll_data = data.PollDataProxy(remove_nan=False, convert_to_float=False) + + acc = [] + + '''refer to optimal_params.py. Functions from this python scripts are transferred here. (get_bad_questions() and separate_weights().)''' + + for ts in list_test_size: + for run_num in range(repeat): + all_data, all_data_questions = poll_data.all_data_except(get_bad_questions()) + X = all_data[:, :-1] + y = all_data[:, -1] + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, + test_size=ts, + shuffle=True) + X_train, weights_train, questions = separate_weights(X_train, all_data_questions[:-1]) + X_test, weights_test, _ = separate_weights(X_test, all_data_questions[:-1]) + + print("Number of Training Samples:", len(X_train)) + print("Number of Testing Samples:", len(X_test)) + + + data_dict = { + 'X_train': X_train, + 'X_test': X_test, + 'y_train': y_train, + 'y_test': y_test + } + weights_dict = { + 'weights_train': weights_train, + 'weights_test': weights_test} + + for meth in list_ftsel_method: + '''Create class objects of the current selection method''' + for thres in list_corr_threshold: + data_ranked_dict, ranked_questions = {}, [] + ftsel_obj =None + if(meth=='chi2'): + ftsel_obj = feature_selection.FeatureSelection( + necess_que_file="../extern/manage_data/list_all_questions.txt", + unnecess_que_file="../extern/manage_data/list_unnecessary_columns.txt", + bool_necess_que=False, + run_name="test_chi2" + ) + data_ranked_dict, ranked_questions = ftsel_obj.ftsel_chi2(data_dict, thres) + elif(meth=='mutlinfo'): + ftsel_obj = feature_selection.FeatureSelection( + necess_que_file="../extern/manage_data/list_all_questions.txt", + unnecess_que_file="../extern/manage_data/list_unnecessary_columns.txt", + bool_necess_que=False, + run_name="test_mutlinfo" + ) + data_ranked_dict, ranked_questions = ftsel_obj.ftsel_mutlinfo(data_dict, thres) + elif(meth=='pca'): + ftsel_obj = feature_selection.FeatureSelection( + necess_que_file="../extern/manage_data/list_all_questions.txt", + unnecess_que_file="../extern/manage_data/list_unnecessary_columns.txt", + bool_necess_que=False, + run_name="test_pca" + ) + data_ranked_dict,_ = ftsel_obj.ftsel_pca(data_dict) + fts = data_sel_dict['X_train'].shape[1] + questions_int = list(map(str, list(range(1,fts+1,1)))) + ranked_questions = ["ft_"+x for x in questions_int] + elif(meth=='dt'): + ftsel_obj = feature_selection.FeatureSelection( + necess_que_file="../extern/manage_data/list_all_questions.txt", + unnecess_que_file="../extern/manage_data/list_unnecessary_columns.txt", + bool_necess_que=False, + run_name="test_dt" + ) + data_ranked_dict, ranked_questions = ftsel_obj.ftsel_decision_tree_method(data_dict, thres) + for num in list_num_features: + data_sel_dict, sel_questions = ftsel_obj.select_num_features(data_ranked_dict, num, ranked_questions) + ftsel_obj.plot_heatmap(data_sel_dict['X_train'], sel_questions) + for K in list_Kfold: + '''Here create a class onject of "model_sel" and output all the best parameters and values into "list_output_dict". Then, can create a .csv file to list all the models and accuracies.''' + model_obj = model_sel.model_sel(ts, run_num, meth, param_space, K, num, thres, data_sel_dict ,weights_dict, sel_questions, outdir).select_model() + # intermediate = model_obj.select_model() + acc.append(model_obj['test_acc']) + + o_models_file.write(str(ts)+",") + o_models_file.write(str(run_num)+",") + o_models_file.write(meth+",") + o_models_file.write(str(K)+",") + o_models_file.write(str(num)+",") + o_models_file.write(str(thres)+",") + for ii in range(len(model_obj['best_features'])): + o_models_file.write(model_obj['best_features'][ii]+" ") + o_models_file.write(",") + o_models_file.write(model_obj['best_params']['criterion']+",") + o_models_file.write(str(model_obj['best_params']['max_depth'])+",") + o_models_file.write(str(model_obj['best_params']['max_leaf_nodes'])+",") + o_models_file.write(str(model_obj['best_params']['min_samples_leaf'])+",") + o_models_file.write(str(model_obj['best_params']['min_samples_split'])+",") + o_models_file.write(str(model_obj['train_acc'])+",") + o_models_file.write(str(model_obj['test_acc'])+",") + o_models_file.write("\n") + + list_output_dict.append(model_obj) + '''Once all the models are run, select the model with best test accuracy and return the output dict for that model.''' + o_models_file.close() + + best_index = np.argmax(acc) + best_model_dict = list_output_dict[best_index] + + print("The best model parameters:") + print(best_model_dict) + + +def get_bad_questions(): + f = open("../extern/manage_data/list_unnecessary_columns.txt", 'r') + bad_questions = f.readline().split(',') + bad_questions[-1] = bad_questions[-1][:-1] # chop the \n off the end + bad_questions.remove('weight') # need weight for training + return bad_questions + + +def separate_weights(X_train, column_names): + """ + Removes the column containing weights from X_train, and returns it as + a separate array. + """ + weight_column_idx = column_names.index('weight') + weights = X_train[:, weight_column_idx] + new_X_train = np.delete(X_train, weight_column_idx, axis=1) + new_questions = column_names + new_questions.remove('weight') + return new_X_train, weights, new_questions + + +if __name__ == "__main__": + main() diff --git a/data/source_files/messy/1ea06667316a.py b/data/source_files/messy/1ea06667316a.py new file mode 100644 index 0000000000000000000000000000000000000000..8a4ad309763c3cfd1dc25a625d22290970950e53 --- /dev/null +++ b/data/source_files/messy/1ea06667316a.py @@ -0,0 +1,32 @@ +import os +import time + +from selenium.webdriver.support.select import Select + +from Data.parameters import Data +from get_dir import pwd +from reuse_func import GetData + + +class All_records_download(): + + def __init__(self,driver): + self.driver = driver + self.filename ='' + def test_download_csv(self): + self.data = GetData() + self.p = pwd() + self.driver.find_element_by_xpath(Data.hyper_link).click() + self.data.page_loading(self.driver) + colltype = Select(self.driver.find_element_by_name('collection_type')) + colltype.select_by_visible_text(' Overall ') + self.data.page_loading(self.driver) + self.driver.find_element_by_id(Data.Download).click() + time.sleep(4) + self.filename = self.p.get_download_dir() + '/collectionType_all_data.csv' + time.sleep(2) + file = os.path.isfile(self.filename) + os.remove(self.filename) + return file + + diff --git a/data/source_files/messy/1fcb6a02d3ab.py b/data/source_files/messy/1fcb6a02d3ab.py new file mode 100644 index 0000000000000000000000000000000000000000..8a14e512e0f7f79c5bcbfd4af00b8cc29f035958 --- /dev/null +++ b/data/source_files/messy/1fcb6a02d3ab.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python + +# script to make seasonal means and stddev images of 4-day sig0 +# values. + +import os +import sys +import glob +import numpy as np +import sirpy2 as sp2 +import argparse +from osgeo import gdal + +DATADIR = "./" +NODATA_VALUE = -9999.0 + +Q2M = { + "JAS": list(range(7, 10)), + "OND": list(range(10, 13)), + "JFM": list(range(1, 4)), + "AMJ": list(range(4, 7)), +} + +# this allows GDAL to throw Python Exceptions +gdal.UseExceptions() + + +def db2pr(dbvalue): + pr = 10 ** (dbvalue / 10.0) + return pr + + +if __name__ == "__main__": + + # set up arguments + parser = argparse.ArgumentParser( + "script to make quarterly " + "means and stdevs of qscat dB values" + ) + + parser.add_argument( + "-v", + "--verbose", + help="increase output verbosity", + action="store_true", + default=False, + ) + parser.add_argument( + "-q", + "--quarter", + nargs="?", + choices=("JAS", "OND", "JFM", "AMJ"), + default="JAS", + const="JAS", + help="Quarter for aggregation. Default=JAS", + ) + + parser.add_argument("region", help="BYU region string (e.g. SAm, NAm, Ama, etc.)") + parser.add_argument( + "year", type=int, help="Year e.g. 1999 (qscat data start in 1999)" + ) + + args = parser.parse_args() + + verbose = args.verbose + year = args.year + quarter = args.quarter + + # region list (LAEA regions only) + valid_region_list = [ + "Grn", + "Ala", + "CAm", + "NAm", + "SAm", + "NAf", + "SAf", + "Sib", + "Eur", + "SAs", + "ChJ", + "Ind", + "Aus", + "Ber", + ] + region = args.region + try: + region_index = valid_region_list.index(region) + except Exception: + sys.stderr.write("Region not valid.\n") + sys.stderr.write("Valid regions are:\n") + sys.stderr.write("{}\n".format(valid_region_list)) + sys.exit(1) + + if verbose: + print("region: {}".format(region)) + print("year: {}".format(year)) + print("quarter: {}".format(quarter)) + + # set data dir + indir = os.path.join(DATADIR, "geotiffs", region, str(year)) + outdir = indir + if year == 1999: + year2 = 99 + else: + year2 = "{:02d}".format(year - 2000) + + monthlist = Q2M[quarter] + + # make a list of files for this year + filepatt = "quev-a-{}{}-*.tif".format(region, year2) + globpatt = os.path.join(indir, filepatt) + if verbose: + print("glob pattern: {}".format(globpatt)) + filelist = glob.glob(globpatt) + + qlist = [] + for filepath in filelist: + fn = os.path.basename(filepath) + if verbose: + print(fn) + fn_dt = sp2.fn2dt(fn, date_flag="center") + iyear = fn_dt.year + imonth = fn_dt.month + iday = fn_dt.day + if imonth in monthlist: + qlist.append(fn) + if verbose: + print("{}: {}-{}-{}".format(fn, iyear, imonth, iday)) + + print("{}-{}: {}".format(year, quarter, qlist)) + + if len(qlist) == 0: + warnmsg = "No images found for this quarter.\n" + sys.stdout.write(warnmsg) + sys.exit(0) + + # loop over images for this quarter + db_quarter = [] + for i, image in enumerate(qlist): + a_imgpath = os.path.join(indir, image) + try: + a_ds = gdal.Open(a_imgpath) + except Exception: + print("Unable to open {}".format(a_imgpath)) + sys.exit(1) + + try: + srcband = a_ds.GetRasterBand(1) + except Exception: + print("Band ({}) not found".format(1)) + sys.exit(1) + + a_data = srcband.ReadAsArray() + a_mask = a_data == NODATA_VALUE + + # if this is the first image get projection and geotransform + if i == 0: + prj = a_ds.GetProjection() + gt = a_ds.GetGeoTransform() + ny, nx = a_data.shape + + db_data = a_data + db_masked = np.ma.MaskedArray(db_data, a_mask) + + # add image to db_quarter list + db_quarter.append(db_masked) + + # close datasets + a_ds = None + + # stack list into array and find mean and std + dbarray = np.ma.stack(db_quarter, axis=2) + dbmean = np.ma.mean(dbarray, axis=2) + dbstd = np.ma.std(dbarray, axis=2) + print(dbmean.shape) + + # finally, save as a geotiff + output_format = "GTiff" + driver = gdal.GetDriverByName(output_format) + dst_filename = "{}-quev-mean-db-{}-{}.tif" + dst_filename = dst_filename.format(region, year, quarter) + dst_dir = os.path.join(DATADIR, "geotiffs", region, str(year)) + dst_path = os.path.join(dst_dir, dst_filename) + if verbose: + print("Output file for sig0 means: {}".format(dst_path)) + + dst_ds = driver.Create(dst_path, nx, ny, 1, gdal.GDT_Float32) + dst_data = np.ma.filled(dbmean, fill_value=NODATA_VALUE) + dst_ds.GetRasterBand(1).WriteArray(dst_data) + dst_ds.GetRasterBand(1).SetNoDataValue(NODATA_VALUE) + print("gt: {}".format(gt)) + dst_ds.SetGeoTransform(gt) + dst_ds.SetProjection(prj) + dst_ds = None + + dbmean_min = dbmean.min() + dbmean_max = dbmean.max() + dbmean_median = np.ma.median(dbmean) + + print("Quarterly ({}) Mean Stats".format(quarter)) + print(" Min: {}".format(dbmean_min)) + print(" Max: {}".format(dbmean_max)) + print(" Median: {}".format(dbmean_median)) + + # repeat for standard deviation + output_format = "GTiff" + driver = gdal.GetDriverByName(output_format) + dst_filename = "{}-quev-std-db-{}-{}.tif".format(region, year, quarter) + dst_dir = os.path.join(DATADIR, "geotiffs", region, str(year)) + dst_path = os.path.join(dst_dir, dst_filename) + if verbose: + print("Output file: {}".format(dst_path)) + + dst_ds = driver.Create(dst_path, nx, ny, 1, gdal.GDT_Float32) + dst_data = np.ma.filled(dbstd, fill_value=NODATA_VALUE) + dst_ds.GetRasterBand(1).WriteArray(dst_data) + dst_ds.GetRasterBand(1).SetNoDataValue(NODATA_VALUE) + print("gt: {}".format(gt)) + dst_ds.SetGeoTransform(gt) + dst_ds.SetProjection(prj) + dst_ds = None + + dbstd_min = dbstd.min() + dbstd_max = dbstd.max() + dbstd_median = np.ma.median(dbstd) + + print("Quarterly ({}) Stdev Stats".format(quarter)) + print(" Min: {}".format(dbstd_min)) + print(" Max: {}".format(dbstd_max)) + print(" Median: {}".format(dbstd_median)) diff --git a/data/source_files/messy/20afb8e5092a.py b/data/source_files/messy/20afb8e5092a.py new file mode 100644 index 0000000000000000000000000000000000000000..8a206c0ba5cec93f4c2890bee22ea35305190260 --- /dev/null +++ b/data/source_files/messy/20afb8e5092a.py @@ -0,0 +1,46 @@ +""" +Base settings for Proxito + +Some of these settings will eventually be backported into the main settings file, +but currently we have them to be able to run the site with the old middleware for +a staged rollout of the proxito code. +""" + + +class CommunityProxitoSettingsMixin: + + ROOT_URLCONF = 'readthedocs.proxito.urls' + USE_SUBDOMAIN = True + SECURE_REFERRER_POLICY = "no-referrer-when-downgrade" + + # Allow cookies from cross-site requests on subdomains for now. + # As 'Lax' breaks when the page is embedded in an iframe. + SESSION_COOKIE_SAMESITE = None + + @property + def DATABASES(self): + # This keeps connections to the DB alive, + # which reduces latency with connecting to postgres + dbs = getattr(super(), 'DATABASES', {}) + for db in dbs: + dbs[db]['CONN_MAX_AGE'] = 86400 + return dbs + + @property + def MIDDLEWARE(self): # noqa + # Use our new middleware instead of the old one + classes = super().MIDDLEWARE + classes = list(classes) + classes.append('readthedocs.proxito.middleware.ProxitoMiddleware') + + middleware_to_remove = ( + 'csp.middleware.CSPMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + ) + for mw in middleware_to_remove: + if mw in classes: + classes.remove(mw) + else: + log.warning('Failed to remove middleware: %s', mw) + + return classes diff --git a/data/source_files/messy/21bbf74d2d8b.py b/data/source_files/messy/21bbf74d2d8b.py new file mode 100644 index 0000000000000000000000000000000000000000..8a49cedf036c8174ae69a9ea00ffa4a94799bd4c --- /dev/null +++ b/data/source_files/messy/21bbf74d2d8b.py @@ -0,0 +1,170 @@ +# sys +import os +import sys +import numpy as np +import random +import pickle +import json +# torch +import torch +import torch.nn as nn +from torchvision import datasets, transforms + +# operation +from . import tools + + +class Feeder_UCF(torch.utils.data.Dataset): + """ Feeder for skeleton-based action recognition in kinetics-skeleton dataset + Arguments: + data_path: the path to '.npy' data, the shape of data should be (N, C, T, V, M) + label_path: the path to label + random_choose: If true, randomly choose a portion of the input sequence + random_shift: If true, randomly pad zeros at the begining or end of sequence + random_move: If true, perform randomly but continuously changed transformation to input sequence + window_size: The length of the output sequence + pose_matching: If ture, match the pose between two frames + num_person_in: The number of people the feeder can observe in the input sequence + num_person_out: The number of people the feeder in the output sequence + debug: If true, only use the first 100 samples + """ + + def __init__(self, + data_path, + label_path, + ignore_empty_sample=True, + random_choose=False, + random_shift=False, + random_move=False, + window_size=-1, + pose_matching=False, + num_person_in=5, + num_person_out=2, + debug=False): + self.debug = debug + self.data_path = data_path + self.label_path = label_path + self.random_choose = random_choose + self.random_shift = random_shift + self.random_move = random_move + self.window_size = window_size + self.num_person_in = num_person_in + self.num_person_out = num_person_out + self.pose_matching = pose_matching + self.ignore_empty_sample = ignore_empty_sample + + self.load_data() + + def load_data(self): + # load file list + self.sample_name = os.listdir(self.data_path) + + if self.debug: + self.sample_name = self.sample_name[0:2] + + # load label + label_path = self.label_path + with open(label_path) as f: + label_info = json.load(f) + + sample_id = [name.split('.')[0] for name in self.sample_name] + + self.label = np.array( + [label_info[id]['label_index'] for id in sample_id]) + has_skeleton = np.array( + [label_info[id]['has_skeleton'] for id in sample_id]) + + # ignore the samples which does not has skeleton sequence + if self.ignore_empty_sample: + self.sample_name = [ + s for h, s in zip(has_skeleton, self.sample_name) if h + ] + self.label = self.label[has_skeleton] + + # output data shape (N, C, T, V, M) + self.N = len(self.sample_name) #sample + self.C = 3 #channel + self.T = 90000 #frame + self.V = 18 #joint + self.M = self.num_person_out #person + + def __len__(self): + return len(self.sample_name) + + def __iter__(self): + return self + + def __getitem__(self, index): + + # output shape (C, T, V, M) + # get data + sample_name = self.sample_name[index] + sample_path = os.path.join(self.data_path, sample_name) + with open(sample_path, 'r') as f: + video_info = json.load(f) + + # fill data_numpy + data_numpy = np.zeros((self.C, self.T, self.V, self.num_person_in)) + count = 0 + for frame_info in video_info['data']: + frame_index = frame_info['frame_index'] + + for m, skeleton_info in enumerate(frame_info["skeleton"]): + + if m >= self.num_person_in: + break + pose = skeleton_info['pose'] + score = skeleton_info['score'] + frame_index = int(frame_index) + # print(frame_index) + data_numpy[0, frame_index, :, m] = pose[0::2] + data_numpy[1, frame_index, :, m] = pose[1::2] + data_numpy[2, frame_index, :, m] = score + # count += 1 + # print(" ",count, " ") + # centralization + data_numpy[0:2] = data_numpy[0:2] - 0.5 + data_numpy[0][data_numpy[2] == 0] = 0 + data_numpy[1][data_numpy[2] == 0] = 0 + + # get & check label index + label = video_info['label_index'] + assert (self.label[index] == label) + + # data augmentation + if self.random_shift: + data_numpy = tools.random_shift(data_numpy) + if self.random_choose: + data_numpy = tools.random_choose(data_numpy, self.window_size) + elif self.window_size > 0: + data_numpy = tools.auto_pading(data_numpy, self.window_size) + if self.random_move: + data_numpy = tools.random_move(data_numpy) + + # sort by score + sort_index = (-data_numpy[2, :, :, :].sum(axis=1)).argsort(axis=1) + for t, s in enumerate(sort_index): + data_numpy[:, t, :, :] = data_numpy[:, t, :, s].transpose((1, 2, + 0)) + data_numpy = data_numpy[:, :, :, 0:self.num_person_out] + + # match poses between 2 frames + if self.pose_matching: + data_numpy = tools.openpose_match(data_numpy) + + return data_numpy, label + + def top_k(self, score, top_k): + assert (all(self.label >= 0)) + + rank = score.argsort() + hit_top_k = [l in rank[i, -top_k:] for i, l in enumerate(self.label)] + return sum(hit_top_k) * 1.0 / len(hit_top_k) + + def top_k_by_category(self, score, top_k): + assert (all(self.label >= 0)) + return tools.top_k_by_category(self.label, score, top_k) + + def calculate_recall_precision(self, score): + assert (all(self.label >= 0)) + return tools.calculate_recall_precision(self.label, score) diff --git a/data/source_files/messy/257a215fb333.py b/data/source_files/messy/257a215fb333.py new file mode 100644 index 0000000000000000000000000000000000000000..8a04ff873e3cd041bc9cad7f7fc7707f7c185cce --- /dev/null +++ b/data/source_files/messy/257a215fb333.py @@ -0,0 +1,177 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import inspect + +from task.models import InveraTask +from api.utils import send_test_csv_report + +from django.contrib.auth.models import User +from rest_framework.test import APIClient, APITestCase +from rest_framework.reverse import reverse +from rest_framework import status + +TEST_RESULTS = [] +RECIPIENTS = ['email@destino.com'] + + +class TaskListTestCase(APITestCase): + def setUp(self) -> None: + self.user = User.objects.create_user( + username='test_user', password='adminpass') + self.other_user = User.objects.create_user( + username='other_user', password='adminpass') + self.task = InveraTask.objects.create( + userTask=self.user, title='My Initial Task') + + self.client = APIClient() + + @classmethod + def tearDownClass(cls): + User.objects.filter(username__in=['test_user', 'other_user']).delete() + + def test_create_task_with_un_authenticate_user(self): + """ + En este caso de prueba, estamos probando la API Task Create utilizando un usuario no autenticado. + """ + + response = self.client.post( + reverse('api-task'), {'title': 'My Task 1'}, format='json') + + is_passed = response.status_code == status.HTTP_403_FORBIDDEN + + TEST_RESULTS.append({ + "result": "Passed" if is_passed else "Failed", + "test_name": inspect.currentframe().f_code.co_name, + "test_description": "El usuario no autenticado no puede agregar una tarea a la lista" + }) + + if is_passed: + print("Resultado: Aprobado") + else: + print("Resultado: Fallido") + print("Nombre del test: " + inspect.currentframe().f_code.co_name) + print("Descripcion: El usuario no autenticado no puede agregar una tarea a la lista") + print("-----------") + + def test_put_task_with_un_authenticate_user(self): + """ + En este caso de prueba, estamos probando la API Task PUT utilizando un usuario no autenticado. + """ + + response = self.client.put( + reverse('api-task'), {'title': 'My Task'}, format='json') + + is_passed = response.status_code == status.HTTP_403_FORBIDDEN + + TEST_RESULTS.append({ + "result": "Passed" if is_passed else "Failed", + "test_name": inspect.currentframe().f_code.co_name, + "test_description": "El usuario no autenticado no puede modificar una tarea" + }) + + if is_passed: + print("Resultado: Aprobado") + else: + print("Resultado: Fallido") + print("Nombre del test: " + inspect.currentframe().f_code.co_name) + print("Descripcion: El usuario no autenticado no puede modificar una tarea") + print("-----------") + + def test_put_task_with_authenticated_user(self): + self.client.login(username='test_user', password='adminpass') + + response = self.client.put(reverse('api-task-detail', args=[str(self.task.idTask)]), {'title': 'My Task 2'}, format='json') + + is_passed = response.status_code == status.HTTP_200_OK + TEST_RESULTS.append({ + "result": "Passed" if is_passed else "Failed", + "test_name": inspect.currentframe().f_code.co_name, + "test_description": "Usuario autenticado puede modificar una tarea suya" + }) + if is_passed: + print("Resultado: Aprobado") + else: + print("Resultado: Fallido") + print("Nombre del test: " + inspect.currentframe().f_code.co_name) + print("Descripcion: Usuario autenticado puede modificar una tarea suya") + print("-----------") + + + def test_get_other_user_task_detail(self): + """ + En este caso de prueba, estamos probando la API Task GET y tratando de obtener detalles de la tarea de un usuario que usa credenciales de usuario diferentes. + """ + + self.client.login(username='other_user', password='adminpass') + + response = self.client.get(reverse('api-task-detail', args=[str(self.task.idTask)])) + + is_passed = response.status_code == status.HTTP_404_NOT_FOUND + + # is_passed = response.status_code == status.HTTP_403_FORBIDDEN + + TEST_RESULTS.append({ + "result": "Passed" if is_passed else "Failed", + "test_name": inspect.currentframe().f_code.co_name, + "test_description": "Solo el propietario puede ver el detalle de la tarea" + }) + if is_passed: + print("Resultado: Aprobado") + else: + print("Resultado: Fallido") + print("Nombre del test: " + inspect.currentframe().f_code.co_name) + print("Descripcion: Solo el propietario puede ver el detalle de la tarea") + print("-----------") + + + + def test_create_task_with_authenticated_user(self): + self.client.login(username='test_user', password='adminpass') + + response = self.client.post(reverse('api-task'), {'title': 'My Task'}, format='json') + + is_passed = response.status_code == status.HTTP_201_CREATED + TEST_RESULTS.append({ + "result": "Passed" if is_passed else "Failed", + "test_name": inspect.currentframe().f_code.co_name, + "test_description": "Usuario autenticado agrega tarea a la lista" + }) + if is_passed: + print("Resultado: Aprobado") + else: + print("Resultado: Fallido") + print("Nombre del test: " + inspect.currentframe().f_code.co_name) + print("Descripcion: Usuario autenticado agrega tarea a la lista") + print("-----------") + + def test_get_task_detail(self): + self.client.login(username='test_user', password='adminpass') + + response = self.client.get(reverse('api-task-detail', args=[str(self.task.idTask)])) + + is_passed = response.status_code == status.HTTP_200_OK + + TEST_RESULTS.append({ + "result": "Passed" if is_passed else "Failed", + "test_name": inspect.currentframe().f_code.co_name, + "test_description": "Usuario autenticado puede ver detalles de la tarea correctamente" + }) + if is_passed: + print("Resultado: Aprobado") + else: + print("Resultado: Fallido") + print("Nombre del test: " + inspect.currentframe().f_code.co_name) + print("Descripcion: Usuario autenticado puede ver detalles de la tarea correctamente") + print("-----------") + + +class CSVReportTest(APITestCase): + def test_send_csv(self): + send_test_csv_report( + test_results=TEST_RESULTS, + recipients=RECIPIENTS + ) + + + diff --git a/data/source_files/messy/273a3f8a3b29.py b/data/source_files/messy/273a3f8a3b29.py new file mode 100644 index 0000000000000000000000000000000000000000..8a1f6ceee24cfa74cb693e71048a38117f2ad54b --- /dev/null +++ b/data/source_files/messy/273a3f8a3b29.py @@ -0,0 +1,42 @@ +from django.contrib import admin + +from base.models import Topic, Photo + + +class EONBaseAdmin(admin.ModelAdmin): + + def get_changeform_initial_data(self, request): + + initial = super().get_changeform_initial_data(request) + + if 'add' in request.META['PATH_INFO']: + initial['created_by'] = request.user + + initial['modified_by'] = request.user + + return initial + + def save_model(self, request, obj, form, change): + + if not obj.created_by: + obj.created_by = request.user + + return super().save_model(request, obj, form, change) + + +class TopicAdmin(EONBaseAdmin): + + list_display = [ + 'name', 'parent_topic', 'top_level', 'modified_by', 'modified', 'created_by', 'created', + ] + + +class PhotoAdmin(EONBaseAdmin): + + # TODO Add Proper List Display + + pass + + +admin.site.register(Topic, TopicAdmin) +admin.site.register(Photo, PhotoAdmin) diff --git a/data/source_files/messy/27817926a143.py b/data/source_files/messy/27817926a143.py new file mode 100644 index 0000000000000000000000000000000000000000..8a73038a9d54b6fdd609f321f9fbc694a2017b7b --- /dev/null +++ b/data/source_files/messy/27817926a143.py @@ -0,0 +1,83 @@ +import os.path +import time +import logging +import yaml +from piecrust.processing.base import Processor + + +logger = logging.getLogger(__name__) + + +class _ConcatInfo(object): + timestamp = 0 + files = None + delim = "\n" + + +class ConcatProcessor(Processor): + PROCESSOR_NAME = 'concat' + + def __init__(self): + super(ConcatProcessor, self).__init__() + self._cache = {} + + def matches(self, path): + return path.endswith('.concat') + + def getDependencies(self, path): + info = self._load(path) + return info.files + + def getOutputFilenames(self, filename): + return [filename[:-7]] + + def process(self, path, out_dir): + dirname, filename = os.path.split(path) + out_path = os.path.join(out_dir, filename[:-7]) + info = self._load(path) + if not info.files: + raise Exception("No files specified in: %s" % + os.path.relpath(path, self.app.root_dir)) + + logger.debug("Concatenating %d files to: %s" % + (len(info.files), out_path)) + encoded_delim = info.delim.encode('utf8') + with open(out_path, 'wb') as ofp: + for p in info.files: + with open(p, 'rb') as ifp: + ofp.write(ifp.read()) + if info.delim: + ofp.write(encoded_delim) + return True + + def _load(self, path): + cur_time = time.time() + info = self._cache.get(path) + if (info is not None and + (cur_time - info.timestamp <= 1 or + os.path.getmtime(path) < info.timestamp)): + return info + + if info is None: + info = _ConcatInfo() + self._cache[path] = info + + with open(path, 'r') as fp: + config = yaml.load(fp) + + info.files = config.get('files', []) + info.delim = config.get('delim', "\n") + info.timestamp = cur_time + + path_mode = config.get('path_mode', 'relative') + if path_mode == 'relative': + dirname, _ = os.path.split(path) + info.files = [os.path.join(dirname, f) for f in info.files] + elif path_mode == 'absolute': + info.files = [os.path.join(self.app.root_dir, f) + for f in info.files] + else: + raise Exception("Unknown path mode: %s" % path_mode) + + return info + diff --git a/data/source_files/messy/2c0e54fb82db.py b/data/source_files/messy/2c0e54fb82db.py new file mode 100644 index 0000000000000000000000000000000000000000..8a66a4e65b6c15a92cb15d2436631fabac501551 --- /dev/null +++ b/data/source_files/messy/2c0e54fb82db.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- + +from __future__ import division, unicode_literals, print_function, absolute_import + +from pint.util import (UnitsContainer) +from pint.converters import (ScaleConverter, OffsetConverter) +from pint.definitions import (Definition, PrefixDefinition, UnitDefinition, + DimensionDefinition, AliasDefinition) + +from pint.testsuite import BaseTestCase + +class TestDefinition(BaseTestCase): + + def test_invalid(self): + self.assertRaises(ValueError, Definition.from_string, 'x = [time] * meter') + self.assertRaises(ValueError, Definition.from_string, '[x] = [time] * meter') + + def test_prefix_definition(self): + for definition in ('m- = 1e-3', 'm- = 10**-3', 'm- = 0.001'): + x = Definition.from_string(definition) + self.assertIsInstance(x, PrefixDefinition) + self.assertEqual(x.name, 'm') + self.assertEqual(x.aliases, ()) + self.assertEqual(x.converter.to_reference(1000), 1) + self.assertEqual(x.converter.from_reference(0.001), 1) + self.assertEqual(str(x), 'm') + + x = Definition.from_string('kilo- = 1e-3 = k-') + self.assertIsInstance(x, PrefixDefinition) + self.assertEqual(x.name, 'kilo') + self.assertEqual(x.aliases, ()) + self.assertEqual(x.symbol, 'k') + self.assertEqual(x.converter.to_reference(1000), 1) + self.assertEqual(x.converter.from_reference(.001), 1) + + x = Definition.from_string('kilo- = 1e-3 = k- = anotherk-') + self.assertIsInstance(x, PrefixDefinition) + self.assertEqual(x.name, 'kilo') + self.assertEqual(x.aliases, ('anotherk', )) + self.assertEqual(x.symbol, 'k') + self.assertEqual(x.converter.to_reference(1000), 1) + self.assertEqual(x.converter.from_reference(.001), 1) + + def test_baseunit_definition(self): + x = Definition.from_string('meter = [length]') + self.assertIsInstance(x, UnitDefinition) + self.assertTrue(x.is_base) + self.assertEqual(x.reference, UnitsContainer({'[length]': 1})) + + def test_unit_definition(self): + x = Definition.from_string('coulomb = ampere * second') + self.assertIsInstance(x, UnitDefinition) + self.assertFalse(x.is_base) + self.assertIsInstance(x.converter, ScaleConverter) + self.assertEqual(x.converter.scale, 1) + self.assertEqual(x.reference, UnitsContainer(ampere=1, second=1)) + + x = Definition.from_string('faraday = 96485.3399 * coulomb') + self.assertIsInstance(x, UnitDefinition) + self.assertFalse(x.is_base) + self.assertIsInstance(x.converter, ScaleConverter) + self.assertEqual(x.converter.scale, 96485.3399) + self.assertEqual(x.reference, UnitsContainer(coulomb=1)) + + x = Definition.from_string('degF = 9 / 5 * kelvin; offset: 255.372222') + self.assertIsInstance(x, UnitDefinition) + self.assertFalse(x.is_base) + self.assertIsInstance(x.converter, OffsetConverter) + self.assertEqual(x.converter.scale, 9/5) + self.assertEqual(x.converter.offset, 255.372222) + self.assertEqual(x.reference, UnitsContainer(kelvin=1)) + + x = Definition.from_string('turn = 6.28 * radian = _ = revolution = = cycle = _') + self.assertIsInstance(x, UnitDefinition) + self.assertEqual(x.name, 'turn') + self.assertEqual(x.aliases, ('revolution', 'cycle')) + self.assertEqual(x.symbol, 'turn') + self.assertFalse(x.is_base) + self.assertIsInstance(x.converter, ScaleConverter) + self.assertEqual(x.converter.scale, 6.28) + self.assertEqual(x.reference, UnitsContainer(radian=1)) + + def test_dimension_definition(self): + x = DimensionDefinition('[time]', '', (), converter='') + self.assertTrue(x.is_base) + self.assertEqual(x.name, '[time]') + + x = Definition.from_string('[speed] = [length]/[time]') + self.assertIsInstance(x, DimensionDefinition) + self.assertEqual(x.reference, UnitsContainer({'[length]': 1, '[time]': -1})) + + def test_alias_definition(self): + x = Definition.from_string("@alias meter = metro = metr") + self.assertIsInstance(x, AliasDefinition) + self.assertEqual(x.name, "meter") + self.assertEqual(x.aliases, ("metro", "metr")) diff --git a/data/source_files/messy/2cf5b37f3314.py b/data/source_files/messy/2cf5b37f3314.py new file mode 100644 index 0000000000000000000000000000000000000000..d9a428c026d2352f281b2b7ddd8ec8a286d37297 --- /dev/null +++ b/data/source_files/messy/2cf5b37f3314.py @@ -0,0 +1,123 @@ +""" +Rational Activation Functions for MXNET +======================================= + +This module allows you to create Rational Neural Networks using Learnable +Rational activation functions with MXNET networks. +""" +import mxnet as mx +from mxnet import initializer +from mxnet.gluon import HybridBlock + +from rational.utils.get_weights import get_parameters +from rational.mxnet.versions import _version_a, _version_b, _version_c, _version_d +from rational._base.rational_base import Rational_base + + +class Rational(Rational_base, HybridBlock): + """ + Rational Activation Function, inheriting from ``mxnet.gluon.HybridBlock``. + + Arguments: + approx_func (str): + The name of the approximated function for initialisation. + The different functions are available in `rational.rationals_config.json`. + Default: ``leaky_relu`` + + degrees (tuple of int): + The degrees of the numerator (P) and denominator (Q). + Default ``(5, 4)`` + + cuda (bool): + whether to execute on cuda device. + NOTE: THIS PARAMETER IS CURRENTLY NOT CONSIDERED. + CUDA GPUS ARE USED WHEN IT IS POSSIBLE + + version (str): + Version of Rational to use. Rational(x) = P(x)/Q(x), + where + P(x) = (a_0 + a_1 * x + a_2 * x^2 + ... + a_n * x^n) and + + `A`: Q(x) = (1 + |b_0 * x| + | b_1 * x^2| + ... + | b_m * x^{m+1}|) + `B`: Q(x) = (1 + |b_0 * x + b_1 * x^2 + ... + b_m * x^{m + 1}|) + `C`: Q(x) = (0.1 + |b_0 + b_1 * x + b_2 * x^2 + ... + b_m * x^m|) + `D`: like `B` with noised coefficients b_i + + Default ``A`` + + trainable (bool): + Whether the weights are trainable, i.e, if they are updated during + backward pass. + Default ``True`` + + Returns: + HybridBlock: + Rational hybrid block + """ + + def __init__(self, approx_func='leaky_relu', degrees=(5, 4), cuda=False, + version='A', trainable=True, **kwargs): + super(Rational, self).__init__(**kwargs) + + # read initial parameter configuration from external files + w_numerator, w_denominator = get_parameters( + version, degrees, approx_func) + + # convert w_numerator and w_denominator to mxnet arrays + w_numerator = mx.nd.array(w_numerator) + w_denominator = mx.nd.array(w_denominator) + + # register the amount of weights in numerator and denominator, since we need them during + # symbolic execution, but are unable to retrieve them at later stages + self.numerator_length = len(w_numerator) + self.denominator_length = len(w_denominator) + self.training = trainable + self.degrees = degrees + self.version = version + self.init_approximation = approx_func + + # set specified context (currently not happening, since unclear, how and why helpful) + # self.device = gpu() if cuda else cpu() + + # register and configure weights (numerator and denominator coefficients) + with self.name_scope(): + self.numerator = self.params.get(name='w_numerator', shape=(len(w_numerator),), + init=initializer.Constant( + w_numerator), + grad_req='write' if trainable + else 'null', + differentiable=trainable) + self.denominator = self.params.get(name='w_denominator', shape=(len(w_denominator),), + init=initializer.Constant( + w_denominator), + grad_req='write' if trainable + else 'null', + differentiable=trainable) + + # register whether function is trainable, since this information needs to be passed to + # version D + self.training = trainable + + self.init_approximation = approx_func + + # set rational activation function version + self.rational_func = {'A': _version_a, 'B': _version_b, 'C': _version_c, 'D': _version_d} \ + .get(version) + if self.rational_func is None: + raise ValueError( + "rational activation function version %s not implemented" % version) + + def hybrid_forward(self, F, x, numerator, denominator): + return self.rational_func(F, x, numerator, denominator, self.training, + self.numerator_length, self.denominator_length) + + def numpy(self): + """ + Returns a numpy version of this activation function. + """ + from rational.numpy import Rational as Rational_numpy + rational_n = Rational_numpy(self.init_approximation, self.degrees, + self.version) + rational_n.numerator = self.numerator.data().asnumpy().tolist() + rational_n.denominator = self.denominator.data().asnumpy().tolist() + return rational_n diff --git a/data/source_files/messy/2e6db999be23.py b/data/source_files/messy/2e6db999be23.py new file mode 100644 index 0000000000000000000000000000000000000000..8a076cdd50a9d69b52cffcb8dbe3df578f17d801 --- /dev/null +++ b/data/source_files/messy/2e6db999be23.py @@ -0,0 +1,92 @@ +# Created by ay27 at 17/4/9 +import os + +import matplotlib.pyplot as plt +import struct +import numpy as np + + +def trans(row): + return list(map(lambda x: np.uint8(x), row)) + + +def read_image(filename): + with open(filename, mode='rb') as file: + n = file.read(8) + n = struct.unpack("- and -tags + and returns them as a list of strings + ''' + ref = re.findall("\", text) + return ref + + +# In[171]: + + +def getrefurl(ref): + '''Finds the reference url in references and returns it as a string''' + url = re.search("http.+?(?=\s|\|title=|\|titel|\}\})", ref) + url = url.group() + return url + + +# In[30]: + + +def get_domain_name(url): + ''' + Finds the domain name of the reference url and + returns that name as a string. + ''' + domain_name = re.search('(?<=\/\/).+?(?=\/)', url) + domain_name = domain_name.group() + if domain_name.startswith('www.'): + domain_name = domain_name.replace('www.', '') + return domain_name + + +# In[32]: + + +def update_ref_dict(ref, ref_dict, ref_counts): + refurl = getrefurl(ref) + domain_name = get_domain_name(refurl) + if refurl not in ref_dict: + if domain_name not in ref_counts: + ref_counts.update({domain_name:1}) + refname = domain_name + '.' + str(ref_counts[domain_name]) + else: + ref_counts[domain_name] = ref_counts[domain_name] + 1 + refname = domain_name + '.' + str(ref_counts[domain_name]) + ref_dict.update({refurl:{'refs': [ref], 'refname': refname, 'refurl': refurl}}) + else: + if ref not in ref_dict[refurl]['refs']: + ref_dict[refurl]['refs'].append(ref) + return ref_dict, ref_counts + + +# In[36]: + + +def create_ref_dict(refs): + ''' + Takes a list of references, extracts the reference url and name, + and returns a dictionary sorted on the referenceurl as key. + ''' + ref_dict = {} + ref_counts = {} + for ref in refs: + ref_dict, ref_counts = update_ref_dict(ref, ref_dict, ref_counts) + return ref_dict + + + +# In[79]: + + +def get_ref_tag(text): + ''' + Finds references between the - and -tags + and returns them as a list of strings + ''' + ref = re.findall("\", text) + #ref = re.findall("\|\", text) + #ref = re.findall("\)\<\/ref>", text) + #ref = re.findall("\", text) + return set(ref) + + +# In[130]: + + +def get_spec_ref(text, ref_tag): + ''' + Finds references between the - and -tags + and returns them as a list of strings + ''' + #ref = re.findall("\", text) + #ref = re.findall("\|\", text) + #ref = re.findall("\)\<\/ref>", text) + ref = re.findall(f'\.+?\<\/ref\>', text) + ref = ref[0] + return ref + + +# In[115]: + + +def get_ref_tag_name(ref_tag): + ref_tag_name = re.findall('\".+\"', ref_tag) + ref_tag_name = ref_tag_name[0].replace('"', '') + return ref_tag_name + + +# In[136]: + + +def replace_tags(text): + ref_tags = get_ref_tag(text) + for tag in ref_tags: + name = get_ref_tag_name(tag) + spec_ref = get_spec_ref(text, name) + text = text.replace(tag, spec_ref) + return text + + +# In[49]: + + +def replace_countries(text): + countries = get_excel_dict('countries2.xlsx', 'Länder') + text = replace_from_dict(text, countries) + return text + + +# In[66]: + + +def replace_headers(text): + headers = {'English title':'Engelsk titel', + 'Original title':'Originaltitel', + 'Director(s)':'Regissör(er)', + 'Country':'Land', + 'School':'Skola'} + text = replace_from_dict(text, headers) + return text + + +# In[169]: + + +def reference_sorter(text): + ''' + Does a bunch of stuff that should be broken out in different functions. + ''' + references = get_ref(text) + reference_dict = create_ref_dict(references) + reference_list = [] + reference_text = '== Referenser ==\n\n' + + text = text.replace('== Källor ==', '== Referenser ==') + text = text.replace('', '') + + for entry in reference_dict: + for reference in reference_dict[entry]['refs']: + text = text.replace(reference, ''.format(reference_dict[entry]['refname'])) + reference_list.append('{}'.format(reference_dict[entry]['refname'], entry)) + for reference in reference_list: + reference_text += reference +'\n' + reference_text += '' + text = re.split('== Referenser ==', text) + text = text[0] + reference_text + text[-1] + + return text + + +# In[134]: + + +def fix_wiki_entry(textfile): + with open(textfile, 'r', encoding="utf8") as txt: + text = txt.read() + text = replace_tags(text) + text = reference_sorter(text) + text = replace_countries(text) + text = replace_headers(text) + with open('new_' + textfile, 'w', encoding='utf8') as new_text: + new_text.write(text) + return text + + + +# In[173]: + + +def main(): + fix_wiki_entry(input('Please enter input textfile:')) + +if __name__ == "__main__": + main() + diff --git a/data/source_files/messy/34c845141b72.py b/data/source_files/messy/34c845141b72.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3e99f0293f853274afed91ad78cb5b4d2be8d4 --- /dev/null +++ b/data/source_files/messy/34c845141b72.py @@ -0,0 +1,234 @@ +from cadnano.cnproxy import UndoCommand +from cadnano.strand import Strand +from cadnano import getBatch +import cadnano.preferences as prefs +import random + +class CreateXoverCommand(UndoCommand): + """ + Creates a Xover from the 3' end of strand5p to the 5' end of strand3p + this needs to + 1. preserve the old oligo of strand3p + 2. install the crossover + 3. apply the strand5p oligo to the strand3p + """ + def __init__(self, part, strand5p, strand5p_idx, strand3p, strand3p_idx, update_oligo=True): + super(CreateXoverCommand, self).__init__("create xover") + self._part = part + self._strand5p = strand5p + self._strand5p_idx = strand5p_idx + self._strand3p = strand3p + self._strand3p_idx = strand3p_idx + self._old_oligo3p = strand3p.oligo() + self._update_oligo = update_oligo + # end def + + def redo(self): + part = self._part + strand5p = self._strand5p + strand5p_idx = self._strand5p_idx + strand3p = self._strand3p + strand3p_idx = self._strand3p_idx + olg5p = strand5p.oligo() + old_olg3p = self._old_oligo3p + + # 0. Deselect the involved strands + doc = strand5p.document() + doc.removeStrandFromSelection(strand5p) + doc.removeStrandFromSelection(strand3p) + + if self._update_oligo: + # Test for Loopiness + if olg5p == strand3p.oligo(): + olg5p.setLoop(True) + else: + # 1. update preserved oligo length + olg5p.incrementLength(old_olg3p.length()) + # 2. Remove the old oligo and apply the 5' oligo to the 3' strand + old_olg3p.removeFromPart() + for strand in strand3p.generator3pStrand(): + # emits strandHasNewOligoSignal + Strand.setOligo(strand, olg5p) + + # 3. install the Xover + strand5p.setConnection3p(strand3p) + strand3p.setConnection5p(strand5p) + #print('strand5p = %s, connection3p = %s'%(strand5p._name, strand3p._name)) + + ss5 = strand5p.strandSet() + vh5p = ss5.virtualHelix() + st5p = ss5.strandType() + ss3 = strand3p.strandSet() + vh3p = ss3.virtualHelix() + st3p = ss3.strandType() + + part.partActiveVirtualHelixChangedSignal.emit(part, vh5p) + # strand5p.strandXover5pChangedSignal.emit(strand5p, strand3p) + # if self._update_oligo and not getBatch(): + if self._update_oligo: + strand5p.strandUpdateSignal.emit(strand5p) + strand3p.strandUpdateSignal.emit(strand3p) + # end def + + def undo(self): + part = self._part + strand5p = self._strand5p + strand5p_idx = self._strand5p_idx + strand3p = self._strand3p + strand3p_idx = self._strand3p_idx + old_olg3p = self._old_oligo3p + olg5p = strand5p.oligo() + + # 0. Deselect the involved strands + doc = strand5p.document() + doc.removeStrandFromSelection(strand5p) + doc.removeStrandFromSelection(strand3p) + + # 1. uninstall the Xover + strand5p.setConnection3p(None) + strand3p.setConnection5p(None) + + if self._update_oligo: + # Test Loopiness + if old_olg3p.isLoop(): + old_olg3p.setLoop(False) + else: + # 2. restore the modified oligo length + olg5p.decrementLength(old_olg3p.length()) + # 3. apply the old oligo to strand3p + old_olg3p.addToPart(part) + for strand in strand3p.generator3pStrand(): + # emits strandHasNewOligoSignal + Strand.setOligo(strand, old_olg3p) + + ss5 = strand5p.strandSet() + vh5p = ss5.virtualHelix() + st5p = ss5.strandType() + ss3 = strand3p.strandSet() + vh3p = ss3.virtualHelix() + st3p = ss3.strandType() + + part.partActiveVirtualHelixChangedSignal.emit(part, vh5p) + # strand5p.strandXover5pChangedSignal.emit(strand5p, strand3p) + if self._update_oligo: + strand5p.strandUpdateSignal.emit(strand5p) + strand3p.strandUpdateSignal.emit(strand3p) + # end def +# end class + +class RemoveXoverCommand(UndoCommand): + """ + Removes a Xover from the 3' end of strand5p to the 5' end of strand3p + this needs to + 1. preserve the old oligo of strand3p + 2. install the crossover + 3. update the oligo length + 4. apply the new strand3p oligo to the strand3p + """ + def __init__(self, part, strand5p, strand3p): + super(RemoveXoverCommand, self).__init__("remove xover") + self._part = part + self._strand5p = strand5p + self._strand5p_idx = strand5p.idx3Prime() + self._strand3p = strand3p + self._strand3p_idx = strand3p.idx5Prime() + n_o3p = self._new_oligo3p = strand3p.oligo().shallowCopy() + colorList = prefs.STAP_COLORS if strand5p.strandSet().isStaple() \ + else prefs.SCAF_COLORS + n_o3p.setColor(random.choice(colorList).name()) + n_o3p.setLength(0) + for strand in strand3p.generator3pStrand(): + n_o3p.incrementLength(strand.totalLength()) + # end def + n_o3p.setStrand5p(strand3p) + + self._isLoop = strand3p.oligo().isLoop() + # end def + + def redo(self): + part = self._part + strand5p = self._strand5p + strand5p_idx = self._strand5p_idx + strand3p = self._strand3p + strand3p_idx = self._strand3p_idx + new_olg3p = self._new_oligo3p + olg5p = self._strand5p.oligo() + + # 0. Deselect the involved strands + doc = strand5p.document() + doc.removeStrandFromSelection(strand5p) + doc.removeStrandFromSelection(strand3p) + + # 1. uninstall the Xover + strand5p.setConnection3p(None) + strand3p.setConnection5p(None) + + if self._isLoop: + olg5p.setLoop(False) + olg5p.setStrand5p(strand3p) + else: + # 2. restore the modified oligo length + olg5p.decrementLength(new_olg3p.length()) + # 3. apply the old oligo to strand3p + new_olg3p.addToPart(part) + for strand in strand3p.generator3pStrand(): + # emits strandHasNewOligoSignal + Strand.setOligo(strand, new_olg3p) + + ss5 = strand5p.strandSet() + vh5p = ss5.virtualHelix() + st5p = ss5.strandType() + ss3 = strand3p.strandSet() + vh3p = ss3.virtualHelix() + st3p = ss3.strandType() + + part.partActiveVirtualHelixChangedSignal.emit(part, vh5p) + # strand5p.strandXover5pChangedSignal.emit(strand5p, strand3p) + strand5p.strandUpdateSignal.emit(strand5p) + strand3p.strandUpdateSignal.emit(strand3p) + # end def + + def undo(self): + part = self._part + strand5p = self._strand5p + strand5p_idx = self._strand5p_idx + strand3p = self._strand3p + strand3p_idx = self._strand3p_idx + olg5p = strand5p.oligo() + new_olg3p = self._new_oligo3p + + # 0. Deselect the involved strands + doc = strand5p.document() + doc.removeStrandFromSelection(strand5p) + doc.removeStrandFromSelection(strand3p) + + if self._isLoop: + olg5p.setLoop(True) + # No need to restore whatever the old Oligo._strand5p was + else: + # 1. update preserved oligo length + olg5p.incrementLength(new_olg3p.length()) + # 2. Remove the old oligo and apply the 5' oligo to the 3' strand + new_olg3p.removeFromPart() + for strand in strand3p.generator3pStrand(): + # emits strandHasNewOligoSignal + Strand.setOligo(strand, olg5p) + # end else + + # 3. install the Xover + strand5p.setConnection3p(strand3p) + strand3p.setConnection5p(strand5p) + + ss5 = strand5p.strandSet() + vh5p = ss5.virtualHelix() + st5p = ss5.strandType() + ss3 = strand3p.strandSet() + vh3p = ss3.virtualHelix() + st3p = ss3.strandType() + + part.partActiveVirtualHelixChangedSignal.emit(part, vh5p) + # strand5p.strandXover5pChangedSignal.emit(strand5p, strand3p) + strand5p.strandUpdateSignal.emit(strand5p) + strand3p.strandUpdateSignal.emit(strand3p) + # end def +# end class \ No newline at end of file diff --git a/data/source_files/messy/38da1794d617.py b/data/source_files/messy/38da1794d617.py new file mode 100644 index 0000000000000000000000000000000000000000..d9fdf7b2da8d5e9203d4272f61f62e3af6000e66 --- /dev/null +++ b/data/source_files/messy/38da1794d617.py @@ -0,0 +1,252 @@ +"""Strip/reset AST in-place to match state after semantic analysis pass 1. + +Fine-grained incremental mode reruns semantic analysis (passes 2 and 3) +and type checking for *existing* AST nodes (targets) when changes are +propagated using fine-grained dependencies. AST nodes attributes are +often changed during semantic analysis passes 2 and 3, and running +semantic analysis again on those nodes would produce incorrect +results, since these passes aren't idempotent. This pass resets AST +nodes to reflect the state after semantic analysis pass 1, so that we +can rerun semantic analysis. + +(The above is in contrast to behavior with modules that have source code +changes, for which we reparse the entire module and reconstruct a fresh +AST. No stripping is required in this case. Both modes of operation should +have the same outcome.) + +Notes: + +* This is currently pretty fragile, as we must carefully undo whatever + changes can be made in semantic analysis passes 2 and 3, including changes + to symbol tables. + +* We reuse existing AST nodes because it makes it relatively straightforward + to reprocess only a single target within a module efficiently. If there + was a way to parse a single target within a file, in time proportional to + the size of the target, we'd rather create fresh AST nodes than strip them. + Alas, no such facility exists and building it is non-trivial. + +* Currently we don't actually reset all changes, but only those known to affect + non-idempotent semantic analysis behavior. + TODO: It would be more principled and less fragile to reset everything + changed in semantic analysis pass 2 and later. + +* Reprocessing may recreate AST nodes (such as Var nodes, and TypeInfo nodes + created with assignment statements) that will get different identities from + the original AST. Thus running an AST merge is necessary after stripping, + even though some identities are preserved. +""" + +import contextlib +from typing import Union, Iterator, Optional + +from mypy.nodes import ( + Node, FuncDef, NameExpr, MemberExpr, RefExpr, MypyFile, FuncItem, ClassDef, AssignmentStmt, + ImportFrom, Import, TypeInfo, SymbolTable, Var, CallExpr, Decorator, OverloadedFuncDef, + SuperExpr, UNBOUND_IMPORTED, GDEF, MDEF, IndexExpr +) +from mypy.traverser import TraverserVisitor + + +def strip_target(node: Union[MypyFile, FuncItem, OverloadedFuncDef]) -> None: + """Reset a fine-grained incremental target to state after semantic analysis pass 1. + + NOTE: Currently we opportunistically only reset changes that are known to otherwise + cause trouble. + """ + visitor = NodeStripVisitor() + if isinstance(node, MypyFile): + visitor.strip_file_top_level(node) + else: + node.accept(visitor) + + +class NodeStripVisitor(TraverserVisitor): + def __init__(self) -> None: + self.type = None # type: Optional[TypeInfo] + self.names = None # type: Optional[SymbolTable] + self.is_class_body = False + # By default, process function definitions. If False, don't -- this is used for + # processing module top levels. + self.recurse_into_functions = True + + def strip_file_top_level(self, file_node: MypyFile) -> None: + """Strip a module top-level (don't recursive into functions).""" + self.names = file_node.names + self.recurse_into_functions = False + file_node.accept(self) + + def visit_class_def(self, node: ClassDef) -> None: + """Strip class body and type info, but don't strip methods.""" + node.info.type_vars = [] + node.info.bases = [] + node.info.abstract_attributes = [] + node.info.mro = [] + node.info.add_type_vars() + node.info.tuple_type = None + node.info.typeddict_type = None + node.info._cache = set() + node.info._cache_proper = set() + node.base_type_exprs.extend(node.removed_base_type_exprs) + node.removed_base_type_exprs = [] + with self.enter_class(node.info): + super().visit_class_def(node) + + def visit_func_def(self, node: FuncDef) -> None: + if not self.recurse_into_functions: + return + node.expanded = [] + node.type = node.unanalyzed_type + with self.enter_method(node.info) if node.info else nothing(): + super().visit_func_def(node) + + def visit_decorator(self, node: Decorator) -> None: + node.var.type = None + for expr in node.decorators: + expr.accept(self) + if self.recurse_into_functions: + node.func.accept(self) + + def visit_overloaded_func_def(self, node: OverloadedFuncDef) -> None: + if not self.recurse_into_functions: + return + if node.impl: + # Revert change made during semantic analysis pass 2. + assert node.items[-1] is not node.impl + node.items.append(node.impl) + super().visit_overloaded_func_def(node) + + @contextlib.contextmanager + def enter_class(self, info: TypeInfo) -> Iterator[None]: + # TODO: Update and restore self.names + old_type = self.type + old_is_class_body = self.is_class_body + self.type = info + self.is_class_body = True + yield + self.type = old_type + self.is_class_body = old_is_class_body + + @contextlib.contextmanager + def enter_method(self, info: TypeInfo) -> Iterator[None]: + # TODO: Update and restore self.names + old_type = self.type + old_is_class_body = self.is_class_body + self.type = info + self.is_class_body = False + yield + self.type = old_type + self.is_class_body = old_is_class_body + + def visit_assignment_stmt(self, node: AssignmentStmt) -> None: + node.type = node.unanalyzed_type + if self.type and not self.is_class_body: + # TODO: Handle multiple assignment + if len(node.lvalues) == 1: + lvalue = node.lvalues[0] + if isinstance(lvalue, MemberExpr) and lvalue.is_new_def: + # Remove defined attribute from the class symbol table. If is_new_def is + # true for a MemberExpr, we know that it must be an assignment through + # self, since only those can define new attributes. + del self.type.names[lvalue.name] + super().visit_assignment_stmt(node) + + def visit_import_from(self, node: ImportFrom) -> None: + if node.assignments: + node.assignments = [] + else: + if self.names: + # Reset entries in the symbol table. This is necessary since + # otherwise the semantic analyzer will think that the import + # assigns to an existing name instead of defining a new one. + for name, as_name in node.names: + imported_name = as_name or name + symnode = self.names[imported_name] + symnode.kind = UNBOUND_IMPORTED + symnode.node = None + + def visit_import(self, node: Import) -> None: + if node.assignments: + node.assignments = [] + else: + if self.names: + # Reset entries in the symbol table. This is necessary since + # otherwise the semantic analyzer will think that the import + # assigns to an existing name instead of defining a new one. + for name, as_name in node.ids: + imported_name = as_name or name + initial = imported_name.split('.')[0] + symnode = self.names[initial] + symnode.kind = UNBOUND_IMPORTED + symnode.node = None + + def visit_name_expr(self, node: NameExpr) -> None: + # Global assignments are processed in semantic analysis pass 1, and we + # only want to strip changes made in passes 2 or later. + if not (node.kind == GDEF and node.is_new_def): + # Remove defined attributes so that they can recreated during semantic analysis. + if node.kind == MDEF and node.is_new_def: + self.strip_class_attr(node.name) + self.strip_ref_expr(node) + + def visit_member_expr(self, node: MemberExpr) -> None: + self.strip_ref_expr(node) + # These need to cleared for member expressions but not for other RefExprs since + # these can change based on changed in a base class. + node.is_new_def = False + node.is_inferred_def = False + if self.is_duplicate_attribute_def(node): + # This is marked as an instance variable definition but a base class + # defines an attribute with the same name, and we can't have + # multiple definitions for an attribute. Defer to the base class + # definition. + self.strip_class_attr(node.name) + node.def_var = None + super().visit_member_expr(node) + + def visit_index_expr(self, node: IndexExpr) -> None: + node.analyzed = None # was a type alias + super().visit_index_expr(node) + + def strip_class_attr(self, name: str) -> None: + if self.type is not None: + del self.type.names[name] + + def is_duplicate_attribute_def(self, node: MemberExpr) -> bool: + if not node.is_inferred_def: + return False + assert self.type is not None, "Internal error: Member defined outside class" + if node.name not in self.type.names: + return False + return any(info.get(node.name) is not None for info in self.type.mro[1:]) + + def strip_ref_expr(self, node: RefExpr) -> None: + node.kind = None + node.node = None + node.fullname = None + node.is_new_def = False + node.is_inferred_def = False + + def visit_call_expr(self, node: CallExpr) -> None: + node.analyzed = None + super().visit_call_expr(node) + + def visit_super_expr(self, node: SuperExpr) -> None: + node.info = None + super().visit_super_expr(node) + + # TODO: handle more node types + + +def is_self_member_ref(memberexpr: MemberExpr) -> bool: + """Does memberexpr refer to an attribute of self?""" + # TODO: Merge with is_self_member_ref in semanal.py. + if not isinstance(memberexpr.expr, NameExpr): + return False + node = memberexpr.expr.node + return isinstance(node, Var) and node.is_self + + +@contextlib.contextmanager +def nothing() -> Iterator[None]: + yield diff --git a/data/source_files/messy/39daf83dff74.py b/data/source_files/messy/39daf83dff74.py new file mode 100644 index 0000000000000000000000000000000000000000..d9b79f86fa592dbe24c72c454192af966a916a5a --- /dev/null +++ b/data/source_files/messy/39daf83dff74.py @@ -0,0 +1,401 @@ +from abc import ( + ABC, + abstractmethod, +) +import logging +from typing import ( + TYPE_CHECKING, + Tuple, + Type, +) + +from eth._utils.datatypes import ( + Configurable, +) +from eth.db.backends.base import ( + BaseAtomicDB, +) +from eth.exceptions import ( + BlockNotFound, +) +from eth.validation import ( + validate_word, +) +from eth_typing import ( + Hash32, +) +from eth_utils import ( + ValidationError, + encode_hex, +) + +from eth2._utils.ssz import ( + validate_imported_block_unchanged, +) +from eth2.beacon.db.chain import ( + BaseBeaconChainDB, + BeaconChainDB, +) +from eth2.beacon.exceptions import ( + BlockClassError, + StateMachineNotFound, +) +from eth2.beacon.types.blocks import ( + BaseBeaconBlock, +) +from eth2.beacon.types.states import ( + BeaconState, +) +from eth2.beacon.typing import ( + FromBlockParams, + Slot, +) +from eth2.beacon.validation import ( + validate_slot, +) + +if TYPE_CHECKING: + from eth2.beacon.state_machines.base import ( # noqa: F401 + BaseBeaconStateMachine, + ) + + +class BaseBeaconChain(Configurable, ABC): + """ + The base class for all BeaconChain objects + """ + chaindb = None # type: BaseBeaconChainDB + chaindb_class = None # type: Type[BaseBeaconChainDB] + sm_configuration = None # type: Tuple[Tuple[Slot, Type[BaseBeaconStateMachine]], ...] + chain_id = None # type: int + + # + # Helpers + # + @classmethod + @abstractmethod + def get_chaindb_class(cls) -> Type[BaseBeaconChainDB]: + pass + + # + # Chain API + # + @classmethod + @abstractmethod + def from_genesis(cls, + base_db: BaseAtomicDB, + genesis_state: BeaconState, + genesis_block: BaseBeaconBlock) -> 'BaseBeaconChain': + pass + + # + # State Machine API + # + @classmethod + @abstractmethod + def get_state_machine_class( + cls, + block: BaseBeaconBlock) -> Type['BaseBeaconStateMachine']: + pass + + @abstractmethod + def get_state_machine(self, at_block: BaseBeaconBlock=None) -> 'BaseBeaconStateMachine': + pass + + @classmethod + @abstractmethod + def get_state_machine_class_for_block_slot( + cls, + slot: Slot) -> Type['BaseBeaconStateMachine']: + pass + + # + # Block API + # + @abstractmethod + def get_block_class(self, block_root: Hash32) -> Type[BaseBeaconBlock]: + pass + + @abstractmethod + def create_block_from_parent(self, + parent_block: BaseBeaconBlock, + block_params: FromBlockParams) -> BaseBeaconBlock: + pass + + @abstractmethod + def get_block_by_root(self, block_root: Hash32) -> BaseBeaconBlock: + pass + + @abstractmethod + def get_canonical_head(self) -> BaseBeaconBlock: + pass + + @abstractmethod + def get_score(self, block_root: Hash32) -> int: + pass + + @abstractmethod + def ensure_block(self, block: BaseBeaconBlock=None) -> BaseBeaconBlock: + pass + + @abstractmethod + def get_block(self) -> BaseBeaconBlock: + pass + + @abstractmethod + def get_canonical_block_by_slot(self, slot: Slot) -> BaseBeaconBlock: + pass + + @abstractmethod + def get_canonical_block_root(self, slot: Slot) -> Hash32: + pass + + @abstractmethod + def import_block( + self, + block: BaseBeaconBlock, + perform_validation: bool=True + ) -> Tuple[BaseBeaconBlock, Tuple[BaseBeaconBlock, ...], Tuple[BaseBeaconBlock, ...]]: + pass + + +class BeaconChain(BaseBeaconChain): + """ + A Chain is a combination of one or more ``StateMachine`` classes. Each ``StateMachine`` + is associated with a range of slots. The Chain class acts as a wrapper around these other + StateMachine classes, delegating operations to the appropriate StateMachine depending on the + current block slot number. + """ + logger = logging.getLogger("eth2.beacon.chains.BeaconChain") + + chaindb_class = BeaconChainDB # type: Type[BaseBeaconChainDB] + + def __init__(self, base_db: BaseAtomicDB) -> None: + if not self.sm_configuration: + raise ValueError( + "The Chain class cannot be instantiated with an empty `sm_configuration`" + ) + else: + # TODO implment validate_sm_configuration(self.sm_configuration) + # validate_sm_configuration(self.sm_configuration) + pass + + self.chaindb = self.get_chaindb_class()(base_db) + + # + # Helpers + # + @classmethod + def get_chaindb_class(cls) -> Type['BaseBeaconChainDB']: + if cls.chaindb_class is None: + raise AttributeError("`chaindb_class` not set") + return cls.chaindb_class + + # + # Chain API + # + @classmethod + def from_genesis(cls, + base_db: BaseAtomicDB, + genesis_state: BeaconState, + genesis_block: BaseBeaconBlock) -> 'BaseBeaconChain': + """ + Initialize the ``BeaconChain`` from a genesis state. + """ + sm_class = cls.get_state_machine_class_for_block_slot(genesis_block.slot) + if type(genesis_block) != sm_class.block_class: + raise BlockClassError( + "Given genesis block class: {}, StateMachine.block_class: {}".format( + type(genesis_block), + sm_class.block_class + ) + ) + + chaindb = cls.get_chaindb_class()(db=base_db) + chaindb.persist_state(genesis_state) + return cls._from_genesis_block(base_db, genesis_block) + + @classmethod + def _from_genesis_block(cls, + base_db: BaseAtomicDB, + genesis_block: BaseBeaconBlock) -> 'BaseBeaconChain': + """ + Initialize the ``BeaconChain`` from the genesis block. + """ + chaindb = cls.get_chaindb_class()(db=base_db) + chaindb.persist_block(genesis_block, genesis_block.__class__) + return cls(base_db) + + # + # StateMachine API + # + @classmethod + def get_state_machine_class(cls, block: BaseBeaconBlock) -> Type['BaseBeaconStateMachine']: + """ + Returns the ``StateMachine`` instance for the given block slot number. + """ + return cls.get_state_machine_class_for_block_slot(block.slot) + + @classmethod + def get_state_machine_class_for_block_slot( + cls, + slot: Slot) -> Type['BaseBeaconStateMachine']: + """ + Return the ``StateMachine`` class for the given block slot number. + """ + if cls.sm_configuration is None: + raise AttributeError("Chain classes must define the StateMachines in sm_configuration") + + validate_slot(slot) + for start_slot, sm_class in reversed(cls.sm_configuration): + if slot >= start_slot: + return sm_class + raise StateMachineNotFound("No StateMachine available for block slot: #{0}".format(slot)) + + def get_state_machine(self, at_block: BaseBeaconBlock=None) -> 'BaseBeaconStateMachine': + """ + Return the ``StateMachine`` instance for the given block number. + """ + block = self.ensure_block(at_block) + sm_class = self.get_state_machine_class_for_block_slot(block.slot) + + return sm_class( + chaindb=self.chaindb, + block=block, + ) + + # + # Block API + # + def get_block_class(self, block_root: Hash32) -> Type[BaseBeaconBlock]: + slot = self.chaindb.get_slot_by_root(block_root) + sm_class = self.get_state_machine_class_for_block_slot(slot) + block_class = sm_class.block_class + return block_class + + def create_block_from_parent(self, + parent_block: BaseBeaconBlock, + block_params: FromBlockParams) -> BaseBeaconBlock: + """ + Passthrough helper to the ``StateMachine`` class of the block descending from the + given block. + """ + return self.get_state_machine_class_for_block_slot( + slot=parent_block.slot + 1 if block_params.slot is None else block_params.slot, + ).create_block_from_parent(parent_block, block_params) + + def get_block_by_root(self, block_root: Hash32) -> BaseBeaconBlock: + """ + Return the requested block as specified by block hash. + + Raise ``BlockNotFound`` if there's no block with the given hash in the db. + """ + validate_word(block_root, title="Block Hash") + + block_class = self.get_block_class(block_root) + return self.chaindb.get_block_by_root(block_root, block_class) + + def get_canonical_head(self) -> BaseBeaconBlock: + """ + Return the block at the canonical chain head. + + Raise ``CanonicalHeadNotFound`` if there's no head defined for the canonical chain. + """ + block_root = self.chaindb.get_canonical_head_root() + + block_class = self.get_block_class(block_root) + return self.chaindb.get_block_by_root(block_root, block_class) + + def get_score(self, block_root: Hash32) -> int: + """ + Return the score of the block with the given hash. + + Raise ``BlockNotFound`` if there is no matching black hash. + """ + return self.chaindb.get_score(block_root) + + def ensure_block(self, block: BaseBeaconBlock=None) -> BaseBeaconBlock: + """ + Return ``block`` if it is not ``None``, otherwise return the block + of the canonical head. + """ + if block is None: + head = self.get_canonical_head() + return self.create_block_from_parent(head, FromBlockParams()) + else: + return block + + def get_block(self) -> BaseBeaconBlock: + """ + Return the current TIP block. + """ + return self.get_state_machine().block + + def get_canonical_block_by_slot(self, slot: Slot) -> BaseBeaconBlock: + """ + Return the block with the given number in the canonical chain. + + Raise ``BlockNotFound`` if there's no block with the given number in the + canonical chain. + """ + validate_slot(slot) + return self.get_block_by_root(self.chaindb.get_canonical_block_root(slot)) + + def get_canonical_block_root(self, slot: Slot) -> Hash32: + """ + Return the block hash with the given number in the canonical chain. + + Raise ``BlockNotFound`` if there's no block with the given number in the + canonical chain. + """ + return self.chaindb.get_canonical_block_root(slot) + + def import_block( + self, + block: BaseBeaconBlock, + perform_validation: bool=True + ) -> Tuple[BaseBeaconBlock, Tuple[BaseBeaconBlock, ...], Tuple[BaseBeaconBlock, ...]]: + """ + Import a complete block and returns a 3-tuple + + - the imported block + - a tuple of blocks which are now part of the canonical chain. + - a tuple of blocks which were canonical and now are no longer canonical. + """ + + try: + parent_block = self.get_block_by_root(block.previous_block_root) + except BlockNotFound: + raise ValidationError( + "Attempt to import block #{}. Cannot import block {} before importing " + "its parent block at {}".format( + block.slot, + block.signed_root, + block.previous_block_root, + ) + ) + base_block_for_import = self.create_block_from_parent( + parent_block, + FromBlockParams(), + ) + state, imported_block = self.get_state_machine(base_block_for_import).import_block(block) + + # Validate the imported block. + if perform_validation: + validate_imported_block_unchanged(imported_block, block) + + # TODO: Now it just persists all state. Should design how to clean up the old state. + self.chaindb.persist_state(state) + + ( + new_canonical_blocks, + old_canonical_blocks, + ) = self.chaindb.persist_block(imported_block, imported_block.__class__) + + self.logger.debug( + 'IMPORTED_BLOCK: slot %s | signed root %s', + imported_block.slot, + encode_hex(imported_block.signed_root), + ) + + return imported_block, new_canonical_blocks, old_canonical_blocks diff --git a/data/source_files/messy/3c3eb9cf78bc.py b/data/source_files/messy/3c3eb9cf78bc.py new file mode 100644 index 0000000000000000000000000000000000000000..8a2f3c798c33272d514bf543343fc4f88d9112f6 --- /dev/null +++ b/data/source_files/messy/3c3eb9cf78bc.py @@ -0,0 +1,45 @@ +import pandas as pd +import os +from tqdm import tqdm +from collections import defaultdict +from mlxtend.preprocessing import TransactionEncoder +from mlxtend.frequent_patterns import apriori + +dataPath = "data/static" +itemSetList = [] + + +def loadDataSet(): + with open(os.path.join(dataPath, "aprioriData.csv"), 'r') as f: + for line in f.readlines(): + line = line.replace('\n', '') + cates = line.split(' ') + itemSetList.append(list(map(int, cates))) + + +def myApriori(): + te = TransactionEncoder() + te_ary = te.fit(itemSetList).transform(itemSetList) + df = pd.DataFrame(te_ary, columns=te.columns_) + return df + + +def dataInit(): + if os.path.exists(os.path.join(dataPath, "aprioriData.csv")): + return + df = pd.read_csv("data/static/static.csv") + user_category = defaultdict(set) + for idx, row in tqdm(df.iterrows(), total=df.shape[0], desc="category data generate"): + user_category[row['USER_ID']].add(row['CATEGORY_ID']) + with open(os.path.join(dataPath, "aprioriData.csv"), 'w+') as f: + for k, v in tqdm(user_category.items()): + f.write(' '.join(sorted(list(map(str, v))))+'\n') + + +if __name__ == '__main__': + dataInit() + loadDataSet() + df = myApriori() + frequent_itemsets = apriori(df, min_support=0.0035, use_colnames=True) + frequent_itemsets['length'] = frequent_itemsets['itemsets'].apply(lambda x: len(x)) + print(frequent_itemsets[(frequent_itemsets['length'] >= 2)]) diff --git a/data/source_files/messy/3edfecfa9fba.py b/data/source_files/messy/3edfecfa9fba.py new file mode 100644 index 0000000000000000000000000000000000000000..d9fb744315858b3e553e097f0866c6de49262adf --- /dev/null +++ b/data/source_files/messy/3edfecfa9fba.py @@ -0,0 +1,86 @@ +from pathlib import Path + +root = Path(__file__).parent.absolute() + +import envo + +envo.add_source_roots([root]) + +from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple + +from envo import Env, Namespace, env_var, logger, run + +from env_comm import StickybeakCommEnv as ParentEnv + +p = Namespace("p") + + +class StickybeakCiEnv(ParentEnv): + class Meta(ParentEnv.Meta): + stage: str = "ci" + emoji: str = "⚙" + load_env_vars = True + + class Environ(ParentEnv.Environ): + pypi_username: Optional[str] = env_var(raw=True) + pypi_password: Optional[str] = env_var(raw=True) + + e: Environ + + def init(self) -> None: + super().init() + + @p.command + def bootstrap(self, test_apps=True) -> None: + super().bootstrap(test_apps) + + @p.command + def test(self) -> None: + run("pytest --reruns 2 -v tests") + + @p.command + def build(self) -> None: + run("poetry build") + + @p.command + def publish(self) -> None: + run(f'poetry publish --username "{self.e.pypi_username}" --password "{self.e.pypi_password}"', verbose=False) + + @p.command + def rstcheck(self) -> None: + pass + # run("rstcheck README.rst | tee ./workspace/rstcheck.txt") + + @p.command + def flake(self) -> None: + pass + # run("flake8 . | tee ./workspace/flake8.txt") + + @p.command + def check_black(self) -> None: + run("black --check .") + + @p.command + def check_isort(self) -> None: + run("black --check .") + + @p.command + def mypy(self) -> None: + pass + run("mypy .") + + @p.command + def generate_version(self) -> None: + import toml + + config = toml.load(str(self.meta.root / "pyproject.toml")) + version: str = config["tool"]["poetry"]["version"] + + version_file = self.meta.root / "stickybeak/__version__.py" + Path(version_file).touch() + + version_file.write_text(f'__version__ = "{version}"\n') + + +ThisEnv = StickybeakCiEnv diff --git a/data/source_files/messy/420435d267b7.py b/data/source_files/messy/420435d267b7.py new file mode 100644 index 0000000000000000000000000000000000000000..d9b95364464c7d47db46ee15f7524a804b79ea1b --- /dev/null +++ b/data/source_files/messy/420435d267b7.py @@ -0,0 +1,286 @@ +# -*- coding: utf-8 -*- +""" + pyboleto.html + ~~~~~~~~~~~~~ + + Classe Responsável por fazer o output do boleto em html. + + :copyright: © 2012 by Artur Felipe de Sousa + :license: BSD, see LICENSE for more details. + +""" +import os +import string +import sys +import codecs +import base64 + +from itertools import chain +if sys.version_info < (3,): + from itertools import izip_longest as zip_longest + zip_longest # chamando para evitar erro de nao uso do zip_longest +else: + from itertools import zip_longest + +DIGITS = [ + ['n', 'n', 'w', 'w', 'n'], + ['w', 'n', 'n', 'n', 'w'], + ['n', 'w', 'n', 'n', 'w'], + ['w', 'w', 'n', 'n', 'n'], + ['n', 'n', 'w', 'n', 'w'], + ['w', 'n', 'w', 'n', 'n'], + ['n', 'w', 'w', 'n', 'n'], + ['n', 'n', 'n', 'w', 'w'], + ['w', 'n', 'n', 'w', 'n'], + ['n', 'w', 'n', 'w', 'n'], +] + + +class BoletoHTML(object): + """Geração do Boleto em HTML + + Esta classe é responsável por imprimir o boleto em HTML. + Outras classes podem ser implementadas no futuro com a mesma interface, + para fazer output em LaTeX, etc ... + + Esta classe pode imprimir boletos em formato de carnê (2 boletos por + página) ou em formato de folha cheia. + + :param file_descr: Um arquivo ou *file-like* class. + :param landscape: Formato da folha. Usar ``True`` para boleto + tipo carnê. + + """ + + def __init__(self, file_descr, landscape=False): + # Tamanhos em px + self.width = 750 + self.widthCanhoto = 0 + self.fontSizeTitle = 9 + self.heightLine = 27 + self.fontSizeValue = 12 + self.title = 'Boleto bancário' + self.fileDescr = file_descr + + if landscape: + raise NotImplementedError('Em desenvolvimento...') + else: + tpl = string.Template(self._load_template('head.html')) + self.html = tpl.substitute(title=self.title, width=self.width, + font_size_value=self.fontSizeValue, + height_line=self.heightLine, + font_size_title=self.fontSizeTitle) + + def _load_template(self, template): + pyboleto_dir = os.path.dirname(os.path.abspath(__file__)) + template_path = os.path.join(pyboleto_dir, 'templates', template) + with open(template_path, 'r') as tpl: + template_content = tpl.read() + return template_content + + def _load_image(self, logo_image): + pyboleto_dir = os.path.dirname(os.path.abspath(__file__)) + image_path = os.path.join(pyboleto_dir, 'media', logo_image) + return image_path + + def _drawReciboSacado(self, boletoDados): + """Imprime o Recibo do Sacado para modelo de página inteira + + :param boletoDados: Objeto com os dados do boleto a ser preenchido. + Deve ser subclasse de :class:`pyboleto.data.BoletoData` + :type boletoDados: :class:`pyboleto.data.BoletoData` + + """ + tpl = string.Template(self._load_template('recibo_sacado.html')) + tpl_data = {} + + # Cabeçalho + tpl_data['logo_img'] = '' + if boletoDados.logo_image: + img = codecs.open(self._load_image(boletoDados.logo_image)) + aux = img.read() + aux = base64.b64encode(aux) + img_base64 = 'data:image/jpeg;base64,{0}'.format(aux) + tpl_data['logo_img'] = img_base64 + tpl_data['codigo_dv_banco'] = boletoDados.codigo_dv_banco + + # Corpo + tpl_data['cedente'] = boletoDados.cedente + tpl_data['agencia_conta_cedente'] = boletoDados.agencia_conta_cedente + tpl_data['cedente_documento'] = boletoDados.cedente_documento + + data_vencimento = boletoDados.data_vencimento + tpl_data['data_vencimento'] = data_vencimento.strftime('%d/%m/%Y') + tpl_data['sacado'] = boletoDados.sacado[0] + tpl_data['nosso_numero_format'] = boletoDados.format_nosso_numero() + tpl_data['numero_documento'] = boletoDados.numero_documento + + data_documento = boletoDados.data_documento + tpl_data['data_documento'] = data_documento.strftime('%d/%m/%Y') + tpl_data['cedente_endereco'] = boletoDados.cedente_endereco + + valor_doc = self._formataValorParaExibir(boletoDados.valor_documento) + tpl_data['valor_documento'] = valor_doc + + # Demonstrativo + tpl_data['demonstrativo'] = '' + for dm in boletoDados.demonstrativo: + tpl_data['demonstrativo'] += '

{0}

'.format(dm) + + self.html += tpl.substitute(tpl_data) + + def _drawHorizontalCorteLine(self): + self.html += '
' + + def _drawReciboCaixa(self, boletoDados): + """Imprime o Recibo do Caixa + + :param boletoDados: Objeto com os dados do boleto a ser preenchido. + Deve ser subclasse de :class:`pyboleto.data.BoletoData` + :type boletoDados: :class:`pyboleto.data.BoletoData` + + """ + tpl = string.Template(self._load_template('recibo_caixa.html')) + tpl_data = {} + + # Cabeçalho + tpl_data['logo_img'] = '' + if boletoDados.logo_image: + img = codecs.open(self._load_image(boletoDados.logo_image)) + aux = img.read() + aux = base64.b64encode(aux) + img_base64 = 'data:image/jpeg;base64,{0}'.format(aux) + tpl_data['logo_img'] = img_base64 + + tpl_data['codigo_dv_banco'] = boletoDados.codigo_dv_banco + tpl_data['linha_digitavel'] = boletoDados.linha_digitavel + + # Corpo + data_vencimento = boletoDados.data_vencimento + tpl_data['data_vencimento'] = data_vencimento.strftime('%d/%m/%Y') + + # value em unicode em data.py + if isinstance(boletoDados.local_pagamento, unicode): + tpl_data['local_pagamento'] = boletoDados.local_pagamento.encode + ('utf-8') + else: + tpl_data['local_pagamento'] = boletoDados.local_pagamento + tpl_data['cedente'] = boletoDados.cedente + tpl_data['agencia_conta_cedente'] = boletoDados.agencia_conta_cedente + + data_documento = boletoDados.data_documento + tpl_data['data_documento'] = data_documento.strftime('%d/%m/%Y') + tpl_data['numero_documento'] = boletoDados.numero_documento + tpl_data['especie_documento'] = boletoDados.especie_documento + tpl_data['aceite'] = boletoDados.aceite + + data_process = boletoDados.data_processamento + tpl_data['data_processamento'] = data_process.strftime('%d/%m/%Y') + tpl_data['nosso_numero_format'] = boletoDados.format_nosso_numero() + tpl_data['carteira'] = boletoDados.carteira + tpl_data['especie'] = boletoDados.especie + tpl_data['quantidade'] = boletoDados.quantidade + + valor = self._formataValorParaExibir(boletoDados.valor) + tpl_data['valor'] = valor + + valor_doc = self._formataValorParaExibir(boletoDados.valor_documento) + tpl_data['valor_documento'] = valor_doc + + # Instruções + tpl_data['instrucoes'] = '' + for instrucao in boletoDados.instrucoes: + tpl_data['instrucoes'] += '

{0}

'.format(instrucao) + + # Rodapé + tpl_data['sacado_info'] = '' + for linha_sacado in boletoDados.sacado: + tpl_data['sacado_info'] += '

{0}

'.format(linha_sacado) + + # Código de barras + tpl_data['barcode'] = self._codigoBarraI25(boletoDados.barcode) + + self.html += tpl.substitute(tpl_data) + + def drawCanhoto(self, html): + if html: + self.html += str(html) + + def printPage(self): + self.html += '' + + def drawBoletoCarneDuplo(self, boletoDados1, boletoDados2=None): + """Imprime um boleto tipo carnê com 2 boletos por página. + + :param boletoDados1: Objeto com os dados do boleto a ser preenchido. + Deve ser subclasse de :class:`pyboleto.data.BoletoData` + :param boletoDados2: Objeto com os dados do boleto a ser preenchido. + Deve ser subclasse de :class:`pyboleto.data.BoletoData` + :type boletoDados1: :class:`pyboleto.data.BoletoData` + :type boletoDados2: :class:`pyboleto.data.BoletoData` + + """ + raise NotImplementedError('Em desenvolvimento') + + def drawBoleto(self, boletoDados): + """Imprime Boleto Convencional + + Você pode chamar este método diversas vezes para criar um arquivo com + várias páginas, uma por boleto. + + :param boletoDados: Objeto com os dados do boleto a ser preenchido. + Deve ser subclasse de :class:`pyboleto.data.BoletoData` + :type boletoDados: :class:`pyboleto.data.BoletoData` + """ + self._drawReciboSacado(boletoDados) + self._drawHorizontalCorteLine() + self._drawReciboCaixa(boletoDados) + self._drawHorizontalCorteLine() + + def nextPage(self): + """Força início de nova página""" + self.html += '
' + + def save(self): + """Fecha boleto e constroi o arquivo""" + self.html += '
' + if hasattr(self.fileDescr, 'write'): + self.fileDescr.write(self.html) + else: + with open(self.fileDescr, 'w') as fd: + fd.write(self.html) + + def _formataValorParaExibir(self, nfloat): + if nfloat: + txt = nfloat + txt = txt.replace('.', ',') + else: + txt = "" + return txt + + def _codigoBarraI25(self, code): + """Imprime Código de barras otimizado para boletos + http://en.wikipedia.org/wiki/Interleaved_2_of_5 + """ + digits = ['n', 'n s', 'n', 'n s'] + + if len(code) % 2 != 0: + code = '0' + code + + for digt1, digt2 in self._grouper(2, code): + digt1_repr = DIGITS[int(digt1)] + digt2_repr = map(lambda x: x + ' s', DIGITS[int(digt2)]) + digits.extend(chain(*zip(digt1_repr, digt2_repr))) + + digits.extend(['w', 'n s', 'n']) + + result = [] + for digit in digits: + result.append(''.format(digit)) + + return ''.join(result) + + def _grouper(self, n, iterable, fillvalue=None): + """grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx""" + args = [iter(iterable)] * n + return zip_longest(fillvalue=fillvalue, *args) diff --git a/data/source_files/messy/4543867f9f05.py b/data/source_files/messy/4543867f9f05.py new file mode 100644 index 0000000000000000000000000000000000000000..8a4aca2698c2e4be69222dd4573ceaef0614a5f5 --- /dev/null +++ b/data/source_files/messy/4543867f9f05.py @@ -0,0 +1,71 @@ +# Copyright (c) 2014 Mirantis Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from oslo.config import cfg +import oslo.messaging + +from ceilometer import plugin +from ceilometer import sample + + +OPTS = [ + cfg.StrOpt('sahara_control_exchange', + default='sahara', + help="Exchange name for Data Processing notifications."), +] + +cfg.CONF.register_opts(OPTS) +SERVICE = 'sahara' + + +class DataProcessing(plugin.NotificationBase): + + resource_name = '%s.cluster' % SERVICE + + @property + def event_types(self): + return [ + '%s.create' % self.resource_name, + '%s.update' % self.resource_name, + '%s.delete' % self.resource_name, + ] + + @staticmethod + def get_targets(conf): + """Return a sequence of oslo.messaging.Target + + It is defining the exchange and topics to be connected for this plugin. + """ + return [oslo.messaging.Target(topic=topic, + exchange=conf.sahara_control_exchange) + for topic in conf.notification_topics] + + def process_notification(self, message): + name = message['event_type'].replace(self.resource_name, 'cluster') + + project_id = message['payload']['project_id'] + + user_id = message['_context_user_id'] + + yield sample.Sample.from_notification( + name=name, + type=sample.TYPE_DELTA, + unit='cluster', + volume=1, + resource_id=message['payload']['cluster_id'], + user_id=user_id, + project_id=project_id, + message=message) diff --git a/data/source_files/messy/475b6b33d620.py b/data/source_files/messy/475b6b33d620.py new file mode 100644 index 0000000000000000000000000000000000000000..8a23e2e394242f4eca447da628bb8ac3e7fe2807 --- /dev/null +++ b/data/source_files/messy/475b6b33d620.py @@ -0,0 +1,173 @@ +# -*- encoding:utf-8 -*- +# @Time : 2021/1/3 15:15 +# @Author : gfjiang +import os.path as osp +import mmcv +import numpy as np +import cvtools +import matplotlib.pyplot as plt +import cv2.cv2 as cv +from functools import partial +import torch +import math +from cvtools.utils.path import add_prefix_filename_suffix + +from mmdet.ops import nms +from mmdet.apis import init_detector, inference_detector + + +def draw_features(module, input, output, work_dir='./'): + x = output.cpu().numpy() + out_channels = list(output.shape)[1] + height = int(math.sqrt(out_channels)) + width = height + if list(output.shape)[2] < 128: + return + fig = plt.figure(figsize=(32, 32)) + fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.95, wspace=0.05, hspace=0.05) + for i in range(height * width): + plt.subplot(height, width, i + 1) + plt.axis('off') + img = x[0, i, :, :] + pmin = np.min(img) + pmax = np.max(img) + img = ((img - pmin) / (pmax - pmin + 0.000001))*255 # float在[0,1]之间,转换成0-255 + img = img.astype(np.uint8) # 转成unit8 + img = cv.applyColorMap(img, cv.COLORMAP_JET) # 生成heat map + img = img[:, :, ::-1] # 注意cv2(BGR)和matplotlib(RGB)通道是相反的 + plt.imshow(img) + # print("{}/{}".format(i,width*height)) + savename = get_image_name_for_hook(module, work_dir) + fig.savefig(savename, dpi=100) + fig.clf() + plt.close() + + +def get_image_name_for_hook(module, work_dir='./'): + """ + Generate image filename for hook function + + Parameters: + ----------- + module: module of neural network + """ + # os.makedirs(work_dir, exist_ok=True) + module_name = str(module) + base_name = module_name.split('(')[0] + index = 0 + image_name = '.' # '.' is surely exist, to make first loop condition True + while osp.exists(image_name): + index += 1 + image_name = osp.join( + work_dir, 'feats', '%s_%d.png' % (base_name, index)) + return image_name + + +class AerialDetectionOBB(object): + + def __init__(self, config, pth): + self.imgs = [] + self.cfg = mmcv.Config.fromfile(config) + self.pth = pth + print('loading model {} ...'.format(pth)) + self.model = init_detector(self.cfg, self.pth, device='cuda:0') + self.results = [] + self.img_detected = [] + # self.vis_feats((torch.nn.Conv2d, torch.nn.MaxPool2d)) + + def __call__(self, + imgs_or_path, + det_thrs=0.5, + vis=False, + vis_thr=0.5, + save_root=''): + if isinstance(imgs_or_path, str): + self.imgs += cvtools.get_files_list(imgs_or_path) + else: + self.imgs += imgs_or_path + prog_bar = mmcv.ProgressBar(len(self.imgs)) + for _, img in enumerate(self.imgs): + self.detect(img, det_thrs=det_thrs, vis=vis, + vis_thr=vis_thr, save_root=save_root) + prog_bar.update() + + def detect(self, + img, + det_thrs=0.5, + vis=False, + vis_thr=0.5, + save_root=''): + result = inference_detector(self.model, img) + # result = self.nms(result) + if isinstance(det_thrs, float): + det_thrs = [det_thrs] * len(result) + if vis: + to_file = osp.join(save_root, osp.basename(img)) + to_file = add_prefix_filename_suffix(to_file, suffix='_obb') + self.vis(img, result, vis_thr=vis_thr, to_file=to_file) + result = [det[det[..., -1] > det_thr] for det, det_thr + in zip(result, det_thrs)] + if len(result) == 0: + print('detect: image {} has no object.'.format(img)) + self.img_detected.append(img) + self.results.append(result) + return result + + def nms(self, result, nms_th=0.3): + dets_num = [len(det_cls) for det_cls in result] + result = np.vstack(result) + _, ids = nms(result, nms_th) + total_num = 0 + nms_result = [] + for num in dets_num: + ids_cls = ids[np.where((total_num <= ids) & (ids < num))[0]] + nms_result.append(result[ids_cls]) + total_num += num + return nms_result + + def vis(self, img, bbox_result, vis_thr=0.5, + to_file='vis.jpg'): + bboxes = np.vstack(bbox_result) + labels = [ + np.full(bbox.shape[0], i, dtype=np.int32) + for i, bbox in enumerate(bbox_result) + ] + labels = np.concatenate(labels) + inds = np.where(bboxes[:, -1] > vis_thr)[0] + bboxes = bboxes[inds] + labels = labels[inds] + texts = [self.model.CLASSES[index]+'|'+str(round(bbox[-1], 2)) + for index, bbox in zip(labels, bboxes)] + img = cvtools.draw_boxes_texts( + img, bboxes[:, :-1], box_format='polygon', line_width=2) + cvtools.imwrite(img, to_file) + + def vis_feats(self, modules_for_plot): + h, w = self.cfg.data.train.img_scale + for name, module in self.model.named_modules(): + if isinstance(module, modules_for_plot): + draw_features_func = partial( + draw_features, work_dir=self.cfg.work_dir) + module.register_forward_hook(draw_features_func) + + def save_results(self, save): + str_results = '' + for i, img in enumerate(self.img_detected): + result = self.results[i] + img = osp.basename(img) + for cls_index, dets in enumerate(result): + cls = self.model.CLASSES[cls_index] + for box in dets: + bbox_str = ','.join(map(str, map(int, box[:4]))) + str_results += ' '.join([img, cls, bbox_str]) + '\n' + with open(save, 'w') as f: + f.write(str_results) + + +if __name__ == '__main__': + config_file = 'configs/DOTA/faster_rcnn_RoITrans_r50_fpn_1x_dota_1gpus_mdanet2.py' + pth_file = 'work_dirs/faster_rcnn_RoITrans_r50_fpn_1x_dota_1gpus_mdanet2/epoch_12.pth' + detector = AerialDetectionOBB(config_file, pth_file) + detector('/media/data/DOTA/crop/P2701_2926_1597_3949_2620.png', vis=True, + save_root='work_dirs/attention_vis/') + detector.save_results('work_dirs/faster_rcnn_RoITrans_r50_fpn_1x_dota_1gpus_mdanet2/detect_result.txt') diff --git a/data/source_files/messy/49cbaee2c42e.py b/data/source_files/messy/49cbaee2c42e.py new file mode 100644 index 0000000000000000000000000000000000000000..8a458f7c27c0535d07e4b642f5a00528aee12141 --- /dev/null +++ b/data/source_files/messy/49cbaee2c42e.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +"""Proiect.ipynb + +Automatically generated by Colaboratory. + +Original file is located at + https://colab.research.google.com/drive/1TR1Frf0EX4PtFZkLlVdGtMTINqhoQwRw +""" + +# Importarea librariilor +import numpy as np +import pandas as pd # pandas pentru citirea fisierelor + +from sklearn import preprocessing +from sklearn import svm # importarea modelului +from sklearn.feature_extraction.text import TfidfVectorizer # modelarea datelor pentru a obtine valori numerice din text +from sklearn.metrics import classification_report, confusion_matrix + +# Incarcarea datelor +train_labels = pd.read_csv('train_labels.txt', sep='\t', header=None, engine='python') +train_labels = train_labels.to_numpy() # convertim data frame-ul intr-un vector +train_labels = train_labels[:,1] # pastram doar etichetele + +train_samples = pd.read_csv('train_samples.txt', sep='\t', header=None, engine='python') +train_samples = train_samples.to_numpy() +train_samples = train_samples[:,1] # pastram doar cuvintele + +validation_samples = pd.read_csv('validation_samples.txt', sep='\t', header=None, engine='python') +validation_samples = validation_samples.to_numpy() +validation_samples = validation_samples[:,1] # salvam cuvintele + +validation_labels = pd.read_csv('validation_labels.txt', sep='\t', header=None, engine='python') +validation_labels = validation_labels.to_numpy() +validation_labels = validation_labels[:,1] # pastram doar etichetele + +test_samples = pd.read_csv('test_samples.txt', sep='\t', header=None, engine='python') +test_samples = test_samples.to_numpy() +label = test_samples[:,0] # salvam etichetele +test_samples = test_samples[:,1] # salvam cuvintele + +def normalize_data(train_data, test_data, type='l2'): # functia care intoarce datele normalizate + #tipul de normalizare este setat implicit la l2 + scaler = None + if type == 'standard': + scaler = preprocessing.StandardScaler() + + elif type == 'min_max': + scaler = preprocessing.MinMaxScaler() + + elif type == 'l1' or type == 'l2': + scaler = preprocessing.Normalizer(norm = type) + + if scaler is not None: + scaler.fit(train_data) + scaled_train_data = scaler.transform(train_data) + scaled_test_data = scaler.transform(test_data) + return scaled_train_data, scaled_test_data + else: + return train_data, test_data + + +# Modelarea datelor +vectorizer = TfidfVectorizer() + +training_features = vectorizer.fit_transform(train_samples) + +validation_features = vectorizer.transform(validation_samples) + +testing_features = vectorizer.transform(test_samples) + +# Normalizarea datelor +norm_train, norm_test = normalize_data(training_features, testing_features) +norm_validation, _ = normalize_data(validation_features, validation_features) + +# Aplicam modelul SVM +model_svm = svm.SVC(kernel='linear', C=23, gamma=110) # definim modelul +model_svm.fit(norm_train, train_labels) # procesul de invatare +test_predictions = model_svm.predict(norm_test) # predictie pe datele de test + +print("Classification report: ") +print(classification_report(validation_labels, model_svm.predict(norm_validation))) + +print("Confusion matrix: ") +print(confusion_matrix(validation_labels, model_svm.predict(norm_validation))) + +# Exportarea datelor in format CSV +test_export = {'id':label,'label':test_predictions} +data_f = pd.DataFrame(test_export) +data_f.to_csv('test_submission.csv',index=False) \ No newline at end of file diff --git a/data/source_files/messy/4b961f90da33.py b/data/source_files/messy/4b961f90da33.py new file mode 100644 index 0000000000000000000000000000000000000000..d9f92ab910680bac296e7b003e06e2747df83ea4 --- /dev/null +++ b/data/source_files/messy/4b961f90da33.py @@ -0,0 +1,46 @@ +import os.path +from collections import Counter + +import pytest + +INPUT_TXT = os.path.join(os.path.dirname(__file__), 'input.txt') + + +def compute(s: str) -> int: + lines = s.splitlines() + numbers = Counter(int(f) for f in lines[0].split(",")) + + for d in range(80): + numbers2 = Counter({8: numbers[0], 6: numbers[0]}) + for k, v in numbers.items(): + if k >= 1: + numbers2[k - 1] += v + numbers = numbers2 + return sum(numbers.values()) + + +INPUT_S = '''\ +3,4,3,1,2 +''' +EXPECTED = 5934 + + +@pytest.mark.parametrize( + ('input_s', 'expected'), + ( + (INPUT_S, EXPECTED), + ), +) +def test(input_s: str, expected: int) -> None: + assert compute(input_s) == expected + + +def main() -> int: + with open(INPUT_TXT, "r") as f: + print(compute(f.read())) + + return 0 + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/data/source_files/messy/536e863c3c34.py b/data/source_files/messy/536e863c3c34.py new file mode 100644 index 0000000000000000000000000000000000000000..8a04bef0858eef7458b1e38ddd409346a98cb2cc --- /dev/null +++ b/data/source_files/messy/536e863c3c34.py @@ -0,0 +1,74 @@ +import pandas as pd +from catalyst.constants import LOG_LEVEL +from catalyst.exchange.utils.stats_utils import prepare_stats +from catalyst.gens.sim_engine import ( + BAR, + SESSION_START +) +from logbook import Logger + +log = Logger('LiveGraphClock', level=LOG_LEVEL) + + +class LiveGraphClock(object): + """Realtime clock for live trading. + + This class is a drop-in replacement for + :class:`zipline.gens.sim_engine.MinuteSimulationClock`. + + This mixes the clock with a live graph. + + Notes + ----- + This seemingly awkward approach allows us to run the program using a single + thread. This is important because Matplotlib does not play nice with + multi-threaded environments. Zipline probably does not either. + + + Matplotlib has a pause() method which is a wrapper around time.sleep() + used in the SimpleClock. The key difference is that users + can still interact with the chart during the pause cycles. This is + what enables us to keep a single thread. This is also why we are not using + the 'animate' callback of Matplotlib. We need to direct access to the + __iter__ method in order to yield events to Zipline. + + The :param:`time_skew` parameter represents the time difference between + the exchange and the live trading machine's clock. It's not used currently. + """ + + def __init__(self, sessions, context, callback=None, + time_skew=pd.Timedelta('0s')): + + self.sessions = sessions + self.time_skew = time_skew + self._last_emit = None + self._before_trading_start_bar_yielded = True + self.context = context + self.callback = callback + + def __iter__(self): + from matplotlib import pyplot as plt + yield pd.Timestamp.utcnow(), SESSION_START + + while True: + current_time = pd.Timestamp.utcnow() + current_minute = current_time.floor('1T') + + if self._last_emit is None or current_minute > self._last_emit: + log.debug('emitting minutely bar: {}'.format(current_minute)) + + self._last_emit = current_minute + yield current_minute, BAR + + recorded_cols = list(self.context.recorded_vars.keys()) + df, _ = prepare_stats( + self.context.frame_stats, recorded_cols=recorded_cols + ) + self.callback(self.context, df) + + else: + # I can't use the "animate" reactive approach here because + # I need to yield from the main loop. + + # Workaround: https://stackoverflow.com/a/33050617/814633 + plt.pause(1) diff --git a/data/source_files/messy/5523ac693ecc.py b/data/source_files/messy/5523ac693ecc.py new file mode 100644 index 0000000000000000000000000000000000000000..d9d59aa9c4853e8590f823a63f53768b8aecbce1 --- /dev/null +++ b/data/source_files/messy/5523ac693ecc.py @@ -0,0 +1,170 @@ +import asyncio +import logging +import time +from typing import Set, List, Tuple, Optional, TYPE_CHECKING +import uuid + +import ray + +from ray.experimental.workflow import workflow_context +from ray.experimental.workflow import workflow_storage +from ray.experimental.workflow.common import (Workflow, WorkflowStatus, + WorkflowMetaData, StepType) +from ray.experimental.workflow.step_executor import commit_step +from ray.experimental.workflow.storage import get_global_storage +from ray.experimental.workflow.workflow_access import ( + flatten_workflow_output, get_or_create_management_actor, + get_management_actor) + +if TYPE_CHECKING: + from ray.experimental.workflow.step_executor import WorkflowExecutionResult + +logger = logging.getLogger(__name__) + + +def run(entry_workflow: Workflow, + workflow_id: Optional[str] = None, + overwrite: bool = True) -> ray.ObjectRef: + """Run a workflow asynchronously. + + # TODO(suquark): The current "run" always overwrite existing workflow. + # We need to fix this later. + """ + store = get_global_storage() + assert ray.is_initialized() + if workflow_id is None: + # Workflow ID format: {Entry workflow UUID}.{Unix time to nanoseconds} + workflow_id = f"{str(uuid.uuid4())}.{time.time():.9f}" + logger.info(f"Workflow job created. [id=\"{workflow_id}\", storage_url=" + f"\"{store.storage_url}\"].") + + with workflow_context.workflow_step_context(workflow_id, + store.storage_url): + # checkpoint the workflow + ws = workflow_storage.get_workflow_storage(workflow_id) + commit_step(ws, "", entry_workflow) + workflow_manager = get_or_create_management_actor() + ignore_existing = (entry_workflow.data.step_type != StepType.FUNCTION) + # NOTE: It is important to 'ray.get' the returned output. This + # ensures caller of 'run()' holds the reference to the workflow + # result. Otherwise if the actor removes the reference of the + # workflow output, the caller may fail to resolve the result. + result: "WorkflowExecutionResult" = ray.get( + workflow_manager.run_or_resume.remote(workflow_id, + ignore_existing)) + if entry_workflow.data.step_type == StepType.FUNCTION: + return flatten_workflow_output(workflow_id, + result.persisted_output) + else: + return flatten_workflow_output(workflow_id, result.volatile_output) + + +# TODO(suquark): support recovery with ObjectRef inputs. +def resume(workflow_id: str) -> ray.ObjectRef: + """Resume a workflow asynchronously. See "api.resume()" for details. + """ + storage = get_global_storage() + logger.info(f"Resuming workflow [id=\"{workflow_id}\", storage_url=" + f"\"{storage.storage_url}\"].") + workflow_manager = get_or_create_management_actor() + # NOTE: It is important to 'ray.get' the returned output. This + # ensures caller of 'run()' holds the reference to the workflow + # result. Otherwise if the actor removes the reference of the + # workflow output, the caller may fail to resolve the result. + result: "WorkflowExecutionResult" = ray.get( + workflow_manager.run_or_resume.remote( + workflow_id, ignore_existing=False)) + logger.info(f"Workflow job {workflow_id} resumed.") + return flatten_workflow_output(workflow_id, result.persisted_output) + + +def get_output(workflow_id: str, name: Optional[str]) -> ray.ObjectRef: + """Get the output of a running workflow. + See "api.get_output()" for details. + """ + assert ray.is_initialized() + try: + workflow_manager = get_management_actor() + except ValueError as e: + raise ValueError( + "Failed to connect to the workflow management " + "actor. The workflow could have already failed. You can use " + "workflow.resume() to resume the workflow.") from e + output = ray.get(workflow_manager.get_output.remote(workflow_id, name)) + return flatten_workflow_output(workflow_id, output) + + +def cancel(workflow_id: str) -> None: + try: + workflow_manager = get_management_actor() + ray.get(workflow_manager.cancel_workflow.remote(workflow_id)) + except ValueError: + wf_store = workflow_storage.get_workflow_storage(workflow_id) + wf_store.save_workflow_meta(WorkflowMetaData(WorkflowStatus.CANCELED)) + + +def get_status(workflow_id: str) -> Optional[WorkflowStatus]: + try: + workflow_manager = get_management_actor() + running = ray.get( + workflow_manager.is_workflow_running.remote(workflow_id)) + except Exception: + running = False + if running: + return WorkflowStatus.RUNNING + store = workflow_storage.get_workflow_storage(workflow_id) + meta = store.load_workflow_meta() + if meta is None: + raise ValueError(f"No such workflow_id {workflow_id}") + return meta.status + + +def list_all(status_filter: Set[WorkflowStatus] + ) -> List[Tuple[str, WorkflowStatus]]: + try: + workflow_manager = get_management_actor() + except ValueError: + workflow_manager = None + + if workflow_manager is None: + runnings = [] + else: + runnings = ray.get(workflow_manager.list_running_workflow.remote()) + if WorkflowStatus.RUNNING in status_filter and len(status_filter) == 1: + return [(r, WorkflowStatus.RUNNING) for r in runnings] + + runnings = set(runnings) + # Here we don't have workflow id, so use empty one instead + store = workflow_storage.get_workflow_storage("") + ret = [] + for (k, s) in store.list_workflow(): + if s == WorkflowStatus.RUNNING and k not in runnings: + s = WorkflowStatus.RESUMABLE + if s in status_filter: + ret.append((k, s)) + return ret + + +def resume_all(with_failed: bool) -> List[Tuple[str, ray.ObjectRef]]: + filter_set = {WorkflowStatus.RESUMABLE} + if with_failed: + filter_set.add(WorkflowStatus.FAILED) + all_failed = list_all(filter_set) + try: + workflow_manager = get_management_actor() + except Exception as e: + raise RuntimeError("Failed to get management actor") from e + + async def _resume_one(wid: str) -> Tuple[str, Optional[ray.ObjectRef]]: + try: + result: "WorkflowExecutionResult" = ( + await workflow_manager.run_or_resume.remote(wid)) + obj = flatten_workflow_output(wid, result.persisted_output) + return wid, obj + except Exception: + logger.error(f"Failed to resume workflow {wid}") + return (wid, None) + + ret = workflow_storage.asyncio_run( + asyncio.gather(*[_resume_one(wid) for (wid, _) in all_failed])) + return [(wid, obj) for (wid, obj) in ret if obj is not None] diff --git a/data/source_files/messy/57c192b0a642.py b/data/source_files/messy/57c192b0a642.py new file mode 100644 index 0000000000000000000000000000000000000000..8a036923cf292987a326de518f02ae1d70e60da4 --- /dev/null +++ b/data/source_files/messy/57c192b0a642.py @@ -0,0 +1,36 @@ +from typing import Tuple + +import click + +from .cmd import KiwiCommandType, KiwiCommand +from .decorators import kiwi_command +from ..executable import COMPOSE_EXE +from ..instance import Instance +from ..project import Project + + +@click.argument( + "compose_args", + metavar="[ARG]...", + nargs=-1, +) +@click.argument( + "compose_cmd", + metavar="COMMAND", +) +@kiwi_command( + short_help="Run docker-compose command", + # ignore arguments looking like options + # just pass everything down to docker-compose + context_settings={"ignore_unknown_options": True}, +) +class CmdCommand(KiwiCommand): + """Run raw docker-compose command in a project""" + + type = KiwiCommandType.PROJECT + enabled_only = True + + @classmethod + def run_for_project(cls, instance: Instance, project: Project, compose_cmd: str = None, + compose_args: Tuple[str] = None) -> None: + COMPOSE_EXE.run([compose_cmd, *compose_args], **project.process_kwargs) diff --git a/data/source_files/messy/58802a461c93.py b/data/source_files/messy/58802a461c93.py new file mode 100644 index 0000000000000000000000000000000000000000..8a65b0ad04c9a2a75abc3c11ac9fc679788fe298 --- /dev/null +++ b/data/source_files/messy/58802a461c93.py @@ -0,0 +1,150 @@ +from flask import jsonify, Blueprint, request, json, make_response +from werkzeug.security import generate_password_hash, check_password_hash +from datetime import datetime +from ..utils.validators import Validation +from ..models.auth_models import Users + + +v1_auth_blueprint = Blueprint('auth', __name__, url_prefix='/api/v1') + +USER = Users() +VALIDATOR = Validation() + + +@v1_auth_blueprint.route('/signup', methods=['POST']) +def signup(): + """View that controls creation of new users""" + try: + data = request.get_json() + except: + return jsonify({ + "status": 400, + "message": "Invalid input" + }), 400 + + firstname = data.get('firstname') + lastname = data.get('lastname') + othername = data.get('othername') + email = data.get('email') + phone_number = data.get('phone_number') + username = data.get('username') + is_admin = data.get('is_admin') + password = data.get('password') + + if not firstname or not firstname.split(): + return make_response(jsonify({ + "status": 400, + "message": "Firstname is required" + })), 400 + if not lastname or not lastname.split(): + return make_response(jsonify({ + "status": 400, + "message": "Lastname is required" + })), 400 + if not email or not email.split(): + return make_response(jsonify({ + "status": 400, + "message": "Email is required" + })), 400 + if not phone_number: + return make_response(jsonify({ + "status": 400, + "message": "Phone number is required" + })), 400 + if not username or not username.split(): + return make_response(jsonify({ + "status": 400, + "message": "Username is required" + })), 400 + if not password or not password.split(): + return make_response(jsonify({ + "status": 400, + "message": "Password is required" + })), 400 + + if not VALIDATOR.validate_phone_number(phone_number): + return jsonify({ + "status": 400, + "message": "Please input valid phone number" + }), 400 + + if VALIDATOR.validate_password(password): + return jsonify({ + "status": 400, + "message": "Password not valid" + }), 400 + + if not VALIDATOR.validate_email(email): + return jsonify({ + "status": 400, + "message": "Invalid email" + }), 400 + + if VALIDATOR.username_exists(username): + return jsonify({ + "status": 400, + "message": "Username exists" + }), 400 + + if VALIDATOR.email_exists(email): + return jsonify({ + "status": 400, + "message": "Email exists" + }), 400 + + password = generate_password_hash( + password, method='pbkdf2:sha256', salt_length=8) + + res = USER.signup( + firstname, lastname, othername, email, phone_number, username, is_admin, password) + return jsonify({ + "status": 201, + "data": [{ + "firstname": firstname, + "lastname": lastname, + "othername": othername, + "email": email, + "phone_number": phone_number, + "username": username, + "is_admin": is_admin + }] + }), 201 + + +@v1_auth_blueprint.route('/login', methods=['POST']) +def login(): + """ A view to control users login """ + try: + data = request.get_json() + + except: + return make_response(jsonify({ + "status": 400, + "message": "Wrong input" + })), 400 + username = data.get('username') + password = data.get('password') + + if not username: + return make_response(jsonify({ + "status": 400, + "message": "Username is required" + })), 400 + if not password: + return make_response(jsonify({ + "status": 400, + "message": "Password is required" + })), 400 + + if not VALIDATOR.username_exists(username): + return jsonify({ + "status": 404, + "message": "User does not exist" + }), 404 + + auth_token = user.generate_auth_token(username) + return make_response(jsonify({ + "status": 200, + "message": 'Logged in successfuly', + "token": auth_token + })), 200 diff --git a/data/source_files/messy/5aa390db76fb.py b/data/source_files/messy/5aa390db76fb.py new file mode 100644 index 0000000000000000000000000000000000000000..d9cc56ba272dad2f5e9b82b388ad10350a722906 --- /dev/null +++ b/data/source_files/messy/5aa390db76fb.py @@ -0,0 +1,363 @@ +# Unit tests + + +import unittest + + +def run_test_instance(unittestinstance, profile, committeesize, tests): + import rules_approval + + # all rules used? + for rule in rules_approval.MWRULES: + unittestinstance.assertTrue(rule in tests.keys()) + + for rule in tests.keys(): + + output = rules_approval.compute_rule(rule, profile, + committeesize, + resolute=False) + unittestinstance.assertEqual( + output, tests[rule], msg=rules_approval.MWRULES[rule] + " failed") + output = rules_approval.compute_rule( + rule, profile, committeesize, resolute=True) + unittestinstance.assertEqual( + len(output), 1, + msg=rules_approval.MWRULES[rule] + " failed with resolute=True") + unittestinstance.assertTrue( + output[0] in tests[rule], + msg=rules_approval.MWRULES[rule] + " failed with resolute=True") + + +class TestApprovalMultiwinner(unittest.TestCase): + def test_createprofiles(self): + from preferences import Profile + from preferences import DichotomousPreferences + num_cand = 7 + prof = Profile(num_cand) + self.assertEqual(prof.add_preferences( + DichotomousPreferences([0, 4, 5])), + None) + with self.assertRaises(Exception): + prof.add_preferences(DichotomousPreferences([num_cand])) + with self.assertRaises(Exception): + prof.add_preferences(DichotomousPreferences([-1])) + self.assertEqual(prof.add_preferences([0, 4, 5]), None) + with self.assertRaises(Exception): + prof.add_preferences([0, 4, 5, "1"]) + with self.assertRaises(Exception): + prof.add_preferences(["1", 0, 4, 5]) + p1 = DichotomousPreferences([0, 4, 5]) + p2 = DichotomousPreferences([1, 2]) + self.assertEqual(prof.add_preferences([p1, p2]), None) + self.assertTrue(prof.has_unit_weights()) + prof.add_preferences(DichotomousPreferences([0, 4, 5], 2.4)) + self.assertFalse(prof.has_unit_weights()) + self.assertEqual(prof.totalweight(), 6.4) + + def test_mwrules__toofewcandidates(self): + from preferences import Profile + import rules_approval + profile = Profile(5) + committeesize = 4 + preflist = [[0, 1, 2], [1], [1, 2], [0]] + profile.add_preferences(preflist) + + for rule in rules_approval.MWRULES.keys(): + with self.assertRaises(Exception): + rules_approval.compute_rule(rule, profile, committeesize) + with self.assertRaises(Exception): + rules_approval.compute_rule(rule, profile, + committeesize, resolute=True) + + def test_mwrules_weightsconsidered(self): + from preferences import Profile + from preferences import DichotomousPreferences + import rules_approval + + self.longMessage = True + + profile = Profile(3) + profile.add_preferences(DichotomousPreferences([0])) + profile.add_preferences(DichotomousPreferences([0])) + profile.add_preferences(DichotomousPreferences([1], 5)) + profile.add_preferences(DichotomousPreferences([0])) + committeesize = 1 + + for rule in rules_approval.MWRULES.keys(): + if "monroe" in rule or "rule-x" in rule: + # Monroe and rule x only work with unit weights: + continue + result = rules_approval.compute_rule(rule, profile, committeesize) + self.assertTrue([1] in result, + msg=rule + " failed"+str(result)) + + def test_mwrules_correct_simple(self): + from preferences import Profile + import rules_approval + + self.longMessage = True + + profile = Profile(4) + profile.add_preferences([[0], [1], [2], [3]]) + committeesize = 2 + + for rule in rules_approval.MWRULES.keys(): + if rule == "greedy-monroe": # always returns one committee + continue + self.assertEqual(len(rules_approval.compute_rule(rule, profile, + committeesize)), + 6, msg=rule + " failed") + + for rule in rules_approval.MWRULES.keys(): + self.assertEqual(len(rules_approval.compute_rule(rule, profile, + committeesize, + resolute=True)), + 1, msg=rule + " failed with resolute=True") + + def test_monroe_indivisible(self): + from preferences import Profile + import rules_approval + + self.longMessage = True + + profile = Profile(4) + profile.add_preferences([[0], [0], [0], [1, 2], [1, 2], [1], [3]]) + committeesize = 3 + + for ilp in [True, False]: + # max Monroe score is 6 (even for committee [0, 1, 3]) + self.assertEqual( + rules_approval.compute_monroe(profile, committeesize, + ilp=ilp, resolute=False), + [[0, 1, 2], [0, 1, 3], [0, 2, 3]]) + + # this test shows that tiebreaking is not (yet) + # implemented for opt-Phragmen + def test_optphrag_notiebreaking(self): + from preferences import Profile + from rules_approval import compute_rule + + self.longMessage = True + + profile = Profile(6) + profile.add_preferences([[0], [0], [1, 3], [1, 3], [1, 4], + [2, 4], [2, 5], [2, 5]]) + committeesize = 3 + + self.assertEqual( + len(compute_rule("optphrag", profile, committeesize, + resolute=False)), + 12) + + def test_mwrules_correct_advanced_1(self): + + from preferences import Profile + self.longMessage = True + committeesize = 4 + + profile = Profile(6) + preflist = [[0, 4, 5], [0], [1, 4, 5], [1], + [2, 4, 5], [2], [3, 4, 5], [3]] + profile.add_preferences(preflist) + + tests1 = { + "seqpav": [[0, 1, 4, 5], [0, 2, 4, 5], [0, 3, 4, 5], + [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]], + "av": [[0, 1, 4, 5], [0, 2, 4, 5], [0, 3, 4, 5], + [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]], + "sav": [[0, 1, 2, 3], [0, 1, 2, 4], [0, 1, 2, 5], [0, 1, 3, 4], + [0, 1, 3, 5], [0, 1, 4, 5], [0, 2, 3, 4], [0, 2, 3, 5], + [0, 2, 4, 5], [0, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 5], + [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]], + "pav-ilp": [[0, 1, 4, 5], [0, 2, 4, 5], [0, 3, 4, 5], + [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]], + "pav-noilp": [[0, 1, 4, 5], [0, 2, 4, 5], [0, 3, 4, 5], + [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]], + "revseqpav": [[0, 1, 4, 5], [0, 2, 4, 5], [0, 3, 4, 5], + [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]], + "minimaxav-noilp": [[0, 1, 2, 3], [0, 1, 2, 4], [0, 1, 2, 5], + [0, 1, 3, 4], [0, 1, 3, 5], [0, 1, 4, 5], + [0, 2, 3, 4], [0, 2, 3, 5], [0, 2, 4, 5], + [0, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 5], + [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]], + "minimaxav-ilp": [[0, 1, 2, 3], [0, 1, 2, 4], [0, 1, 2, 5], + [0, 1, 3, 4], [0, 1, 3, 5], [0, 1, 4, 5], + [0, 2, 3, 4], [0, 2, 3, 5], [0, 2, 4, 5], + [0, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3, 5], + [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]], + "phrag": [[0, 1, 4, 5], [0, 2, 4, 5], [0, 3, 4, 5], + [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]], + "optphrag": [[0, 1, 2, 3]], + "cc-ilp": [[0, 1, 2, 3]], + "cc-noilp": [[0, 1, 2, 3]], + "seqcc": [[0, 1, 2, 4], [0, 1, 2, 5], [0, 1, 3, 4], [0, 1, 3, 5], + [0, 2, 3, 4], [0, 2, 3, 5], [1, 2, 3, 4], [1, 2, 3, 5]], + "revseqcc": [[0, 1, 2, 3]], + "monroe-ilp": [[0, 1, 2, 3]], + "monroe-noilp": [[0, 1, 2, 3]], + "greedy-monroe": [[0, 2, 3, 4]], + "slav-ilp": [[0, 1, 2, 3], + [0, 1, 2, 4], [0, 1, 2, 5], + [0, 1, 3, 4], [0, 1, 3, 5], + [0, 2, 3, 4], [0, 2, 3, 5], + [1, 2, 3, 4], [1, 2, 3, 5]], + "slav-noilp": [[0, 1, 2, 3], + [0, 1, 2, 4], [0, 1, 2, 5], + [0, 1, 3, 4], [0, 1, 3, 5], + [0, 2, 3, 4], [0, 2, 3, 5], + [1, 2, 3, 4], [1, 2, 3, 5]], + "seqslav": [[0, 1, 2, 4], [0, 1, 2, 5], + [0, 1, 3, 4], [0, 1, 3, 5], + [0, 2, 3, 4], [0, 2, 3, 5], + [1, 2, 3, 4], [1, 2, 3, 5]], + "rule-x": [[0, 1, 4, 5], [0, 2, 4, 5], + [0, 3, 4, 5], [1, 2, 4, 5], + [1, 3, 4, 5], [2, 3, 4, 5]], + "phragmen-enestroem": [[0, 1, 4, 5], [0, 2, 4, 5], + [0, 3, 4, 5], [1, 2, 4, 5], + [1, 3, 4, 5], [2, 3, 4, 5]], + } + + run_test_instance(self, profile, committeesize, tests1) + + # and now with reversed preflist + preflist.reverse() + for p in preflist: + p.reverse() + profile = Profile(6) + profile.add_preferences(preflist) + + run_test_instance(self, profile, committeesize, tests1) + + def test_mwrules_correct_advanced_2(self): + + from preferences import Profile + self.longMessage = True + + # and another profile + profile = Profile(5) + committeesize = 3 + preflist = [[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], + [0, 1, 2], [0, 1], [3, 4], [3, 4], [3]] + profile.add_preferences(preflist) + + tests2 = { + "seqpav": [[0, 1, 3]], + "av": [[0, 1, 2]], + "sav": [[0, 1, 3]], + "pav-ilp": [[0, 1, 3]], + "pav-noilp": [[0, 1, 3]], + "revseqpav": [[0, 1, 3]], + "minimaxav-noilp": [[0, 1, 3], [0, 2, 3], [1, 2, 3]], + "minimaxav-ilp": [[0, 1, 3], [0, 2, 3], [1, 2, 3]], + "phrag": [[0, 1, 3]], + "optphrag": [[0, 1, 3], [0, 2, 3], [1, 2, 3]], + "cc-ilp": [[0, 1, 3], [0, 2, 3], [0, 3, 4], + [1, 2, 3], [1, 3, 4]], + "cc-noilp": [[0, 1, 3], [0, 2, 3], [0, 3, 4], + [1, 2, 3], [1, 3, 4]], + "seqcc": [[0, 1, 3], [0, 2, 3], [0, 3, 4], + [1, 2, 3], [1, 3, 4]], + "revseqcc": [[0, 1, 3], [0, 2, 3], [0, 3, 4], + [1, 2, 3], [1, 3, 4]], + "monroe-ilp": [[0, 1, 3], [0, 2, 3], [1, 2, 3]], + "monroe-noilp": [[0, 1, 3], [0, 2, 3], [1, 2, 3]], + "greedy-monroe": [[0, 1, 3]], + "seqslav": [[0, 1, 3]], + "slav-ilp": [[0, 1, 3]], + "slav-noilp": [[0, 1, 3]], + "rule-x": [[0, 1, 3]], + "phragmen-enestroem": [[0, 1, 3]], + } + + run_test_instance(self, profile, committeesize, tests2) + + def test_mwrules_correct_advanced_3(self): + + from preferences import Profile + self.longMessage = True + + # and a third profile + profile = Profile(6) + committeesize = 4 + preflist = [[0, 3, 4, 5], [1, 2], [0, 2, 5], [2], + [0, 1, 2, 3, 4], [0, 3, 4], [0, 2, 4], [0, 1]] + profile.add_preferences(preflist) + + tests3 = { + "seqpav": [[0, 1, 2, 4]], + "av": [[0, 1, 2, 4], [0, 2, 3, 4]], + "sav": [[0, 1, 2, 4]], + "pav-ilp": [[0, 1, 2, 4]], + "pav-noilp": [[0, 1, 2, 4]], + "revseqpav": [[0, 1, 2, 4]], + "minimaxav-noilp": [[0, 1, 2, 3], [0, 1, 2, 4], + [0, 2, 3, 4], [0, 2, 3, 5], + [0, 2, 4, 5]], + "minimaxav-ilp": [[0, 1, 2, 3], [0, 1, 2, 4], + [0, 2, 3, 4], [0, 2, 3, 5], + [0, 2, 4, 5]], + "phrag": [[0, 1, 2, 4]], + "optphrag": [[0, 1, 2, 3], [0, 1, 2, 4], + [0, 1, 2, 5], [0, 2, 3, 4], + [0, 2, 3, 5], [0, 2, 4, 5], + [1, 2, 3, 4], [1, 2, 3, 5], + [1, 2, 4, 5]], + "cc-ilp": [[0, 1, 2, 3], [0, 1, 2, 4], + [0, 1, 2, 5], [0, 2, 3, 4], + [0, 2, 3, 5], [0, 2, 4, 5], + [1, 2, 3, 4], [1, 2, 3, 5], + [1, 2, 4, 5]], + "cc-noilp": [[0, 1, 2, 3], [0, 1, 2, 4], + [0, 1, 2, 5], [0, 2, 3, 4], + [0, 2, 3, 5], [0, 2, 4, 5], + [1, 2, 3, 4], [1, 2, 3, 5], + [1, 2, 4, 5]], + "seqcc": [[0, 1, 2, 3], [0, 1, 2, 4], + [0, 1, 2, 5], [0, 2, 3, 4], + [0, 2, 3, 5], [0, 2, 4, 5]], + "revseqcc": [[0, 1, 2, 3], [0, 1, 2, 4], + [0, 1, 2, 5], [0, 2, 3, 4], + [0, 2, 3, 5], [0, 2, 4, 5], + [1, 2, 3, 4], [1, 2, 3, 5], + [1, 2, 4, 5]], + "monroe-ilp": [[0, 1, 2, 3], [0, 1, 2, 4], + [0, 1, 2, 5], [0, 2, 3, 4], + [0, 2, 3, 5], [0, 2, 4, 5], + [1, 2, 3, 4], [1, 2, 3, 5], + [1, 2, 4, 5]], + "monroe-noilp": [[0, 1, 2, 3], [0, 1, 2, 4], + [0, 1, 2, 5], [0, 2, 3, 4], + [0, 2, 3, 5], [0, 2, 4, 5], + [1, 2, 3, 4], [1, 2, 3, 5], + [1, 2, 4, 5]], + "greedy-monroe": [[0, 1, 2, 3]], + "seqslav": [[0, 1, 2, 4]], + "slav-ilp": [[0, 1, 2, 4]], + "slav-noilp": [[0, 1, 2, 4]], + "rule-x": [[0, 1, 2, 4]], + "phragmen-enestroem": [[0, 1, 2, 4]], + } + + run_test_instance(self, profile, committeesize, tests3) + + def test_monroescore(self): + from preferences import Profile + from score_functions import monroescore_flowbased, monroescore_matching + self.longMessage = True + + # and a third profile + profile = Profile(6) + preflist = [[0, 1], [1], [1, 3], [4], [2], [1, 5, 3]] + profile.add_preferences(preflist) + + self.assertEqual(monroescore_flowbased(profile, [1, 3, 2]), 5) + self.assertEqual(monroescore_matching(profile, [1, 3, 2]), 5) + self.assertEqual(monroescore_flowbased(profile, [2, 1, 5]), 4) + self.assertEqual(monroescore_matching(profile, [2, 1, 5]), 4) + self.assertEqual(monroescore_flowbased(profile, [2, 4, 5]), 3) + self.assertEqual(monroescore_matching(profile, [2, 5, 4]), 3) + + +if __name__ == '__main__': + unittest.main() diff --git a/data/source_files/messy/5b605f543b5d.py b/data/source_files/messy/5b605f543b5d.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7d81f9fd3f30534398ff05abd7412a6f78b709 --- /dev/null +++ b/data/source_files/messy/5b605f543b5d.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python3 + +# Command line flags + +import os +import glob +import re +import pyinotify +import subprocess +from sys import stdout, stderr +from time import time, sleep +from tempfile import gettempdir +from distutils.dir_util import copy_tree +from shutil import copyfile +from weasyprint import HTML +import argparse + +parser = argparse.ArgumentParser( + description='Converts Markdown to elegant PDF reports') +parser.add_argument('--basic', dest='basic', action='store_true', + help='Do not enrich HTML with LaTeX and syntax highlighting (faster builds)') +parser.add_argument('--watch', dest='watch', action='store_true', + help='Watch the current folder for changes and rebuild automatically') +parser.add_argument('--quiet', dest='quiet', action='store_true', + help='Do not output any information') +parser.add_argument("--timeout", type=int, default=2, + help='Page generation timeout') +parser.add_argument("--base-html", type=str, default="", + help='The path to the base HTML file') +parser.set_defaults(watch=False) +args = parser.parse_args() + + +# Check directory + +ok = False +for file in os.listdir("."): + if file.endswith(".md"): + ok = True + break +if not ok: + stderr.write("No markdown file found in the current folder") + exit(1) + +if args.base_html != "": + if not os.path.isfile(args.base_html): + stderr.write("The given base HTML file doesn't exist") + exit(1) + +script_path = os.path.dirname(os.path.realpath(__file__)) + +# Temp dir + +timestamp = str(int(time())) +tmp_dir = gettempdir() + "/" + timestamp + "_md-report/" +os.makedirs(tmp_dir, exist_ok=True) + +# Headless browser + +if not args.basic: + from selenium import webdriver + from selenium.webdriver.firefox.options import Options + from selenium.webdriver.common.desired_capabilities import DesiredCapabilities + + options = Options() + options.headless = True + options.log.level = "trace" + + d = DesiredCapabilities.FIREFOX + d['loggingPrefs'] = {'browser': 'ALL'} + + driver = webdriver.Firefox(options=options, capabilities=d) + driver.set_page_load_timeout(args.timeout) + +prev_compile_time = 0 + + +def recompile(notifier): + if notifier is not None and (notifier.maskname != "IN_MODIFY" or notifier.pathname.endswith(".pdf")): + return + global prev_compile_time + if time() - prev_compile_time < 1: + return + prev_compile_time = time() + + if not args.quiet: + stdout.write("\rBuilding the PDF file...") + stdout.flush() + + files = glob.glob(tmp_dir + '/*.md') + for f in files: + os.remove(f) + + if args.base_html == "": + copyfile(script_path + "/base.html", tmp_dir + "/base.html") + else: + copyfile(args.base_html, tmp_dir + "/base.html") + if not os.path.islink(tmp_dir + "/src"): + os.symlink(script_path + "/src", tmp_dir + "/src") + copy_tree(".", tmp_dir) + + # Markdown parsing + + subprocess.check_output(script_path + "/md-parsing " + + tmp_dir, shell=True).decode('utf-8') + html_file_name = tmp_dir + "output.html" + + # Interpret JS code + + if not args.basic: + driver.get("file:///" + html_file_name) + sleep(2) + elem = driver.find_element_by_xpath("//*") + interpreted_html = elem.get_attribute("outerHTML") + + with open(html_file_name, "w") as html_out_file: + html_out_file.write(interpreted_html) + + # Create final PDF file + + pdf = HTML(html_file_name).write_pdf() + f = open("output.pdf", 'wb') + f.write(pdf) + + if not args.quiet: + stdout.write("\rDone. ") + stdout.flush() + + +recompile(None) + +if not args.watch: + if not args.basic: + driver.quit() + exit(0) + +watch_manager = pyinotify.WatchManager() +event_notifier = pyinotify.Notifier(watch_manager, recompile) + +watch_manager.add_watch(os.path.abspath("."), pyinotify.ALL_EVENTS, rec=True) +event_notifier.loop() + +if not args.basic: + driver.quit() diff --git a/data/source_files/messy/5c981fb87601.py b/data/source_files/messy/5c981fb87601.py new file mode 100644 index 0000000000000000000000000000000000000000..d9e5c18f6a37dd4a96dd21f7ddefb31b197848dd --- /dev/null +++ b/data/source_files/messy/5c981fb87601.py @@ -0,0 +1,66 @@ +# This is a reusable webcraawler architecture that can be adapted to scrape any webstie. + +# RESULTS: +# Roughly 24 seconds per thousand courses scraped for ThreadPoolExecutor vs 63s for unthreaded script. +# This is a very basic implementation of multithreading in order to show the proof of concept, but is a good base to build off of. + +import requests +from bs4 import BeautifulSoup +import csv +from concurrent.futures import ProcessPoolExecutor, as_completed, ThreadPoolExecutor +import time +import logging +from mitopencourseware_crawler_worker import mit_crawler + + +def courses_spider(max_pages): + data_to_csv = [] #holds all data to send to csv + print("Webcrawler workers have started, please wait while we finish crawling...") + + # remove max pages loop (unecessary) + page = 1 + while page <= max_pages: + url = 'https://ocw.mit.edu/courses/' + source_code = requests.get(url) + plain_text = source_code.text + soup = BeautifulSoup(plain_text, 'html.parser') + # Multithread only the work: + # Tuning is required to find the most efficient amount of workers in the thread pool. + with ThreadPoolExecutor(max_workers=30) as executor: + start = time.time() + futures = [ executor.submit(work, link) for link in soup.findAll('h4', {'class': 'course_title'}, limit=100) ] + data_to_csv = [] + for result in as_completed(futures): + data_to_csv.append(result.result()) + end = time.time() + print("Time Taken to complete: {:.6f}s".format(end-start)) + print("Courses extracted: ", len(data_to_csv)) + page += 1 + export_to_csv(data_to_csv) + +def work(link): + # replace this fucntion with the specific crawler you want to use: + return mit_crawler(link) + + +# Exports data to a formatted csv file, this will be replaced with multithreaded API calls to the Cassandra Prisma Database +# or on the cloud in production, it will be sent to the S3 temporary database to be picked up by the AWS Lambda funtion which will push it to the Cassandra Database +def export_to_csv(csv_data): + with open('web_crawl_data.csv',mode='w') as csv_file: + field_names = ['Title','URL extension','External Website Logo','URL(href)','Description','Course logo URL'] + csv_writer = csv.DictWriter(csv_file, fieldnames=field_names)#delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) + + csv_writer.writeheader() + for course in csv_data: + course_data = { + 'Title':course[0], + 'URL extension':course[1], + 'External Website Logo':course[2], + 'URL(href)':course[3], + 'Description':course[4], + 'Course logo URL':course[5], + } + csv_writer.writerow(course_data) + + + diff --git a/data/source_files/messy/5fb11d08823b.py b/data/source_files/messy/5fb11d08823b.py new file mode 100644 index 0000000000000000000000000000000000000000..d9de866f5c692eb5d2ae261f2a1854febddba480 --- /dev/null +++ b/data/source_files/messy/5fb11d08823b.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +import time +import puka +import argparse + + +import logging +from infcommon import utils +from infrabbitmq import factory as infrabbitmq_factory +from infrabbitmq.rabbitmq import RabbitMQError +from infrabbitmq.events_names import ( + TICK_1_SECOND, + TICK_1_MINUTE, + TICK_2_MINUTES, + TICK_5_MINUTES, + TICK_60_MINUTES, +) + + +def publish_event(publisher, event, network, secs, mins): + logging.info("publish event {} {}".format(event, secs)) + publisher.publish(event, network, data={'tick': secs, 'mins': mins}) + + +def main(network): + publisher = infrabbitmq_factory.event_publisher_json_serializer() + secs = 0 + mins = 0 + + rabbitmq_exceptions = (RabbitMQError, puka.AMQPError, KeyError,) + while True: + time.sleep(1) + secs += 1 + + utils.do_stuff_with_exponential_backoff(rabbitmq_exceptions, + publish_event, + publisher, TICK_1_SECOND, network, secs, mins) + + if secs % 60 == 0: + mins += 1 + secs = 0 + + utils.do_stuff_with_exponential_backoff(rabbitmq_exceptions, + publish_event, + publisher, TICK_1_MINUTE, network, secs, mins) + + if mins % 2 == 0: + utils.do_stuff_with_exponential_backoff(rabbitmq_exceptions, + publish_event, + publisher, TICK_2_MINUTES, network, secs, mins) + + if mins % 5 == 0: + utils.do_stuff_with_exponential_backoff(rabbitmq_exceptions, + publish_event, + publisher, TICK_5_MINUTES, network, secs, mins) + + if mins % 60 == 0: + utils.do_stuff_with_exponential_backoff(rabbitmq_exceptions, + publish_event, + publisher, TICK_60_MINUTES, network, secs, mins) + + +if __name__ == '__main__': + try: + parser = argparse.ArgumentParser() + parser.add_argument('-n', '--network', action='store', required=True, help='Network name (ilo, c2k, ...)') + args = parser.parse_args() + network = args.network.split('-')[0] + + main(network) + except Exception as exc: + logging.critical("Ticker Fails: {}".format(exc)) diff --git a/data/source_files/messy/621b5bc08685.py b/data/source_files/messy/621b5bc08685.py new file mode 100644 index 0000000000000000000000000000000000000000..8a75b4a74e6ecd635d9404db9ea5df06d5114069 --- /dev/null +++ b/data/source_files/messy/621b5bc08685.py @@ -0,0 +1,309 @@ +#!/usr/bin/python2.7 + +""" +Extract unique set of station locations (and names) along with number of obs + +RJHD - Exeter - October 2017 + +""" + +# ECMWF import defaults +import traceback +import sys + +from eccodes import * + +# RJHD imports +import cartopy +import numpy as np +import matplotlib as mpl +mpl.use('Agg') +import matplotlib.pyplot as plt +import gc + + +VERBOSE = 1 # verbose error reporting. + +ATTRS = [ + 'code', + 'units', + 'scale', + 'reference', + 'width' + ] + +INTMDI = 2147483647 + + +#*************************************************** +def process_file(infilename, station_names, fixed_station, latitudes, longitudes, observations, start_year, end_year): + + infile = open(infilename) + + year = int(infilename.split(".")[0].split("_")[-1]) + + cmatch = 0 + counter = 0 + + # loop all messages (with stop statement) + while 1: + + """OPEN MESSAGE""" + + # get handle for message + bufr = codes_bufr_new_from_file(infile) + if bufr is None: + break + + if counter%100000 == 0: + print "message: {:d}".format(counter) + + # we need to instruct ecCodes to expand all the descriptors + # i.e. unpack the data values + codes_set(bufr, 'unpack', 1) + + """ITERATOR TO EXTRACT KEYS""" + + these_keys = [] + + # get BUFR key iterator + iterid = codes_bufr_keys_iterator_new(bufr) + + # loop over the keys + while codes_bufr_keys_iterator_next(iterid): + # print key name + keyname = codes_bufr_keys_iterator_get_name(iterid) +# print(" %s" % keyname) + these_keys += [keyname] + + # delete the key iterator + codes_bufr_keys_iterator_delete(iterid) + + # Use these to select obs from land/marine surface + name_keys = ["#1#shipOrMobileLandStationIdentifier", "#1#stationNumber"] + + processed = False + for nk in name_keys: + if nk in these_keys: + try: + name = codes_get(bufr, nk) + + lat = codes_get(bufr, "#1#latitude") + lon = codes_get(bufr, "#1#longitude") + + sloc = tloc = nloc = [-1] + if name in station_names: + sloc, = np.where(station_names == name) + if lat in latitudes: + tloc, = np.where(latitudes == lat) + if lon in longitudes: + nloc, = np.where(longitudes == lon) + + + if tloc[0] == -1 and nloc[0] == -1: + # if not in list, then add + station_names = np.append(station_names, name) + latitudes = np.append(latitudes, lat) + longitudes = np.append(longitudes, lon) + observations = np.append(observations, 1) + start_year = np.append(start_year, year) + end_year = np.append(end_year, year) + + # allow splitting of land and marine/mobile + if nk == "#1#stationNumber": + fixed_station = np.append(fixed_station, True) + else: + fixed_station = np.append(fixed_station, False) + + elif (tloc[0] != -1 or nloc[0] != -1) and tloc[0] != nloc[0]: + # add if one element of position is unique + station_names = np.append(station_names, name) + latitudes = np.append(latitudes, lat) + longitudes = np.append(longitudes, lon) + observations = np.append(observations, 1) + start_year = np.append(start_year, year) + end_year = np.append(end_year, year) + + # allow splitting of land and marine/mobile + if nk == "#1#stationNumber": + fixed_station = np.append(fixed_station, True) + else: + fixed_station = np.append(fixed_station, False) + + elif tloc[0] != -1 and tloc[0] == nloc[0]: + # if position matches exactly, up observation counter + observations[tloc[0]] += 1 + end_year[tloc[0]] = year + + # allow splitting of land and marine/mobile + if nk == "#1#stationNumber": + if fixed_station[tloc[0]] != True: + # if listed as land and now marine, take marine + fixed_station[tloc[0]] = False + + else: + if fixed_station[tloc[0]] != False: + # easier to leave as mobile/marine than to move + # hopefully will stand out later + pass + + else: + cmatch += 1 + + processed = True + + except CodesInternalError: + raw_input("key error?") + + # check for new keys which give station ID information + if not processed: + other_keys = ["#1#carrierBalloonOrAircraftIdentifier", "#1#aircraftFlightNumber"] + new_key = True + for ok in other_keys: + if ok in these_keys: new_key = False + + if new_key: + raw_input(these_keys) + +# if counter > 10000: break + counter += 1 + codes_release(bufr) + + +# print "Number of unique locations in this year: {}".format(len(latitudes)) + + return station_names, fixed_station, latitudes, longitudes, observations, start_year, end_year # process_file + +#*************************************************** +def scatter_map(outname, data, lons, lats, cmap, bounds, cb_label, title = "", figtext = "", doText = False): + ''' + Standard scatter map + + :param str outname: output filename root + :param array data: data to plot + :param array lons: longitudes + :param array lats: latitudes + :param obj cmap: colourmap to use + :param array bounds: bounds for discrete colormap + :param str cb_label: colorbar label + ''' + + norm=mpl.cm.colors.BoundaryNorm(bounds,cmap.N) + + fig = plt.figure(figsize =(10,6.5)) + + plt.clf() + ax = plt.axes([0.05, 0.10, 0.90, 0.90], projection=cartopy.crs.Robinson()) + ax.gridlines() #draw_labels=True) + ax.add_feature(cartopy.feature.LAND, zorder = 0, facecolor = "0.9", edgecolor = "k") + ax.coastlines() + + ext = ax.get_extent() # save the original extent + + scatter = plt.scatter(lons, lats, c = data, cmap = cmap, norm = norm, s=10, \ + transform = cartopy.crs.Geodetic(), edgecolor = "r", linewidth = 0.1) + + + cb=plt.colorbar(scatter, orientation = 'horizontal', pad = 0.05, fraction = 0.05, \ + aspect = 30, ticks = bounds[1:-1], label = cb_label, drawedges=True) + + # thicken border of colorbar and the dividers + # http://stackoverflow.com/questions/14477696/customizing-colorbar-border-color-on-matplotlib + +# cb.set_ticklabels(["{:g}".format(b) for b in bounds[1:-1]]) +# cb.outline.set_color('k') +# cb.outline.set_linewidth(2) + cb.dividers.set_color('k') + cb.dividers.set_linewidth(2) + + ax.set_extent(ext, ax.projection) # fix the extent change from colormesh + + plt.title(title) + if doText: plt.text(0.01, 0.98, "#stations: {}".format(data.shape[0]), transform = ax.transAxes, fontsize = 10) + + plt.savefig(outname) + plt.close() + + return # scatter_map + +#*************************************************** +def main(ms = "era40_", year = 1980): + + LOCS = "/group_workspaces/jasmin2/c3s311a_lot2/data/incoming/mars/v20170628/data/" + + print year + + station_names = np.array([]) + fixed_station = np.array([]) + latitudes = np.array([]) + longitudes = np.array([]) + observations = np.array([]) + start_year = np.array([]) + end_year = np.array([]) + + if ms == "erai_" and year < 1979: + return + else: + + INFILE = "{}mars_{}{}.bufr".format(LOCS, ms, year) + + try: + station_names, fixed_station, latitudes, longitudes, observations, start_year, end_year = \ + process_file(INFILE, station_names, fixed_station, latitudes, longitudes, observations, start_year, end_year) + except CodesInternalError as err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + sys.stderr.write(err.msg + '\n') + + land = np.where(np.array(fixed_station) == True) + marine = np.where(np.array(fixed_station) == False) + + bounds = np.linspace(0,max(observations),10).astype(int) + cmap = plt.cm.YlOrRd_r + + if ms == "erai_": + title = "MARS - SYNOP - {}".format(year) + else: + title = "MARS - ERA40 - {}".format(year) + + scatter_map("mars_{}{}_land_observations.png".format(ms, year), observations[land], longitudes[land], latitudes[land], cmap, bounds, "Number of Observations", title, doText = True) + + scatter_map("mars_{}{}_marine_observations.png".format(ms, year), observations[marine], longitudes[marine], latitudes[marine], cmap, bounds, "Number of Observations", title) + + station_names = 0 + fixed_station = 0 + latitudes = 0 + longitudes = 0 + observations = 0 + start_year = 0 + end_year = 0 + land = 0 + marine = 0 + gc.collect() + + + return # main + + +#*************************************************** +if __name__ == "__main__": + import argparse + + # set up keyword arguments + parser = argparse.ArgumentParser() + + parser.add_argument('--ms', dest='ms', action='store', default = "era40_", + help='Run on ERA40 ["era40_"] (default) or ERA-I ["erai_"] data') + parser.add_argument('--year', dest='year', action='store', default = 1980, + help='Which year to process - default 1980') + args = parser.parse_args() + + main(ms = args.ms, year = args.year) + + sys.exit() + + +#*************************************************** +# END +#*************************************************** diff --git a/data/source_files/messy/64b2adeeef54.py b/data/source_files/messy/64b2adeeef54.py new file mode 100644 index 0000000000000000000000000000000000000000..8a59e89d09e32fec1b404a96ad1edf1ccd223adb --- /dev/null +++ b/data/source_files/messy/64b2adeeef54.py @@ -0,0 +1,250 @@ +# #!/usr/bin/python +# -*- coding: utf-8 -*- + +# test_preempt_return.py + +# pylint: disable=line-too-long,missing-docstring,bad-whitespace, unused-argument, too-many-locals + +import sys +import os +import random +import unittest + +DIRNAME_MODULE = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0])))) + os.sep +sys.path.append(DIRNAME_MODULE) +sys.path.append(DIRNAME_MODULE + "pyss" + os.sep) + +from pyss import pyssobject +from pyss.pyss_model import PyssModel +from pyss.segment import Segment + +from pyss.generate import Generate +from pyss.terminate import Terminate +from pyss import logger +from pyss.table import Table +from pyss.handle import Handle +from pyss.enter import Enter +from pyss.leave import Leave +from pyss.storage import Storage +from pyss.advance import Advance +from pyss.preempt import Preempt +from pyss.g_return import GReturn +from pyss.facility import Facility +from pyss.seize import Seize +from pyss.release import Release +from pyss.transfer import Transfer +from pyss.test import Test +from pyss.pyss_const import * + +class TestPreemptReturn(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + # @unittest.skip("testing skipping test_preempt_return_001") + def test_preempt_return_001(self): + """Тест Preempt - Return + + Формируется один транзакт в момент времени 1. + Прерывает работу устройства F_1 на 5 единиц времени. + Выходит из модели в момент времени 6. + """ + + logger.info("--- test_preempt_return_001 ----------------------------------") + + ### MODEL ---------------------------------- + m = PyssModel() + sgm = Segment(m) + # + m[OPTIONS].setAllFalse() + + MAX_TIME = 20 + + # + list_all_transact = [] + # + MAX_TIME = 20 + # + F_1 = "F_1" + # ОКУ + Facility(m, facilityName=F_1) + # + def funcTransactTo_list_all_transact(owner, transact): + # складируем транзакты в список + list_all_transact.append(transact) + ### SEGMENT ---------------------------- + + # формируется одна заявка в момент времени 1 + Generate(sgm, med_value=None, + modificatorFunc=None, + first_tx=1, + max_amount=1) + Handle(sgm, handlerFunc=funcTransactTo_list_all_transact) + # test + Handle(sgm, handlerFunc=lambda o, t:self.assertNotIn(F_1, t[FACILITY])) + # + Preempt(sgm, facilityName=F_1) + # test + Handle(sgm, handlerFunc=lambda o, t:self.assertIn(F_1, t[FACILITY])) + # + Advance(sgm, meanTime=5, modificatorFunc=None) + GReturn(sgm, facilityName=F_1) + # test + Handle(sgm, handlerFunc=lambda o, t:not self.assertNotIn(F_1, t[FACILITY])) + # + Terminate(sgm, deltaTerminate=0) + + # ЗАПУСК ---------------------- + m.start(terminationCount=MAX_TIME, maxTime=MAX_TIME) + + # ТЕСТЫ ---------------------- + for t in list_all_transact: + self.assertEqual(t[TIME_CREATED], 1) + self.assertEqual(t[TERMINATED_TIME], 6) + print str(["%s:%s" % (k, t[k]) + for k in t.keys() if k + in [TIME_CREATED, TERMINATED_TIME]]) + + # @unittest.skip("testing skipping test_preempt_return_002") + def test_preempt_return_002(self): + """Тест Preempt - Return + + Формируется транзакт A в момент времени 1. + Идёт на обработку устройством F_1 в течение 3 единиц времени. + Формируется транзакт B в момент времени 2. + Прерывает работу устройства на 5 единиц времени. + Транзакт B выходит из модели в момент времени 7. + Транзакт А выходит из модели в момент времени 9. + Обработка транзакта А была прервана с 2 по 7. + + """ + + logger.info("--- test_preempt_return_002 ----------------------------------") + ### MODEL ---------------------------------- + m = PyssModel() + sgm = Segment(m) + # + m[OPTIONS].setAllFalse() + + MAX_TIME = 20 + + # CONSTS + TRANSACT_A = "A" + TRANSACT_B = "B" + # + list_all_transact = [] + tA = [] + tB = [] + # + F_1 = "F_1" + # ОКУ + facility_1 = Facility(m, facilityName=F_1) + # + def funcTransactTo_list_all_transact(owner, transact): + # складируем транзакты в список + list_all_transact.append(transact) + + def setTransactLabel(owner, transact): + if transact[NUM] == 1: + transact[LABEL] = TRANSACT_A + tA.append(transact) + elif transact[NUM] == 2: + transact[LABEL] = TRANSACT_B + tB.append(transact) + + # функция проверки условия + def checkTest(o): + t=m.getCurrentTransact() + if t[LABEL] == TRANSACT_B: + return False + return True + + def printAllTransact(owner, transact): + print "Time=%s" % str(m.getCurTime()) + print "\n".join([str(t) for t in list_all_transact]) + print "tA=%s" % str(tA[0]) + print "tB=%s" % str(tB[0]) + + ### SEGMENT ---------------------------- + # формируется одна заявка в момент времени 1 + Generate(sgm, + med_value=1, + modificatorFunc=None, + first_tx=1, + max_amount=2) + # вспомогательные операции + Handle(sgm, handlerFunc=funcTransactTo_list_all_transact) + Handle(sgm, handlerFunc=setTransactLabel) + # test + Handle(sgm, handlerFunc=lambda o, t:self.assertNotIn(F_1, t[FACILITY])) + # + # первый транзакт проходит, второй направляется к метке "to_preempt" + Test(sgm, funcCondition=checkTest, move2block="to_preempt") + # только первый транзакт + Seize(sgm, facilityName=F_1) + # test + Handle(sgm, handlerFunc=lambda o, t:self.assertIn(F_1, t[FACILITY])) + # + Advance(sgm, meanTime=3, modificatorFunc=None) + Release(sgm, facilityName=F_1) + # test + Handle(sgm, handlerFunc=lambda o, t:self.assertNotIn(F_1, t[FACILITY])) + # + Transfer(sgm, funcTransfer=lambda o, t: o.findBlockByLabel("to_term")) + #--- + # только второй транзакт + Preempt(sgm, facilityName=F_1, label="to_preempt") + # test + # .addBlock(handle.Handle(handlerFunc=lambda o,t:self.assertEqual(tA[0][REMAIND_TIME], None))) + Handle(sgm, handlerFunc=printAllTransact) + Handle(sgm, handlerFunc=lambda o, t:self.assertIn(F_1, t[FACILITY])) + # + Handle(sgm, handlerFunc=printAllTransact) + Advance(sgm, meanTime=5, modificatorFunc=None) + GReturn(sgm, facilityName=F_1) + # test + Handle(sgm, handlerFunc=lambda o, t:self.assertEqual(tA[0][REMAIND_TIME], 2)) + Handle(sgm, handlerFunc=lambda o, t:self.assertEqual(tA[0][SCHEDULED_TIME], 9)) + Handle(sgm, handlerFunc=lambda o, t:self.assertNotIn(F_1, t[FACILITY])) + # + Handle(sgm, handlerFunc=printAllTransact) + # все транзакты + Terminate(sgm, label="to_term", deltaTerminate=0) + + # ЗАПУСК ---------------------- + m.start(terminationCount=MAX_TIME, maxTime=MAX_TIME) + # ТЕСТЫ ---------------------- + for t in list_all_transact: + # Формируется транзакт A в момент времени 1. + # Идёт на обработку устройством F_1 в течение 3 единиц времени. + # Формируется транзакт B в момент времени 2. + # Прерывает работу устройства на 5 единиц времени. + # Транзакт B выходит из модели в момент времени 7. + # Транзакт А выходит из модели в момент времени 9. + # Обработка транзакта А была прервана с 2 по 7. + print str(["%s:%s" % (k, t[k]) + for k in t.keys() if k + in [TIME_CREATED, TERMINATED_TIME, LIFE_TIME_LIST]]) + if t[LABEL] == TRANSACT_A: + self.assertEqual(t[TIME_CREATED], 1) + self.assertEqual(t[REMAIND_TIME], 2) + self.assertEqual(t[TERMINATED_TIME], 9) + self.assertListEqual(t[LIFE_TIME_LIST], [ + {'start': 1, 'state': 'actived'}, + {'start': 2, 'state': 'preempted'}, + {'start': 7, 'state': 'actived'}, + {'start': 9, 'state': 'deleted'}]) + + + elif t[LABEL] == TRANSACT_B: + self.assertEqual(t[TIME_CREATED], 2) + self.assertEqual(t[TERMINATED_TIME], 7) + self.assertListEqual(t[LIFE_TIME_LIST], [ + {'start': 2, 'state': 'actived'}, + {'start': 7, 'state': 'deleted'}]) + +if __name__ == '__main__': + unittest.main(module="test_preempt_return") diff --git a/data/source_files/messy/666f4c354670.py b/data/source_files/messy/666f4c354670.py new file mode 100644 index 0000000000000000000000000000000000000000..d9c3ac1232aa677a1999a869a726247c9e688214 --- /dev/null +++ b/data/source_files/messy/666f4c354670.py @@ -0,0 +1,116 @@ +import logging +import time +from datetime import timedelta +from typing import List + +from homeassistant.components.binary_sensor import ( + BinarySensorEntity, + DEVICE_CLASS_MOTION +) +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import ATTR_ATTRIBUTION +from homeassistant.core import HomeAssistant +from wyzeapy.base_client import Device, AccessTokenError +from wyzeapy.client import Client +from wyzeapy.types import PropertyIDs + +from .const import DOMAIN + +_LOGGER = logging.getLogger(__name__) +ATTRIBUTION = "Data provided by Wyze" +SCAN_INTERVAL = timedelta(seconds=10) + + +async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry, async_add_entities): + _LOGGER.debug("""Creating new WyzeApi binary sensor component""") + client: Client = hass.data[DOMAIN][config_entry.entry_id] + + def get_cameras() -> List[Device]: + try: + return client.get_cameras() + except AccessTokenError as e: + _LOGGER.warning(e) + client.reauthenticate() + return client.get_cameras() + + cameras = [WyzeCameraMotion(client, camera) for camera in await hass.async_add_executor_job(get_cameras)] + + async_add_entities(cameras, True) + + +class WyzeCameraMotion(BinarySensorEntity): + _on: bool + _available: bool + + def __init__(self, wyzeapi_client: Client, device: Device): + self._client = wyzeapi_client + self._device = device + self._last_event = int(str(int(time.time())) + "000") + + @property + def device_info(self): + return { + "identifiers": { + (DOMAIN, self._device.mac) + }, + "name": self.name, + "manufacturer": "WyzeLabs", + "model": self._device.product_model + } + + @property + def available(self) -> bool: + return self._available + + @property + def name(self): + """Return the display name of this switch.""" + return self._device.nickname + + @property + def is_on(self): + """Return true if switch is on.""" + return self._on + + @property + def unique_id(self): + return "{}-motion".format(self._device.mac) + + @property + def device_state_attributes(self): + """Return device attributes of the entity.""" + return { + ATTR_ATTRIBUTION: ATTRIBUTION, + "state": self.is_on, + "available": self.available, + "device model": self._device.product_model, + "mac": self.unique_id + } + + @property + def device_class(self): + return DEVICE_CLASS_MOTION + + def update(self): + try: + device_info = self._client.get_info(self._device) + except AccessTokenError: + self._client.reauthenticate() + device_info = self._client.get_info(self._device) + + for property_id, value in device_info: + if property_id == PropertyIDs.AVAILABLE: + self._available = True if value == "1" else False + + latest_event = self._client.get_latest_event(self._device) + if latest_event is not None: + if latest_event.event_ts > self._last_event: + self._on = True + self._last_event = latest_event.event_ts + else: + self._on = False + self._last_event = latest_event.event_ts + else: + self._on = False + + diff --git a/data/source_files/messy/6b7c7bb0171b.py b/data/source_files/messy/6b7c7bb0171b.py new file mode 100644 index 0000000000000000000000000000000000000000..8a8988f59a7e29aadd9cfcc08e9db137ae34f210 --- /dev/null +++ b/data/source_files/messy/6b7c7bb0171b.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 + +# Advent of Code 2021, Day 15 (https://adventofcode.com/2021/day/15) +# Author: Ben Bornstein + + +import collections +import heapq + + +Point = collections.namedtuple('Point', ['x', 'y']) +Point.__add__ = lambda self, q: Point(self[0] + q[0], self[1] + q[1]) + + +class RiskMap: + def __init__ (self): + """Creates a new (empty) risk-level map. + + Individual risk-levels as specific positions are accessible via + `RiskMap[Point]`. + + See also `RiskMap.load()` + """ + self._factor = 1 + self._levels = [ ] + self._nrows = 0 + self._ncols = 0 + + + def __getitem__ (self, pos): + """Returns the risk-level at position `pos`, i.e. `RiskMap[pos]`.""" + if self._factor > 1: + risk = self._levels[pos.y % self._nrows][pos.x % self._ncols] + risk += pos.y // self._nrows + risk += pos.x // self._ncols + + if risk > 9: + risk = risk % 9 + else: + risk = self._levels[pos.y][pos.x] + + return risk + + + @staticmethod + def load (filename): + """Creates a new risk-level map from `filename`.""" + rmap = RiskMap() + + with open(filename) as stream: + for line in stream.readlines(): + rmap.append([ int(c) for c in line.strip() ]) + + return rmap + + + @property + def ncols (self): + """The number of columns in this `RiskMap`.""" + return self._factor * self._ncols + + + @property + def nrows (self): + """The number of rows in this `RiskMap`.""" + return self._factor * self._nrows + + + def append (self, row): + """Appends `row` to this `RiskMap`.""" + if len(self._levels) == 0: + self._ncols = len(row) + + self._levels.append(row) + self._nrows += 1 + + + def neighbors (self, pos): + """Iterable 4-neighbors (up, down, left, right) for `pos`ition.""" + deltas = (0, -1), (0, 1), (-1, 0), (1, 0) + adjacent = ( pos + Point(*delta) for delta in deltas ) + yield from ( p for p in adjacent if self.valid(p) ) + + + def resize (self, factor): + """Resizes this `RiskMap` by setting its expansion factor to `factor` + copies both horizontally and vertically. + """ + self._factor = factor + + + def valid (self, pos): + """Indicates whether or not `pos` is valid (inside this `RiskMap`).""" + return pos.y in range(0, self.nrows) and pos.x in range(0, self.ncols) + + + +def search (rmap, start, end): + """Searches `RiskMap` `rmap` (breadth-first) to find the least risky + path from `start` to `end`. Returns the total risk of that path. + """ + risk = 0 + queue = [ (rmap[p], p) for p in rmap.neighbors(start) ] + visited = { start } + + heapq.heapify(queue) + + while len(queue) > 0: + risk, current = heapq.heappop(queue) + + if current == end: + break + + for pos in rmap.neighbors(current): + if pos not in visited: + heapq.heappush( queue, ((rmap[pos] + risk), pos) ) + visited.add(pos) + + return risk + + + +filename = 'aoc-2021-d15.txt' +rmap = RiskMap.load(filename) +start = Point(0, 0) +end = Point(rmap.ncols - 1, rmap.nrows - 1) + + +# Part 1 +# +# Q: Lowest total risk of any path from the top left to the bottom right? +# A: Total Risk = 755 + +print(f'Part 1: Total Risk = {search(rmap, start, end):4}') + + +# Part 2 +# +# Q: Lowest total risk of any path from the top left to the bottom right? +# A: Total Risk = 3016 + +rmap.resize(factor=5) +end = Point(rmap.ncols - 1, rmap.nrows - 1) + +print(f'Part 2: Total Risk = {search(rmap, start, end)}') diff --git a/data/source_files/messy/6d62ae4e17f6.py b/data/source_files/messy/6d62ae4e17f6.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3c0f03126e25cbd17946a5a7c81e22d30b3f4d --- /dev/null +++ b/data/source_files/messy/6d62ae4e17f6.py @@ -0,0 +1,31 @@ +from palm_tree import db + + +class Data(db.Model): + id = db.Column(db.Integer, primary_key=True) + uuid = db.Column(db.Integer) + response = db.Column(db.Text) + datetime = db.Column(db.DateTime) + + def __init__(self, uuid, response, datetime): + self.uuid = uuid + self.response = response + self.datetime = datetime + + def __repr__(self): + return '' % self.response + +# +# class Logs(db.Model): +# id = db.Column(db.Integer, primary_key=True) +# uuid = db.Column(db.Integer) +# payload = db.Column(db.Text) +# datetime = db.Column(db.DateTime) +# +# def __init__(self, uuid, payload, datetime): +# self.uuid = uuid +# self.payload = payload +# self.datetime = datetime +# +# def __repr__(self): +# return '' % self.payload diff --git a/data/source_files/messy/6f869b875813.py b/data/source_files/messy/6f869b875813.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7ac7f87e160e8f864dafce2acd68a6454b8a68 --- /dev/null +++ b/data/source_files/messy/6f869b875813.py @@ -0,0 +1,38 @@ +from masonite.request import Request +from masonite.view import View +from masonite.auth.Csrf import Csrf +from masonite.app import App +from masonite.middleware import CsrfMiddleware +from masonite.testsuite.TestSuite import generate_wsgi +import pytest +from masonite.exceptions import InvalidCSRFToken + + +class TestCSRFMiddleware: + + def setup_method(self): + self.app = App() + self.request = Request(generate_wsgi()) + self.view = View(self.app) + self.app.bind('Request', self.request) + + self.request = self.app.make('Request') + + self.middleware = CsrfMiddleware(self.request, Csrf(self.request), self.view) + + def test_middleware_shares_correct_input(self): + self.middleware.before() + assert 'csrf_field' in self.view.dictionary + assert self.view.dictionary['csrf_field'].startswith(" 'BodyObject': + line_list = body.splitlines() + matrix = [list(line) for line in line_list] + + return BodyObject(key=key, matrix=matrix, + width=len(matrix[0]), height=len(matrix)) + + +class BodyObjectsPool(metaclass=Singleton): + """ + An object for getting BodyObject instances from database or cache + """ + body_key_prefix = 'body:' + body_lookup_pattern = body_key_prefix + '*' + body_expiration = 10 # in seconds + + def __init__(self, num_of_default_bodies=3): + self.num_of_default_bodies = num_of_default_bodies + self.__default_bodies: Tuple[BodyObject, ...] = \ + self._generate_defaults(num_of_default_bodies) + self._redis = Redis(host=settings.REDIS_HOSTNAME) + self._scripts = RedisScriptsPool() + + def add_body(self, body: Union[str, bytes], body_id: str) -> None: + """Cache the requested body string in Redis db""" + validate_body_str_profile(body) + key = self.make_body_key(body_id) + self._redis.set(key, body, self.body_expiration) + + def ping_body(self, body_id: str): + """Reset expiration time of a body""" + key = self.make_body_key(body_id) + self._redis.expire(key, self.body_expiration) + + def update_bodies(self, known_bodies_keys: Iterable[str], + max_capacity: int) -> BodiesUpdate: + """ + Give update on state of body objects' records in Redis db + :param known_bodies_keys: redis keys of already known bodies + :param max_capacity: maximum relevant for requester number of bodies + including already known ones + """ + return json.loads( + self._scripts.update_records(keys=known_bodies_keys, + args=[max_capacity, + self.body_lookup_pattern]) + ) + + def make_body_key(self, body_id: str): + return self.body_key_prefix + body_id + + @property + def first(self): + return self._get_default(0) + + @property + def second(self): + return self._get_default(1) + + @property + def third(self): + return self._get_default(2) + + def _get_default(self, index) -> BodyObject: + return self.__default_bodies[index] + + @staticmethod + def _generate_defaults(num_of_defaults): + logger.info('Generating default bodies') + query = AlienBody.objects.filter(id__lte=num_of_defaults) + return tuple(BodyObject.generate(str(body.id), body.body_str) + for body in query) diff --git a/data/source_files/messy/73c72bfbe73b.py b/data/source_files/messy/73c72bfbe73b.py new file mode 100644 index 0000000000000000000000000000000000000000..d9f6bdae288edaa527af57b654eafa00cfa5047b --- /dev/null +++ b/data/source_files/messy/73c72bfbe73b.py @@ -0,0 +1,408 @@ +import inspect + +import numpy as np + +from pandas._libs import reduction as libreduction +from pandas.util._decorators import cache_readonly + +from pandas.core.dtypes.common import ( + is_dict_like, + is_extension_array_dtype, + is_list_like, + is_sequence, +) +from pandas.core.dtypes.generic import ABCSeries + + +def frame_apply( + obj, + func, + axis=0, + raw=False, + result_type=None, + ignore_failures=False, + args=None, + kwds=None, +): + """ construct and return a row or column based frame apply object """ + + axis = obj._get_axis_number(axis) + if axis == 0: + klass = FrameRowApply + elif axis == 1: + klass = FrameColumnApply + + return klass( + obj, + func, + raw=raw, + result_type=result_type, + ignore_failures=ignore_failures, + args=args, + kwds=kwds, + ) + + +class FrameApply: + def __init__(self, obj, func, raw, result_type, ignore_failures, args, kwds): + self.obj = obj + self.raw = raw + self.ignore_failures = ignore_failures + self.args = args or () + self.kwds = kwds or {} + + if result_type not in [None, "reduce", "broadcast", "expand"]: + raise ValueError( + "invalid value for result_type, must be one " + "of {None, 'reduce', 'broadcast', 'expand'}" + ) + + self.result_type = result_type + + # curry if needed + if (kwds or args) and not isinstance(func, (np.ufunc, str)): + + def f(x): + return func(x, *args, **kwds) + + else: + f = func + + self.f = f + + # results + self.result = None + self.res_index = None + self.res_columns = None + + @property + def columns(self): + return self.obj.columns + + @property + def index(self): + return self.obj.index + + @cache_readonly + def values(self): + return self.obj.values + + @cache_readonly + def dtypes(self): + return self.obj.dtypes + + @property + def agg_axis(self): + return self.obj._get_agg_axis(self.axis) + + def get_result(self): + """ compute the results """ + + # dispatch to agg + if is_list_like(self.f) or is_dict_like(self.f): + return self.obj.aggregate(self.f, axis=self.axis, *self.args, **self.kwds) + + # all empty + if len(self.columns) == 0 and len(self.index) == 0: + return self.apply_empty_result() + + # string dispatch + if isinstance(self.f, str): + # Support for `frame.transform('method')` + # Some methods (shift, etc.) require the axis argument, others + # don't, so inspect and insert if necessary. + func = getattr(self.obj, self.f) + sig = inspect.getfullargspec(func) + if "axis" in sig.args: + self.kwds["axis"] = self.axis + return func(*self.args, **self.kwds) + + # ufunc + elif isinstance(self.f, np.ufunc): + with np.errstate(all="ignore"): + results = self.obj._data.apply("apply", func=self.f) + return self.obj._constructor( + data=results, index=self.index, columns=self.columns, copy=False + ) + + # broadcasting + if self.result_type == "broadcast": + return self.apply_broadcast() + + # one axis empty + elif not all(self.obj.shape): + return self.apply_empty_result() + + # raw + elif self.raw and not self.obj._is_mixed_type: + return self.apply_raw() + + return self.apply_standard() + + def apply_empty_result(self): + """ + we have an empty result; at least 1 axis is 0 + + we will try to apply the function to an empty + series in order to see if this is a reduction function + """ + + # we are not asked to reduce or infer reduction + # so just return a copy of the existing object + if self.result_type not in ["reduce", None]: + return self.obj.copy() + + # we may need to infer + should_reduce = self.result_type == "reduce" + + from pandas import Series + + if not should_reduce: + try: + r = self.f(Series([])) + except Exception: + pass + else: + should_reduce = not isinstance(r, Series) + + if should_reduce: + if len(self.agg_axis): + r = self.f(Series([])) + else: + r = np.nan + + return self.obj._constructor_sliced(r, index=self.agg_axis) + else: + return self.obj.copy() + + def apply_raw(self): + """ apply to the values as a numpy array """ + try: + result = libreduction.compute_reduction(self.values, self.f, axis=self.axis) + except ValueError as err: + if "Function does not reduce" not in str(err): + # catch only ValueError raised intentionally in libreduction + raise + result = np.apply_along_axis(self.f, self.axis, self.values) + + # TODO: mixed type case + if result.ndim == 2: + return self.obj._constructor(result, index=self.index, columns=self.columns) + else: + return self.obj._constructor_sliced(result, index=self.agg_axis) + + def apply_broadcast(self, target): + result_values = np.empty_like(target.values) + + # axis which we want to compare compliance + result_compare = target.shape[0] + + for i, col in enumerate(target.columns): + res = self.f(target[col]) + ares = np.asarray(res).ndim + + # must be a scalar or 1d + if ares > 1: + raise ValueError("too many dims to broadcast") + elif ares == 1: + + # must match return dim + if result_compare != len(res): + raise ValueError("cannot broadcast result") + + result_values[:, i] = res + + # we *always* preserve the original index / columns + result = self.obj._constructor( + result_values, index=target.index, columns=target.columns + ) + return result + + def apply_standard(self): + + # try to reduce first (by default) + # this only matters if the reduction in values is of different dtype + # e.g. if we want to apply to a SparseFrame, then can't directly reduce + + # we cannot reduce using non-numpy dtypes, + # as demonstrated in gh-12244 + if ( + self.result_type in ["reduce", None] + and not self.dtypes.apply(is_extension_array_dtype).any() + # Disallow complex_internals since libreduction shortcut + # cannot handle MultiIndex + and not self.agg_axis._has_complex_internals + ): + + values = self.values + index = self.obj._get_axis(self.axis) + labels = self.agg_axis + empty_arr = np.empty(len(index), dtype=values.dtype) + + # Preserve subclass for e.g. test_subclassed_apply + dummy = self.obj._constructor_sliced( + empty_arr, index=index, dtype=values.dtype + ) + + try: + result = libreduction.compute_reduction( + values, self.f, axis=self.axis, dummy=dummy, labels=labels + ) + except ValueError as err: + if "Function does not reduce" not in str(err): + # catch only ValueError raised intentionally in libreduction + raise + except TypeError: + # e.g. test_apply_ignore_failures we just ignore + if not self.ignore_failures: + raise + except ZeroDivisionError: + # reached via numexpr; fall back to python implementation + pass + else: + return self.obj._constructor_sliced(result, index=labels) + + # compute the result using the series generator + self.apply_series_generator() + + # wrap results + return self.wrap_results() + + def apply_series_generator(self): + series_gen = self.series_generator + res_index = self.result_index + + i = None + keys = [] + results = {} + if self.ignore_failures: + successes = [] + for i, v in enumerate(series_gen): + try: + results[i] = self.f(v) + except Exception: + pass + else: + keys.append(v.name) + successes.append(i) + + # so will work with MultiIndex + if len(successes) < len(res_index): + res_index = res_index.take(successes) + + else: + for i, v in enumerate(series_gen): + results[i] = self.f(v) + keys.append(v.name) + + self.results = results + self.res_index = res_index + self.res_columns = self.result_columns + + def wrap_results(self): + results = self.results + + # see if we can infer the results + if len(results) > 0 and 0 in results and is_sequence(results[0]): + + return self.wrap_results_for_axis() + + # dict of scalars + result = self.obj._constructor_sliced(results) + result.index = self.res_index + + return result + + +class FrameRowApply(FrameApply): + axis = 0 + + def apply_broadcast(self): + return super().apply_broadcast(self.obj) + + @property + def series_generator(self): + return (self.obj._ixs(i, axis=1) for i in range(len(self.columns))) + + @property + def result_index(self): + return self.columns + + @property + def result_columns(self): + return self.index + + def wrap_results_for_axis(self): + """ return the results for the rows """ + + results = self.results + result = self.obj._constructor(data=results) + + if not isinstance(results[0], ABCSeries): + if len(result.index) == len(self.res_columns): + result.index = self.res_columns + + if len(result.columns) == len(self.res_index): + result.columns = self.res_index + + return result + + +class FrameColumnApply(FrameApply): + axis = 1 + + def apply_broadcast(self): + result = super().apply_broadcast(self.obj.T) + return result.T + + @property + def series_generator(self): + constructor = self.obj._constructor_sliced + return ( + constructor(arr, index=self.columns, name=name) + for i, (arr, name) in enumerate(zip(self.values, self.index)) + ) + + @property + def result_index(self): + return self.index + + @property + def result_columns(self): + return self.columns + + def wrap_results_for_axis(self): + """ return the results for the columns """ + results = self.results + + # we have requested to expand + if self.result_type == "expand": + result = self.infer_to_same_shape() + + # we have a non-series and don't want inference + elif not isinstance(results[0], ABCSeries): + from pandas import Series + + result = Series(results) + result.index = self.res_index + + # we may want to infer results + else: + result = self.infer_to_same_shape() + + return result + + def infer_to_same_shape(self): + """ infer the results to the same shape as the input object """ + results = self.results + + result = self.obj._constructor(data=results) + result = result.T + + # set the index + result.index = self.res_index + + # infer dtypes + result = result.infer_objects() + + return result diff --git a/data/source_files/messy/76c274773ccc.py b/data/source_files/messy/76c274773ccc.py new file mode 100644 index 0000000000000000000000000000000000000000..8a6f626dba5ce35c66724326d654b9ba19117497 --- /dev/null +++ b/data/source_files/messy/76c274773ccc.py @@ -0,0 +1,110 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import os +import matplotlib.pyplot as plt +import CurveFit +import shutil + +#find all DIRECTORIES containing non-hidden files ending in FILENAME +def getDataDirectories(DIRECTORY, FILENAME="valLoss.txt"): + directories=[] + for directory in os.scandir(DIRECTORY): + for item in os.scandir(directory): + if item.name.endswith(FILENAME) and not item.name.startswith("."): + directories.append(directory.path) + return directories + +#get all non-hidden data files in DIRECTORY with extension EXT +def getDataFiles(DIRECTORY, EXT='txt'): + datafiles=[] + for item in os.scandir(DIRECTORY): + if item.name.endswith("."+EXT) and not item.name.startswith("."): + datafiles.append(item.path) + return datafiles + +#checking if loss ever doesn't decrease for numEpochs epochs in a row. +def stopsDecreasing(loss, epoch, numEpochs): + minLoss=np.inf + epochMin=0 + for i in range(0,loss.size): + if loss[i] < minLoss: + minLoss=loss[i] + epochMin=epoch[i] + elif (epoch[i]-epochMin) >= numEpochs: + return i, minLoss + + return i, minLoss + +#dirpath is where the accuracy and loss files are stored. want to move the files into the same format expected by grabNNData. +def createFolders(SEARCHDIR, SAVEDIR): + for item in os.scandir(SEARCHDIR): + name=str(item.name) + files=name.split('-') + SAVEFULLDIR=SAVEDIR+str(files[0]) + if not os.path.exists(SAVEFULLDIR): + try: + os.makedirs(SAVEFULLDIR) + except FileExistsError: + #directory already exists--must have been created between the if statement & our attempt at making directory + pass + shutil.move(item.path, SAVEFULLDIR+"/"+str(files[1])) + + +#a function to read in information (e.g. accuracy, loss) stored at FILENAME +def grabNNData(FILENAME, header='infer', sep=' '): + data = pd.read_csv(FILENAME, sep, header=header) + + if ('epochs' in data.columns) and ('trainLoss' in data.columns) and ('valLoss' in data.columns) and ('valAcc' in data.columns) and ('batch_size' in data.columns) and ('learning_rate' in data.columns): + + sortedData=data.sort_values(by="epochs", axis=0, ascending=True) + + epoch=np.array(sortedData['epochs']) + trainLoss=np.array(sortedData['trainLoss']) + valLoss=np.array(sortedData['valLoss']) + valAcc=np.array(sortedData['valAcc']) + + batch_size=np.array(sortedData['batch_size']) + learning_rate=np.array(sortedData['learning_rate']) + + convKers=np.array(sortedData['convKernels']) + + return(epoch, trainLoss, valLoss, valAcc, batch_size, learning_rate, convKers) + + elif ('epochs' in data.columns) and ('trainLoss' in data.columns) and ('valLoss' in data.columns) and ('valAcc' in data.columns): + + sortedData=data.sort_values(by="epochs", axis=0, ascending=True) + + epoch=np.array(sortedData['epochs']) + trainLoss=np.array(sortedData['trainLoss']) + valLoss=np.array(sortedData['valLoss']) + valAcc=np.array(sortedData['valAcc']) + + else: + print("Missing a column in NN datafile") + raise Exception('NN datafile is missing one of the expected columns: epochs trainLoss valLoss valAcc [optional extra columns: batch_size, learning_rate]') + + +#slice data could be used to test values of E other than E=0.5, which we use by default +def sliceData(xsize, x, y, z=None, w=None): + #we can slice the data to sample less often, but not more often. We verify that we're not being asked for a granularity that is smaller than the frequency of datapoints in the vectors. + if x[0] > xsize: + return x,y,z,w + else: + result=(1.0/x[0])*xsize + #result is how often we should take datapoints if we wish to consider values every xsize + + x=x[int(result-1)::int(result)] + y=y[int(result-1)::int(result)] + + if z is not None: + z=z[int(result-1)::int(result)] + if w is None: + return x,y,z + else: + return x,y + + #if we get to this point in function, it means z and w are both not None. + w=w[int(result-1)::int(result)] + return x,y,z,w + diff --git a/data/source_files/messy/7e55a2eec7d9.py b/data/source_files/messy/7e55a2eec7d9.py new file mode 100644 index 0000000000000000000000000000000000000000..d9a90a5af3f207f1020cbf41f94830b75e23fbc9 --- /dev/null +++ b/data/source_files/messy/7e55a2eec7d9.py @@ -0,0 +1,131 @@ +"""Forms for RTD donations""" + +import logging + +from django import forms +from django.conf import settings +from django.utils.translation import ugettext_lazy as _ + +from readthedocs.payments.forms import StripeModelForm, StripeResourceMixin +from readthedocs.payments.utils import stripe + +from .models import Supporter + +log = logging.getLogger(__name__) + + +class SupporterForm(StripeResourceMixin, StripeModelForm): + + """Donation support sign up form + + This extends the basic payment form, giving fields for credit card number, + expiry, and CVV. The proper Knockout data bindings are established on + :py:class:`StripeModelForm` + """ + + class Meta: + model = Supporter + fields = ( + 'last_4_digits', + 'name', + 'email', + 'dollars', + 'logo_url', + 'site_url', + 'public', + ) + labels = { + 'public': _('Make this donation public'), + } + help_texts = { + 'public': _('Your name and image will be displayed on the donation page'), + 'email': _('Your email is used for Gravatar and so we can send you a receipt'), + 'logo_url': _("URL of your company's logo, images should be 300x300 pixels or less"), + 'dollars': _('Companies donating over $400 can specify a logo URL and site link'), + } + widgets = { + 'dollars': forms.HiddenInput(attrs={ + 'data-bind': 'value: dollars' + }), + 'logo_url': forms.TextInput(attrs={ + 'data-bind': 'value: logo_url, enable: urls_enabled' + }), + 'site_url': forms.TextInput(attrs={ + 'data-bind': 'value: site_url, enable: urls_enabled' + }), + 'last_4_digits': forms.TextInput(attrs={ + 'data-bind': 'valueInit: card_digits, value: card_digits' + }), + } + + last_4_digits = forms.CharField(widget=forms.HiddenInput(), required=True) + name = forms.CharField(required=True) + email = forms.CharField(required=True) + + def __init__(self, *args, **kwargs): + self.user = kwargs.pop('user') + super(SupporterForm, self).__init__(*args, **kwargs) + + def validate_stripe(self): + """Call stripe for payment (not ideal here) and clean up logo < $200""" + dollars = self.cleaned_data['dollars'] + if dollars < 200: + self.cleaned_data['logo_url'] = None + self.cleaned_data['site_url'] = None + stripe.Charge.create( + amount=int(self.cleaned_data['dollars']) * 100, + currency='usd', + source=self.cleaned_data['stripe_token'], + description='Read the Docs Sustained Engineering', + receipt_email=self.cleaned_data['email'] + ) + + def save(self, commit=True): + supporter = super(SupporterForm, self).save(commit) + if commit and self.user is not None and self.user.is_authenticated(): + supporter.user = self.user + supporter.save() + return supporter + + +class EthicalAdForm(StripeResourceMixin, StripeModelForm): + + """Payment form for ethical ads + + This extends the basic payment form, giving fields for credit card number, + expiry, and CVV. The proper Knockout data bindings are established on + :py:class:`StripeModelForm` + """ + + class Meta: + model = Supporter + fields = ( + 'last_4_digits', + 'name', + 'email', + 'dollars', + ) + help_texts = { + 'email': _('Your email is used so we can send you a receipt'), + } + widgets = { + 'dollars': forms.HiddenInput(attrs={ + 'data-bind': 'value: dollars' + }), + 'last_4_digits': forms.TextInput(attrs={ + 'data-bind': 'valueInit: card_digits, value: card_digits' + }), + } + + last_4_digits = forms.CharField(widget=forms.HiddenInput(), required=True) + name = forms.CharField(required=True) + email = forms.CharField(required=True) + + def validate_stripe(self): + stripe.Charge.create( + amount=int(self.cleaned_data['dollars']) * 100, + currency='usd', + source=self.cleaned_data['stripe_token'], + description='Read the Docs Sponsorship Payment', + receipt_email=self.cleaned_data['email'] + ) diff --git a/data/source_files/messy/8b81a10027a3.py b/data/source_files/messy/8b81a10027a3.py new file mode 100644 index 0000000000000000000000000000000000000000..8a2c8b21ea65c7fbe7c24c113fc96385ffdf77cb --- /dev/null +++ b/data/source_files/messy/8b81a10027a3.py @@ -0,0 +1,33 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""Functional test cases for subject-replicator""" + +import sys + +from subject.tests import functional +from subject.tests.utils import execute + + +class TestGlanceReplicator(functional.FunctionalTest): + """Functional tests for subject-replicator""" + + def test_compare(self): + # Test for issue: https://bugs.launchpad.net/glance/+bug/1598928 + cmd = ('%s -m subject.cmd.replicator ' + 'compare az1:9292 az2:9292 --debug' % + (sys.executable,)) + exitcode, out, err = execute(cmd, raise_error=False) + self.assertIn( + 'Request: GET http://az1:9292/v1/subjects/detail?is_public=None', + err + ) diff --git a/data/source_files/messy/8bf1ff66eee0.py b/data/source_files/messy/8bf1ff66eee0.py new file mode 100644 index 0000000000000000000000000000000000000000..d9e78859b4482aaef1db18210493138799d91b2f --- /dev/null +++ b/data/source_files/messy/8bf1ff66eee0.py @@ -0,0 +1,52 @@ +# uncompyle6 version 3.3.5 +# Python bytecode 2.7 (62211) +# Decompiled from: Python 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)] +# Embedded file name: c:\Jenkins\live\output\win_64_static\Release\python-bundle\MIDI Remote Scripts\Push2\mode_collector.py +# Compiled at: 2018-11-30 15:48:11 +from __future__ import absolute_import, print_function, unicode_literals +from ableton.v2.base import listenable_property, listens, EventObject + +class ModeCollector(EventObject): + + def __init__(self, main_modes=None, mix_modes=None, global_mix_modes=None, device_modes=None, *a, **k): + super(ModeCollector, self).__init__(*a, **k) + self._main_modes = main_modes + self._mix_modes = mix_modes + self._global_mix_modes = global_mix_modes + self._device_modes = device_modes + self._on_selected_main_mode_changed.subject = main_modes + self._on_selected_mix_mode_changed.subject = mix_modes + self._on_selected_global_mix_mode_changed.subject = global_mix_modes + self._on_selected_device_mode_changed.subject = device_modes + + @listenable_property + def main_mode(self): + return self._main_modes.selected_mode + + @listens(b'selected_mode') + def _on_selected_main_mode_changed(self, mode): + self.notify_main_mode() + + @listenable_property + def mix_mode(self): + return self._mix_modes.selected_mode + + @listens(b'selected_mode') + def _on_selected_mix_mode_changed(self, mode): + self.notify_mix_mode() + + @listenable_property + def global_mix_mode(self): + return self._global_mix_modes.selected_mode + + @listens(b'selected_mode') + def _on_selected_global_mix_mode_changed(self, mode): + self.notify_global_mix_mode() + + @listenable_property + def device_mode(self): + return self._device_modes.selected_mode + + @listens(b'selected_mode') + def _on_selected_device_mode_changed(self, mode): + self.notify_device_mode() \ No newline at end of file diff --git a/data/source_files/messy/8f056225fcb5.py b/data/source_files/messy/8f056225fcb5.py new file mode 100644 index 0000000000000000000000000000000000000000..d99a1e98eccb58cbc0c0cef6e9e6702f33461b0e --- /dev/null +++ b/data/source_files/messy/8f056225fcb5.py @@ -0,0 +1,231 @@ +from rest_framework_gis import serializers +from rest_framework import serializers as s + +from .models import ( + Artificialisee2015to2018, + Artificielle2018, + CommunesSybarval, + CouvertureSol, + EnveloppeUrbaine2018, + Ocsge, + Renaturee2018to2015, + Sybarval, + Voirie2018, + ZonesBaties2018, + UsageSol, +) + + +def get_label(code="", label=""): + if code is None: + code = "-" + if label is None: + label = "inconnu" + return f"{code} {label[:30]}" + + +class Artificialisee2015to2018Serializer(serializers.GeoFeatureModelSerializer): + usage_2015 = s.SerializerMethodField() + usage_2018 = s.SerializerMethodField() + couverture_2015 = s.SerializerMethodField() + couverture_2018 = s.SerializerMethodField() + + def get_usage_2015(self, obj): + return get_label(code=obj.us_2015, label=obj.us_2015_label) + + def get_usage_2018(self, obj): + return get_label(code=obj.us_2018, label=obj.us_2018_label) + + def get_couverture_2015(self, obj): + return get_label(code=obj.cs_2015, label=obj.cs_2015_label) + + def get_couverture_2018(self, obj): + return get_label(code=obj.cs_2018, label=obj.cs_2018_label) + + class Meta: + fields = ( + "id", + "surface", + "usage_2015", + "usage_2018", + "couverture_2015", + "couverture_2018", + ) + geo_field = "mpoly" + model = Artificialisee2015to2018 + + +class Artificielle2018Serializer(serializers.GeoFeatureModelSerializer): + couverture = s.SerializerMethodField() + + def get_couverture(self, obj): + return get_label(code=obj.couverture, label=obj.couverture_label) + + class Meta: + fields = ( + "id", + "surface", + "couverture", + ) + geo_field = "mpoly" + model = Artificielle2018 + + +class CommunesSybarvalSerializer(serializers.GeoFeatureModelSerializer): + """Marker GeoJSON serializer.""" + + class Meta: + """Marker serializer meta class.""" + + fields = ( + "nom", + "code_insee", + "surface", + ) + geo_field = "mpoly" + model = CommunesSybarval + + +class EnveloppeUrbaine2018Serializer(serializers.GeoFeatureModelSerializer): + couverture = s.SerializerMethodField() + + def get_couverture(self, obj): + return get_label(code=obj.couverture, label=obj.couverture_label) + + class Meta: + fields = ( + "id", + "couverture", + "surface", + ) + geo_field = "mpoly" + model = EnveloppeUrbaine2018 + + +class OcsgeSerializer(serializers.GeoFeatureModelSerializer): + couverture = s.SerializerMethodField() + usage = s.SerializerMethodField() + + def get_couverture(self, obj): + return get_label(code=obj.couverture, label=obj.couverture_label) + + def get_usage(self, obj): + return get_label(code=obj.usage, label=obj.usage_label) + + class Meta: + fields = ( + "id", + "couverture", + "usage", + "millesime", + "map_color", + "year", + ) + geo_field = "mpoly" + model = Ocsge + + +class Renaturee2018to2015Serializer(serializers.GeoFeatureModelSerializer): + usage_2015 = s.SerializerMethodField() + usage_2018 = s.SerializerMethodField() + couverture_2015 = s.SerializerMethodField() + couverture_2018 = s.SerializerMethodField() + + def get_usage_2015(self, obj): + return get_label(code=obj.us_2015, label=obj.us_2015_label) + + def get_usage_2018(self, obj): + return get_label(code=obj.us_2018, label=obj.us_2018_label) + + def get_couverture_2015(self, obj): + return get_label(code=obj.cs_2015, label=obj.cs_2015_label) + + def get_couverture_2018(self, obj): + return get_label(code=obj.cs_2018, label=obj.cs_2018_label) + + class Meta: + fields = ( + "id", + "surface", + "usage_2015", + "usage_2018", + "couverture_2015", + "couverture_2018", + ) + geo_field = "mpoly" + model = Renaturee2018to2015 + + +class SybarvalSerializer(serializers.GeoFeatureModelSerializer): + class Meta: + fields = ( + "id", + "surface", + ) + geo_field = "mpoly" + model = Sybarval + + +class Voirie2018Serializer(serializers.GeoFeatureModelSerializer): + couverture = s.SerializerMethodField() + usage = s.SerializerMethodField() + + def get_couverture(self, obj): + return get_label(code=obj.couverture, label=obj.couverture_label) + + def get_usage(self, obj): + return get_label(code=obj.usage, label=obj.usage_label) + + class Meta: + fields = ( + "id", + "surface", + "couverture", + "usage", + ) + geo_field = "mpoly" + model = Voirie2018 + + +class ZonesBaties2018Serializer(serializers.GeoFeatureModelSerializer): + couverture = s.SerializerMethodField() + usage = s.SerializerMethodField() + + def get_couverture(self, obj): + return get_label(code=obj.couverture, label=obj.couverture_label) + + def get_usage(self, obj): + return get_label(code=obj.usage, label=obj.usage_label) + + class Meta: + fields = ( + "id", + "couverture", + "usage", + "surface", + ) + geo_field = "mpoly" + model = ZonesBaties2018 + + +class CouvertureSolSerializer(serializers.ModelSerializer): + class Meta: + fields = ( + "id", + "parent", + "code", + "label", + "is_artificial", + ) + model = CouvertureSol + + +class UsageSolSerializer(serializers.ModelSerializer): + class Meta: + fields = ( + "id", + "parent", + "code", + "label", + ) + model = UsageSol diff --git a/data/source_files/messy/94b2f20c5850.py b/data/source_files/messy/94b2f20c5850.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7e18d0d0b30bb03c5125997bb7d29ab2737184 --- /dev/null +++ b/data/source_files/messy/94b2f20c5850.py @@ -0,0 +1,46 @@ +# https://www.acmicpc.net/problem/13023 + +import sys +sys.setrecursionlimit(999999999) + + +def dfs_all(): + is_possible = [False] + + for node in range(N): + visited = [False for _ in range(N)] + dfs(node, 0, visited, is_possible) + + if is_possible[0]: + return 1 + + return 0 + + +def dfs(cur, depth, visited, is_possible): + if visited[cur]: + return + + if depth == target_depth: + is_possible[0] = True + return + visited[cur] = True + + for nxt in graph[cur]: + dfs(nxt, depth + 1, visited, is_possible) + + visited[cur] = False + + +if __name__ == '__main__': + input = __import__('sys').stdin.readline + target_depth = 4 + N, M = map(int, input().split()) + graph = [list() for _ in range(N)] + + for _ in range(M): + a, b = map(int, input().split()) + graph[a].append(b) + graph[b].append(a) + + print(dfs_all()) diff --git a/data/source_files/messy/98c5f29240b9.py b/data/source_files/messy/98c5f29240b9.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3ca54d0e30bc25beb86e00254a401833904b9e --- /dev/null +++ b/data/source_files/messy/98c5f29240b9.py @@ -0,0 +1,225 @@ +# Copyright 2013 Mirantis, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +import functools +import re +import subprocess +import sys + +from scapy import all as scapy + + +DHCP_OFFER_COLUMNS = ('iface', 'mac', 'server_ip', 'server_id', 'gateway', + 'dport', 'message', 'yiaddr') + + +def command_util(*command): + """object with stderr and stdout + """ + return subprocess.Popen(command, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + + +def _check_vconfig(): + """Check vconfig installed or not + """ + return not command_util('which', 'vconfig').stderr.read() + + +def _iface_state(iface): + """For a given iface return it's state + returns UP, DOWN, UNKNOWN + """ + state = command_util('ip', 'link', 'show', iface).stdout.read() + search_result = re.search(r'.*<(?P.*)>.*', state) + if search_result: + state_list = search_result.groupdict().get('state', []) + if 'UP' in state_list: + return 'UP' + else: + return 'DOWN' + return 'UNKNOWN' + + +def check_network_up(iface): + return _iface_state(iface) == 'UP' + + +def check_iface_exist(iface): + """Check provided interface exists + """ + return not command_util("ip", "link", "show", iface).stderr.read() + + +def filtered_ifaces(ifaces): + for iface in ifaces: + if not check_iface_exist(iface): + sys.stderr.write('Iface {0} does not exist.'.format(iface)) + else: + if not check_network_up(iface): + sys.stderr.write('Network for iface {0} is down.'.format( + iface)) + else: + yield iface + + +def pick_ip(range_start, range_end): + """Given start_range, end_range generate list of ips + >>> next(pick_ip('192.168.1.10','192.168.1.13')) + '192.168.1.10' + """ + split_address = lambda ip_address: \ + [int(item) for item in ip_address.split('.')] + range_start = split_address(range_start) + range_end = split_address(range_end) + i = 0 + # ipv4 subnet cant be longer that 4 items + while i < 4: + # 255 - end of subnet + if not range_start[i] == range_end[i] and range_start[i] < 255: + yield '.'.join([str(item) for item in range_start]) + range_start[i] += 1 + else: + i += 1 + + +def get_item_properties(item, columns): + """Get specified in columns properties, with preserved order. + Required for correct cli table generation + + :param item: dict + :param columns: list with arbitrary keys + """ + properties = [] + for key in columns: + properties.append(item.get(key, '')) + return properties + + +def format_options(options): + """Util for serializing dhcp options + @options = [1,2,3] + >>> format_options([1, 2, 3]) + '\x01\x02\x03' + """ + return "".join((chr(item) for item in options)) + + +def _dhcp_options(dhcp_options): + """Dhcp options returned by scapy is not in usable format + [('message-type', 2), ('server_id', '192.168.0.5'), + ('name_server', '192.168.0.1', '192.168.0.2'), 'end'] + """ + for option in dhcp_options: + if isinstance(option, (tuple, list)): + header = option[0] + if len(option[1:]) > 1: + yield (header, option) + else: + yield (header, option[1]) + + +def format_answer(ans, iface): + dhcp_options = dict(_dhcp_options(ans[scapy.DHCP].options)) + results = ( + iface, ans[scapy.Ether].src, ans[scapy.IP].src, + dhcp_options['server_id'], ans[scapy.BOOTP].giaddr, + ans[scapy.UDP].sport, + scapy.DHCPTypes[dhcp_options['message-type']], + ans[scapy.BOOTP].yiaddr) + return dict(zip(DHCP_OFFER_COLUMNS, results)) + + +def single_format(func): + """Manage format of dhcp response + """ + @functools.wraps(func) + def formatter(*args, **kwargs): + iface = args[0] + ans = func(*args, **kwargs) + #scapy stores all sequence of requests + #so ans[0][1] would be response to first request + return [format_answer(response[1], iface) for response in ans] + return formatter + + +def multiproc_map(func): + # multiproc map could not work with format *args + @functools.wraps(func) + def workaround(*args, **kwargs): + args = args[0] if isinstance(args[0], (tuple, list)) else args + return func(*args, **kwargs) + return workaround + + +def filter_duplicated_results(func): + # due to network infra on broadcast multiple duplicated results + # returned. This helper filter them out + @functools.wraps(func) + def wrapper(*args, **kwargs): + resp = func(*args, **kwargs) + return (dict(t) for t in set([tuple(d.items()) for d in resp])) + return wrapper + + +class VlansContext(object): + """Contains all logic to manage vlans + """ + + def __init__(self, config): + """Initialize VlansContext + @config - list or tuple of (iface, vlan) pairs + """ + self.config = config + + def __enter__(self): + for iface, vlans in self.config.iteritems(): + vifaces = [] + for vlan in vlans: + if vlan > 0: + vifaces.append('{0}.{1}'.format(iface, vlan)) + yield str(iface), vifaces + + def __exit__(self, type, value, trace): + pass + + +class IfaceState(object): + """Context manager to control state of iface when dhcp checker is running + """ + + def __init__(self, iface, rollback=True, retry=3): + self.rollback = rollback + self.retry = retry + self.iface = iface + self.pre_iface_state = _iface_state(iface) + self.iface_state = self.pre_iface_state + self.post_iface_state = '' + + def iface_up(self): + while self.retry and self.iface_state != 'UP': + command_util('ifconfig', self.iface, 'up') + self.iface_state = _iface_state(self.iface) + self.retry -= 1 + if self.iface_state != 'UP': + raise EnvironmentError( + 'Tried my best to ifup iface {0}.'.format(self.iface)) + + def __enter__(self): + self.iface_up() + return self.iface + + def __exit__(self, exc_type, exc_val, exc_tb): + if self.pre_iface_state != 'UP' and self.rollback: + command_util('ifconfig', self.iface, 'down') + self.post_iface_state = _iface_state(self.iface) diff --git a/data/source_files/messy/9b7afe9a1073.py b/data/source_files/messy/9b7afe9a1073.py new file mode 100644 index 0000000000000000000000000000000000000000..d99f875863138f11af1d76f0c753c198ad6d96bd --- /dev/null +++ b/data/source_files/messy/9b7afe9a1073.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +"""Context managers implemented for (mostly) internal use""" + +import contextlib +import functools +from io import UnsupportedOperation +import os +import sys + + +__all__ = ["RedirectStdout", "RedirectStderr"] + + +@contextlib.contextmanager +def _stdchannel_redirected(stdchannel, dest_filename, mode="w"): + """ + A context manager to temporarily redirect stdout or stderr + + Originally by Marc Abramowitz, 2013 + (http://marc-abramowitz.com/archives/2013/07/19/python-context-manager-for-redirected-stdout-and-stderr/) + """ + + oldstdchannel = None + dest_file = None + try: + if stdchannel is None: + yield iter([None]) + else: + oldstdchannel = os.dup(stdchannel.fileno()) + dest_file = open(dest_filename, mode) + os.dup2(dest_file.fileno(), stdchannel.fileno()) + yield + except (UnsupportedOperation, AttributeError): + yield iter([None]) + finally: + if oldstdchannel is not None: + os.dup2(oldstdchannel, stdchannel.fileno()) + if dest_file is not None: + dest_file.close() + + +RedirectStdout = functools.partial(_stdchannel_redirected, sys.stdout) +RedirectStderr = functools.partial(_stdchannel_redirected, sys.stderr) +RedirectNoOp = functools.partial(_stdchannel_redirected, None, "") diff --git a/data/source_files/messy/9c892371385d.py b/data/source_files/messy/9c892371385d.py new file mode 100644 index 0000000000000000000000000000000000000000..d9b42bca24804913cf6908775c04bc29a0bec6df --- /dev/null +++ b/data/source_files/messy/9c892371385d.py @@ -0,0 +1,47 @@ +from sys import maxsize + + +class Contact: + + def __init__(self, fname=None, mname=None, lname=None, nick=None, title=None, comp=None, addr=None, + home=None, mobile=None, work=None, fax=None, email1=None, email2=None, email3=None, + homepage=None, bday=None, bmonth=None, byear=None, aday=None, amonth=None, ayear=None, + secaddr=None, secphone=None, note=None, id =None): + self.fname = fname + self.mname = mname + self.lname = lname + self.nick = nick + self.title = title + self.comp = comp + self.addr = addr + self.home = home + self.mobile = mobile + self.work = work + self.fax = fax + self.email1 = email1 + self.email2 = email2 + self.email3 = email3 + self.homepage = homepage + self.bday = bday + self.bmonth = bmonth + self.byear = byear + self.aday = aday + self.amonth = amonth + self.ayear = ayear + self.secaddr = secaddr + self.secphone = secphone + self.note = note + self.id = id + + def __repr__(self): + return "%s:%s:%s" % (self.id, self.fname, self.lname) + + def __eq__(self, other): + return (self.id is None or other.id is None or self.id == other.id) and self.fname == other.fname and self.lname == other.lname + + def id_or_max(self): + if self.id: + return int(self.id) + else: + return maxsize + diff --git a/data/source_files/messy/9d4e5f709420.py b/data/source_files/messy/9d4e5f709420.py new file mode 100644 index 0000000000000000000000000000000000000000..8a0d98e91f0c9a170743b5f41866a399dbce8684 --- /dev/null +++ b/data/source_files/messy/9d4e5f709420.py @@ -0,0 +1,81 @@ +''' +------------------------------------------------------------------------------------------------- +This code accompanies the paper titled "Human injury-based safety decision of automated vehicles" +Author: Qingfan Wang, Qing Zhou, Miao Lin, Bingbing Nie +Corresponding author: Bingbing Nie (nbb@tsinghua.edu.cn) +------------------------------------------------------------------------------------------------- +''' + + +import torch +import numpy as np +from torch import nn +from torch.nn.utils import weight_norm + + +__author__ = "Qingfan Wang" + + +def Collision_cond(veh_striking_list, V1_v, V2_v, delta_angle, veh_param): + ''' Estimate the collision condition. ''' + + (veh_l, veh_w, veh_cgf, veh_cgs, veh_k, veh_m) = veh_param + + delta_angle_2 = np.arccos(np.abs(np.cos(delta_angle))) + if -1e-6 < delta_angle_2 < 1e-6: + delta_angle_2 = 1e-6 + + delta_v1_list = [] + delta_v2_list = [] + + # Estimate the collision condition (delat-v) according to the principal impact direction. + for veh_striking in veh_striking_list: + if veh_striking[0] == 1: + veh_ca = np.arctan(veh_cgf[0] / veh_cgs[0]) + veh_a2 = np.abs(veh_cgs[1] - veh_striking[3]) + veh_RDS = np.abs(V1_v * np.cos(delta_angle) - V2_v) + veh_a1 = np.abs(np.sqrt(veh_cgf[0] ** 2 + veh_cgs[0] ** 2) * np.cos(veh_ca + delta_angle_2)) + if (veh_striking[1]+1) in [16, 1, 2, 3, 17, 20, 21] and (veh_striking[2]+1) in [16, 1, 2, 3, 17, 20, 21]: + veh_e = 2 / veh_RDS + else: + veh_e = 0.5 / veh_RDS + + elif veh_striking[0] == 2: + veh_ca = np.arctan(veh_cgf[0] / veh_cgs[0]) + veh_a2 = np.abs(veh_cgf[1] - veh_striking[3]) + veh_a1 = np.abs(np.sqrt(veh_cgf[0] ** 2 + veh_cgs[0] ** 2) * np.cos(delta_angle_2 - veh_ca + np.pi / 2)) + veh_RDS = V1_v * np.sin(delta_angle_2) + veh_e = 1.5 / veh_RDS + + elif veh_striking[0] == 3: + veh_ca = np.arctan(veh_cgf[1] / veh_cgs[1]) + veh_a1 = np.abs(veh_cgs[0] - veh_striking[3]) + veh_RDS = np.abs(V2_v * np.cos(delta_angle) - V1_v) + veh_a2 = np.abs(np.sqrt(veh_cgf[1] ** 2 + veh_cgs[1] ** 2) * np.cos(veh_ca + delta_angle_2)) + if (veh_striking[1]+1) in [16, 1, 2, 3, 17, 20, 21] and (veh_striking[2]+1) in [16, 1, 2, 3, 17, 20, 21]: + veh_e = 2 / veh_RDS + else: + veh_e = 0.5 / veh_RDS + + elif veh_striking[0] == 4: + veh_ca = np.arctan(veh_cgf[1] / veh_cgs[1]) + veh_a1 = np.abs(veh_cgf[0] - veh_striking[3]) + veh_a2 = np.abs(np.sqrt(veh_cgf[1] ** 2 + veh_cgs[1] ** 2) * np.cos(delta_angle_2 - veh_ca + np.pi / 2)) + veh_RDS = V2_v * np.sin(delta_angle_2) + veh_e = 1.5 / veh_RDS + + + # Obtain delta-v based on the plane 2-DOF rigid-body collision model with momentum conservation. + veh_y1 = veh_k[0] ** 2 / (veh_a1 ** 2 + veh_k[0] ** 2) + veh_y2 = veh_k[1] ** 2 / (veh_a2 ** 2 + veh_k[1] ** 2) + delta_v1 = (1 + veh_e) * veh_m[1] * veh_y1 * veh_y2 * veh_RDS / (veh_m[0] * veh_y1 + veh_m[1] * veh_y2) + delta_v2 = (1 + veh_e) * veh_m[0] * veh_y1 * veh_y2 * veh_RDS / (veh_m[0] * veh_y1 + veh_m[1] * veh_y2) + + delta_v1_list.append(delta_v1) + delta_v2_list.append(delta_v2) + + delta_v1_ = max(delta_v1_list) + delta_v2_ = max(delta_v2_list) + index = delta_v1_list.index(max(delta_v1_list)) + + return delta_v1_, delta_v2_, index \ No newline at end of file diff --git a/data/source_files/messy/9df4fc781a63.py b/data/source_files/messy/9df4fc781a63.py new file mode 100644 index 0000000000000000000000000000000000000000..8a5fa0d5b2ac5b94aac410a26a9a516f09e6dcbd --- /dev/null +++ b/data/source_files/messy/9df4fc781a63.py @@ -0,0 +1,142 @@ +""" +Module for sending Push Notifications +""" +import logging +import requests + +from django.conf import settings + +from ...models import PushNotificationTranslation +from ...models import Region +from ...constants import push_notifications as pnt_const + +logger = logging.getLogger(__name__) + + +# pylint: disable=too-few-public-methods +class PushNotificationSender: + """ + Sends push notifications via FCM HTTP API. + Definition: https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream-http-messages-json + """ + + fcm_url = "https://fcm.googleapis.com/fcm/send" + + def __init__(self, push_notification): + """ + Load relevant push notification translations and prepare content for sending + + :param push_notification: the push notification that should be sent + :type push_notification: ~cms.models.push_notifications.push_notification.PushNotification + """ + self.push_notification = push_notification + self.prepared_pnts = [] + self.primary_pnt = PushNotificationTranslation.objects.get( + push_notification=push_notification, + language=push_notification.region.default_language, + ) + if len(self.primary_pnt.title) > 0: + self.prepared_pnts.append(self.primary_pnt) + self.load_secondary_pnts() + self.auth_key = self.get_auth_key() + + def load_secondary_pnts(self): + """ + Load push notification translations in other languages + """ + secondary_pnts = PushNotificationTranslation.objects.filter( + push_notification=self.push_notification + ).exclude(id=self.primary_pnt.id) + for secondary_pnt in secondary_pnts: + if ( + secondary_pnt.title == "" + and pnt_const.USE_MAIN_LANGUAGE == self.push_notification.mode + ): + secondary_pnt.title = self.primary_pnt.title + secondary_pnt.text = self.primary_pnt.text + self.prepared_pnts.append(secondary_pnt) + if len(secondary_pnt.title) > 0: + self.prepared_pnts.append(secondary_pnt) + + def is_valid(self): + """ + Check if all data for sending push notifications is available + + :return: all prepared push notification translations are valid + :rtype: bool + """ + if self.auth_key is None: + return False + for pnt in self.prepared_pnts: + if not pnt.title: + logger.debug("%r has no title", pnt) + return False + return True + + @staticmethod + def get_auth_key(): + """ + Get FCM API auth key + + :return: FCM API auth key + :rtype: str + """ + fcm_auth_config_key = "fcm_auth_key" + auth_key = settings.FCM_KEY + if auth_key.exists(): + logger.debug("Got fcm_auth_key from database") + return auth_key.first().value + logger.warning( + "Could not get %r from configuration database", fcm_auth_config_key + ) + return None + + def send_pn(self, pnt): + """ + Send single push notification translation + + :param pnt: the prepared push notification translation to be sent + :type pnt: ~cms.models.push_notifications.push_notification_translation.PushNotificationTranslation + + :return: Response of the :mod:`requests` library + :rtype: ~requests.Response + """ + if settings.DEBUG: + region_slug = Region.objects.get( + id=settings.TEST_BLOG_ID + ).slug # Testumgebung - prevent sending PNs to actual users in development + else: + region_slug = self.push_notification.region.slug + payload = { + "to": f"/topics/{region_slug}-{pnt.language.slug}-{self.push_notification.channel}", + "notification": {"title": pnt.title, "body": pnt.text}, + "data": { + "lanCode": pnt.language.slug, + "city": self.push_notification.region.slug, + }, + } + headers = {"Authorization": f"key={self.auth_key}"} + return requests.post(self.fcm_url, json=payload, headers=headers) + + # pylint: disable=too-many-arguments + def send_all(self): + """ + Send all prepared push notification translations + + :return: Success status + :rtype: bool + """ + status = True + for pnt in self.prepared_pnts: + res = self.send_pn(pnt) + if res.status_code == 200: + logger.info("%r sent, FCM id: %r", pnt, res.json()["message_id"]) + else: + status = False + logger.warning( + "Received invalid response from FCM for %r, status: %r, body: %r", + pnt, + res.status_code, + res.text, + ) + return status diff --git a/data/source_files/messy/a16e556ab84c.py b/data/source_files/messy/a16e556ab84c.py new file mode 100644 index 0000000000000000000000000000000000000000..8a5248567c33c615e0f8be2779b082966267e38c --- /dev/null +++ b/data/source_files/messy/a16e556ab84c.py @@ -0,0 +1,89 @@ +from __future__ import print_function +import httplib2 +import os +import sys + +import pickle + +from apiclient import discovery +from apiclient import errors +from oauth2client import client +from oauth2client import tools +from oauth2client.file import Storage + +try: + import argparse + flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() +except ImportError: + flags = None + +# If modifying these scopes, delete your previously saved credentials +# at ~/.credentials/gmail-python-quickstart.json +SCOPES = 'https://www.googleapis.com/auth/gmail.labels' +CLIENT_SECRET_FILE = 'client_secret.json' +APPLICATION_NAME = 'Inbox Organize' + +def get_credentials(): + """Gets valid user credentials from storage. + + If nothing has been stored, or if the stored credentials are invalid, + the OAuth2 flow is completed to obtain the new credentials. + + Returns: + Credentials, the obtained credential. + """ + home_dir = os.path.expanduser('~') + credential_dir = os.path.join(home_dir, '.credentials') + if not os.path.exists(credential_dir): + os.makedirs(credential_dir) + credential_path = os.path.join(credential_dir, + 'gmail-python-quickstart.json') + + store = Storage(credential_path) + credentials = store.get() + if not credentials or credentials.invalid: + flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) + flow.user_agent = APPLICATION_NAME + if flags: + credentials = tools.run_flow(flow, store, flags) + else: # Needed only for compatibility with Python 2.6 + credentials = tools.run(flow, store) + print('Storing credentials to ' + credential_path) + return credentials + +def GetLabels(service, user_id): + try: + response = service.users().labels().list(userId=user_id).execute() + labels = response['labels'] + """ + for label in labels: + print ('Label id: %s - Label name: %s' % (label['id'], label['name'])) + """ + return labels + except errors.HttpError as error: + print ('An error occurred: %s' % error) + +def DeleteLabel(service, user_id, label_id): + try: + service.users().labels().delete(userId=user_id, id=label_id).execute() + print ('Label with id: %s deleted successfully.' % label_id) + except errors.HttpError as error: + print ('An error occurred: %s' % error) + +def main(): + credentials = get_credentials() + http = credentials.authorize(httplib2.Http()) + service = discovery.build('gmail', 'v1', http=http) + + userId = 'me' + + labels = GetLabels(service, userId) + + for label in labels: + if (label['type'] == 'user'): + print('Deleting label:', label['name']) + DeleteLabel(service, userId, label['id']) + +if __name__ == '__main__': + main() + diff --git a/data/source_files/messy/a24a6c4f079d.py b/data/source_files/messy/a24a6c4f079d.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7f9273d28271b0f56005e762e91504d2293322 --- /dev/null +++ b/data/source_files/messy/a24a6c4f079d.py @@ -0,0 +1,275 @@ + +import smart_imports + +smart_imports.all() + + +class HeroDescriptionTests(utils_testcase.TestCase): + + def setUp(self): + super().setUp() + + game_logic.create_test_map() + + account = self.accounts_factory.create_account(is_fast=True) + + self.storage = game_logic_storage.LogicStorage() + self.storage.load_account_data(account) + self.hero = self.storage.accounts_to_heroes[account.id] + + def test_no_description(self): + self.assertEqual(logic.get_hero_description(self.hero.id), '') + + def test_has_description(self): + logic.set_hero_description(self.hero.id, 'bla-bla') + self.assertEqual(logic.get_hero_description(self.hero.id), 'bla-bla') + + def test_update_description(self): + logic.set_hero_description(self.hero.id, 'bla-bla') + logic.set_hero_description(self.hero.id, 'new description') + self.assertEqual(logic.get_hero_description(self.hero.id), 'new description') + + +class CreateHero(utils_testcase.TestCase): + + def setUp(self): + super().setUp() + game_logic.create_test_map() + + self.account = accounts_prototypes.AccountPrototype.create(nick='nick-xxx', + email='test@test.test', + is_fast=False) + + self.attributes = {'is_fast': False, + 'is_bot': False, + 'might': 0, + 'active_state_end_at': datetime.datetime.now() + datetime.timedelta(days=3), + 'premium_state_end_at': datetime.datetime.fromtimestamp(0), + 'ban_state_end_at': datetime.datetime.fromtimestamp(0)} + + def test_default(self): + logic.create_hero(account_id=self.account.id, attributes=self.attributes) + + hero = logic.load_hero(self.account.id) + + self.assertEqual(hero.id, self.account.id) + self.assertEqual(hero.account_id, self.account.id) + + self.assertIn(hero.gender, (game_relations.GENDER.MALE, + game_relations.GENDER.FEMALE)) + self.assertEqual(hero.preferences.energy_regeneration_type, hero.race.energy_regeneration) + self.assertEqual(hero.habit_honor.raw_value, 0) + self.assertEqual(hero.habit_peacefulness.raw_value, 0) + self.assertTrue(hero.preferences.archetype.is_NEUTRAL) + self.assertTrue(hero.upbringing.is_PHILISTINE) + self.assertTrue(hero.first_death.is_FROM_THE_MONSTER_FANGS) + self.assertTrue(hero.death_age.is_MATURE) + + def test_account_attributes_required(self): + for attribute in self.attributes.keys(): + with self.assertRaises(exceptions.HeroAttributeRequiredError): + logic.create_hero(account_id=self.account.id, + attributes={key: value for key, value in self.attributes.items() if key != attribute }) + + def test_account_attributes(self): + attributes = {'is_fast': random.choice((True, False)), + 'is_bot': random.choice((True, False)), + 'might': random.randint(1, 1000), + 'active_state_end_at': datetime.datetime.fromtimestamp(1), + 'premium_state_end_at': datetime.datetime.fromtimestamp(2), + 'ban_state_end_at': datetime.datetime.fromtimestamp(3)} + + logic.create_hero(account_id=self.account.id, attributes=attributes) + + hero = logic.load_hero(self.account.id) + + self.assertEqual(hero.is_fast, attributes['is_fast']) + self.assertEqual(hero.is_bot, attributes['is_bot']) + self.assertEqual(hero.might, attributes['might']) + self.assertEqual(hero.active_state_end_at, attributes['active_state_end_at']) + self.assertEqual(hero.premium_state_end_at, attributes['premium_state_end_at']) + self.assertEqual(hero.ban_state_end_at, attributes['ban_state_end_at']) + + def test_attributes(self): + self.attributes.update({'race': game_relations.RACE.random(), + 'gender': game_relations.GENDER.random(), + 'name': game_names.generator().get_name(game_relations.RACE.random(), + game_relations.GENDER.random()), + 'peacefulness': random.randint(-c.HABITS_BORDER, c.HABITS_BORDER), + 'honor': random.randint(-c.HABITS_BORDER, c.HABITS_BORDER), + 'archetype': game_relations.ARCHETYPE.random(), + 'upbringing': tt_beings_relations.UPBRINGING.random(), + 'first_death': tt_beings_relations.FIRST_DEATH.random(), + 'death_age': tt_beings_relations.AGE.random()}) + + logic.create_hero(account_id=self.account.id, attributes=self.attributes) + + hero = logic.load_hero(self.account.id) + + self.assertEqual(hero.race, self.attributes['race']) + self.assertEqual(hero.gender, self.attributes['gender']) + self.assertEqual(hero.utg_name, self.attributes['name']) + self.assertEqual(hero.habit_peacefulness.raw_value, self.attributes['peacefulness']) + self.assertEqual(hero.habit_honor.raw_value, self.attributes['honor']) + self.assertEqual(hero.preferences.archetype, self.attributes['archetype']) + self.assertEqual(hero.upbringing, self.attributes['upbringing']) + self.assertEqual(hero.first_death, self.attributes['first_death']) + self.assertEqual(hero.death_age, self.attributes['death_age']) + + +class RegisterSpendingTests(utils_testcase.TestCase): + + def setUp(self): + super().setUp() + self.places = game_logic.create_test_map() + + account = self.accounts_factory.create_account() + + self.storage = game_logic_storage.LogicStorage() + self.storage.load_account_data(account) + self.hero = self.storage.accounts_to_heroes[account.id] + + self.hero.premium_state_end_at + + game_tt_services.debug_clear_service() + + @mock.patch('the_tale.game.heroes.objects.Hero.can_change_place_power', lambda hero, place: True) + def test_not_in_place(self): + self.hero.position.set_position(0, 0) + self.assertEqual(self.hero.position.place_id, None) + + logic.register_spending(self.hero, 100) + + impacts = game_tt_services.money_impacts.cmd_get_targets_impacts(targets=[(tt_api_impacts.OBJECT_TYPE.PLACE, self.places[0].id)]) + + self.assertEqual(impacts, []) + + @mock.patch('the_tale.game.heroes.objects.Hero.can_change_place_power', lambda hero, place: False) + def test_can_not_change_place_power(self): + self.hero.position.set_place(self.places[0]) + + logic.register_spending(self.hero, 100) + + impacts = game_tt_services.money_impacts.cmd_get_targets_impacts(targets=[(tt_api_impacts.OBJECT_TYPE.PLACE, self.places[0].id)]) + + self.assertEqual(impacts, []) + + @mock.patch('the_tale.game.heroes.objects.Hero.can_change_place_power', lambda hero, place: True) + def test_can_change_place_power(self): + self.hero.position.set_place(self.places[0]) + + logic.register_spending(self.hero, 100) + + impacts = game_tt_services.money_impacts.cmd_get_targets_impacts(targets=[(tt_api_impacts.OBJECT_TYPE.PLACE, self.places[0].id)]) + + self.assertEqual(len(impacts), 1) + + self.assertEqual(impacts[0].amount, 100) + self.assertTrue(impacts[0].target_type.is_PLACE) + self.assertEqual(impacts[0].target_id, self.places[0].id) + + @mock.patch('the_tale.game.heroes.objects.Hero.can_change_place_power', lambda hero, place: True) + def test_can_change_place_power__below_zero(self): + self.hero.position.set_place(self.places[0]) + + logic.register_spending(self.hero, 100) + logic.register_spending(self.hero, -50) + + impacts = game_tt_services.money_impacts.cmd_get_targets_impacts(targets=[(tt_api_impacts.OBJECT_TYPE.PLACE, self.places[0].id)]) + + self.assertEqual(len(impacts), 1) + + self.assertEqual(impacts[0].amount, 150) + + +class GetPlacesPathModifiersTests(places_helpers.PlacesTestsMixin, + utils_testcase.TestCase): + + def setUp(self): + super().setUp() + + self.places = game_logic.create_test_map() + + account = self.accounts_factory.create_account(is_fast=True) + + self.storage = game_logic_storage.LogicStorage() + self.storage.load_account_data(account) + self.hero = self.storage.accounts_to_heroes[account.id] + + def place_0_cost(self): + return logic.get_places_path_modifiers(self.hero)[self.places[0].id] + + def test_every_place_has_modifier(self): + modifiers = logic.get_places_path_modifiers(self.hero) + self.assertEqual(set(modifiers.keys()), {place.id for place in self.places}) + + def test_race_bonus(self): + self.places[0].race = game_relations.RACE.random(exclude=(self.hero.race,)) + + with self.check_almost_delta(self.place_0_cost, -c.PATH_MODIFIER_MINOR_DELTA): + self.places[0].race = self.hero.race + + def test_modifier_bonus(self): + self.assertFalse(self.places[0].is_modifier_active()) + + with self.check_almost_delta(self.place_0_cost, -c.PATH_MODIFIER_MINOR_DELTA): + self.places[0].set_modifier(places_modifiers.CITY_MODIFIERS.FORT) + self.create_effect(self.places[0].id, + value=100500, + attribute=places_relations.ATTRIBUTE.MODIFIER_FORT, + delta=0) + self.places[0].refresh_attributes() + + self.assertTrue(self.places[0].is_modifier_active()) + + def test_home_place(self): + with self.check_almost_delta(self.place_0_cost, -c.PATH_MODIFIER_NORMAL_DELTA): + self.hero.preferences.set(relations.PREFERENCE_TYPE.PLACE, self.places[0]) + + def test_friend(self): + with self.check_almost_delta(self.place_0_cost, -c.PATH_MODIFIER_NORMAL_DELTA): + self.hero.preferences.set(relations.PREFERENCE_TYPE.FRIEND, self.places[0].persons[0]) + + def test_enemy(self): + with self.check_almost_delta(self.place_0_cost, c.PATH_MODIFIER_NORMAL_DELTA): + self.hero.preferences.set(relations.PREFERENCE_TYPE.ENEMY, self.places[0].persons[0]) + + def test_tax(self): + self.places[0].attrs.size = 10 + self.places[0].refresh_attributes() + self.assertEqual(self.places[0].attrs.tax, 0) + + with self.check_almost_delta(self.place_0_cost, c.PATH_MODIFIER_NORMAL_DELTA): + self.create_effect(self.places[0].id, + value=100, + attribute=places_relations.ATTRIBUTE.TAX, + delta=0) + self.places[0].refresh_attributes() + + HABITS_DELTAS = [(-1, -1, -c.PATH_MODIFIER_MINOR_DELTA), + (-1, 0, 0), + (-1, +1, +c.PATH_MODIFIER_MINOR_DELTA), + ( 0, -1, 0), + ( 0, 0, 0), + ( 0, +1, 0), + (+1, -1, +c.PATH_MODIFIER_MINOR_DELTA), + (+1, 0, 0), + (+1, +1, -c.PATH_MODIFIER_MINOR_DELTA)] + + def test_habits__honor(self): + for place_direction, hero_direction, expected_delta in self.HABITS_DELTAS: + self.places[0].habit_honor.set_habit(0) + self.hero.habit_honor.set_habit(0) + + with self.check_almost_delta(self.place_0_cost, expected_delta): + self.places[0].habit_honor.set_habit(place_direction * c.HABITS_BORDER) + self.hero.habit_honor.set_habit(hero_direction * c.HABITS_BORDER) + + def test_habits__peacefulness(self): + for place_direction, hero_direction, expected_delta in self.HABITS_DELTAS: + self.places[0].habit_peacefulness.set_habit(0) + self.hero.habit_peacefulness.set_habit(0) + + with self.check_almost_delta(self.place_0_cost, expected_delta): + self.places[0].habit_peacefulness.set_habit(place_direction * c.HABITS_BORDER) + self.hero.habit_peacefulness.set_habit(hero_direction * c.HABITS_BORDER) diff --git a/data/source_files/messy/a2d7a4633b12.py b/data/source_files/messy/a2d7a4633b12.py new file mode 100644 index 0000000000000000000000000000000000000000..8a7d500dd98fa04ac32ae6b712ad22a261bd4d52 --- /dev/null +++ b/data/source_files/messy/a2d7a4633b12.py @@ -0,0 +1,116 @@ +"""Process Monitor +Usage: + processmonitor.py [] + processmonitor.py -h|--help + processmonitor.py -v|--version + +Options: + Process name argument. + Overall duration of the monitoring in seconds. + Sampling interval in seconds (optional, default 5). + -h --help Show this screen. + -v --version Show version. +""" + +from docopt import docopt +from utils import string_to_integer +from process import Process +from threading import Event, Thread +from datetime import datetime +import os +import sys +import csv +import time +from enum import IntEnum + +class ExitStatus(IntEnum): + OK = 0 + BAD_DURATION = 1 + BAD_INTERVAL = 2 + INTERVAL_GT_DURATION = 3 + +def call_repeatedly(interval, func, *args): + stopped = Event() + def loop(): + iteration = 1 + while not stopped.wait(interval - time.time() % interval): + func(*args, iteration) + iteration = iteration + 1 + Thread(target=loop).start() + return stopped.set + +def print_average(): + cpu_avg, mem_avg, files_avg = Process.metrics_average() + if cpu_avg != None and mem_avg != None and files_avg != None: + print(f"Metrics Avg.: %CPU: {cpu_avg}, MEMORY(B): {mem_avg}, OPEN FILES: {files_avg}") + return True + return False + +def generate_report(name, duration, interval): + if len(Process.metrics) == 0: + return False + ts = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + filename = f"{ts}_process-metrics-report_{name}_{duration}_{interval}.csv" + with open(f"{filename}", mode='w') as report: + writer = csv.writer(report, delimiter=',') + writer.writerow(['ITERATION', '%CPU', 'MEMORY(B)', 'OPEN FILES']) + iteration = 1 + for metric in Process.metrics: + writer.writerow([ + iteration, + metric.cpu, + metric.mem, + metric.files]) + iteration = iteration + 1 + reportpath = f"./{filename}" + print(f"Metrics report: {reportpath}") + return True + +def raise_memory_leak_warning(name): + if (Process.has_memory_leaks(name)): + print(f"WARNING: possible memory leaks detected for process \'{name}\'") + return True + return False + +def main(): + args = docopt(__doc__, version='Process Monitor 1.0') + if not args['']: + args[''] = 5 + + name = args[''] + try: + duration = string_to_integer(args['']) + except: + print("duration parameter is not an integer") + return ExitStatus.BAD_DURATION + + try: + interval = string_to_integer(args['']) + except: + print("interval parameter is not an integer") + return ExitStatus.BAD_INTERVAL + + if interval > duration: + print("interval parameter is greater than duration parameter") + return ExitStatus.INTERVAL_GT_DURATION + + print("---------------------------------------------") + print(" Process Monitor") + print("---------------------------------------------") + print(f"Monitoring process \'{name}\' every {interval} sec for {duration} sec") + + cancel_future_calls = call_repeatedly(interval, Process.monitor, name) + time.sleep(duration) + cancel_future_calls() + print_average() + generate_report(name, duration, interval) + raise_memory_leak_warning(name) + return ExitStatus.OK + +def init(): + if __name__ == '__main__': + if len(sys.argv) == 1: + sys.argv.append('-h') + sys.exit(main()) + +init() diff --git a/data/source_files/messy/a2de461a48ed.py b/data/source_files/messy/a2de461a48ed.py new file mode 100644 index 0000000000000000000000000000000000000000..8a550e70bdbd276329aa52d0c840e8979d0e9e43 --- /dev/null +++ b/data/source_files/messy/a2de461a48ed.py @@ -0,0 +1,68 @@ +import discord + +client = discord.Client() # 接続に使用するオブジェクト + + +# 起動時 +@client.event +async def on_ready(): + print('ログイン成功') + + +# メッセージを監視 +@client.event +async def on_message(message): + # 「/box」が頭についたメッセージならオウム返しする + if message.content.startswith('/box'): + # 文字から「/box」を抜く + question = message.content[len('/box'):].strip() + # 質問させたいチャンネルのid + target_channel_id = getTargetChannelId() + + # id=0なら質問者にエラー報告DM + # idが0以外なら匿名質問する + if target_channel_id == 0: + dm = await message.author.create_dm() # 質問者へDM作成 + await dm.send( + 'Sorry, メッセージを送信できませんでした.' + 'もう1度試してみてください.\n' + '【質問文】' + question) + else: + # 匿名質問させたいチャンネル + target_channel = client.get_channel(target_channel_id) + # チャンネルに質問メッセージ送信 + await target_channel.send(question) + + +# 匿名質問させたいチャンネルのidを取得 +# 指定したカテゴリにある最初のTextチャンネル=質問させたいチャンネルとみなす +# ただしカテゴリにチャンネルが無い時は0を返す +def getTargetChannelId() -> int: + # 質問させたいチャンネル(対象チャンネル) + target_channel = {'id': 0, 'position': 99999999} + # *********************************************************** + # 指定カテゴリ(対象チャンネルが含まれたカテゴリ)の名前 + + category_id = 711238137598181396 # カテゴリidを指定 + target_category_name = client.get_channel(category_id).name + + # *********************************************************** + # 指定したサーバにある全てのTextチャンネル一覧 + all_channels = client.get_guild(602423784946925568).text_channels + + # 全てのTextチャンネルから「指定カテゴリに属する最初のチャンネル」を探す + for channel in all_channels: + # 指定カテゴリに属する場合だけ対象チャンネル候補とみなす + if str(channel.category) == target_category_name: + # positionが小さいほうを「より対象チャンネルに近い」として交換 + # 初期値はpositionが大きい(99999999)ので,必ず入れ替わる想定 + # 繰り返せば,最後にはpositionが最も小さいチャンネルを代入できる + if target_channel['position'] > int(channel.position): + target_channel['id'] = int(channel.id) + target_channel['position'] = int(channel.position) + # 最終的に代入されたidを返す + return target_channel['id'] + + +# botとしてDiscordに接続(botのトークンを指定) +client.run('605042341715378176') diff --git a/data/source_files/messy/a59e8dc4ffa1.py b/data/source_files/messy/a59e8dc4ffa1.py new file mode 100644 index 0000000000000000000000000000000000000000..8a54b71c70f57dfff2df2e65acf1f13a323c5a9e --- /dev/null +++ b/data/source_files/messy/a59e8dc4ffa1.py @@ -0,0 +1,219 @@ +""" +================================================================= +Spectral Unmixing +================================================================= + +Suhas Somnath, Rama K. Vasudevan, Stephen Jesse + +* Institute for Functional Imaging of Materials +* Center for Nanophase Materials Sciences + +Oak Ridge National Laboratory, Oak Ridge TN 37831, USA + +In this notebook we load some spectral data, and perform basic data analysis, including: +======================================================================================== +* KMeans Clustering +* Non-negative Matrix Factorization +* Principal Component Analysis + +Software Prerequisites: +======================= +* Standard distribution of **Anaconda** (includes numpy, scipy, matplotlib and sci-kit learn) +* **pycroscopy** : Though pycroscopy is mainly used here for plotting purposes only, it's true capabilities + are realized through the ability to seamlessly perform these analyses on any imaging dataset (regardless + of origin, size, complexity) and storing the results back into the same dataset among other things + +""" + +# Import packages + +# Ensure that this code works on both python 2 and python 3 +from __future__ import division, print_function, absolute_import, unicode_literals + +# basic numeric computation: +import numpy as np + +# The package used for creating and manipulating HDF5 files: +import h5py + +# Plotting and visualization: +import matplotlib.pyplot as plt + +# for downloading files: +import wget +import os + +# multivariate analysis: +from sklearn.cluster import KMeans +from sklearn.decomposition import NMF +import subprocess +import sys + +def install(package): + subprocess.call([sys.executable, "-m", "pip", "install", package]) +# Package for downloading online files: +# finally import pycroscopy: +try: + import pycroscopy as px +except ImportError: + print('pycroscopy not found. Will install with pip.') + import pip + install('pycroscopy') + import pycroscopy as px +from pycroscopy.viz import cluster_utils + +##################################################################################### +# The Data +# ======== +# +# In this example, we will work on a **Band Excitation Piezoresponse Force Microscopy (BE-PFM)** imaging dataset +# acquired from advanced atomic force microscopes. In this dataset, a spectra was collected for each position in a two +# dimensional grid of spatial locations. Thus, this is a three dimensional dataset that has been flattened to a two +# dimensional matrix in accordance with the pycroscopy data format. +# +# Fortunately, all statistical analysis, machine learning, spectral unmixing algorithms, etc. only accept data that is +# formatted in the same manner of [position x spectra] in a two dimensional matrix. +# +# We will be using an data file available on our GitHub project page by default. You are encouraged +# to download this document as a Jupyter Notebook (button at the bottom of the page) and use your own data instead. +# When using your own data, you can skip this cell and provide the path to your data using the variable - data_file_path + +data_file_path = 'temp_um.h5' +# download the data file from Github: +url = 'https://raw.githubusercontent.com/pycroscopy/pycroscopy/master/data/BELine_0004.h5' +data_file_path = wget.download(url, data_file_path, bar=None) + +h5_file = h5py.File(data_file_path, mode='r+') + +print('Contents of data file:') +print('----------------------') +px.hdf_utils.print_tree(h5_file) +print('----------------------') + +h5_meas_grp = h5_file['Measurement_000'] + +# Extracting some basic parameters: +num_rows = px.hdf_utils.get_attr(h5_meas_grp, 'grid_num_rows') +num_cols = px.hdf_utils.get_attr(h5_meas_grp, 'grid_num_cols') + +# Getting a reference to the main dataset: +h5_main = px.PycroDataset(h5_meas_grp['Channel_000/Raw_Data']) +px.hdf_utils.write_simple_attrs(h5_main, {'quantity': 'Deflection', 'units': 'V'}) + +# Extracting the X axis - vector of frequencies +h5_spec_vals = px.hdf_utils.get_auxiliary_datasets(h5_main, 'Spectroscopic_Values')[-1] +freq_vec = np.squeeze(h5_spec_vals.value) * 1E-3 + +print('Data currently of shape:', h5_main.shape) + +x_label = 'Frequency (kHz)' +y_label = 'Amplitude (a.u.)' + +##################################################################################### +# 1. Singular Value Decomposition (SVD) +# ===================================== +# +# SVD is an eigenvector decomposition that is defined statistically, and therefore typically produces +# non-physical eigenvectors. Consequently, the interpretation of eigenvectors and abundance maps from +# SVD requires care and caution in interpretation. Nonetheless, it is a good method for quickly +# visualizing the major trends in the dataset since the resultant eigenvectors are sorted in descending +# order of variance or importance. Furthermore, SVD is also very well suited for data cleaning through +# the reconstruction of the dataset using only the first N (most significant) components. +# +# SVD results in three matrices: +# +# * V - Eigenvectors sorted by variance in descending order +# * U - corresponding abundance maps +# * S - Variance or importance of each of these components +# +# Advantage of pycroscopy: +# ------------------------ +# Notice that we are working with a complex valued dataset. Passing the complex values as is to SVD would result in +# complex valued eigenvectors / endmembers as well as abundance maps. Complex valued abundance maps are not physical. +# Thus, one would need to restructure the data such that it is real-valued only. +# +# One solution is to stack the real value followed by the magnitude of the imaginary component before passing to SVD. +# After SVD, the real-valued eigenvectors would need to be treated as the concatenation of the real and imaginary +# components. So, the eigenvectors would need to be restructured to get back the complex valued eigenvectors. +# +# **Pycroscopy handles all these data transformations (both for the source dataset and the eigenvectors) +# automatically.** In general, pycroscopy handles compound / complex valued datasets everywhere possible +# +# Furthermore, while it is not discussed in this example, pycroscopy also writes back the results from SVD back to +# the same source h5 file including all relevant links to the source dataset and other ancillary datasets + +decomposer = px.processing.svd_utils.SVD(h5_main, num_components=100) +h5_svd_group = decomposer.compute() + +h5_u = h5_svd_group['U'] +h5_v = h5_svd_group['V'] +h5_s = h5_svd_group['S'] + +# Since the two spatial dimensions (x, y) have been collapsed to one, we need to reshape the abundance maps: +abun_maps = np.reshape(h5_u[:, :25], (num_rows, num_cols, -1)) + +px.plot_utils.plot_map_stack(abun_maps, num_comps=9, title='SVD Abundance Maps', reverse_dims=True, + color_bar_mode='single', cmap='inferno', title_yoffset=0.95) + + +# Visualize the variance / statistical importance of each component: +px.plot_utils.plot_scree(h5_s, title='Note the exponential drop of variance with number of components') + +# Visualize the eigenvectors: +_ = px.plot_utils.plot_complex_spectra(h5_v[:9, :], x_label=x_label, y_label=y_label, + title='SVD Eigenvectors', evenly_spaced=False) + +##################################################################################### +# 2. KMeans Clustering +# ==================== +# +# KMeans clustering is a quick and easy method to determine the types of spectral responses present in the +# data. It is not a decomposition method, but a basic clustering method. The user inputs the number of +# clusters (sets) to partition the data into. The algorithm proceeds to find the optimal labeling +# (ie., assignment of each spectra as belonging to the kth set) such that the within-cluster +# sum of squares is minimized. +# +# Set the number of clusters below + +num_clusters = 4 + +estimator = px.processing.Cluster(h5_main, KMeans(n_clusters=num_clusters)) +h5_kmeans_grp = estimator.compute(h5_main) +h5_kmeans_labels = h5_kmeans_grp['Labels'] +h5_kmeans_mean_resp = h5_kmeans_grp['Mean_Response'] + +cluster_utils.plot_cluster_h5_group(h5_kmeans_grp) + +##################################################################################### +# 3. Non-negative Matrix Factorization (NMF) +# =========================================== +# +# NMF, or non-negative matrix factorization, is a method that is useful towards unmixing of spectral +# data. It only works on data with positive real values. It operates by approximate determination of +# factors (matrices) W and H, given a matrix V, as shown below +# +# .. image:: https://upload.wikimedia.org/wikipedia/commons/f/f9/NMF.png +# +# Unlike SVD and k-Means that can be applied to complex-valued datasets, NMF only works on non-negative datasets. +# For illustrative purposes, we will only take the amplitude component of the spectral data + +num_comps = 4 + +# get the non-negative portion of the dataset +data_mat = np.abs(h5_main) + +model = NMF(n_components=num_comps, init='random', random_state=0) +model.fit(data_mat) + +fig, axis = plt.subplots(figsize=(5.5, 5)) +px.plot_utils.plot_line_family(axis, freq_vec, model.components_, label_prefix='NMF Component #') +axis.set_xlabel(x_label, fontsize=12) +axis.set_ylabel(y_label, fontsize=12) +axis.set_title('NMF Components', fontsize=14) +axis.legend(bbox_to_anchor=[1.0, 1.0], fontsize=12) + +##################################################################################### + +# Close and delete the h5_file +h5_file.close() +os.remove(data_file_path) diff --git a/data/source_files/messy/a60733716488.py b/data/source_files/messy/a60733716488.py new file mode 100644 index 0000000000000000000000000000000000000000..8a267a4563f9753a8ce7cda07a22ac19aca67d1a --- /dev/null +++ b/data/source_files/messy/a60733716488.py @@ -0,0 +1,259 @@ +import math + +import torch +import torch.nn as nn + +from models.neural import MultiHeadedAttention, PositionwiseFeedForward +from models.rnn import LayerNormLSTM + + +class Classifier(nn.Module): + def __init__(self, hidden_size): + super(Classifier, self).__init__() + self.linear1 = nn.Linear(hidden_size, 1) + self.sigmoid = nn.Sigmoid() + + def forward(self, x, mask_cls): + h = self.linear1(x).squeeze(-1) + sent_scores = self.sigmoid(h) * mask_cls.float() + return sent_scores + + +class PositionalEncoding(nn.Module): + + def __init__(self, dropout, dim, max_len=5000): + pe = torch.zeros(max_len, dim) + position = torch.arange(0, max_len).unsqueeze(1) + div_term = torch.exp((torch.arange(0, dim, 2, dtype=torch.float) * + -(math.log(10000.0) / dim))) + pe[:, 0::2] = torch.sin(position.float() * div_term) + pe[:, 1::2] = torch.cos(position.float() * div_term) + pe = pe.unsqueeze(0) + super(PositionalEncoding, self).__init__() + self.register_buffer('pe', pe) + self.dropout = nn.Dropout(p=dropout) + self.dim = dim + + def forward(self, emb, step=None): + emb = emb * math.sqrt(self.dim) + if (step): + emb = emb + self.pe[:, step][:, None, :] + + else: + emb = emb + self.pe[:, :emb.size(1)] + emb = self.dropout(emb) + return emb + + def get_emb(self, emb): + return self.pe[:, :emb.size(1)] + + +class TransformerEncoderLayer(nn.Module): + def __init__(self, d_model, heads, d_ff, dropout): + super(TransformerEncoderLayer, self).__init__() + + self.self_attn = MultiHeadedAttention( + heads, d_model, dropout=dropout) + self.feed_forward = PositionwiseFeedForward(d_model, d_ff, dropout) + self.layer_norm = nn.LayerNorm(d_model, eps=1e-6) + self.dropout = nn.Dropout(dropout) + + def forward(self, iter, query, inputs, mask): + if (iter != 0): + input_norm = self.layer_norm(inputs) + else: + input_norm = inputs + + mask = mask.unsqueeze(1) + context = self.self_attn(input_norm, input_norm, input_norm, + mask=mask) + out = self.dropout(context) + inputs + return self.feed_forward(out) + + +class TransformerInterEncoder(nn.Module): + def __init__(self, d_model, d_ff, heads, dropout, num_inter_layers=0): + super(TransformerInterEncoder, self).__init__() + self.d_model = d_model + self.num_inter_layers = num_inter_layers + self.pos_emb = PositionalEncoding(dropout, d_model) + self.transformer_inter = nn.ModuleList( + [TransformerEncoderLayer(d_model, heads, d_ff, dropout) + for _ in range(num_inter_layers)]) + self.dropout = nn.Dropout(dropout) + self.layer_norm = nn.LayerNorm(d_model, eps=1e-6) + self.wo = nn.Linear(d_model, 1, bias=True) + self.sigmoid = nn.Sigmoid() + + def forward(self, top_vecs, mask): + """ See :obj:`EncoderBase.forward()`""" + + batch_size, n_sents = top_vecs.size(0), top_vecs.size(1) + pos_emb = self.pos_emb.pe[:, :n_sents] + x = top_vecs * mask[:, :, None].float() + x = x + pos_emb + + for i in range(self.num_inter_layers): + x = self.transformer_inter[i](i, x, x, ~mask) # all_sents * max_tokens * dim + + x = self.layer_norm(x) + sent_scores = self.sigmoid(self.wo(x)) + sent_scores = sent_scores.squeeze(-1) * mask.float() + + return sent_scores + +class GRUEncoder_attn(nn.Module): + + def __init__(self,bidirectional, num_layers, input_size, hidden_size,dropout=0.0): + super(GRUEncoder_attn,self).__init__() + + +class RNNEncoder_attn(nn.Module): + + def __init__(self, bidirectional, num_layers, input_size, + hidden_size, dropout=0.0): + super(RNNEncoder_attn, self).__init__() + num_directions = 2 if bidirectional else 1 + assert hidden_size % num_directions == 0 + hidden_size = hidden_size // num_directions + self.relu = nn.ReLU() + + self.rnn = LayerNormLSTM( + input_size=input_size, + hidden_size=hidden_size, + num_layers=num_layers, + bidirectional=bidirectional) + + self.wo = nn.Linear(num_directions * hidden_size, 1, bias=True) + + self.dropout = nn.Dropout(dropout) + self.softmax = nn.Softmax() + print('this is dropout',dropout) + + def forward(self, x, mask): + """See :func:`EncoderBase.forward()`""" + batch, layer, seq, hidden = x.size() + x1=x.contiguous().view(batch * layer, -1, hidden) + x1 = torch.transpose(x1, 1, 0) + memory_bank, _ = self.rnn(x1) + memory_bank = self.dropout(memory_bank) + x1 + memory_bank = torch.transpose(memory_bank, 1, 0) + # sent_scores = self.softmax(self.relu(self.wo(memory_bank)).squeeze(dim=-1)).unsqueeze(-1) + + sent_scores = self.softmax(self.relu(self.wo(memory_bank[:,-1,:])).squeeze(dim=-1).view(-1,layer)).unsqueeze(-1) + x=x.transpose(1,2) + sent_vec = torch.matmul(sent_scores.transpose(1,2).unsqueeze(dim = 1).expand(batch,seq,1,layer),x) + + return sent_vec.squeeze(dim = 2) + +class TransformerDecoderLayer(nn.Module): + def __init__(self, d_model, heads, d_ff, dropout): + super(TransformerDecoderLayer, self).__init__() + + self.self_attn = MultiHeadedAttention( + heads, d_model, dropout=dropout) + self.feed_forward = PositionwiseFeedForward(d_model, d_ff, dropout) + self.layer_norm = nn.LayerNorm(d_model, eps=1e-6) + + def forward(self, iter, ent_enc, inputs, self_attn_mask=None,context_attn_mask=None): + context = self.self_attn(inputs, inputs, inputs, + mask=self_attn_mask) + dec_output = self.self_attn( + ent_enc, ent_enc, context, mask=context_attn_mask) + dec_output = self.feed_forward(dec_output) + return dec_output + +class TransformerInterDecoder(nn.Module): + def __init__(self, d_model, d_ff, heads, dropout, d_hidden, num_inter_layers=0): + super(TransformerInterDecoder, self).__init__() + self.d_model = d_model + self.num_inter_layers = num_inter_layers + self.pos_emb = PositionalEncoding(dropout, d_model) + self.transformer_inter = nn.ModuleList( + [TransformerDecoderLayer(d_model, heads, d_ff, dropout) + for _ in range(num_inter_layers)]) + self.dropout = nn.Dropout(dropout) + self.layer_norm = nn.LayerNorm(d_model, eps=1e-6) + self.wo = nn.Linear(d_model, d_hidden , bias=True) + self.wi = nn.Linear(d_model, d_hidden, bias=True) + self.v = nn.Linear(d_hidden, 1, bias=True) + self.LR = nn.LeakyReLU() + self.softmax = nn.Softmax(dim=-1) + + def forward(self, top_vecs, inputs, mask, label_mask=None): + """ See :obj:`EncoderBase.forward()`""" + n_out = inputs.size(1) + pos_emb = self.pos_emb.pe[:, :n_out] + seq_mask=subsequent_mask(inputs) + self_attn_mask = torch.gt((~label_mask.unsqueeze(1).expand(-1, n_out, -1) + seq_mask), 0) + inputs=inputs+pos_emb + for i in range(self.num_inter_layers): + inputs = self.transformer_inter[i](i, top_vecs, inputs,self_attn_mask,~ mask.unsqueeze(1).expand(-1, n_out,-1)) + scores=self.v(self.LR( + self.wo(inputs.unsqueeze(2)).expand(-1, -1, top_vecs.size(1), -1) + self.wi(top_vecs).unsqueeze( + 1))).squeeze(-1) + sent_scores = self.softmax(scores) + return sent_scores + + +class RNNEncoder(nn.Module): + + def __init__(self, bidirectional, num_layers, input_size, + hidden_size, dropout=0.0): + super(RNNEncoder, self).__init__() + num_directions = 2 if bidirectional else 1 + assert hidden_size % num_directions == 0 + hidden_size = hidden_size // num_directions + + self.rnn = LayerNormLSTM( + input_size=input_size, + hidden_size=hidden_size, + num_layers=num_layers, + bidirectional=bidirectional) + + self.wo = nn.Linear(num_directions * hidden_size, 1, bias=True) + self.dropout = nn.Dropout(dropout) + self.sigmoid = nn.Sigmoid() + + def forward(self, x, mask): + """See :func:`EncoderBase.forward()`""" + x = torch.transpose(x, 1, 0) + memory_bank, _ = self.rnn(x) + memory_bank = self.dropout(memory_bank) + x + memory_bank = torch.transpose(memory_bank, 1, 0) + + sent_scores = self.sigmoid(self.wo(memory_bank)) + sent_scores = sent_scores.squeeze(-1) * mask.float() + return sent_scores +class GCN(nn.Module): + def __init__(self,in_channel,out_channel,hidden_dim,drop): + super(GCN, self).__init__() + self.in_channel=in_channel + self.out_channel=out_channel + self.hidden_dim=hidden_dim + self.dropout = nn.Dropout(p=drop) + self.gcn_x_11=GCNConv(self.in_channel,self.hidden_dim) + self.gcn_x_12=GCNConv(self.hidden_dim,self.out_channel)#No.1-*2*2 + # self.gcn_x_21=GCNConv(self.in_channel,self.hidden_dim) + # self.gcn_x_22=GCNConv(self.hidden_dim,self.out_channel)#No.2-*2 + # self.gcn_mix=GCNConv(self.hidden_dim*2,self.hidden_dim)#No.2-*2 + self.relu=nn.ReLU(inplace=True) + def forward(self, x_1, edge_index_1, edge_index_2=None,edge_weight_1=None,edge_weight_2=None): + syn=self.gcn_x_11(x_1, edge_index_1, edge_weight_1) + syn=self.relu(syn) + syn=self.dropout(syn) + syn = self.gcn_x_12(syn, edge_index_1, edge_weight_1) + syn = self.relu(syn) + syn = self.dropout(syn) + # x2 = self.gcn_x_21(x_1, edge_index_2, edge_weight_2) + # x2 = self.relu(x2) + # x2 = self.dropout(x2) + # mix = self.gcn_mix(torch.cat((syn,x2),-1), edge_index_2, edge_weight_2) + # x2 = self.gcn_x_22(mix, edge_index_2, edge_weight_2) + # syn=self.gcn_x_12(mix, edge_index_1, edge_weight_1) + # syn=self.relu(syn) + # syn=self.dropout(syn) + # x2 = self.relu(x2) + # x2 = self.dropout(x2) + return syn + diff --git a/data/source_files/messy/a7af7e6fe3a5.py b/data/source_files/messy/a7af7e6fe3a5.py new file mode 100644 index 0000000000000000000000000000000000000000..8a29601d340f52437bc81f042a9b4102018cde77 --- /dev/null +++ b/data/source_files/messy/a7af7e6fe3a5.py @@ -0,0 +1,489 @@ +import os +import platform +import shutil +import sys +from collections import Counter +from collections import defaultdict, OrderedDict +from os.path import join +from typing import List, Dict, Set + +from CppHeaderParser import CppHeaderParser +from CppHeaderParser.CppHeaderParser import CppMethod + +import generators.dependency_tree +from generators.config import common_includes, PCL_BASE, PATH_LOADER, PATH_MODULES, MODULES_TO_BUILD, \ + HEADERS_TO_SKIP, ATTRIBUTES_TO_SKIP, CLASSES_TO_IGNORE, METHODS_TO_SKIP, SUBMODULES_TO_SKIP, EXPLICIT_INCLUDES, \ + SPECIALIZED_TEMPLATED_TYPES_TO_SKIP +from generators.definitions.function import generate_function_definitions, get_methods_defined_outside +from generators.definitions.method import split_methods_by_type +from generators.definitions.submodule_loader import generate_loader +from generators.definitions.templated_class import ClassDefinition +from generators.instantiations import Instantiations +from generators.point_types_utils import unpack_yaml_point_types +from generators.utils import make_header_include_name, sort_headers_by_dependencies, \ + generate_main_loader, make_namespace_class, read_header_file + + +def filter_methods_for_parser_errors(methods): + return [m for m in methods if not m["name"] in ("void", "bool")] + + +def filter_methods_to_skip(methods): + filtered_methods = [] + for m in methods: + if (m["parent"]["name"], m["name"]) in METHODS_TO_SKIP: + continue + if "Callback" in m["name"]: + single_argument = len(m["parameters"]) == 1 + boost_function = single_argument and m["parameters"][0]["type"].startswith("boost::function") + if not boost_function: + continue + filtered_methods.append(m) + return filtered_methods + + +def same_parameters(p1: Dict, p2: Dict) -> bool: + fields = ["constant", "name", "raw_type", "reference", "static"] + return all(p1[f] == p2[f] for f in fields) + + +def same_methods(m1: CppMethod, m2: CppMethod) -> bool: + if m1["name"] != m2["name"]: + return False + + # bug in CppHeaderParser + # in "void ImageGrabber::publish", "void ImageGrabber::" is the return type + path = m1.get("path", m2.get("path")) + path = path[path.rfind(":") + 1:] + if not any(path in type_ for type_ in [m1["rtnType"], m2["rtnType"]]): + return False + + # same parameters + for p1 in m1["parameters"]: + for p2 in m2["parameters"]: + if m1["name"] == m2["name"] and same_parameters(p1, p2): + break + else: + return False + return len(m1["parameters"]) == len(m2["parameters"]) + + +def private_methods_defined_outside(private_methods: List[CppMethod], + methods_declared_outside: List[CppMethod]) -> List[CppMethod]: + private_defined_outside = [] + for m_private in private_methods: + for m_outside in methods_declared_outside: + if same_methods(m_private, m_outside): + private_defined_outside.append(m_private) + break + return private_defined_outside + + +def generate_class_definitions(main_classes, + module, + header_name, + path, + needs_overloading: List[str], + methods_defined_outside: List[CppMethod]) -> str: + text = [] + a = text.append + a(common_includes) + a(EXPLICIT_INCLUDES.get((module, header_name), "")) + a(make_header_include_name(module, header_name, path)) + a("") + + namespaces = set([c["namespace"] for c in main_classes]) + for namespace in namespaces: + if not namespace == "pcl": + a("using namespace %s;" % namespace) + a("\n") + + for class_ in main_classes: + methods = class_["methods"]["public"] + methods = filter_methods_for_parser_errors(methods) + methods = filter_methods_to_skip(methods) + private_and_protected = class_["methods"]["private"] + class_["methods"]["protected"] + methods += private_methods_defined_outside(private_and_protected, methods_defined_outside) + class_properties = [p for p in class_["properties"]["public"] + if not "using" in p["type"] + and not "union" in p["type"]] + union_properties = [p for nested_class in class_["nested_classes"] + for p in nested_class["properties"]["public"] + if "union" in nested_class["name"]] + class_properties += union_properties + class_properties = filter_class_properties(module, header_name, class_["name"], class_properties) + constructors, variables, others = split_methods_by_type(methods, class_properties, + needs_overloading) + if not class_["can_be_instantiated"]: + constructors = [] + class_def = ClassDefinition(class_, constructors, variables, others, module) + a(class_def.to_class_function_definition()) + a("") + + return "\n".join(text) + + +def filter_class_properties(module, header, class_name, properties): + key = (module, header, class_name) + # ignore properties without a name + properties = [p for p in properties if p["name"]] + if key in ATTRIBUTES_TO_SKIP: + to_ignore = ATTRIBUTES_TO_SKIP[key] + filtered_properties = [] + for p in properties: + if p["name"] in to_ignore: + continue + filtered_properties.append(p) + properties = filtered_properties + return properties + + +def get_main_classes(header, module, header_name): + # header = read_headers(base_path, header_name, module) + main_classes = [c for c in header.classes.values() if c["namespace"] in ("pcl", "pcl::" + module)] + filtered_main_classes = [] + for class_ in main_classes: + specialized_template = class_.get("template") and "<" in class_["name"] + if specialized_template: + to_skip = any(("<%s>" % type_) in class_["name"] for type_ in SPECIALIZED_TEMPLATED_TYPES_TO_SKIP) + if not to_skip: + message = "Warning: Template class specialization not implemented for class %s in %s" + print(message % (class_["name"], header_name)) + elif (module, header_name, class_["name"]) in CLASSES_TO_IGNORE: + pass + else: + filtered_main_classes.append(class_) + filtered_main_classes = sorted(filtered_main_classes, key=lambda c: c["name"]) + return filtered_main_classes + + +def get_functions(header, module): + functions = [f for f in header.functions if f["namespace"] in ("pcl", + "pcl::", + "pcl::%s" % module, + "pcl::%s::" % module)] + functions = sorted(functions, key=lambda f: f["name"]) + filtered = filter_module_level_functions(functions) + return filtered + + +def filter_module_level_functions(functions: List[CppMethod]): + filtered = [] + for f in functions: + keep = True + if f.get("returns_const"): + keep = False + for param in f["parameters"]: + for type_ in SPECIALIZED_TEMPLATED_TYPES_TO_SKIP: + if type_ in param["type"]: + keep = False + if keep: + filtered.append(f) + return filtered + + +def get_variables(header): + variables = [v for v in header.variables if v.get("defaultValue") and 'using' != v.get('type')] + variables = sorted(variables, key=lambda v: v["name"]) + return variables + + +def get_enums(header): + enums = [e for e in header.enums if e.get("name")] # skip nameless enums + enums = sorted(enums, key=lambda v: v["name"]) + return enums + + +def read_header(header_path, skip_macros=None): + # I tried to do this in multiple threads but it seems like CppHeaderParser is not thread safe... + if skip_macros is None: + skip_macros = [] + header_file_str = read_header_file(header_path, skip_macros) + parser = CppHeaderParser + parser.debug = False + header = parser.CppHeader(header_file_str, argType="string") + return header + + +def clean(): + try: + os.remove(PATH_LOADER) + except FileNotFoundError: + pass + if os.path.exists(PATH_MODULES): + shutil.rmtree(PATH_MODULES) + + +def check_if_needs_overloading(main_classes): + needs_overloading = {} + classes_by_module = defaultdict(list) + for (module, _), class_ in main_classes.items(): + classes_by_module[module] += class_ + + for module, classes in classes_by_module.items(): + needs = [] + for class_ in classes: + count = Counter(m["name"] for methods in class_["methods"].values() for m in methods) + for name, count in count.items(): + if count >= 2: + needs.append(name) + needs_overloading[module] = needs + + return needs_overloading + + +def get_headers(modules=None, skip_modules=None): + def listmod(module): + found_modules = [] + for base, folders, files in os.walk(join(PCL_BASE, module)): + if any(base.endswith(m) for m in SUBMODULES_TO_SKIP): + continue + relative_base = os.path.abspath(base).replace(PCL_BASE, "")[1:] + for f in files: + if f.endswith(".h"): + found_modules.append([f, join(relative_base, f)]) + return found_modules + + if modules is None: + modules = MODULES_TO_BUILD + + if skip_modules is not None: + modules = [m for m in modules if m not in skip_modules] + + headers_to_generate = [(module, header_name, path) for module in modules + for header_name, path in listmod(module)] + base_headers = [("", f, f) for f in os.listdir(PCL_BASE) if f.endswith(".h")] + headers_to_generate += base_headers + + headers_to_generate_temp = [] + for module, header_name, path in headers_to_generate: + if (module, header_name) in HEADERS_TO_SKIP: + continue + headers_to_generate_temp.append(tuple([module, header_name, path])) + + return headers_to_generate_temp + + +def get_pure_virtual_methods(class_: CppHeaderParser.CppClass) -> Set[str]: + access = "private protected public".split() + return set([m["name"] for a in access for m in class_["methods"][a] if m["pure_virtual"]]) + + +def get_all_class_methods_not_pure_virtual(class_: CppHeaderParser.CppClass) -> Set[str]: + access = "private protected public".split() + return set([m["name"] for a in access for m in class_["methods"][a] if not m["pure_virtual"]]) + + +def flag_instantiatable_class(dependency_tree, main_classes): + """determine if the class can be instantiated""" + main_classes_by_name_namespace = {make_namespace_class(c["namespace"], c["name"]): c + for classes in main_classes.values() for c in classes} + + for module, header_name in main_classes: + for class_ in main_classes[(module, header_name)]: + can_be_instantiated = True + if class_["abstract"]: + can_be_instantiated = False + else: + # check if any pure virtual method is not implemented + all_implemented_inherited_methods = get_all_class_methods_not_pure_virtual(class_) + namespace_class = make_namespace_class(class_["namespace"], class_["name"]) + for base_name_nsp in dependency_tree.breadth_first_iterator(namespace_class): + base_class = main_classes_by_name_namespace.get(base_name_nsp) + if base_class: + base_class_methods = get_all_class_methods_not_pure_virtual(base_class) + all_implemented_inherited_methods.update(base_class_methods) + + for base_name_nsp in dependency_tree.breadth_first_iterator(namespace_class): + base_class = main_classes_by_name_namespace.get(base_name_nsp) + if base_class and base_class["abstract"]: + base_pure_virtual_methods = get_pure_virtual_methods(base_class) + if base_pure_virtual_methods - all_implemented_inherited_methods: + can_be_instantiated = False + + class_["can_be_instantiated"] = can_be_instantiated + + +def load_yaml_point_types(not_every_point_type): + classes_point_types = unpack_yaml_point_types("point_types_generated.yml", not_every_point_type) + extra_point_types = unpack_yaml_point_types("point_types_extra.yml") + for k, v in extra_point_types.items(): + if k in classes_point_types: + classes_point_types[k].append(v) + else: + classes_point_types[k] = v + return classes_point_types + + +def make_module_dirs(modules): + for module in modules: + module_dir = join(PATH_MODULES, module) + if not os.path.exists(module_dir): + os.makedirs(module_dir) + + +def is_file_different(path, text): + v = open(path).read() + if v != text: + print("File is different: %s" % os.path.split(path)[1]) + return True + # print("File is the same: %s" % os.path.split(path)[1]) + return False + + +def write_if_different(files_to_write, delete_others): + written = [] + + for base, folder, files in os.walk(PATH_MODULES): + for f in files: + path = join(base, f) + if path in files_to_write: + if is_file_different(path, files_to_write[path]): + open(path, "w").write(files_to_write[path]) + written.append(path) + elif delete_others: + os.remove(path) + print("Deleted: " + path) + + # write new files + for path, text in files_to_write.items(): + if path not in written: + open(path, "w").write(files_to_write[path]) + + +def delete_other_dirs(modules): + for f in os.listdir(PATH_MODULES): + folder = join(PATH_MODULES, f) + if f not in modules and os.path.isdir(folder): + shutil.rmtree(folder, ignore_errors=True) + + +def write_stuff_if_needed(generated_headers: OrderedDict, delete_others=True): + modules = set(module for module, _ in generated_headers.keys()) + + make_module_dirs(modules) + + # hpp + files_to_write = {} + for (module, header_name), text in generated_headers.items(): + if text: + output_path = join(PATH_MODULES, module, header_name + "pp") + files_to_write[output_path] = text + + # loaders + loader_modules = defaultdict(list) + for (module, header_name), text in generated_headers.items(): + if text: + loader_modules[module or "base"].append(header_name) + for module, headers in loader_modules.items(): + path_loader = join(PATH_MODULES, "_%s_loader.cpp" % module) + files_to_write[path_loader] = generate_loader(module, headers) + + files_to_write[PATH_LOADER] = generate_main_loader(loader_modules) + + write_if_different(files_to_write, delete_others) + + if delete_others: + delete_other_dirs(modules) + + +def generate(headers_to_generate, skip_macros, not_every_point_type=False) -> OrderedDict: + """ + :return: OrderedDict + """ + main_classes, module_functions, module_variables, module_enums = {}, {}, {}, {} + + for module, header_name, path in headers_to_generate[:]: + header_full_path = join(PCL_BASE, path) if path else join(PCL_BASE, module, header_name) + header = read_header(header_full_path, skip_macros) + main_classes[(module, header_name)] = get_main_classes(header, module, header_name) + module_functions[(module, header_name)] = get_functions(header, module) + module_variables[(module, header_name)] = get_variables(header) + module_enums[(module, header_name)] = get_enums(header) + + classes = [c for module, header, path in headers_to_generate + for c in main_classes[(module, header)]] + + dependency_tree = generators.dependency_tree.DependencyTree(classes) + + loaded_point_types = load_yaml_point_types(not_every_point_type) + classes_point_types: OrderedDict = dependency_tree.get_point_types_with_dependencies(loaded_point_types) + + classes_sorted_base_first = list(dependency_tree.leaf_iterator()) + + def index_for_class(class_): + return classes_sorted_base_first.index(make_namespace_class(class_["namespace"], class_["name"])) + + # sort classes inside modules based on inheritance + for module, header in main_classes: + main_classes[(module, header)] = list(sorted(main_classes[(module, header)], key=index_for_class)) + + headers_to_generate = sort_headers_by_dependencies(headers_to_generate, skip_macros=skip_macros) + + methods_need_overloading = check_if_needs_overloading(main_classes) + + flag_instantiatable_class(dependency_tree, main_classes) + + def generate_header(module, header, path, keep_if_no_instantiation) -> str: + header_functions = module_functions[(module, header)] + header_classes = main_classes[(module, header)] + + methods_defined_outside = get_methods_defined_outside(header_functions) + + class_definitions = generate_class_definitions(header_classes, + module, + header, + path, + methods_need_overloading.get(module), + methods_defined_outside) + + function_definitions = generate_function_definitions(header_functions, + module, + header, + not_every_point_type=not_every_point_type) + instantiations = Instantiations(header_classes, + module, + header, + classes_point_types, + module_variables[(module, header)], + module_enums[(module, header)], + ) + instantiation_function = instantiations.generate_instantiation_function(has_functions=bool(header_functions)) + something_instantiated = len(instantiation_function.split("\n")) > 2 + text = [] + if something_instantiated or keep_if_no_instantiation: + text = [class_definitions, function_definitions, instantiation_function] + + return "\n".join(text) + + generated_headers = OrderedDict() + for module, header, path in headers_to_generate: + generated_headers[(module, header)] = generate_header(module, header, path, keep_if_no_instantiation=False) + + return generated_headers + + +def main(): + import time + t = time.time() + + windows = platform.system() == "Windows" + + skip_macros = [] + skip_modules = [] + + if not windows: + skip_macros = ["_MSC_VER"] + #skip_modules = ["visualization"] + skip_modules = [] + + all_headers = get_headers(skip_modules=skip_modules) + not_every_point_type = "--not-every-point-type" in sys.argv + generated_headers = generate(all_headers, skip_macros, not_every_point_type) + write_stuff_if_needed(generated_headers, delete_others=True) + + print("generated in %.2f s" % (time.time() - t,)) + + +if __name__ == '__main__': + main() diff --git a/data/source_files/messy/acda636b4109.py b/data/source_files/messy/acda636b4109.py new file mode 100644 index 0000000000000000000000000000000000000000..d9df003e9cd20fdfdd89b5aaebba29cdc7e644c5 --- /dev/null +++ b/data/source_files/messy/acda636b4109.py @@ -0,0 +1,310 @@ +# coding=utf-8 +# Copyright 2018 The HuggingFace Inc. team. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" Classes to support Encoder-Decoder architectures """ + +from __future__ import absolute_import, division, print_function, unicode_literals + +import logging +import os + +import torch +from torch import nn + +from .modeling_auto import AutoModel, AutoModelWithLMHead + +logger = logging.getLogger(__name__) + + +class PreTrainedEncoderDecoder(nn.Module): + r""" + :class:`~transformers.PreTrainedEncoderDecoder` is a generic model class that will be + instantiated as a transformer architecture with one of the base model + classes of the library as encoder and (optionally) another one as + decoder when created with the `AutoModel.from_pretrained(pretrained_model_name_or_path)` + class method. + """ + + def __init__(self, encoder, decoder): + super(PreTrainedEncoderDecoder, self).__init__() + self.encoder = encoder + self.decoder = decoder + + @classmethod + def from_pretrained( + cls, + encoder_pretrained_model_name_or_path=None, + decoder_pretrained_model_name_or_path=None, + *model_args, + **kwargs + ): + r""" Instantiates an encoder and a decoder from one or two base classes of the library from pre-trained model checkpoints. + + + The model is set in evaluation mode by default using `model.eval()` (Dropout modules are deactivated) + To train the model, you need to first set it back in training mode with `model.train()` + + Params: + encoder_pretrained_model_name_or_path: information necessary to initiate the encoder. Either: + + - a string with the `shortcut name` of a pre-trained model to load from cache or download, e.g.: ``bert-base-uncased``. + - a path to a `directory` containing model weights saved using :func:`~transformers.PreTrainedModel.save_pretrained`, e.g.: ``./my_model_directory/encoder``. + - a path or url to a `tensorflow index checkpoint file` (e.g. `./tf_model/model.ckpt.index`). In this case, ``from_tf`` should be set to True and a configuration object should be provided as ``config`` argument. This loading path is slower than converting the TensorFlow checkpoint in a PyTorch model using the provided conversion scripts and loading the PyTorch model afterwards. + + decoder_pretrained_model_name_or_path: information necessary to initiate the decoder. Either: + + - a string with the `shortcut name` of a pre-trained model to load from cache or download, e.g.: ``bert-base-uncased``. + - a path to a `directory` containing model weights saved using :func:`~transformers.PreTrainedModel.save_pretrained`, e.g.: ``./my_model_directory/decoder``. + - a path or url to a `tensorflow index checkpoint file` (e.g. `./tf_model/model.ckpt.index`). In this case, ``from_tf`` should be set to True and a configuration object should be provided as ``config`` argument. This loading path is slower than converting the TensorFlow checkpoint in a PyTorch model using the provided conversion scripts and loading the PyTorch model afterwards. + + model_args: (`optional`) Sequence of positional arguments: + All remaning positional arguments will be passed to the underlying model's ``__init__`` method + + config: (`optional`) instance of a class derived from :class:`~transformers.PretrainedConfig`: + Configuration for the model to use instead of an automatically loaded configuation. Configuration can be automatically loaded when: + + - the model is a model provided by the library (loaded with the ``shortcut-name`` string of a pretrained model), or + - the model was saved using :func:`~transformers.PreTrainedModel.save_pretrained` and is reloaded by suppling the save directory. + - the model is loaded by suppling a local directory as ``pretrained_model_name_or_path`` and a configuration JSON file named `config.json` is found in the directory. + + state_dict: (`optional`) dict: + an optional state dictionnary for the model to use instead of a state dictionary loaded from saved weights file. + This option can be used if you want to create a model from a pretrained configuration but load your own weights. + In this case though, you should check if using :func:`~transformers.PreTrainedModel.save_pretrained` and :func:`~transformers.PreTrainedModel.from_pretrained` is not a simpler option. + + cache_dir: (`optional`) string: + Path to a directory in which a downloaded pre-trained model + configuration should be cached if the standard cache should not be used. + + force_download: (`optional`) boolean, default False: + Force to (re-)download the model weights and configuration files and override the cached versions if they exists. + + proxies: (`optional`) dict, default None: + A dictionary of proxy servers to use by protocol or endpoint, e.g.: {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. + The proxies are used on each request. + + output_loading_info: (`optional`) boolean: + Set to ``True`` to also return a dictionnary containing missing keys, unexpected keys and error messages. + + kwargs: (`optional`) Remaining dictionary of keyword arguments. + Can be used to update the configuration object (after it being loaded) and initiate the model. (e.g. ``output_attention=True``). Behave differently depending on whether a `config` is provided or automatically loaded: + + - If a configuration is provided with ``config``, ``**kwargs`` will be directly passed to the underlying model's ``__init__`` method (we assume all relevant updates to the configuration have already been done) + - If a configuration is not provided, ``kwargs`` will be first passed to the configuration class initialization function (:func:`~transformers.PretrainedConfig.from_pretrained`). Each key of ``kwargs`` that corresponds to a configuration attribute will be used to override said attribute with the supplied ``kwargs`` value. Remaining keys that do not correspond to any configuration attribute will be passed to the underlying model's ``__init__`` function. + + You can specify kwargs sepcific for the encoder and decoder by prefixing the key with `encoder_` and `decoder_` respectively. (e.g. ``decoder_output_attention=True``). The remaining kwargs will be passed to both encoders and decoders. + + Examples:: + + model = PreTrainedEncoderDecoder.from_pretained('bert-base-uncased', 'bert-base-uncased') # initialize Bert2Bert + """ + + # keyword arguments come in 3 flavors: encoder-specific (prefixed by + # `encoder_`), decoder-specific (prefixed by `decoder_`) and those + # that apply to the model as a whole. + # We let the specific kwargs override the common ones in case of conflict. + kwargs_common = { + argument: value + for argument, value in kwargs.items() + if not argument.startswith("encoder_") + and not argument.startswith("decoder_") + } + kwargs_decoder = kwargs_common.copy() + kwargs_encoder = kwargs_common.copy() + kwargs_encoder.update( + { + argument[len("encoder_") :]: value + for argument, value in kwargs.items() + if argument.startswith("encoder_") + } + ) + kwargs_decoder.update( + { + argument[len("decoder_") :]: value + for argument, value in kwargs.items() + if argument.startswith("decoder_") + } + ) + + # Load and initialize the encoder and decoder + # The distinction between encoder and decoder at the model level is made + # by the value of the flag `is_decoder` that we need to set correctly. + encoder = kwargs_encoder.pop("model", None) + if encoder is None: + encoder = AutoModel.from_pretrained( + encoder_pretrained_model_name_or_path, *model_args, **kwargs_encoder + ) + encoder.config.is_decoder = False + + decoder = kwargs_decoder.pop("model", None) + if decoder is None: + decoder = AutoModelWithLMHead.from_pretrained( + decoder_pretrained_model_name_or_path, **kwargs_decoder + ) + decoder.config.is_decoder = True + + model = cls(encoder, decoder) + + return model + + def save_pretrained(self, save_directory): + """ Save a Seq2Seq model and its configuration file in a format such + that it can be loaded using `:func:`~transformers.PreTrainedEncoderDecoder.from_pretrained` + + We save the encoder' and decoder's parameters in two separate directories. + """ + self.encoder.save_pretrained(os.path.join(save_directory, "encoder")) + self.decoder.save_pretrained(os.path.join(save_directory, "decoder")) + + def forward(self, encoder_input_ids, decoder_input_ids, **kwargs): + """ The forward pass on a seq2eq depends what we are performing: + + - During training we perform one forward pass through both the encoder + and decoder; + - During prediction, we perform one forward pass through the encoder, + and then perform several forward passes with the encoder's hidden + state through the decoder to decode a full sequence. + + Therefore, we skip the forward pass on the encoder if an argument named + `encoder_hidden_state` is passed to this function. + + Params: + encoder_input_ids: ``torch.LongTensor`` of shape ``(batch_size, sequence_length)`` + Indices of encoder input sequence tokens in the vocabulary. + decoder_input_ids: ``torch.LongTensor`` of shape ``(batch_size, sequence_length)`` + Indices of decoder input sequence tokens in the vocabulary. + kwargs: (`optional`) Remaining dictionary of keyword arguments. + """ + # keyword arguments come in 3 flavors: encoder-specific (prefixed by + # `encoder_`), decoder-specific (prefixed by `decoder_`) and those + # that apply to the model as whole. + # We let the specific kwargs override the common ones in case of conflict. + kwargs_common = { + argument: value + for argument, value in kwargs.items() + if not argument.startswith("encoder_") + and not argument.startswith("decoder_") + } + kwargs_decoder = kwargs_common.copy() + kwargs_encoder = kwargs_common.copy() + kwargs_encoder.update( + { + argument[len("encoder_") :]: value + for argument, value in kwargs.items() + if argument.startswith("encoder_") + } + ) + kwargs_decoder.update( + { + argument[len("decoder_") :]: value + for argument, value in kwargs.items() + if argument.startswith("decoder_") + } + ) + + # Encode if needed (training, first prediction pass) + encoder_hidden_states = kwargs_encoder.pop("hidden_states", None) + if encoder_hidden_states is None: + encoder_outputs = self.encoder(encoder_input_ids, **kwargs_encoder) + encoder_hidden_states = encoder_outputs[ + 0 + ] # output the last layer hidden state + else: + encoder_outputs = () + + # Decode + kwargs_decoder["encoder_hidden_states"] = encoder_hidden_states + kwargs_decoder["encoder_attention_mask"] = kwargs_encoder.get( + "attention_mask", None + ) + decoder_outputs = self.decoder(decoder_input_ids, **kwargs_decoder) + + return decoder_outputs + encoder_outputs + + +class Model2Model(PreTrainedEncoderDecoder): + r""" + :class:`~transformers.Model2Model` instantiates a Seq2Seq2 model + where both of the encoder and decoder are of the same family. If the + name of or that path to a pretrained model is specified the encoder and + the decoder will be initialized with the pretrained weight (the + cross-attention will be intialized randomly if its weights are not + present). + + It is possible to override this behavior and initialize, say, the decoder randomly + by creating it beforehand as follows + + config = BertConfig.from_pretrained() + decoder = BertForMaskedLM(config) + model = Model2Model.from_pretrained('bert-base-uncased', decoder_model=decoder) + """ + + def __init__(self, *args, **kwargs): + super(Model2Model, self).__init__(*args, **kwargs) + self.tie_weights() + + def tie_weights(self): + """ Tying the encoder and decoders' embeddings together. + + We need for each to get down to the embedding weights. However the + different model classes are inconsistent to that respect: + - BertModel: embeddings.word_embeddings + - RoBERTa: embeddings.word_embeddings + - XLMModel: embeddings + - GPT2: wte + - BertForMaskedLM: bert.embeddings.word_embeddings + - RobertaForMaskedLM: roberta.embeddings.word_embeddings + + argument of the XEmbedding layer for each model, but it is "blocked" + by a model-specific keyword (bert, )... + """ + # self._tie_or_clone_weights(self.encoder, self.decoder) + pass + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path, *args, **kwargs): + + if ( + "bert" not in pretrained_model_name_or_path + or "roberta" in pretrained_model_name_or_path + or "distilbert" in pretrained_model_name_or_path + ): + raise ValueError("Only the Bert model is currently supported.") + + model = super(Model2Model, cls).from_pretrained( + encoder_pretrained_model_name_or_path=pretrained_model_name_or_path, + decoder_pretrained_model_name_or_path=pretrained_model_name_or_path, + *args, + **kwargs + ) + + return model + + +class Model2LSTM(PreTrainedEncoderDecoder): + @classmethod + def from_pretrained(cls, *args, **kwargs): + if kwargs.get("decoder_model", None) is None: + # We will create a randomly initilized LSTM model as decoder + if "decoder_config" not in kwargs: + raise ValueError( + "To load an LSTM in Encoder-Decoder model, please supply either: " + " - a torch.nn.LSTM model as `decoder_model` parameter (`decoder_model=lstm_model`), or" + " - a dictionary of configuration parameters that will be used to initialize a" + " torch.nn.LSTM model as `decoder_config` keyword argument. " + " E.g. `decoder_config={'input_size': 768, 'hidden_size': 768, 'num_layers': 2}`" + ) + kwargs["decoder_model"] = torch.nn.LSTM(kwargs.pop("decoder_config")) + model = super(Model2LSTM, cls).from_pretrained(*args, **kwargs) + return model diff --git a/data/source_files/messy/afc593ff8c4c.py b/data/source_files/messy/afc593ff8c4c.py new file mode 100644 index 0000000000000000000000000000000000000000..d9e182705452fe461a2142c0afa4786d47f19c46 --- /dev/null +++ b/data/source_files/messy/afc593ff8c4c.py @@ -0,0 +1,81 @@ +from airflow import DAG +from airflow.operators.bash_operator import BashOperator +from airflow.operators.python_operator import PythonOperator, BranchPythonOperator +from datetime import datetime, timedelta +import pandas as pd +import random + +# Default args definition +default_args = { + 'owner': 'Rafael', + 'depends_on_past': False, + 'start_date': datetime(2020, 11, 29, 18, 20), + 'email': ['example1@example.com', 'example2@example.com'], + 'email_on_failure': False, + 'email_on_retry': False, + 'retries': 1, + 'Retry_delay': timedelta(minutes=1) +} + +# Dag definition +dag = DAG( + 'treino-03', + description="Extrai dados do Titanic e calcula idade media para homens ou mulheres", + default_args = default_args, + schedule_interval='*/20 * * * *' +) + +get_data = BashOperator( + task_id='get-data', + bash_command='curl https://raw.githubusercontent.com/A3Data/hermione/master/hermione/file_text/train.csv -o /usr/local/airflow/data/train.csv', + dag=dag +) + +def sorteia_h_m(): + return random.choice(['male', 'female']) + +escolhe_h_m = PythonOperator( + task_id='escolhe-h-m', + python_callable=sorteia_h_m, + dag=dag +) + +def MouF(**context): + value=context['task_instance'].xcom_pull(task_ids='escolhe-h-m') + if value == 'male': + return 'branch_homem' + else: + return 'branch_mulher' + +male_female = BranchPythonOperator( + task_id='condicional', + python_callable=MouF, + provide_context=True, + dag=dag +) + +def mean_homem(): + df = pd.read_csv('/usr/local/airflow/data/train.csv') + med = df.loc[df.Sex == 'male'].Age.mean() + print(f'Media de idade dos homens no Titanic: {med}') + +branch_homem = PythonOperator( + task_id='branch_homem', + python_callable=mean_homem, + dag=dag +) + +def mean_mulher(): + df = pd.read_csv('/usr/local/airflow/data/train.csv') + med = df.loc[df.Sex == 'female'].Age.mean() + print(f'Media de idade das mulheres no Titanic: {med}') + +branch_mulher = PythonOperator( + task_id='branch_mulher', + python_callable=mean_mulher, + dag=dag +) + + + +get_data >> escolhe_h_m >> male_female >> [branch_homem, branch_mulher] diff --git a/data/source_files/messy/b00f9623a040.py b/data/source_files/messy/b00f9623a040.py new file mode 100644 index 0000000000000000000000000000000000000000..8a6d637336ee5d703603ebc196b3672612c215ab --- /dev/null +++ b/data/source_files/messy/b00f9623a040.py @@ -0,0 +1,54 @@ +import learndash + +from learndash.api_resources.abstract import ListableAPIResource +from learndash.api_resources.abstract import RetrievableAPIResource +from learndash.api_resources.abstract import UpdateableAPIResource +from learndash.api_resources.abstract import NestedAPIResource +from learndash.api_resources.typing import UserDict +from learndash.api_resources.typing import UserCourseProgressDict +from learndash.api_resources.typing import UserCourseDict +from learndash.api_resources.typing import UserGroupDict +from learndash.api_resources.typing import UserQuizProgressDict + +class User(RetrievableAPIResource[UserDict], ListableAPIResource[UserDict]): + + api_path = learndash.path_users + + def course_progress(self, id=None): + return UserCourseProgress(id, parent=self) + + def courses(self, id=None): + return UserCourse(id, parent=self) + + def groups(self, id=None): + return UserGroup(id, parent=self) + + def quiz_progress(self, id=None): + return UserQuizProgress(id, parent=self) + + +class UserCourseProgress(ListableAPIResource[UserCourseProgressDict], NestedAPIResource): + api_path = learndash.path_user_course_progress + + +# class UserCourseProgressSteps(ListableAPIResource, NestedAPIResource): + + +class UserCourse(ListableAPIResource[UserCourseDict], UpdateableAPIResource, NestedAPIResource): # also deletable + api_path = learndash.path_user_courses + + def instance_url(self): + # This endpoint accepts updates and deletions at it's base endpoint + return self.class_url() + + +class UserGroup(ListableAPIResource[UserGroupDict], UpdateableAPIResource, NestedAPIResource): # also deleteable + api_path = learndash.path_user_groups + + def instance_url(self): + # This endpoint accepts updates and deletions at it's base endpoint + return self.class_url() + + +class UserQuizProgress(ListableAPIResource[UserQuizProgressDict], NestedAPIResource): + api_path = learndash.path_user_quiz_progress diff --git a/data/source_files/messy/b1bc55044f1a.py b/data/source_files/messy/b1bc55044f1a.py new file mode 100644 index 0000000000000000000000000000000000000000..8a5020fde45eeb5e84a7966a0bf40c59df2eeca7 --- /dev/null +++ b/data/source_files/messy/b1bc55044f1a.py @@ -0,0 +1,61 @@ +# Copyright © 2019 Province of British Columbia +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""API endpoints for managing an Org resource.""" + +from flask import request +from flask_restplus import Namespace, Resource, cors + +from auth_api import status as http_status +from auth_api.exceptions import BusinessException +from auth_api.jwt_wrapper import JWTWrapper +from auth_api.schemas import ProductSubscriptionSchema +from auth_api.schemas import utils as schema_utils +from auth_api.services import Product as ProductService +from auth_api.tracer import Tracer +from auth_api.utils.roles import Role +from auth_api.utils.util import cors_preflight + + +API = Namespace('products', description='Endpoints for products management') +TRACER = Tracer.get_instance() +_JWT = JWTWrapper.get_instance() + + +@cors_preflight('GET,POST,OPTIONS') +@API.route('', methods=['GET', 'POST', 'OPTIONS']) +class OrgProducts(Resource): + """Resource for managing product subscriptions.""" + + @staticmethod + @TRACER.trace() + @cors.crossdomain(origin='*') + @_JWT.has_one_of_roles([Role.STAFF_CREATE_ACCOUNTS.value]) + def post(org_id): + """Post a new product subscription to the org using the request body.""" + request_json = request.get_json() + valid_format, errors = schema_utils.validate(request_json, 'org_product_subscription') + if not valid_format: + return {'message': schema_utils.serialize(errors)}, http_status.HTTP_400_BAD_REQUEST + + try: + subscriptions = ProductService.create_product_subscription(org_id, request_json) + if subscriptions is None: + response, status = {'message': 'Not authorized to perform this action'}, \ + http_status.HTTP_401_UNAUTHORIZED + else: + response, status = {'subscriptions': ProductSubscriptionSchema().dump(subscriptions, many=True)}, \ + http_status.HTTP_201_CREATED + except BusinessException as exception: + response, status = {'code': exception.code, 'message': exception.message}, exception.status_code + return response, status diff --git a/data/source_files/messy/b2647563cd56.py b/data/source_files/messy/b2647563cd56.py new file mode 100644 index 0000000000000000000000000000000000000000..d9aeee22298fa03239ef3d63fdcaa4984d37ba63 --- /dev/null +++ b/data/source_files/messy/b2647563cd56.py @@ -0,0 +1,71 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +from gpu_tests.gpu_test_expectations import GpuTestExpectations + +# See the GpuTestExpectations class for documentation. + +class PixelExpectations(GpuTestExpectations): + def SetExpectations(self): + # Sample Usage: + # self.Fail('Pixel_Canvas2DRedBox', + # ['mac', 'amd', ('nvidia', 0x1234)], bug=123) + + # Seems to be flaky on the new AMD R7 240 drivers. + self.Flaky('Pixel_GpuRasterization_BlueBox', + ['win', ('amd', 0x6613)], bug=653538) + + # Software compositing is not supported on Android; so we skip these tests + # that disables gpu compositing on Android platforms. + self.Skip('Pixel_OffscreenCanvasUnaccelerated2D', ['android']) + self.Skip('Pixel_OffscreenCanvasUnaccelerated2DWorker', ['android']) + self.Skip('Pixel_OffscreenCanvasWebGLSoftwareCompositing', ['android']) + self.Skip('Pixel_OffscreenCanvasWebGLSoftwareCompositingWorker', + ['android']) + self.Skip('Pixel_CanvasDisplayLinearRGBUnaccelerated2D', ['android']) + + self.Fail('Pixel_ScissorTestWithPreserveDrawingBuffer', + ['android'], bug=521588) + + # TODO(ccameron) fix these on Mac Retina + self.Fail('Pixel_CSS3DBlueBox', ['mac'], bug=533690) + + # TODO(vmiura) check / generate reference images for Android devices + self.Fail('Pixel_SolidColorBackground', ['mac', 'android'], bug=624256) + + self.Fail('Pixel_OffscreenCanvasUnaccelerated2DGPUCompositingWorker', + ['mac', ('nvidia', 0xfe9)], bug=706016) + self.Fail('Pixel_CSSFilterEffects', + ['mac', ('nvidia', 0xfe9)], bug=690277) + + # TODO(kbr): flakily timing out on this configuration. + self.Flaky('*', ['linux', 'intel', 'debug'], bug=648369) + + self.Flaky('Pixel_Video_MP4', ['android', 'nvidia'], bug=716564) + + # Flaky for unknown reasons only on macOS. Not planning to investigate + # further. + self.Flaky('Pixel_ScissorTestWithPreserveDrawingBuffer', ['mac'], + bug=660461) + + self.Flaky('Pixel_OffscreenCanvas2DResizeOnWorker', + ['win10', ('intel', 0x1912)], bug=690663) + + # TODO(zakerinasab): check / generate reference images. + self.Fail('Pixel_Canvas2DUntagged', bug=713632) + + self.Flaky('Pixel_OffscreenCanvasTransferBeforeStyleResize', + ['mac', 'linux', 'win', 'android'], bug=735228) + self.Flaky('Pixel_OffscreenCanvasTransferAfterStyleResize', + ['mac', 'linux', 'win', 'android'], bug=735171) + + # TODO(junov): update reference images + self.Fail('Pixel_CSSFilterEffects', ['mac'], bug=721727) + self.Fail('Pixel_CSSFilterEffects_NoOverlays', ['mac'], bug=721727) + + # TODO(dshwang): remove these after new reference images are generated. + self.Fail('Pixel_DirectComposition_Video_MP4', bug=615325) + self.Fail('Pixel_DirectComposition_Video_VP9', bug=615325) + self.Fail('Pixel_Video_MP4', bug=615325) + self.Fail('Pixel_Video_VP9', bug=615325) diff --git a/data/source_files/messy/b374790e8e34.py b/data/source_files/messy/b374790e8e34.py new file mode 100644 index 0000000000000000000000000000000000000000..8a54995b61e4b0596e764748ce12766155458309 --- /dev/null +++ b/data/source_files/messy/b374790e8e34.py @@ -0,0 +1,86 @@ +from discord.ext import commands, tasks # Bot Commands Frameworkをインポート +import traceback # エラー表示のためにインポート +import os +import discord +import r + +TOKEN = os.environ['DISCORD_BOT_TOKEN'] +prefix = os.environ['DISCORD_BOT_PREFIX'] #プレフィックス + +# 読み込むコグの名前を格納しておく。 +INITIAL_EXTENSIONS = [ + 'cogs.eval', + 'cogs.glchat', + 'cogs.gladd', + 'cogs.gldel' +] + +# クラスの定義。ClientのサブクラスであるBotクラスを継承。 +class MyBot(commands.Bot): + # MyBotのコンストラクタ。 + def __init__(self, command_prefix, help_command): + # スーパークラスのコンストラクタに値を渡して実行。 + super().__init__(command_prefix,help_command) + + # INITIAL_COGSに格納されている名前から、コグを読み込む。 + # エラーが発生した場合は、エラー内容を表示。 + for cog in INITIAL_EXTENSIONS: + try: + self.load_extension(cog) + except Exception: + traceback.print_exc() + + # Botの準備完了時に呼び出されるイベント + async def on_ready(self): + print(self.user.name) # ボットの名前 + print(self.user.id) # ボットのID + print(discord.__version__) # discord.pyのバージョン + print('----------------') + print('Hello World !!') + await self.change_presence(status=discord.Status.idle,activity=discord.Game(name=f'Ping:{self.ws.latency * 1000:.0f}ms')) + conn=r.connect() + ky=conn.keys() + global_ch="gloch" + count=0 + for i in ky: + i=str(i) + if i == global_ch: + count+=1 + if count>0: + smsd=conn.smembers(global_ch) + count=0 + for q in smsd: + q=str(q) + if q=="0": + count+=1 + if count>0: + p=conn.srem(global_ch,"0") + if p==True: + print("正常起動") + else: + print("異常発生") + else: + print(ky) + else: + p=conn.sadd(global_ch,"0") + if p==True: + print("正常起動") + else: + print("異常発生") + + +class JapaneseHelpCommand(commands.DefaultHelpCommand): + def __init__(self): + super().__init__() + self.commands_heading = "コマンド:" + self.no_category = "その他" + self.command_attrs["help"] = "コマンド一覧と簡単な説明を表示" + + def get_ending_note(self): + return (f"各コマンドの説明: {prefix}help <コマンド名>\n" + f"各カテゴリの説明: {prefix}help <カテゴリ名>\n") + +#MyBotのインスタンス化及び起動処理。 +if __name__ == '__main__': + bot = MyBot(command_prefix=prefix,help_command=JapaneseHelpCommand()) # command_prefixはコマンドの最初の文字として使うもの。 e.g. !ping + bot.run(TOKEN) # Botのトークン diff --git a/data/source_files/messy/bd581f14cf48.py b/data/source_files/messy/bd581f14cf48.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3e36ced124cb7dabea478a1f4b328edd22757f --- /dev/null +++ b/data/source_files/messy/bd581f14cf48.py @@ -0,0 +1,32 @@ +import json +import urllib.request +import credentials +from datetime import datetime, timedelta + +class NewsAPI: + + def __init__(self, nyt_api): + self.nyt_access = nyt_api + + def get_nyt_last_week_articles(self, topic, today): + delta = timedelta(weeks = 1) + last_week = today - delta + begin_date = last_week.strftime('%Y%m%d') + url = 'https://api.nytimes.com/svc/search/v2/articlesearch.json?q=' + topic + '&begin_date=' + begin_date + '&sort=best&type_of_material=Article&api-key=' + self.nyt_access + try: + json_url = urllib.request.urlopen(url) + articles = json.loads(json_url.read()) + except: + raise RuntimeError('Failed to retrive New York Times data.') + if articles['status'] != 'OK': + num_of_articles = articles['response']['docs'].length() + if num_of_articles > 5: + return articles['response']['docs'][0:4], articles['response']['meta']['hits'] + else: + return articles['response']['docs'][0:num_of_articles - 1], articles['response']['meta']['hits'] + else: + raise RuntimeError('Failed to find any New York Times articles with query.') + +api = NewsAPI(credentials.NYT_API) +date_time_obj = datetime.now() +api.get_nyt_last_week_articles('election', date_time_obj) \ No newline at end of file diff --git a/data/source_files/messy/bd90f84e7761.py b/data/source_files/messy/bd90f84e7761.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3e37aebc3bcbec9a89c90db3f81c339c737670 --- /dev/null +++ b/data/source_files/messy/bd90f84e7761.py @@ -0,0 +1,213 @@ +# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from smexperiments import trial_component, api_types + +import datetime +import pytest +import unittest.mock + + +@pytest.fixture +def sagemaker_boto_client(): + return unittest.mock.Mock() + + +def test_create(sagemaker_boto_client): + sagemaker_boto_client.create_trial_component.return_value = { + "TrialComponentArn": "bazz", + } + obj = trial_component.TrialComponent.create( + trial_component_name="foo", display_name="bar", sagemaker_boto_client=sagemaker_boto_client + ) + sagemaker_boto_client.create_trial_component.assert_called_with(TrialComponentName="foo", DisplayName="bar") + assert "foo" == obj.trial_component_name + assert "bar" == obj.display_name + assert "bazz" == obj.trial_component_arn + + +def test_load(sagemaker_boto_client): + now = datetime.datetime.now(datetime.timezone.utc) + + sagemaker_boto_client.describe_trial_component.return_value = { + "TrialComponentArn": "A", + "TrialComponentName": "B", + "DisplayName": "C", + "Status": {"PrimaryStatus": "InProgress", "Message": "D"}, + "Parameters": {"E": {"NumberValue": 1.0}, "F": {"StringValue": "G"}}, + "InputArtifacts": {"H": {"Value": "s3://foo/bar", "MediaType": "text/plain"}}, + "OutputArtifacts": {"I": {"Value": "s3://whizz/bang", "MediaType": "text/plain"}}, + "Metrics": [ + { + "MetricName": "J", + "Count": 1, + "Min": 1.0, + "Max": 2.0, + "Avg": 3.0, + "StdDev": 4.0, + "SourceArn": "K", + "Timestamp": now, + } + ], + } + obj = trial_component.TrialComponent.load(trial_component_name="foo", sagemaker_boto_client=sagemaker_boto_client) + sagemaker_boto_client.describe_trial_component.assert_called_with(TrialComponentName="foo") + assert "A" == obj.trial_component_arn + assert "B" == obj.trial_component_name + assert "C" == obj.display_name + assert api_types.TrialComponentStatus(primary_status="InProgress", message="D") == obj.status + assert {"E": 1.0, "F": "G"} == obj.parameters + assert {"H": api_types.TrialComponentArtifact(value="s3://foo/bar", media_type="text/plain")} + assert {"I": api_types.TrialComponentArtifact(value="s3://whizz/bang", media_type="text/plain")} + assert [ + api_types.TrialComponentMetricSummary( + metric_name="J", count=1, min=1.0, max=2.0, avg=3.0, std_dev=4.0, source_arn="K", timestamp=now + ) + ] + + +def test_list(sagemaker_boto_client): + start_time = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=1) + end_time = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=2) + creation_time = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=3) + last_modified_time = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=4) + + sagemaker_boto_client.list_trial_components.side_effect = [ + { + "TrialComponentSummaries": [ + { + "TrialComponentName": "A" + str(i), + "TrialComponentArn": "B" + str(i), + "DisplayName": "C" + str(i), + "SourceArn": "D" + str(i), + "Status": {"PrimaryStatus": "InProgress", "Message": "E" + str(i)}, + "StartTime": start_time + datetime.timedelta(hours=i), + "EndTime": end_time + datetime.timedelta(hours=i), + "CreationTime": creation_time + datetime.timedelta(hours=i), + "LastModifiedTime": last_modified_time + datetime.timedelta(hours=i), + "LastModifiedBy": {}, + } + for i in range(10) + ], + "NextToken": "100", + }, + { + "TrialComponentSummaries": [ + { + "TrialComponentName": "A" + str(i), + "TrialComponentArn": "B" + str(i), + "DisplayName": "C" + str(i), + "SourceArn": "D" + str(i), + "Status": {"PrimaryStatus": "InProgress", "Message": "E" + str(i)}, + "StartTime": start_time + datetime.timedelta(hours=i), + "EndTime": end_time + datetime.timedelta(hours=i), + "CreationTime": creation_time + datetime.timedelta(hours=i), + "LastModifiedTime": last_modified_time + datetime.timedelta(hours=i), + "LastModifiedBy": {}, + } + for i in range(10, 20) + ] + }, + ] + + expected = [ + api_types.TrialComponentSummary( + trial_component_name="A" + str(i), + trial_component_arn="B" + str(i), + display_name="C" + str(i), + source_arn="D" + str(i), + status=api_types.TrialComponentStatus(primary_status="InProgress", message="E" + str(i)), + start_time=start_time + datetime.timedelta(hours=i), + end_time=end_time + datetime.timedelta(hours=i), + creation_time=creation_time + datetime.timedelta(hours=i), + last_modified_time=last_modified_time + datetime.timedelta(hours=i), + last_modified_by={}, + ) + for i in range(20) + ] + result = list( + trial_component.TrialComponent.list( + sagemaker_boto_client=sagemaker_boto_client, + source_arn="foo", + sort_by="CreationTime", + sort_order="Ascending", + ) + ) + + assert expected == result + expected_calls = [ + unittest.mock.call(SortBy="CreationTime", SortOrder="Ascending", SourceArn="foo"), + unittest.mock.call(NextToken="100", SortBy="CreationTime", SortOrder="Ascending", SourceArn="foo"), + ] + assert expected_calls == sagemaker_boto_client.list_trial_components.mock_calls + + +def test_list_empty(sagemaker_boto_client): + sagemaker_boto_client.list_trial_components.return_value = {"TrialComponentSummaries": []} + assert [] == list(trial_component.TrialComponent.list(sagemaker_boto_client=sagemaker_boto_client)) + + +def test_list_trial_components_call_args(sagemaker_boto_client): + created_before = datetime.datetime(1999, 10, 12, 0, 0, 0) + created_after = datetime.datetime(1990, 10, 12, 0, 0, 0) + trial_name = "foo-trial" + experiment_name = "foo-experiment" + next_token = "thetoken" + max_results = 99 + + sagemaker_boto_client.list_trial_components.return_value = {} + assert [] == list( + trial_component.TrialComponent.list( + sagemaker_boto_client=sagemaker_boto_client, + trial_name=trial_name, + experiment_name=experiment_name, + created_before=created_before, + created_after=created_after, + next_token=next_token, + max_results=max_results, + sort_by="CreationTime", + sort_order="Ascending", + ) + ) + + expected_calls = [ + unittest.mock.call( + TrialName="foo-trial", + ExperimentName="foo-experiment", + CreatedBefore=created_before, + CreatedAfter=created_after, + SortBy="CreationTime", + SortOrder="Ascending", + NextToken="thetoken", + MaxResults=99, + ) + ] + assert expected_calls == sagemaker_boto_client.list_trial_components.mock_calls + + +def test_save(sagemaker_boto_client): + obj = trial_component.TrialComponent(sagemaker_boto_client, trial_component_name="foo", display_name="bar") + sagemaker_boto_client.update_trial_component.return_value = {} + obj.save() + sagemaker_boto_client.update_trial_component.assert_called_with(TrialComponentName="foo", DisplayName="bar") + + +def test_delete(sagemaker_boto_client): + obj = trial_component.TrialComponent(sagemaker_boto_client, trial_component_name="foo", display_name="bar") + sagemaker_boto_client.delete_trial_component.return_value = {} + obj.delete() + sagemaker_boto_client.delete_trial_component.assert_called_with(TrialComponentName="foo") + + +def test_boto_ignore(): + obj = trial_component.TrialComponent(sagemaker_boto_client, trial_component_name="foo", display_name="bar") + assert obj._boto_ignore() == ["ResponseMetadata", "CreatedBy"] diff --git a/data/source_files/messy/bf56855ec505.py b/data/source_files/messy/bf56855ec505.py new file mode 100644 index 0000000000000000000000000000000000000000..8a56cef3b3f2ca89cec426bc77ad6809415c305d --- /dev/null +++ b/data/source_files/messy/bf56855ec505.py @@ -0,0 +1,46 @@ +load("//python:compile.bzl", "py_proto_compile", "py_grpc_compile") +load("@grpc_py_deps//:requirements.bzl", "all_requirements") + +def py_proto_library(**kwargs): + name = kwargs.get("name") + deps = kwargs.get("deps") + verbose = kwargs.get("verbose") + visibility = kwargs.get("visibility") + + name_pb = name + "_pb" + py_proto_compile( + name = name_pb, + deps = deps, + visibility = visibility, + verbose = verbose, + ) + native.py_library( + name = name, + srcs = [name_pb], + deps = all_requirements, # fixme don't need grpc here + # This magically adds REPOSITORY_NAME/PACKAGE_NAME/{name_pb} to PYTHONPATH + imports = [name_pb], + visibility = visibility, + ) + +def py_grpc_library(**kwargs): + name = kwargs.get("name") + deps = kwargs.get("deps") + verbose = kwargs.get("verbose") + visibility = kwargs.get("visibility") + + name_pb = name + "_pb" + py_grpc_compile( + name = name_pb, + deps = deps, + visibility = visibility, + verbose = verbose, + ) + native.py_library( + name = name, + srcs = [name_pb], + deps = all_requirements, + # This magically adds REPOSITORY_NAME/PACKAGE_NAME/{name_pb} to PYTHONPATH + imports = [name_pb], + visibility = visibility, + ) \ No newline at end of file diff --git a/data/source_files/messy/c3fbb15b2577.py b/data/source_files/messy/c3fbb15b2577.py new file mode 100644 index 0000000000000000000000000000000000000000..8a425179166f5e46f9936c55196547277fa5770b --- /dev/null +++ b/data/source_files/messy/c3fbb15b2577.py @@ -0,0 +1,110 @@ +"""Terminal utilities specific to message archives. + +Creates colored text and helps write Messages output. +""" + +from contextlib import contextmanager +import itertools +import readline + +FG_COLORS = dict(itertools.chain( + zip(("black", + "red", + "green", + "yellow", + "blue", + "magenta", + "cyan", + "white", + ), range(30, 38)), + zip(("bright_black", + "bright_red", + "bright_green", + "bright_yellow", + "bright_blue", + "bright_magenta", + "bright_cyan", + "bright_white", + ), range(90, 98)))) + +BG_COLORS = dict((f"on_{key}", val + 10) for key, val in FG_COLORS.items()) + +ATTRIBUTES = dict( + zip(("bold", + "faint", + "italic", + "underline", + "slow_blink", + "rapid_blink", + "reverse", + "conceal", + "strikethrough", + ), range(1, 10))) + +def colored(text, color=None, on_color=None, attrs=None, escape=False): + """Wraps text with ANSI escape codes to achieve the desired look. + + Args: + color: The foreground color. + on_color: The background color. + attrs: A list of effects. + escape: True to escape invisibles (for readline); else False. + + Returns: + A string with the original text wrapped by escape codes. + """ + def sgr(*codes): + return "\x1b[%sm" % ";".join(map(str, codes)) + def esc(text): + return "\x01%s\x02" % text + + codes = [] + if color: + codes.append(FG_COLORS[color]) + if on_color: + codes.append(BG_COLORS[on_color]) + if attrs: + codes.extend(ATTRIBUTES[attr] for attr in attrs) + + if not escape: + esc = lambda n: n + + return "%s%s%s" % (esc(sgr(*codes)), text, esc(sgr(0))) + +@contextmanager +def readline_disabled(): + """Context manager to temporarily disable readline features. + """ + readline.set_auto_history(False) + try: + yield + finally: + readline.set_auto_history(True) + +def confirm(text): + """Presents a yes/no prompt to the user and handles replies. + + Args: + text: A message string to present before confirmation. + + Returns: + True if the user confirmed the prompt; else False. + """ + replies = { + "yes": True, + "no": False, + } + + prompt = "%s (yes/no): " % colored("Are you sure?", "red", + attrs=["bold"], escape=True) + reply = "" + with readline_disabled(): + print(text) + while reply not in replies: + try: + reply = input(prompt).casefold() + except (EOFError, KeyboardInterrupt): + reply = "no" + print(reply) + + return replies[reply] diff --git a/data/source_files/messy/c6df0134595f.py b/data/source_files/messy/c6df0134595f.py new file mode 100644 index 0000000000000000000000000000000000000000..8a682a5b6be55bf5cb429b4f53cde390f56c0458 --- /dev/null +++ b/data/source_files/messy/c6df0134595f.py @@ -0,0 +1,63 @@ +from copy import deepcopy + +def boot(seq): + index = 0 + played_indices = set() + + acc = 0 + + while True: + if index == len(seq): + return True, acc + + if index in played_indices: + return False, acc + + played_indices.add(index) + + line = seq[index].split() + op = line[0] + value = int(line[1]) + + if op == 'nop': + index += 1 + + if op == 'acc': + acc += value + index += 1 + + if op == 'jmp': + index += value + +def generate_sequences(list_): + all_seqs = [] + + for idx, value in enumerate(list_): + + if value[:3] == 'nop': + seq = deepcopy(list_) + seq[idx] = 'jmp' + value[3:] + all_seqs.append(seq) + + if value[:3] == 'jmp': + seq = deepcopy(list_) + seq[idx] = 'nop' + value[3:] + all_seqs.append(seq) + + return all_seqs + + +def result(input_): + # Part 1 + part_one = boot(input_)[1] + + # Part 2 + all_sequences = generate_sequences(input_) + for sequence in all_sequences: + result = boot(sequence) + + if result[0] is not False: + part_two = result[1] + break + + return part_one, part_two diff --git a/data/source_files/messy/c7d0962264ec.py b/data/source_files/messy/c7d0962264ec.py new file mode 100644 index 0000000000000000000000000000000000000000..8a00049d0a23118a6b45ced9a50bf455984aaa3c --- /dev/null +++ b/data/source_files/messy/c7d0962264ec.py @@ -0,0 +1,265 @@ +""" +Create diaries in A5 and A4 sizes based on PDF templates. + +Julio Vega +""" +import datetime +import math +import sys +from io import BytesIO +from pathlib import Path + +from PyPDF2 import PdfFileReader, PdfFileWriter +from reportlab.lib.pagesizes import A5, A4 +from reportlab.lib.utils import ImageReader +from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.ttfonts import TTFError, TTFont +from reportlab.pdfgen import canvas + + +def resource_path(relative_path): + """ Get absolute path to resource, works for dev and for PyInstaller """ + base_path = getattr(sys, '_MEIPASS', Path(__file__).resolve().parent) + return base_path / Path(relative_path) + +CORNER_DIR = resource_path("input/1_diaries_to_create/resources") +LOGO_PATH = resource_path(CORNER_DIR / Path("logo.png")) +DEFAULT_FONT = resource_path(CORNER_DIR / Path('FreeSansLocal.ttf')) +CREATED_DIARIES_DIR = resource_path("output/created_diaries/") + +############################################################# +############################################################# +############################################################# +##### Algorithm to convert A4 pages into an A5 booklet ###### +############################################################# +############################################################# +############################################################# +## Adapted from the work by Luke Plant, https://bitbucket.org/spookylukey/booklet-maker/src + +class Sheet(object): + '''A4 Sheets''' + def __init__(self): + self.front = PrintPage() + self.back = PrintPage() + + +class PrintPage(object): + '''A4 page with containers for A4 pages''' + def __init__(self): + self.left = PageContainer() + self.right = PageContainer() + + +class PageContainer(object): + '''A5 containers''' + def __init__(self): + self.page = None + + +def build_booklet(pages): + ''' Build booklet ''' + # Double sized page, with double-sided printing, fits 4 of the original. + sheet_count = int(math.ceil(len(pages) / 4.0)) + + booklet = [Sheet() for i in range(0, sheet_count)] + + # Assign input pages to sheets + + # This is the core algo. To understand it: + # * pick up 3 A4 sheets, landscape + # * number the sheets from 1 to 3, starting with bottom one + # * fold the stack in the middle to form an A5 booklet + # * work out what order you need to use the front left, + # front right, back left and back right sides. + + def containers(): + '''Yields parts of the booklet in the order they should be used.''' + for sheet in booklet: + yield sheet.back.right + yield sheet.front.left + + for sheet in reversed(booklet): + yield sheet.front.right + yield sheet.back.left + + for container, page in zip(containers(), pages): + container.page = page + + return booklet + + +def add_double_page(writer, page_size, print_page): + ''' Adds a double page ''' + width, height = page_size + page = writer.insertBlankPage(width=width, height=height, index=writer.getNumPages()) + + # Merge the left page + l_page = print_page.left.page + if l_page is not None: + page.mergePage(l_page) + + # Merge the right page with translation + r_page = print_page.right.page + if r_page is not None: + page.mergeTranslatedPage(r_page, width / 2, 0) + + +def convert_to_a5_booklet(input_file, blanks=0): + '''Converts a PDF into a double sided A5 file to print as an A4 (two A5 pages per A4 page)''' + + # Create internal dir to save the a5 files + a5_booklets_dir = CREATED_DIARIES_DIR + Path.mkdir(a5_booklets_dir, parents=True, exist_ok=True) + + # Create the a5 booklet's name + a5_booklet_name = Path(input_file).stem + "_as_a5_booklet" + a5_booklet = a5_booklets_dir / Path("{}.pdf".format(a5_booklet_name)) + + reader = PdfFileReader(open(input_file, "rb")) + pages = [reader.getPage(p) for p in range(0, reader.getNumPages())] + for index in range(0, blanks): + pages.insert(0, None) + + sheets = build_booklet(pages) + + writer = PdfFileWriter() + firs_page = reader.getPage(0) + input_width = firs_page.mediaBox.getWidth() + output_width = input_width * 2 + input_height = firs_page.mediaBox.getHeight() + output_height = input_height + + page_size = (output_width, output_height) + + # We want to group fronts and backs together. + for sheet in sheets: + add_double_page(writer, page_size, sheet.back) + add_double_page(writer, page_size, sheet.front) + + with open(a5_booklet, "wb") as a5_booklet_stream: + writer.write(a5_booklet_stream) + return a5_booklet + +############################################################# +############################################################# +############################################################# +########## Create A4 paper diary ############ +############################################################# +############################################################# +############################################################# + +def create_diary_cover(participant_id, email, font): + '''Create cover of the A5 diary''' + + packet = BytesIO() + cover_canvas = canvas.Canvas(packet, pagesize=A4) + width, height = A4 + + # Centering the logo or participant ID + if Path.exists(LOGO_PATH): + logo = ImageReader(LOGO_PATH) + cover_canvas.drawImage(logo, x=(width * (1/6.0)), + y=(height/4), + width=width * (4/6.0), + preserveAspectRatio=True, + mask='auto') + else: + cover_canvas.setFont(font, 50) + cover_canvas.drawCentredString(width/2, height/2, participant_id) + + # Lost legend + if not (email is None or email == ""): + cover_canvas.setFont(font, 15) + cover_canvas.drawCentredString(width/2, 50, + "If you find this document, please email " + email) + + cover_canvas.save() + packet.seek(0) + return PdfFileReader(packet).getPage(0) + +def create_diary_page(pdf_template, font, top_left_text, page_number, top_right_text): + packet = BytesIO() + diary_canvas = canvas.Canvas(packet, pagesize=A5) + + # Header + diary_canvas.setFont(font, 11) + #diary_canvas.drawRightString(378, 562, str(top_right_text)) + diary_canvas.drawString(36.5, 562, top_left_text) + + # Corners + corners = [(CORNER_DIR / Path("corner_ul.png"), 25, 553), + (CORNER_DIR / Path("corner_ur.png"), 365, 553), + (CORNER_DIR / Path("corner_bl.png"), 25, 15), + (CORNER_DIR / Path("corner_br.png"), 365, 15)] + for corner_path, x, y in corners: + if corner_path.exists(): + corner = ImageReader(corner_path) + diary_canvas.drawImage(corner, x=x, y=y, mask='auto') + + # Footer + #diary_canvas.setFont(font, 8) + #diary_canvas.drawString(36.5, 24, str(page_number)) + diary_canvas.save() + + + # Merge template and additions (header, corners and footer) + packet.seek(0) + page_additions = PdfFileReader(packet).getPage(0) + + new_page = PdfFileReader(open(pdf_template, "rb")).getPage(0) + new_page.mergePage(page_additions) + new_page.scaleTo(A4[0], A4[1]) + + return new_page + +def create_a4_diary(pdf_template, pages, top_left_text, email=None, font='Arial'): + """Creates an A4 document with [PAGES] from [STARTING_DATE]""" + + starting_date = parse_date(top_left_text) + font = set_active_font(font) + + # Create output folder/file + if not Path(pdf_template).exists(): + raise ValueError("Template does not exist {}".format(pdf_template)) + + Path.mkdir(CREATED_DIARIES_DIR, parents=True, exist_ok=True) + a4_document_name = Path(pdf_template).stem + a4_document_path = CREATED_DIARIES_DIR / Path("{}_document.pdf".format(a4_document_name)) + + pdf_file = PdfFileWriter() + + # Cover + pdf_file.addPage(create_diary_cover(a4_document_name, email, font)) + pdf_file.addBlankPage() + + # Pages + for page in range(1, pages+1): + if starting_date is not None: + top_left_text = starting_date.strftime('%A, %d %b %Y') + starting_date += datetime.timedelta(days=1) + new_page = create_diary_page(pdf_template, font, top_left_text,page, a4_document_name) + pdf_file.addPage(new_page) + + # Backcover + pdf_file.addBlankPage() + + # Save a4 document + with open(a4_document_path, "wb") as output_stream: + pdf_file.write(output_stream) + + return a4_document_path + +def set_active_font(font): + """Register the font to use in header and footer of the diary""" + try: + pdfmetrics.registerFont(TTFont(font, font + '.ttf')) + except TTFError: + font = 'FreeSansLocal' + pdfmetrics.registerFont(TTFont(font, DEFAULT_FONT)) + return font + +def parse_date(s): + try: + return datetime.datetime.strptime(s, "%d/%m/%Y") + except ValueError: + return None \ No newline at end of file diff --git a/data/source_files/messy/cad9715efddf.py b/data/source_files/messy/cad9715efddf.py new file mode 100644 index 0000000000000000000000000000000000000000..d9ff0e5cd63921d7a1a7f3f682d268671ab38688 --- /dev/null +++ b/data/source_files/messy/cad9715efddf.py @@ -0,0 +1,48 @@ +# def mul(a): +# return lambda b:b*a + +# singler = mul(1) # addition = lambda b:b*1 +# doubler = mul(2) # addition = lambda b:b*2 +# tripler = mul(3) # addition = lambda b:b*3 + +# print(doubler(7)) # 7*2 = 14 +# print(tripler(7)) # 7*3 = 21 +# print(singler(7)) # 7*1 = 7 + +class Student: + def __init__(self, fname): + self.fname = fname + def greet(self, fname): + return f"Hello, {fname}" + +class BatchA(Student): + def __init__(self, lname): + self.lname = lname + #Student.__init__(self, "Nikunj") + super().__init__("Nikunj") + def printName(self): + return f"{self.fname} {self.lname}" + + +stud = BatchA("Thakor") +print(stud.printName()) + + + + + + + + + + +rgb(255, 255, 255) # White +rgb(255, 0, 0) # Red +rgb(0, 0, 0) # Black +rgb(0, 255, 255) # Cyan +rgb(255, 255, 0) # Yellow + + +#00ff00 //green +#1e90ff //dodgerblue + diff --git a/data/source_files/messy/cf83502047f5.py b/data/source_files/messy/cf83502047f5.py new file mode 100644 index 0000000000000000000000000000000000000000..d9b38469f6b00b7a441fff875e4ecd7bcc272b7e --- /dev/null +++ b/data/source_files/messy/cf83502047f5.py @@ -0,0 +1,53 @@ +from django.db.models import Q + +from django.shortcuts import render +from django.http import Http404 + +# Create your views here. +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework.decorators import api_view + +from .models import Product, Category +from .serializers import ProductSerializer, CategorySerializer + +class LatestProductsList(APIView): + def get(self, request, format=None): + products = Product.objects.all()[0:4] + serializer = ProductSerializer(products,many=True) + return Response(serializer.data) + +class ProductDetail(APIView): + def get_object(self, category_slug, product_slug): + try: + return Product.objects.filter(category__slug=category_slug).get(slug=product_slug) + except Product.DoesNotExist: + raise Http404 + + def get(self, request, category_slug, product_slug, format= None): + product = self.get_object(category_slug, product_slug) + serializer = ProductSerializer(product) + return Response(serializer.data) + +class CategoryDetail(APIView): + def get_object(self, category_slug): + try: + return Category.objects.get(slug=category_slug) + except Category.DoesNotExist: + raise Http404 + + def get(self, request, category_slug, format= None): + category = self.get_object(category_slug) + serializer = CategorySerializer(category) + return Response(serializer.data) + +@api_view(['POST']) +def search(request): + query = request.data.get('query', '') + + if query: + products = Product.objects.filter(Q(name__icontains=query) | Q(description__icontains=query)) + serializer = ProductSerializer(products, many=True) + return Response(serializer.data) + else: + return Response({"products": []}) \ No newline at end of file diff --git a/data/source_files/messy/d228d40c6d8c.py b/data/source_files/messy/d228d40c6d8c.py new file mode 100644 index 0000000000000000000000000000000000000000..d9becf802ca0765623e481aef0b8fd051c0096e5 --- /dev/null +++ b/data/source_files/messy/d228d40c6d8c.py @@ -0,0 +1,123 @@ +import torch +import torch.nn as nn +import torch.optim as optim +import torch.nn.functional as F +import torch.backends.cudnn as cudnn + +import torchvision +import torchvision.transforms as transforms +import torchvision.datasets as datasets + +import os +import argparse + +from torch.autograd import Variable +from extensions.utils import progress_bar +from extensions.model_refinery_wrapper import ModelRefineryWrapper +from extensions.refinery_loss import RefineryLoss + +from models import ShuffleNetv2_wrapper +from models import DiracDeltaNet_wrapper + + +parser = argparse.ArgumentParser(description='PyTorch imagenet inference') +parser.add_argument('--datadir', help='path to dataset') +parser.add_argument('--inputdir', help='path to input model') +args = parser.parse_args() + + +# Data +print('==> Preparing data..') +# Data loading code +valdir = os.path.join(args.datadir, 'val') + +normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]) + + +transform_test = transforms.Compose([ + transforms.Resize(256), + transforms.CenterCrop(224), + transforms.ToTensor(), + normalize, + ]) + +#imagenet +testset = datasets.ImageFolder(valdir, transform_test) +num_classes=1000 + +testloader = torch.utils.data.DataLoader(testset, batch_size=1000, shuffle=False, pin_memory=True, num_workers=30) + + +use_cuda = torch.cuda.is_available() + +print('Using input path: %s' % args.inputdir) +checkpoint = torch.load(args.inputdir) +init_net = checkpoint['net'] +net=init_net.to('cpu') + +label_refinery=torch.load('./resnet50.t7') +net = ModelRefineryWrapper(net, label_refinery) + +device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") +print(device) + +if torch.cuda.device_count() > 1: + print("Let's use", torch.cuda.device_count(), "GPUs!") + net = nn.DataParallel(net) + +net=net.to(device) + +criterion = RefineryLoss() + + + +def accuracy(output, target, topk=(1,)): + """Computes the precision@k for the specified values of k""" + with torch.no_grad(): + maxk = max(topk) + batch_size = target.size(0) + + _, pred = output.topk(maxk, 1, True, True) + pred = pred.t() + correct = pred.eq(target.view(1, -1).expand_as(pred)) + + res = [] + for k in topk: + correct_k = correct[:k].view(-1).float().sum(0, keepdim=True) + res.append(correct_k) + return res + + +def test(): + net.eval() + criterion.eval() + test_loss = 0 + correct_1 = 0 + correct_5 = 0 + total = 0 + for batch_idx, (inputs, targets) in enumerate(testloader): + if use_cuda: + inputs, targets = inputs.cuda(device), targets.cuda(device) + with torch.no_grad(): + outputs = net(inputs) + loss = criterion(outputs, targets) + + if isinstance(loss, tuple): + loss_value, outputs = loss + else: + loss_value = loss + + test_loss += loss_value.item() + prec1, prec5 = accuracy(outputs, targets, topk=(1, 5)) + total += targets.size(0) + correct_1 += prec1 + correct_5 += prec5 + + progress_bar(batch_idx, len(testloader), 'Loss: %.3f | Acc: %.3f%% (%d/%d)' + % (test_loss/(batch_idx+1), 100.*float(correct_1)/float(total), correct_1, total)) + + return 100.*float(correct_1)/float(total),100.*float(correct_5)/float(total),test_loss + +acc1,acc5,loss=test() +print('top-1 accuracy: {0:.3f}%, top-5 accuracy: {1:.3f}%'.format(acc1,acc5)) diff --git a/data/source_files/messy/d7648d1163c3.py b/data/source_files/messy/d7648d1163c3.py new file mode 100644 index 0000000000000000000000000000000000000000..8a810acd6b334888a1432a3e590727946894d380 --- /dev/null +++ b/data/source_files/messy/d7648d1163c3.py @@ -0,0 +1,122 @@ +""" +Module for jenkinsapi Node class +""" + +from jenkinsapi.jenkinsbase import JenkinsBase +from jenkinsapi.custom_exceptions import PostRequired +import logging + +try: + from urllib import quote as urlquote +except ImportError: + # Python3 + from urllib.parse import quote as urlquote + +log = logging.getLogger(__name__) + + +class Node(JenkinsBase): + + """ + Class to hold information on nodes that are attached as slaves + to the master jenkins instance + """ + + def __init__(self, baseurl, nodename, jenkins_obj): + """ + Init a node object by providing all relevant pointers to it + :param baseurl: basic url for querying information on a node + :param nodename: hostname of the node + :param jenkins_obj: ref to the jenkins obj + :return: Node obj + """ + self.name = nodename + self.jenkins = jenkins_obj + JenkinsBase.__init__(self, baseurl) + + def get_jenkins_obj(self): + return self.jenkins + + def __str__(self): + return self.name + + def is_online(self): + return not self.poll(tree='offline')['offline'] + + def is_temporarily_offline(self): + return self.poll(tree='temporarilyOffline')['temporarilyOffline'] + + def is_jnlpagent(self): + return self._data['jnlpAgent'] + + def is_idle(self): + return self._data['idle'] + + def set_online(self): + """ + Set node online. + Before change state verify client state: if node set 'offline' + but 'temporarilyOffline' is not set - client has connection problems + and AssertionError raised. + If after run node state has not been changed raise AssertionError. + """ + self.poll() + # Before change state check if client is connected + if self._data['offline'] and not self._data['temporarilyOffline']: + raise AssertionError("Node is offline and not marked as " + "temporarilyOffline, check client " + "connection: offline = %s, " + "temporarilyOffline = %s" % + (self._data['offline'], + self._data['temporarilyOffline'])) + elif self._data['offline'] and self._data['temporarilyOffline']: + self.toggle_temporarily_offline() + if self._data['offline']: + raise AssertionError("The node state is still offline, " + "check client connection:" + " offline = %s, " + "temporarilyOffline = %s" % + (self._data['offline'], + self._data['temporarilyOffline'])) + + def set_offline(self, message="requested from jenkinsapi"): + """ + Set node offline. + If after run node state has not been changed raise AssertionError. + : param message: optional string explain why you are taking this + node offline + """ + if not self._data['offline']: + self.toggle_temporarily_offline(message) + data = self.poll(tree='offline,temporarilyOffline') + if not data['offline']: + raise AssertionError("The node state is still online:" + + "offline = %s , temporarilyOffline = %s" % + (data['offline'], + data['temporarilyOffline'])) + + def toggle_temporarily_offline(self, message="requested from jenkinsapi"): + """ + Switches state of connected node (online/offline) and + set 'temporarilyOffline' property (True/False) + Calling the same method again will bring node status back. + :param message: optional string can be used to explain why you + are taking this node offline + """ + initial_state = self.is_temporarily_offline() + url = self.baseurl + \ + "/toggleOffline?offlineMessage=" + urlquote(message) + try: + html_result = self.jenkins.requester.get_and_confirm_status(url) + except PostRequired: + html_result = self.jenkins.requester.post_and_confirm_status( + url, + data={}) + + self.poll() + log.debug(html_result) + state = self.is_temporarily_offline() + if initial_state == state: + raise AssertionError( + "The node state has not changed: temporarilyOffline = %s" % + state) diff --git a/data/source_files/messy/dda0a29b947a.py b/data/source_files/messy/dda0a29b947a.py new file mode 100644 index 0000000000000000000000000000000000000000..d9ba3c5b12232bbc811a9ad606f2570ac2481108 --- /dev/null +++ b/data/source_files/messy/dda0a29b947a.py @@ -0,0 +1,337 @@ +# Copyright (c) 2016 TUBITAK BILGEM +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_config import cfg + +hyperv_opt_group = cfg.OptGroup("hyperv", + title='The Hyper-V feature', + help=""" +The hyperv feature allows you to configure the Hyper-V hypervisor +driver to be used within an OpenStack deployment. +""") + +hyperv_opts = [ + cfg.FloatOpt('dynamic_memory_ratio', + default=1.0, + help=""" +Dynamic memory ratio + +Enables dynamic memory allocation (ballooning) when set to a value +greater than 1. The value expresses the ratio between the total RAM +assigned to an instance and its startup RAM amount. For example a +ratio of 2.0 for an instance with 1024MB of RAM implies 512MB of +RAM allocated at startup. + +Possible values: + +* 1.0: Disables dynamic memory allocation (Default). +* Float values greater than 1.0: Enables allocation of total implied + RAM divided by this value for startup. +"""), + cfg.BoolOpt('enable_instance_metrics_collection', + default=False, + help=""" +Enable instance metrics collection + +Enables metrics collections for an instance by using Hyper-V's +metric APIs. Collected data can be retrieved by other apps and +services, e.g.: Ceilometer. +"""), + cfg.StrOpt('instances_path_share', + default="", + help=""" +Instances path share + +The name of a Windows share mapped to the "instances_path" dir +and used by the resize feature to copy files to the target host. +If left blank, an administrative share (hidden network share) will +be used, looking for the same "instances_path" used locally. + +Possible values: + +* "": An administrative share will be used (Default). +* Name of a Windows share. + +Related options: + +* "instances_path": The directory which will be used if this option + here is left blank. +"""), + cfg.BoolOpt('limit_cpu_features', + default=False, + help=""" +Limit CPU features + +This flag is needed to support live migration to hosts with +different CPU features and checked during instance creation +in order to limit the CPU features used by the instance. +"""), + cfg.IntOpt('mounted_disk_query_retry_count', + default=10, + min=0, + help=""" +Mounted disk query retry count + +The number of times to retry checking for a mounted disk. +The query runs until the device can be found or the retry +count is reached. + +Possible values: + +* Positive integer values. Values greater than 1 is recommended + (Default: 10). + +Related options: + +* Time interval between disk mount retries is declared with + "mounted_disk_query_retry_interval" option. +"""), + cfg.IntOpt('mounted_disk_query_retry_interval', + default=5, + min=0, + help=""" +Mounted disk query retry interval + +Interval between checks for a mounted disk, in seconds. + +Possible values: + +* Time in seconds (Default: 5). + +Related options: + +* This option is meaningful when the mounted_disk_query_retry_count + is greater than 1. +* The retry loop runs with mounted_disk_query_retry_count and + mounted_disk_query_retry_interval configuration options. +"""), + cfg.IntOpt('power_state_check_timeframe', + default=60, + min=0, + help=""" +Power state check timeframe + +The timeframe to be checked for instance power state changes. +This option is used to fetch the state of the instance from Hyper-V +through the WMI interface, within the specified timeframe. + +Possible values: + +* Timeframe in seconds (Default: 60). +"""), + cfg.IntOpt('power_state_event_polling_interval', + default=2, + min=0, + help=""" +Power state event polling interval + +Instance power state change event polling frequency. Sets the +listener interval for power state events to the given value. +This option enhances the internal lifecycle notifications of +instances that reboot themselves. It is unlikely that an operator +has to change this value. + +Possible values: + +* Time in seconds (Default: 2). +"""), + cfg.StrOpt('qemu_img_cmd', + default="qemu-img.exe", + help=""" +qemu-img command + +qemu-img is required for some of the image related operations +like converting between different image types. You can get it +from here: (http://qemu.weilnetz.de/) or you can install the +Cloudbase OpenStack Hyper-V Compute Driver +(https://cloudbase.it/openstack-hyperv-driver/) which automatically +sets the proper path for this config option. You can either give the +full path of qemu-img.exe or set its path in the PATH environment +variable and leave this option to the default value. + +Possible values: + +* Name of the qemu-img executable, in case it is in the same + directory as the nova-compute service or its path is in the + PATH environment variable (Default). +* Path of qemu-img command (DRIVELETTER:\PATH\TO\QEMU-IMG\COMMAND). + +Related options: + +* If the config_drive_cdrom option is False, qemu-img will be used to + convert the ISO to a VHD, otherwise the config drive will + remain an ISO. To use config drive with Hyper-V, you must + set the ``mkisofs_cmd`` value to the full path to an ``mkisofs.exe`` + installation. +"""), + cfg.StrOpt('vswitch_name', + help=""" +External virtual switch name + +The Hyper-V Virtual Switch is a software-based layer-2 Ethernet +network switch that is available with the installation of the +Hyper-V server role. The switch includes programmatically managed +and extensible capabilities to connect virtual machines to both +virtual networks and the physical network. In addition, Hyper-V +Virtual Switch provides policy enforcement for security, isolation, +and service levels. The vSwitch represented by this config option +must be an external one (not internal or private). + +Possible values: + +* If not provided, the first of a list of available vswitches + is used. This list is queried using WQL. +* Virtual switch name. +"""), + cfg.IntOpt('wait_soft_reboot_seconds', + default=60, + min=0, + help=""" +Wait soft reboot seconds + +Number of seconds to wait for instance to shut down after soft +reboot request is made. We fall back to hard reboot if instance +does not shutdown within this window. + +Possible values: + +* Time in seconds (Default: 60). +"""), + cfg.BoolOpt('config_drive_cdrom', + default=False, + help=""" +Mount config drive as a CD drive. + +OpenStack can be configured to write instance metadata to a config drive, which +is then attached to the instance before it boots. The config drive can be +attached as a disk drive (default) or as a CD drive. + +Related options: + +* This option is meaningful with ``force_config_drive`` option set to ``True`` + or when the REST API call to create an instance will have + ``--config-drive=True`` flag. +* ``config_drive_format`` option must be set to ``iso9660`` in order to use + CD drive as the config drive image. +* To use config drive with Hyper-V, you must set the + ``mkisofs_cmd`` value to the full path to an ``mkisofs.exe`` installation. + Additionally, you must set the ``qemu_img_cmd`` value to the full path + to an ``qemu-img`` command installation. +* You can configure the Compute service to always create a configuration + drive by setting the ``force_config_drive`` option to ``True``. +"""), + cfg.BoolOpt('config_drive_inject_password', + default=False, + help=""" +Inject password to config drive. + +When enabled, the admin password will be available from the config drive image. + +Related options: + +* This option is meaningful when used with other options that enable + config drive usage with Hyper-V, such as ``force_config_drive``. +"""), + cfg.IntOpt('volume_attach_retry_count', + default=10, + min=0, + help=""" +Volume attach retry count + +The number of times to retry attaching a volume. Volume attachment +is retried until success or the given retry count is reached. + +Possible values: + +* Positive integer values (Default: 10). + +Related options: + +* Time interval between attachment attempts is declared with + volume_attach_retry_interval option. +"""), + cfg.IntOpt('volume_attach_retry_interval', + default=5, + min=0, + help=""" +Volume attach retry interval + +Interval between volume attachment attempts, in seconds. + +Possible values: + +* Time in seconds (Default: 5). + +Related options: + +* This options is meaningful when volume_attach_retry_count + is greater than 1. +* The retry loop runs with volume_attach_retry_count and + volume_attach_retry_interval configuration options. +"""), + cfg.BoolOpt('enable_remotefx', + default=False, + help=""" +Enable RemoteFX feature + +This requires at least one DirectX 11 capable graphics adapter for +Windows / Hyper-V Server 2012 R2 or newer and RDS-Virtualization +feature has to be enabled. + +Instances with RemoteFX can be requested with the following flavor +extra specs: + +**os:resolution**. Guest VM screen resolution size. Acceptable values:: + + 1024x768, 1280x1024, 1600x1200, 1920x1200, 2560x1600, 3840x2160 + +``3840x2160`` is only available on Windows / Hyper-V Server 2016. + +**os:monitors**. Guest VM number of monitors. Acceptable values:: + + [1, 4] - Windows / Hyper-V Server 2012 R2 + [1, 8] - Windows / Hyper-V Server 2016 + +**os:vram**. Guest VM VRAM amount. Only available on +Windows / Hyper-V Server 2016. Acceptable values:: + + 64, 128, 256, 512, 1024 +"""), + cfg.BoolOpt('use_multipath_io', + default=False, + help=""" +Use multipath connections when attaching iSCSI or FC disks. + +This requires the Multipath IO Windows feature to be enabled. MPIO must be +configured to claim such devices. +"""), + cfg.ListOpt('iscsi_initiator_list', + default=[], + help=""" +List of iSCSI initiators that will be used for estabilishing iSCSI sessions. + +If none are specified, the Microsoft iSCSI initiator service will choose the +initiator. +""") +] + + +def register_opts(conf): + conf.register_group(hyperv_opt_group) + conf.register_opts(hyperv_opts, group=hyperv_opt_group) + + +def list_opts(): + return {hyperv_opt_group: hyperv_opts} diff --git a/data/source_files/messy/e25f61b03cd1.py b/data/source_files/messy/e25f61b03cd1.py new file mode 100644 index 0000000000000000000000000000000000000000..8a8ce25aff69e17f6f7281d206c301403a98d23f --- /dev/null +++ b/data/source_files/messy/e25f61b03cd1.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Test Tango device server for use with scaling tests.""" +import sys +import time +import argparse + +import tango +from tango.server import run + + +from TestDevice import TestDevice + + +def init_callback(): + """Report server start up times. + + This callback is executed post server initialisation. + """ + # pylint: disable=global-statement + global START_TIME + db = tango.Database() + elapsed = time.time() - START_TIME + list_devices() + exported_devices = list(db.get_device_exported('test/*')) + num_devices = len(exported_devices) + file = open('results.txt', 'a') + file.write(',{},{}\n'.format(elapsed, elapsed / num_devices)) + print('>> Time taken to start devices: {:.4f} s ({:.4f} s/dev)' + .format(elapsed, elapsed / num_devices)) + + +def delete_server(): + """Delete the TestDeviceServer from the tango db.""" + db = tango.Database() + db.set_timeout_millis(50000) + server = 'TestDeviceServer/1' + + server_list = list(db.get_server_list(server)) + + if server in server_list: + start_time = time.time() + db.delete_server('TestDeviceServer/1') + print('- Delete server: {:.4f} s'.format(time.time() - start_time)) + + +def register(num_devices): + """Register devices in the tango db.""" + db = tango.Database() + device_info = tango.DbDevInfo() + + device_info.server = 'TestDeviceServer/1' + # pylint: disable=protected-access + device_info._class = 'TestDevice' + + start_time = time.time() + for device_id in range(num_devices): + device_info.name = 'test/test_device/{:05d}'.format(device_id) + db.add_device(device_info) + elapsed = time.time() - start_time + file = open('results.txt', 'a') + file.write('{},{},{}'.format(num_devices, elapsed, elapsed/num_devices)) + print('- Register devices: {:.4f} s ({:.4f} s/device)' + .format(elapsed, elapsed / num_devices)) + + +def list_devices(): + """List tango devices associated with the TestDeviceServer.""" + db = tango.Database() + server_instance = 'TestDeviceServer/1' + device_class = 'TestDevice' + devices = list(db.get_device_name(server_instance, device_class)) + print('- No. registered devices: {}'.format(len(devices))) + + exported_devices = list(db.get_device_exported('test/*')) + print('- No. running devices: {}'.format(len(exported_devices))) + + +def main(args=None, **kwargs): + """Run (start) the device server.""" + run([TestDevice], verbose=True, msg_stream=sys.stdout, + post_init_callback=init_callback, raises=False, + args=args, **kwargs) + + +if __name__ == '__main__': + + PARSER = argparse.ArgumentParser(description='Device registration time.') + PARSER.add_argument('num_devices', metavar='N', type=int, + default=1, nargs='?', + help='Number of devices to start.') + ARGS = PARSER.parse_args() + delete_server() + time.sleep(0.5) + + list_devices() + print('* Registering {} devices'.format(ARGS.num_devices)) + + register(ARGS.num_devices) + + list_devices() + + print('* Starting server ...') + sys.argv = ['TestDeviceServer', '1', '-v4'] + START_TIME = time.time() + main() diff --git a/data/source_files/messy/e444a542540d.py b/data/source_files/messy/e444a542540d.py new file mode 100644 index 0000000000000000000000000000000000000000..d9c21d6803d82661080e36eb0e94a3b82f8b2f7c --- /dev/null +++ b/data/source_files/messy/e444a542540d.py @@ -0,0 +1,429 @@ +#!/usr/bin/env python +# +from actingweb import actor +from actingweb import config +from actingweb import trust +from actingweb import auth + +import webapp2 + +import os +from google.appengine.ext.webapp import template +import json +import logging +import datetime +import time + + +# /trust handlers +# +# GET /trust with query parameters (relationship, type, and peerid) to retrieve trust relationships (auth: only creator and admins allowed) +# POST /trust with json body to initiate a trust relationship between this +# actor and another (reciprocal relationship) (auth: only creator and admins allowed) +# POST /trust/{relationship} with json body to create new trust +# relationship (see config.py for default relationship and auto-accept, no +# auth required) +# GET /trust/{relationship}}/{actorid} to get details on a specific relationship (auth: creator, admin, or peer secret) +# POST /trust/{relationship}}/{actorid} to send information to a peer about changes in the relationship +# PUT /trust/{relationship}}/{actorid} with a json body to change details on a relationship (baseuri, secret, desc) (auth: creator, +# admin, or peer secret) +# DELETE /trust/{relationship}}/{actorid} to delete a relationship (with +# ?peer=true if the delete is from the peer) (auth: creator, admin, or +# peer secret) + +# Handling requests to trust/ +class rootHandler(webapp2.RequestHandler): + + def get(self, id): + if self.request.get('_method') == 'POST': + self.post(id) + return + (Config, myself, check) = auth.init_actingweb(appreq=self, + id=id, path='trust') + if not myself or check.response["code"] != 200: + return + if not check.checkAuthorisation(path='trust', method='GET'): + self.response.set_status(403) + return + relationship = '' + type = '' + peerid = '' + relationship = self.request.get('relationship') + type = self.request.get('type') + peerid = self.request.get('peerid') + + relationships = myself.getTrustRelationships( + relationship=relationship, peerid=peerid, type=type) + if not relationships: + self.response.set_status(404, 'Not found') + return + pairs = [] + for rel in relationships: + pairs.append({ + 'baseuri': rel.baseuri, + 'id': myself.id, + 'peerid': rel.peerid, + 'relationship': rel.relationship, + 'approved': rel.approved, + 'peer_approved': rel.peer_approved, + 'verified': rel.verified, + 'type': rel.type, + 'desc': rel.desc, + 'secret': rel.secret, + }) + out = json.dumps(pairs) + self.response.write(out) + self.response.headers["Content-Type"] = "application/json" + self.response.set_status(200, 'Ok') + + def post(self, id): + (Config, myself, check) = auth.init_actingweb(appreq=self, + id=id, path='trust') + if not myself or check.response["code"] != 200: + return + if not check.checkAuthorisation(path='trust', method='POST'): + self.response.set_status(403) + return + secret = '' + desc = '' + relationship = Config.default_relationship + type = '' + try: + params = json.loads(self.request.body.decode('utf-8', 'ignore')) + if 'url' in params: + url = params['url'] + else: + url = '' + if 'relationship' in params: + relationship = params['relationship'] + if 'type' in params: + type = params['type'] + if 'desc' in params: + desc = params['desc'] + except ValueError: + url = self.request.get('url') + relationship = self.request.get('relationship') + type = self.request.get('type') + if len(url) == 0: + self.response.set_status(400, 'Missing peer URL') + return + secret = Config.newToken() + + new_trust = myself.createReciprocalTrust( + url=url, secret=secret, desc=desc, relationship=relationship, type=type) + if not new_trust: + self.response.set_status(408, 'Unable to create trust relationship') + return + self.response.headers.add_header( + "Location", str(Config.root + myself.id + '/trust/' + new_trust.relationship + '/' + new_trust.peerid)) + pair = { + 'baseuri': new_trust.baseuri, + 'id': myself.id, + 'peerid': new_trust.peerid, + 'relationship': new_trust.relationship, + 'approved': new_trust.approved, + 'peer_approved': new_trust.peer_approved, + 'verified': new_trust.verified, + 'type': new_trust.type, + 'desc': new_trust.desc, + 'secret': new_trust.secret, + } + out = json.dumps(pair) + self.response.write(out) + self.response.headers["Content-Type"] = "application/json" + self.response.set_status(201, 'Created') + + +# Handling requests to /trust/*, e.g. /trust/friend +class relationshipHandler(webapp2.RequestHandler): + + def get(self, id, relationship): + if self.request.get('_method') == 'POST': + self.post(id, relationship) + return + self.response.set_status(404, "Not found") + + def put(self, id, relationship): + (Config, myself, check) = auth.init_actingweb(appreq=self, + id=id, path='trust', subpath=relationship, add_response=False) + if not myself: + return + if relationship != 'trustee': + self.response.set_status(404, "Not found") + return + # Access is the same as /trust + if not check.checkAuthorisation(path='trust', method='POST'): + self.response.set_status(403) + return + try: + params = json.loads(self.request.body.decode('utf-8', 'ignore')) + if 'trustee_root' in params: + trustee_root = params['trustee_root'] + else: + trustee_root = '' + if 'creator' in params: + creator = params['creator'] + else: + creator = None + except ValueError: + self.response.set_status(400, 'No json content') + return + if len(trustee_root) > 0: + myself.setProperty('trustee_root', trustee_root) + if creator: + myself.modify(creator=creator) + self.response.set_status(204, 'No content') + + def delete(self, id, relationship): + (Config, myself, check) = auth.init_actingweb(appreq=self, + id=id, path='trust', + subpath=relationship, + add_response=False) + if not myself: + return + if relationship != 'trustee': + self.response.set_status(404, "Not found") + return + # Access is the same as /trust + if not check.checkAuthorisation(path='trust', method='DELETE'): + self.response.set_status(403) + return + myself.deleteProperty('trustee_root') + self.response.set_status(204, 'No content') + + def post(self, id, relationship): + (Config, myself, check) = auth.init_actingweb(appreq=self, + id=id, path='trust', + subpath=relationship, + add_response=False) + if not myself: + return + if not check.checkAuthorisation(path='trust', subpath='', method='POST'): + self.response.set_status(403) + return + try: + params = json.loads(self.request.body.decode('utf-8', 'ignore')) + if 'baseuri' in params: + baseuri = params['baseuri'] + else: + baseuri = '' + if 'id' in params: + peerid = params['id'] + else: + peerid = '' + if 'type' in params: + type = params['type'] + else: + type = '' + if 'secret' in params: + secret = params['secret'] + else: + secret = '' + if 'desc' in params: + desc = params['desc'] + else: + desc = '' + if 'verify' in params: + verificationToken = params['verify'] + else: + verificationToken = None + except ValueError: + self.response.set_status(400, 'No json content') + return + + if len(baseuri) == 0 or len(peerid) == 0 or len(type) == 0: + self.response.set_status(400, 'Missing mandatory attributes') + return + if Config.auto_accept_default_relationship and Config.default_relationship == relationship: + approved = True + else: + approved = False + # Since we received a request for a relationship, assume that peer has approved + new_trust = myself.createVerifiedTrust(baseuri=baseuri, peerid=peerid, approved=approved, secret=secret, + verificationToken=verificationToken, type=type, peer_approved=True, relationship=relationship, desc=desc) + if not new_trust: + self.response.set_status(403, 'Forbidden') + return + self.response.headers.add_header( + "Location", str(Config.root + myself.id + '/trust/' + new_trust.relationship + "/" + new_trust.peerid)) + pair = { + 'baseuri': new_trust.baseuri, + 'id': myself.id, + 'peerid': new_trust.peerid, + 'relationship': new_trust.relationship, + 'approved': new_trust.approved, + 'peer_approved': new_trust.peer_approved, + 'verified': new_trust.verified, + 'type': new_trust.type, + 'desc': new_trust.desc, + 'secret': new_trust.secret, + } + out = json.dumps(pair) + self.response.write(out) + self.response.headers["Content-Type"] = "application/json" + if approved: + self.response.set_status(201, 'Created') + else: + self.response.set_status(202, 'Accepted') + + +# Handling requests to specific relationships, e.g. /trust/friend/12f2ae53bd +class trustHandler(webapp2.RequestHandler): + + def get(self, id, relationship, peerid): + if self.request.get('_method') == 'PUT': + self.put(id, relationship, peerid) + return + if self.request.get('_method') == 'DELETE': + self.delete(id, relationship, peerid) + return + logging.debug('GET trust headers: ' + str(self.request.headers)) + (Config, myself, check) = auth.init_actingweb(appreq=self, + id=id, path='trust', subpath=relationship) + if not myself or check.response["code"] != 200: + return + if not check.checkAuthorisation(path='trust', subpath='/', method='GET', peerid=peerid): + self.response.set_status(403) + return + relationships = myself.getTrustRelationships( + relationship=relationship, peerid=peerid) + if not relationships: + self.response.set_status(404, 'Not found') + return + my_trust = relationships[0] + # If the peer did a GET to verify + if check.trust and check.trust.peerid == peerid and not my_trust.verified: + my_trust.modify(verified=True) + verificationToken = my_trust.verificationToken + else: + verificationToken = '' + pair = { + 'baseuri': my_trust.baseuri, + 'id': myself.id, + 'peerid': my_trust.peerid, + 'relationship': my_trust.relationship, + 'approved': my_trust.approved, + 'peer_approved': my_trust.peer_approved, + 'verified': my_trust.verified, + 'verificationToken': verificationToken, + 'type': my_trust.type, + 'desc': my_trust.desc, + 'secret': my_trust.secret, + } + out = json.dumps(pair) + self.response.write(out) + self.response.headers["Content-Type"] = "application/json" + if my_trust.approved: + self.response.set_status(200, 'Ok') + else: + self.response.set_status(202, 'Accepted') + + def post(self, id, relationship, peerid): + (Config, myself, check) = auth.init_actingweb(appreq=self, + id=id, path='trust', subpath=relationship) + if not myself or check.response["code"] != 200: + return + if not check.checkAuthorisation(path='trust', subpath='/', method='POST', peerid=peerid): + self.response.set_status(403) + return + try: + params = json.loads(self.request.body.decode('utf-8', 'ignore')) + peer_approved = None + if 'approved' in params: + if params['approved'] and params['approved'] == True: + peer_approved = True + except ValueError: + self.response.set_status(400, 'No json content') + return + if myself.modifyTrustAndNotify(relationship=relationship, peerid=peerid, peer_approved=peer_approved): + self.response.set_status(204, 'Ok') + else: + self.response.set_status(405, 'Not modified') + + def put(self, id, relationship, peerid): + (Config, myself, check) = auth.init_actingweb(appreq=self, + id=id, path='trust', subpath=relationship) + if not myself or check.response["code"] != 200: + return + if not check.checkAuthorisation(path='trust', subpath='/', method='PUT', peerid=peerid): + self.response.set_status(403) + return + try: + params = json.loads(self.request.body.decode('utf-8', 'ignore')) + if 'baseuri' in params: + baseuri = params['baseuri'] + else: + baseuri = '' + if 'desc' in params: + desc = params['desc'] + else: + desc = '' + if 'approved' in params: + if params['approved'] == True or params['approved'].lower() == "true": + approved = True + else: + approved = None + except ValueError: + if not self.request.get('_method') or self.request.get('_method') != "PUT": + self.response.set_status(400, 'No json content') + return + if self.request.get('approved') and len(self.request.get('approved')) > 0: + if self.request.get('approved').lower() == "true": + approved = True + else: + approved = None + if self.request.get('baseuri') and len(self.request.get('baseuri')) > 0: + baseuri = self.request.get('baseuri') + else: + baseuri = '' + if self.request.get('desc') and len(self.request.get('desc')) > 0: + desc = self.request.get('desc') + else: + desc = '' + if myself.modifyTrustAndNotify(relationship=relationship, peerid=peerid, baseuri=baseuri, approved=approved, desc=desc): + self.response.set_status(204, 'Ok') + else: + self.response.set_status(405, 'Not modified') + + def delete(self, id, relationship, peerid): + (Config, myself, check) = auth.init_actingweb(appreq=self, + id=id, path='trust', subpath=relationship, add_response=False) + if not myself or (check.response["code"] != 200 and check.response["code"] != 401): + auth.add_auth_response(appreq=self, auth_obj=check) + return + # We allow non-approved peers to delete even if we haven't approved the relationship yet + if not check.checkAuthorisation(path='trust', subpath='/', method='DELETE', peerid=peerid, approved=False): + self.response.set_status(403) + return + isPeer = False + if check.trust and check.trust.peerid == peerid: + isPeer = True + else: + # Use of GET param peer=true is a way of forcing no deletion of a peer + # relationship even when requestor is not a peer (primarily for testing purposes) + peerGet = self.request.get('peer').lower() + if peerGet.lower() == "true": + isPeer = True + Config = config.config() + relationships = myself.getTrustRelationships( + relationship=relationship, peerid=peerid) + if not relationships: + self.response.set_status(404, 'Not found') + return + my_trust = relationships[0] + if isPeer: + deleted = myself.deleteReciprocalTrust(peerid=peerid, deletePeer=False) + else: + deleted = myself.deleteReciprocalTrust(peerid=peerid, deletePeer=True) + if not deleted: + self.response.set_status(502, 'Not able to delete relationship with peer.') + return + self.response.set_status(204, 'Ok') + + +application = webapp2.WSGIApplication([ + webapp2.Route(r'//trust<:/?>', rootHandler, name='rootHandler'), + webapp2.Route(r'//trust/<:/?>', + relationshipHandler, name='relationshipHandler'), + webapp2.Route(r'//trust//<:/?>', trustHandler, name='trustHandler'), +], debug=True) diff --git a/data/source_files/messy/e727c891dc65.py b/data/source_files/messy/e727c891dc65.py new file mode 100644 index 0000000000000000000000000000000000000000..8a0ead4871ddc6b047237522f5f34d4d48742f52 --- /dev/null +++ b/data/source_files/messy/e727c891dc65.py @@ -0,0 +1,346 @@ +# Training to a set of multiple objects (e.g. ShapeNet or DTU) +# tensorboard logs available in logs/ + +import sys +import os + +sys.path.insert( + 0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "src")) +) + +import warnings +import trainlib +from model import make_model, loss +from render import NeRFRenderer +from data import get_split_dataset +import util +import numpy as np +import torch.nn.functional as F +import torch +from dotmap import DotMap + + +def extra_args(parser): + parser.add_argument( + "--batch_size", "-B", type=int, default=4, help="Object batch size ('SB')" + ) + parser.add_argument( + "--nviews", + "-V", + type=str, + default="1", + help="Number of source views (multiview); put multiple (space delim) to pick randomly per batch ('NV')", + ) + parser.add_argument( + "--freeze_enc", + action="store_true", + default=None, + help="Freeze encoder weights and only train MLP", + ) + + parser.add_argument( + "--no_bbox_step", + type=int, + default=100000, + help="Step to stop using bbox sampling", + ) + parser.add_argument( + "--fixed_test", + action="store_true", + default=None, + help="Freeze encoder weights and only train MLP", + ) + return parser + + +args, conf = util.args.parse_args(extra_args, training=True, default_ray_batch_size=128) +device = util.get_cuda(args.gpu_id[0]) + +dset, val_dset, _ = get_split_dataset(args.dataset_format, args.datadir) +print( + "dset z_near {}, z_far {}, lindisp {}".format(dset.z_near, dset.z_far, dset.lindisp) +) + +net = make_model(conf["model"]).to(device=device) +net.stop_encoder_grad = args.freeze_enc +if args.freeze_enc: + print("Encoder frozen") + net.encoder.eval() + +renderer = NeRFRenderer.from_conf(conf["renderer"], lindisp=dset.lindisp,).to( + device=device +) + +# Parallize +render_par = renderer.bind_parallel(net, args.gpu_id).eval() + +nviews = list(map(int, args.nviews.split())) + + +class PixelNeRFTrainer(trainlib.Trainer): + def __init__(self): + super().__init__(net, dset, val_dset, args, conf["train"], device=device) + self.renderer_state_path = "%s/%s/_renderer" % ( + self.args.checkpoints_path, + self.args.name, + ) + + self.lambda_coarse = conf.get_float("loss.lambda_coarse") + self.lambda_fine = conf.get_float("loss.lambda_fine", 1.0) + print( + "lambda coarse {} and fine {}".format(self.lambda_coarse, self.lambda_fine) + ) + self.rgb_coarse_crit = loss.get_rgb_loss(conf["loss.rgb"], True) + fine_loss_conf = conf["loss.rgb"] + if "rgb_fine" in conf["loss"]: + print("using fine loss") + fine_loss_conf = conf["loss.rgb_fine"] + self.rgb_fine_crit = loss.get_rgb_loss(fine_loss_conf, False) + + if args.resume: + if os.path.exists(self.renderer_state_path): + renderer.load_state_dict( + torch.load(self.renderer_state_path, map_location=device) + ) + + self.z_near = dset.z_near + self.z_far = dset.z_far + + self.use_bbox = args.no_bbox_step > 0 + + def post_batch(self, epoch, batch): + renderer.sched_step(args.batch_size) + + def extra_save_state(self): + torch.save(renderer.state_dict(), self.renderer_state_path) + + def calc_losses(self, data, is_train=True, global_step=0): + if "images" not in data: + return {} + all_images = data["images"].to(device=device) # (SB, NV, 3, H, W) + + SB, NV, _, H, W = all_images.shape + all_poses = data["poses"].to(device=device) # (SB, NV, 4, 4) + all_bboxes = data.get("bbox") # (SB, NV, 4) cmin rmin cmax rmax + all_focals = data["focal"] # (SB) + all_c = data.get("c") # (SB) + + if self.use_bbox and global_step >= args.no_bbox_step: + self.use_bbox = False + print(">>> Stopped using bbox sampling @ iter", global_step) + + if not is_train or not self.use_bbox: + all_bboxes = None + + all_rgb_gt = [] + all_rays = [] + + curr_nviews = nviews[torch.randint(0, len(nviews), ()).item()] + if curr_nviews == 1: + image_ord = torch.randint(0, NV, (SB, 1)) + else: + image_ord = torch.empty((SB, curr_nviews), dtype=torch.long) + for obj_idx in range(SB): + if all_bboxes is not None: + bboxes = all_bboxes[obj_idx] + images = all_images[obj_idx] # (NV, 3, H, W) + poses = all_poses[obj_idx] # (NV, 4, 4) + focal = all_focals[obj_idx] + c = None + if "c" in data: + c = data["c"][obj_idx] + if curr_nviews > 1: + # Somewhat inefficient, don't know better way + image_ord[obj_idx] = torch.from_numpy( + np.random.choice(NV, curr_nviews, replace=False) + ) + images_0to1 = images * 0.5 + 0.5 + + cam_rays = util.gen_rays( + poses, W, H, focal, self.z_near, self.z_far, c=c + ) # (NV, H, W, 8) + rgb_gt_all = images_0to1 + rgb_gt_all = ( + rgb_gt_all.permute(0, 2, 3, 1).contiguous().reshape(-1, 3) + ) # (NV, H, W, 3) + + if all_bboxes is not None: + pix = util.bbox_sample(bboxes, args.ray_batch_size) + pix_inds = pix[..., 0] * H * W + pix[..., 1] * W + pix[..., 2] + else: + pix_inds = torch.randint(0, NV * H * W, (args.ray_batch_size,)) + + rgb_gt = rgb_gt_all[pix_inds] # (ray_batch_size, 3) + rays = cam_rays.view(-1, cam_rays.shape[-1])[pix_inds].to( + device=device + ) # (ray_batch_size, 8) + + all_rgb_gt.append(rgb_gt) + all_rays.append(rays) + + all_rgb_gt = torch.stack(all_rgb_gt) # (SB, ray_batch_size, 3) + all_rays = torch.stack(all_rays) # (SB, ray_batch_size, 8) + + image_ord = image_ord.to(device) + src_images = util.batched_index_select_nd( + all_images, image_ord + ) # (SB, NS, 3, H, W) + src_poses = util.batched_index_select_nd(all_poses, image_ord) # (SB, NS, 4, 4) + + all_bboxes = all_poses = all_images = None + + net.encode( + src_images, + src_poses, + all_focals.to(device=device), + c=all_c.to(device=device) if all_c is not None else None, + ) + + render_dict = DotMap(render_par(all_rays, want_weights=True,)) + coarse = render_dict.coarse + fine = render_dict.fine + using_fine = len(fine) > 0 + + loss_dict = {} + + rgb_loss = self.rgb_coarse_crit(coarse.rgb, all_rgb_gt) + if rgb_loss.isnan().any().item()==True: + raise() + loss_dict["rc"] = rgb_loss.item() * self.lambda_coarse + if using_fine: + fine_loss = self.rgb_fine_crit(fine.rgb, all_rgb_gt) + rgb_loss = rgb_loss * self.lambda_coarse + fine_loss * self.lambda_fine + loss_dict["rf"] = fine_loss.item() * self.lambda_fine + + loss = rgb_loss + if is_train: + loss.backward() + loss_dict["t"] = loss.item() + + return loss_dict + + def train_step(self, data, global_step): + return self.calc_losses(data, is_train=True, global_step=global_step) + + def eval_step(self, data, global_step): + renderer.eval() + losses = self.calc_losses(data, is_train=False, global_step=global_step) + renderer.train() + return losses + + def vis_step(self, data, global_step, idx=None): + if "images" not in data: + return {} + if idx is None: + batch_idx = np.random.randint(0, data["images"].shape[0]) + else: + print(idx) + batch_idx = idx + images = data["images"][batch_idx].to(device=device) # (NV, 3, H, W) + poses = data["poses"][batch_idx].to(device=device) # (NV, 4, 4) + focal = data["focal"][batch_idx : batch_idx + 1] # (1) + c = data.get("c") + if c is not None: + c = c[batch_idx : batch_idx + 1] # (1) + NV, _, H, W = images.shape + cam_rays = util.gen_rays( + poses, W, H, focal, self.z_near, self.z_far, c=c + ) # (NV, H, W, 8) + images_0to1 = images * 0.5 + 0.5 # (NV, 3, H, W) + + curr_nviews = nviews[torch.randint(0, len(nviews), (1,)).item()] + views_src = np.sort(np.random.choice(NV, curr_nviews, replace=False)) + view_dest = np.random.randint(0, NV - curr_nviews) + for vs in range(curr_nviews): + view_dest += view_dest >= views_src[vs] + views_src = torch.from_numpy(views_src) + + # set renderer net to eval mode + renderer.eval() + source_views = ( + images_0to1[views_src] + .permute(0, 2, 3, 1) + .cpu() + .numpy() + .reshape(-1, H, W, 3) + ) + + gt = images_0to1[view_dest].permute(1, 2, 0).cpu().numpy().reshape(H, W, 3) + with torch.no_grad(): + test_rays = cam_rays[view_dest] # (H, W, 8) + test_images = images[views_src] # (NS, 3, H, W) + net.encode( + test_images.unsqueeze(0), + poses[views_src].unsqueeze(0), + focal.to(device=device), + c=c.to(device=device) if c is not None else None, + ) + test_rays = test_rays.reshape(1, H * W, -1) + render_dict = DotMap(render_par(test_rays, want_weights=True)) + coarse = render_dict.coarse + fine = render_dict.fine + + using_fine = len(fine) > 0 + + alpha_coarse_np = coarse.weights[0].sum(dim=-1).cpu().numpy().reshape(H, W) + rgb_coarse_np = coarse.rgb[0].cpu().numpy().reshape(H, W, 3) + depth_coarse_np = coarse.depth[0].cpu().numpy().reshape(H, W) + + if using_fine: + alpha_fine_np = fine.weights[0].sum(dim=1).cpu().numpy().reshape(H, W) + depth_fine_np = fine.depth[0].cpu().numpy().reshape(H, W) + rgb_fine_np = fine.rgb[0].cpu().numpy().reshape(H, W, 3) + + print("c rgb min {} max {}".format(rgb_coarse_np.min(), rgb_coarse_np.max())) + print( + "c alpha min {}, max {}".format( + alpha_coarse_np.min(), alpha_coarse_np.max() + ) + ) + alpha_coarse_cmap = util.cmap(alpha_coarse_np) / 255 + depth_coarse_cmap = util.cmap(depth_coarse_np) / 255 + vis_list = [ + *source_views, + gt, + depth_coarse_cmap, + rgb_coarse_np, + alpha_coarse_cmap, + ] + + vis_coarse = np.hstack(vis_list) + vis = vis_coarse + + if using_fine: + print("f rgb min {} max {}".format(rgb_fine_np.min(), rgb_fine_np.max())) + print( + "f alpha min {}, max {}".format( + alpha_fine_np.min(), alpha_fine_np.max() + ) + ) + depth_fine_cmap = util.cmap(depth_fine_np) / 255 + alpha_fine_cmap = util.cmap(alpha_fine_np) / 255 + vis_list = [ + *source_views, + gt, + depth_fine_cmap, + rgb_fine_np, + alpha_fine_cmap, + ] + + vis_fine = np.hstack(vis_list) + vis = np.vstack((vis_coarse, vis_fine)) + rgb_psnr = rgb_fine_np + else: + rgb_psnr = rgb_coarse_np + + psnr = util.psnr(rgb_psnr, gt) + vals = {"psnr": psnr} + print("psnr", psnr) + + # set the renderer network back to train mode + renderer.train() + return vis, vals + + +trainer = PixelNeRFTrainer() +trainer.start() diff --git a/data/source_files/messy/e74dec1c1520.py b/data/source_files/messy/e74dec1c1520.py new file mode 100644 index 0000000000000000000000000000000000000000..d9ee27c57dbf76a3c2165139cae647ead0e58c46 --- /dev/null +++ b/data/source_files/messy/e74dec1c1520.py @@ -0,0 +1,188 @@ +import struct +from typing import Tuple + +from ledgercomm import Transport + +from boilerplate_client.boilerplate_cmd_builder import BoilerplateCommandBuilder, InsType +from boilerplate_client.button import Button +from boilerplate_client.exception import DeviceException +from boilerplate_client.transaction import Transaction +from neo3.network import payloads + + +class BoilerplateCommand: + def __init__(self, + transport: Transport, + debug: bool = False) -> None: + self.transport = transport + self.builder = BoilerplateCommandBuilder(debug=debug) + self.debug = debug + + def get_app_and_version(self) -> Tuple[str, str]: + sw, response = self.transport.exchange_raw( + self.builder.get_app_and_version() + ) # type: int, bytes + + if sw != 0x9000: + raise DeviceException(error_code=sw, ins=0x01) + + # response = format_id (1) || + # app_name_len (1) || + # app_name (var) || + # version_len (1) || + # version (var) || + offset: int = 0 + + format_id: int = response[offset] + offset += 1 + app_name_len: int = response[offset] + offset += 1 + app_name: str = response[offset:offset + app_name_len].decode("ascii") + offset += app_name_len + version_len: int = response[offset] + offset += 1 + version: str = response[offset:offset + version_len].decode("ascii") + offset += version_len + + return app_name, version + + def get_version(self) -> Tuple[int, int, int]: + sw, response = self.transport.exchange_raw( + self.builder.get_version() + ) # type: int, bytes + + if sw != 0x9000: + raise DeviceException(error_code=sw, ins=InsType.INS_GET_VERSION) + + # response = MAJOR (1) || MINOR (1) || PATCH (1) + assert len(response) == 3 + + major, minor, patch = struct.unpack( + "BBB", + response + ) # type: int, int, int + + return major, minor, patch + + def get_app_name(self) -> str: + sw, response = self.transport.exchange_raw( + self.builder.get_app_name() + ) # type: int, bytes + + if sw != 0x9000: + raise DeviceException(error_code=sw, ins=InsType.INS_GET_APP_NAME) + + return response.decode("ascii") + + def get_public_key(self, bip44_path: str, display: bool = False) -> bytes: + sw, response = self.transport.exchange_raw( + self.builder.get_public_key(bip44_path=bip44_path) + ) # type: int, bytes + + if sw != 0x9000: + raise DeviceException(error_code=sw, ins=InsType.INS_GET_PUBLIC_KEY) + + assert len(response) == 65 # 04 + 64 bytes of uncompressed key + + return response + + def sign_tx(self, bip44_path: str, transaction: payloads.Transaction, network_magic: int, button: Button) -> Tuple[int, bytes]: + sw: int + response: bytes = b"" + + for is_last, chunk in self.builder.sign_tx(bip44_path=bip44_path, + transaction=transaction, + network_magic=network_magic): + self.transport.send_raw(chunk) + + if is_last: + # Review Transaction + button.right_click() + # Destination address + button.right_click() + button.right_click() + button.right_click() + # Token Amount + button.right_click() + # Target network + button.right_click() + # System fee + button.right_click() + # Network fee + button.right_click() + # Total fees + button.right_click() + # Valid until + button.right_click() + # Signer 1 of 1 + button.right_click() + # Account 1/3, 2/3, 3/3 + button.right_click() + button.right_click() + button.right_click() + + # Scope + button.right_click() + + # custom contracts + if (len(transaction.signers) > 0 and + payloads.WitnessScope.CUSTOM_CONTRACTS in transaction.signers[0].scope): + for _ in range(len(transaction.signers[0].allowed_contracts)): + button.right_click() + button.right_click() + button.right_click() + + # Approve + button.both_click() + + sw, response = self.transport.recv() # type: int, bytes + + if sw != 0x9000: + raise DeviceException(error_code=sw, ins=InsType.INS_SIGN_TX) + + return response + + def sign_vote_tx(self, bip44_path: str, transaction: Transaction, network_magic: int, button: Button) -> Tuple[int, bytes]: + sw: int + response: bytes = b"" + + for is_last, chunk in self.builder.sign_tx(bip44_path=bip44_path, + transaction=transaction, + network_magic=network_magic): + self.transport.send_raw(chunk) + + if is_last: + # Review Transaction + button.right_click() + # Vote to public key + button.right_click() + button.right_click() + button.right_click() + button.right_click() + # Target network + button.right_click() + # System fee + button.right_click() + # Network fee + button.right_click() + # Total fees + button.right_click() + # Valid until + button.right_click() + # Signer 1 of 1 + button.right_click() + # Account 1/3, 2/3, 3/3 + button.right_click() + button.right_click() + button.right_click() + # Scope + button.right_click() + # Approve + button.both_click() + + sw, response = self.transport.recv() # type: int, bytes + + if sw != 0x9000: + raise DeviceException(error_code=sw, ins=InsType.INS_SIGN_TX) + + return response \ No newline at end of file diff --git a/data/source_files/messy/e8783f0f6da2.py b/data/source_files/messy/e8783f0f6da2.py new file mode 100644 index 0000000000000000000000000000000000000000..d9d4e94302ccb3b8bcc4d40fbc60872ee3780872 --- /dev/null +++ b/data/source_files/messy/e8783f0f6da2.py @@ -0,0 +1,67 @@ +import unittest + +try: + from unittest.mock import * +except ImportError: + from mock import * + +from msgpack import * + +import bootloader_read_config +from commands import * +import sys +import json + + +class ReadConfigToolTestCase(unittest.TestCase): + @patch('utils.write_command_retry') + @patch('utils.write_command') + @patch('utils.open_connection') + @patch('builtins.print') + def test_integration(self, print_mock, open_conn, write_command, + write_command_retry): + sys.argv = "test.py -p /dev/ttyUSB0 0 1 2".split() + configs = [{'id': i} for i in range(3)] + + write_command_retry.return_value = { + i: packb(configs[i]) for i in range(3) + } + + open_conn.return_value = object() + + bootloader_read_config.main() + + write_command_retry.assert_any_call(open_conn.return_value, + encode_read_config(), [0, 1, 2]) + + all_configs = {i: configs[i] for i in range(3)} + + print_mock.assert_any_call(json.dumps(all_configs, indent=4, + sort_keys=True)) + + @patch('utils.open_connection') + @patch('utils.write_command_retry') + @patch('utils.write_command') + @patch('utils.read_can_datagrams') + @patch('builtins.print') + def test_network_discovery(self, print_mock, read_can_datagram, + write_command, write_command_retry, open_conn): + """ + Checks if we can perform a whole network discovery. + """ + sys.argv = "test.py -p /dev/ttyUSB0 --all".split() + + # The first two board answers the ping + board_answers = [(b'', [0], i) for i in range(1, 3)] + [None] + + read_can_datagram.return_value = iter(board_answers) + + write_command_retry.return_value = { + i: packb({'id': i}) for i in range(1, 3) + } + + bootloader_read_config.main() + write_command.assert_any_call(open_conn.return_value, + encode_ping(), + list(range(1, 128))) + diff --git a/data/source_files/messy/e8a7155bfbec.py b/data/source_files/messy/e8a7155bfbec.py new file mode 100644 index 0000000000000000000000000000000000000000..8a41876d28109b10beeda61ce63d0fb68903a3e0 --- /dev/null +++ b/data/source_files/messy/e8a7155bfbec.py @@ -0,0 +1,111 @@ +import re +import httplib2 +from bs4 import BeautifulSoup +from scraping.faqscrapperutil import stripExtra, removeDuplicates, removeBlackListedQuestions, getBlackListedQuestions, convertToJsonList, saveToMongo +from scraping.Constants import ENABLE_CUSTOM_QUESTIONS_FILTER, FAQ_LINKS, COLLECTION_NAME + + +def cleanQuestions(questions): + questionList = [] + for question in questions: + questionList.append(stripExtra(question.lstrip().rstrip())) + + return removeDuplicates(questionList) + +def getLastAnswer(question, bodyText): + start = bodyText.index(question) + len(question) + text = bodyText[start : -1].lstrip() +# print(text.lstrip()) + whitespaceCount = 0 +# print(answerLength) + for i in range(0, len(text)): +# print(answer[i], ' isSpace : ', answer[i].isspace()) + if text[i].isspace(): + whitespaceCount = whitespaceCount + 1 + if whitespaceCount >= 3: +# print(0 + i - 3) +# print(text[0 : 0 + i - 2]) + return text[0 : 0 + i - 2] + else : + if whitespaceCount != 0: + whitespaceCount = 0 + +def cleanAnswer(answer): + answerLength = len(answer) + whitespaceCount = 0 +# print(answerLength) + for i in range(0, answerLength): +# print(answer[i], ' isSpace : ', answer[i].isspace()) + if answer[i].isspace(): + whitespaceCount = whitespaceCount + 1 + if whitespaceCount >= 3: +# print(0 + i - 3) + return answer[0 : 0 + i - 2].lstrip() + else : + if whitespaceCount != 0: + whitespaceCount = 0 + return answer.rstrip() + +def getAnswers(body, questions): + bodyText = body.getText() +# answerTag = getAnswerTag(body, bodyText, questions) +# print(bodyText) + questionCount = len(questions) + answerList = [] + for i in range(0, questionCount): + print('Q: ', questions[i]) + if i == questionCount - 1: + #Last element + answer = getLastAnswer(questions[i], bodyText) + else : + start = bodyText.index(questions[i]) + len(questions[i]) + end = bodyText.index(questions[i + 1], start, -1) + print("Start : ", start , " End : ", end) + soup1 = BeautifulSoup(bodyText[start : end], 'html.parser') +# print(soup1) + answer = soup1.getText().lstrip() + + answer = cleanAnswer(answer) + answerList.append(answer) + print('A: ', answer) + return answerList + +def processWithCustomQuestions(questions): +# isCustomQuestionsEnabled = checkConfigForFlag(ENABLE_CUSTOM_QUESTIONS_FILTER) +# print("isCustomQuestionsEnabled : ", isCustomQuestionsEnabled) + if ENABLE_CUSTOM_QUESTIONS_FILTER == False: + return + blackListedQuestions = getBlackListedQuestions() + removeBlackListedQuestions(questions, blackListedQuestions) + print(questions) + + +def getFaqOfLink(link): +# print("LINK : ", link) + http = httplib2.Http() + status, html = http.request(link) + soup = BeautifulSoup(html, 'html.parser') + body = soup.body + questions = cleanQuestions(soup(text=re.compile(r'\s*((?:how|How|Can|can|what|What|where|Where|describe|Describe|Who|who|When|when|Why|why|Should|should|is|Is|I|Do|do|Are|are|Will|will)[^.<>?]*?\s*\?)'))) +# print(questions) + processWithCustomQuestions(questions) + answerList = getAnswers(body, questions) + return questions, answerList + +# link = "https://transportation.oregonstate.edu/aabc/frequently-asked-questions" +# questions, answerList = getFaqOfLink(link) + + +if __name__== "__main__": + with open(FAQ_LINKS, 'r') as myfile: + FAQ_LINKS = myfile.read().split('\n') + + faqJsonList = [] + for i in range(0, len(FAQ_LINKS)): + link = FAQ_LINKS[i] + questions, answerList = getFaqOfLink(link) + jsonList = convertToJsonList(link, questions, answerList) + faqJsonList.extend(jsonList) + +# saveJsonToFile(faqJsonList, "output.txt") + saveToMongo(faqJsonList, COLLECTION_NAME) \ No newline at end of file diff --git a/data/source_files/messy/f3e28c5ecbfb.py b/data/source_files/messy/f3e28c5ecbfb.py new file mode 100644 index 0000000000000000000000000000000000000000..8a258262e455109304caf1e67879b046459ff1bf --- /dev/null +++ b/data/source_files/messy/f3e28c5ecbfb.py @@ -0,0 +1,121 @@ +import json +import logging +import os +import inspect +import urllib +import urllib.request +from urllib.error import HTTPError + +# logger +logger = logging.getLogger() +logger_level = logging.getLevelName(os.environ['LOGGER_LEVEL']) +logger.setLevel(logger_level) + +# validate access +def validate_access(event, context): + logger.debug("Inside function: [%s]", inspect.currentframe().f_code.co_name) + logger.debug("RESTRICTED_ACCESS_ENABLED: [%s]", os.environ['RESTRICTED_ACCESS_ENABLED']) + error_message = "You are not allowed, get out!" + if os.environ['RESTRICTED_ACCESS_ENABLED'] == 'true': + logger.info("Restricted access is enabled") + logger.info("Value for header [%s] is: [%s]", os.environ['RESTRICTED_ACCESS_HTTP_HEADER'], event["headers"][os.environ['RESTRICTED_ACCESS_HTTP_HEADER']]) + if event["headers"][os.environ['RESTRICTED_ACCESS_HTTP_HEADER']] != os.environ['RESTRICTED_ACCESS_SECRET']: + logger.info("Key provided is not valid") + logger.debug("Error: [%s]", error_message) + http_code = 403 + raise ValueError(http_code, error_message) + else: + logger.info("Key provided is valid") + else: + logger.info("Restricted access is NOT enabled") + +# create response +def create_response_new(status_code, message_body): + logger.debug("Inside function: [%s]", inspect.currentframe().f_code.co_name) + return { + 'statusCode': str(status_code), + 'body': json.dumps(message_body), + 'headers': { + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*' + }, + } + +# download json file +def get_json(): + logger.debug("Inside function: [%s]", inspect.currentframe().f_code.co_name) + try: + response = urllib.request.urlopen(os.environ['AWS_REGIONS_JSON_URL']) + except HTTPError as err: + # catch HTTP error + logger.debug("HTTP error: [%s]", err) + raise + json_data = json.loads(response.read()) + return json_data + +# entry point -> return region info +def get_region_info(event, context): + logger.debug("Inside function: [%s]", inspect.currentframe().f_code.co_name) + return_info_final = {} + # validate the access to this resource + try: + validate_access(event, context) + except ValueError as err: + return_info_final['request'] = { "request_status": "Fail", "error_message": err.args[1], "http_error_code": err.args[0] } + return create_response_new(err.args[0], return_info_final) + # get region info + region_code = event['pathParameters']['region_code'] + logger.debug("region_code: [%s]", region_code) + try: + json_data = get_json() + except HTTPError as err: + # http_code = err.code + http_code = 500 + return_info_final['request'] = { "request_status": "Fail", "error_message": "Error getting Regions information.", "http_error_code": err.code } + return create_response_new(http_code, return_info_final) + # logger.debug("json_data: [%s]", json_data) + # logger.debug("type(json_data): [%s]", type(json_data)) + for element in json_data['data']: + # logger.debug("code: [%s] && region_code: [%s]", element['code'], region_code) + if element['code'] == region_code: + logger.info("region_code found") + http_code = 200 + return_info_final['request'] = { "request_status": "Success" } + return_info_final['info'] = json_data['info'] + return_info_final['data'] = element + break + else: + logger.info("region_code NOT found") + return_info = "Region code NOT found." + http_code = 404 + return_info_final['request'] = { "request_status": "Fail", "error_message": "Region code NOT found.", "http_error_code": http_code } + return create_response_new(http_code, return_info_final) + +# entry point -> return region info +def get_all_regions_info(event, context): + logger.debug("Inside function: [%s]", inspect.currentframe().f_code.co_name) + return_info_final = {} + # validate the access to this resource + try: + validate_access(event, context) + except ValueError as err: + return_info_final['request'] = { "request_status": "Fail", "error_message": err.args[1], "http_error_code": err.args[0] } + return create_response_new(err.args[0], return_info_final) + # get regions info + try: + json_data = get_json() + except HTTPError as err: + # http_code = err.code + http_code = 500 + return_info_final['request'] = { "request_status": "Fail", "error_message": "Error getting Regions information.", "http_error_code": err.code } + return create_response_new(http_code, return_info_final) + logger.debug("json_data: [%s]", json_data) + http_code = 200 + + return_info_final['request'] = { "request_status": "Success" } + return_info_final['info'] = json_data['info'] + return_info_final['data'] = json_data['data'] + + return create_response_new(http_code, return_info_final) + +# End; \ No newline at end of file diff --git a/data/source_files/messy/f4b4806461dd.py b/data/source_files/messy/f4b4806461dd.py new file mode 100644 index 0000000000000000000000000000000000000000..8a20b1d12635ada6c636b100e165021b86485320 --- /dev/null +++ b/data/source_files/messy/f4b4806461dd.py @@ -0,0 +1,118 @@ +import re +import sys + + +class Lexer: + def __init__(self, inp_str): + self.index = 0 + self.s = inp_str + + def get_char(self): + if self.index < len(self.s): + var = self.s[self.index] + self.index += 1 + return var + + +input_file = open(str(sys.argv[1]), 'r') # Open file for reading +line = input_file.read() +# "if z then while x * 4 - 2 do skip endwhile else x := 7 endif; y := 1" +input_string = line.strip("\n") +lexer = Lexer(input_string) + +hashtable = {} +tokens_list = [] +def token_check(input): + if re.fullmatch("if|then|else|endif|while|do|endwhile|skip", input): + hashtable[input] = "KEYWORD" + tokens_list.append(input) + elif re.search("([a-z]|[A-Z])([a-z]|[A-Z]|[0-9])*", input): + hashtable[input] = "IDENTIFIER" + tokens_list.append(input) + elif re.search("[0-9]+", input): + hashtable[input] = "NUMBER" + tokens_list.append(input) + elif re.fullmatch("\+|\-|\*|/|\(|\)|:=|;", input): + hashtable[input] = "SYMBOL" + tokens_list.append(input) + else: + hashtable[input] = "ERROR READING" + + +def digit(curr_char, lexer): + sub = "" + while (curr_char.isdigit()): + sub += curr_char + curr_char = lexer.get_char() + if curr_char == None: + break + new.append(curr_char) + return sub + + +def longest_sub_string(curr_char, lexer): + sub = "" + while (curr_char.isalpha() or curr_char.isdigit()): + sub += curr_char + curr_char = lexer.get_char() + if curr_char == None: + break + + new.append(curr_char) + return sub + + +def symbol(curr_char, lexer): + # print(curr_char) + sym = curr_char + curr_char = lexer.get_char() + new.append(curr_char) + return sym + + +def assignment(curr_char, lexer): + sub = curr_char + next_char = lexer.get_char() + if next_char == "=": + sub += next_char + new.append(next_char) + return sub + new.append(lexer.get_char()) + return sub + + +new = [] # keeping track of current char. +curr_char = lexer.get_char() +while (curr_char != None): + + while (curr_char == ' ' or curr_char == ''): + curr_char = lexer.get_char() + + if (curr_char.isdigit()): + token_check(digit(curr_char, lexer)) + curr_char = new.pop() + + elif (curr_char.isalpha()): + token_check(longest_sub_string(curr_char, lexer)) + curr_char = new.pop() + + elif curr_char in "+-/*();": + token_check(symbol(curr_char, lexer)) + curr_char = new.pop() + + elif curr_char == ":": + token_check(assignment(curr_char, lexer)) + curr_char = new.pop() + if curr_char == "=": + curr_char = lexer.get_char() + + else: + token_check(curr_char) + curr_char = lexer.get_char() + + +def tokens(): + return hashtable + +# print(tokens_list) +# print(tokens()) diff --git a/data/source_files/messy/f4de430f95d9.py b/data/source_files/messy/f4de430f95d9.py new file mode 100644 index 0000000000000000000000000000000000000000..8a047dbb3e81227c03ec206589ca325125601905 --- /dev/null +++ b/data/source_files/messy/f4de430f95d9.py @@ -0,0 +1,40 @@ +from flasgger import swag_from + +from app.blueprints.base_blueprint import Blueprint, BaseBlueprint, request, Security, Auth +from app.controllers.department_controller import DepartmentController + +url_prefix = '{}/departments'.format(BaseBlueprint.base_url_prefix) +department_blueprint = Blueprint('department', __name__, url_prefix=url_prefix) +department_controller = DepartmentController(request) + +@department_blueprint.route('/', methods=['GET']) +@Auth.has_permission('view_department') +@swag_from('documentation/get_all_departments.yml') +def list_departments(): + return department_controller.list_departments() + +@department_blueprint.route('/', methods=['GET']) +@Auth.has_permission('view_department') +@swag_from('documentation/get_single_department.yml') +def get_department(department_id): + return department_controller.get_department(department_id) + +@department_blueprint.route('/', methods=['POST']) +@Auth.has_role('admin') +@Security.validator(['name|required:ifExists_Department_name', 'description|required']) +@swag_from('documentation/create_department.yml') +def create_department(): + return department_controller.create_department() + +@department_blueprint.route('/', methods=['DELETE']) +@Auth.has_role('admin') +@swag_from('documentation/delete_department.yml') +def delete_department(department_id): + return department_controller.delete_department(department_id) + +@department_blueprint.route('/', methods=['PATCH']) +@Auth.has_role('admin') +@Security.validator(['name|optional', 'description|optional']) +@swag_from('documentation/update_department.yml') +def update_department(department_id): + return department_controller.update_department(department_id) diff --git a/data/source_files/messy/f7088c0df30b.py b/data/source_files/messy/f7088c0df30b.py new file mode 100644 index 0000000000000000000000000000000000000000..8a54efc9a7ad3665cabc7b4468043314dcb3122b --- /dev/null +++ b/data/source_files/messy/f7088c0df30b.py @@ -0,0 +1,113 @@ +import shutil + +from pathlib import Path +from unittest import TestCase +from unittest.mock import Mock +from unittest.mock import patch + +from foliant.config.downloadfile import download_file +from foliant.config.downloadfile import get_file_ext_from_url +from foliant.config.downloadfile import get_file_name_from_url + + +class TestDownloadFile(TestCase): + def setUp(self): + self.project_dir = (Path(__file__).parent / 'project_dir').resolve() + self.project_dir.mkdir(exist_ok=True) + + def tearDown(self): + shutil.rmtree(self.project_dir, ignore_errors=True) + + @patch('foliant.config.downloadfile.urlopen', autospec=True) + def test_only_url(self, urlopen): + mock_response = Mock() + mock_response.read.return_value = b'File content' + urlopen.return_value = mock_response + + url = 'http://example.com/myfile.txt' + + download_file(root_dir=self.project_dir, url=url) + request = urlopen.call_args.args[0] + context = urlopen.call_args.kwargs['context'] + + self.assertEqual(request.headers, {}) + self.assertIsNone(context) + + with open(self.project_dir / 'myfile.txt') as f: + self.assertEqual(f.read(), 'File content') + + @patch('foliant.config.downloadfile.urlopen', autospec=True) + def test_save_to(self, urlopen): + mock_response = Mock() + mock_response.read.return_value = b'File content' + urlopen.return_value = mock_response + + url = 'http://example.com/myfile.txt' + save_to = 'subdir1/subdir2/downloaded.txt' + + download_file(root_dir=self.project_dir, url=url, save_to=save_to) + request = urlopen.call_args.args[0] + context = urlopen.call_args.kwargs['context'] + + self.assertEqual(request.headers, {}) + self.assertIsNone(context) + + with open(self.project_dir / save_to) as f: + self.assertEqual(f.read(), 'File content') + + @patch('foliant.config.downloadfile.urlopen', autospec=True) + def test_with_auth(self, urlopen): + mock_response = Mock() + mock_response.read.return_value = b'File content' + urlopen.return_value = mock_response + + url = 'http://example.com/myfile.txt' + + download_file( + root_dir=self.project_dir, + url=url, + login='john', + password='qwerty1234' + ) + request = urlopen.call_args.args[0] + context = urlopen.call_args.kwargs['context'] + + self.assertIn('Authorization', request.headers) + self.assertIsNone(context) + + with open(self.project_dir / 'myfile.txt') as f: + self.assertEqual(f.read(), 'File content') + + +class TestGetFileNameFromURL(TestCase): + def test_with_ext(self): + url = 'http://example.com/sub/myfile.txt' + name = get_file_name_from_url(url) + self.assertEqual(name, 'myfile.txt') + + def test_no_ext(self): + url = 'http://example.com/sub/myfile' + name = get_file_name_from_url(url) + self.assertEqual(name, 'myfile') + + def test_with_clutter(self): + url = 'http://example.com/sub/myfile.txt?param=val&foo=bar' + name = get_file_name_from_url(url) + self.assertEqual(name, 'myfile.txt') + + +class TestGetFileExtFromURL(TestCase): + def test_with_ext(self): + url = 'http://example.com/sub/myfile.txt' + ext = get_file_ext_from_url(url) + self.assertEqual(ext, '.txt') + + def test_no_ext(self): + url = 'http://example.com/sub/myfile' + ext = get_file_ext_from_url(url) + self.assertEqual(ext, '') + + def test_with_clutter(self): + url = 'http://example.com/sub/myfile.txt?param=val&foo=bar' + ext = get_file_ext_from_url(url) + self.assertEqual(ext, '.txt') diff --git a/data/source_files/messy/fa0d79cee4a2.py b/data/source_files/messy/fa0d79cee4a2.py new file mode 100644 index 0000000000000000000000000000000000000000..d9cf50080cfd2da35179773577dfa101c0a0615b --- /dev/null +++ b/data/source_files/messy/fa0d79cee4a2.py @@ -0,0 +1,43 @@ +from random import shuffle as rshuffle +from .card import Card + + +class Deck: + """ + Class representing a deck. The first time we create, we seed the static + deck with the list of unique card integers. Each object instantiated simply + makes a copy of this object and shuffles it. + """ + _FULL_DECK = [] + + def __init__(self): + self.shuffle() + + def shuffle(self): + # and then shuffle + self.cards = Deck.GetFullDeck() + rshuffle(self.cards) + + def draw(self, n=1): + if n == 1: + return self.cards.pop(0) + + cards = [] + for i in range(n): + cards.append(self.draw()) + return cards + + def __str__(self): + return Card.print_pretty_cards(self.cards) + + @staticmethod + def GetFullDeck(): + if Deck._FULL_DECK: + return list(Deck._FULL_DECK) + + # create the standard 52 card deck + for rank in Card.STR_RANKS: + for suit, val in Card.CHAR_SUIT_TO_INT_SUIT.items(): + Deck._FULL_DECK.append(Card.new(rank + suit)) + + return list(Deck._FULL_DECK) diff --git a/data/source_files/messy/fe6dc7d06e56.py b/data/source_files/messy/fe6dc7d06e56.py new file mode 100644 index 0000000000000000000000000000000000000000..8a455ca53b609476797038c96b21d969bbdf51e3 --- /dev/null +++ b/data/source_files/messy/fe6dc7d06e56.py @@ -0,0 +1,61 @@ +import datetime +from flask_wtf import FlaskForm +from wtforms import ( + StringField, + TextAreaField, + DateTimeField, + HiddenField, + PasswordField, +) +from wtforms.validators import DataRequired, ValidationError, Email, EqualTo + + +class NullableDateTimeField(DateTimeField): + """Modify DateField to allow for Null values""" + + def process_formdata(self, valuelist): + # Bypasses wtForms validation for blank datetime field. + if valuelist: + date_str = " ".join(valuelist).strip() + if date_str == "": + self.data = None + return + try: + self.data = datetime.datetime.strptime(date_str, self.format) + except ValueError: + self.data = None + raise ValueError(self.gettext("Not a valid date value")) + + +class SearchForm(FlaskForm): + search = StringField("Search", validators=[DataRequired()]) + + +class ReviewForm(FlaskForm): + rating = HiddenField("Rating", validators=[DataRequired()]) + review_title = StringField("Headline") + review_content = TextAreaField("Review") + date_started = NullableDateTimeField("Date Started", format="%m/%d/%Y") + date_finished = NullableDateTimeField("Date Finished", format="%m/%d/%Y") + + def validate_date_finished(self, date_finished): + if self.date_started.data and date_finished.data: + if self.date_started.data > date_finished.data: + print("Date finished must be greater than or equal to date started") + raise ValidationError( + "Date finished must be greater than or equal to date started." + ) + + elif self.date_started.data or date_finished.data: + print("missing date") + raise ValidationError("If setting read dates, both dates are required.") + + +class EditProfileForm(FlaskForm): + display_name = StringField("Name", validators=[]) + email = StringField("Email", validators=[Email(message="Invalid Email Address.")]) + password = PasswordField( + "Password", + validators=[EqualTo("confirm_password", message="Passwords must match.")], + ) + confirm_password = PasswordField("Confirm Password", validators=[]) diff --git a/pyproject.toml b/pyproject.toml index 169bba11e0a70e7aec8f76b155f76eb331329ca9..24ae8262626682921ef10c925011db825fb9e32e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,71 +1,76 @@ -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[project] -name = "codewraith" -version = "0.1.0" -description = "Module-to-Spec Transformer: generates technical specifications from Python source code" -readme = "README.md" -requires-python = ">=3.10" -license = "MIT" - -[project.optional-dependencies] -ml = [ - "transformers>=4.40.0", - "torch>=2.1.0", - "accelerate>=0.27.0", - "datasets>=2.18.0", - "dspy>=2.5.0", -] -training = [ - "unsloth", - "peft>=0.10.0", - "trl>=0.8.0", - "bitsandbytes>=0.43.0", - "datasets>=2.18.0", -] -app = [ - "gradio>=4.0.0", - "chromadb>=0.5.0", - "sentence-transformers>=3.0.0", -] -all = [ - "codewraith[ml,training,app]", -] -dev = [ - "pytest>=8.0.0", - "pytest-cov>=5.0.0", - "ruff>=0.3.0", -] - -[tool.ruff] -target-version = "py310" -line-length = 100 - -[tool.ruff.lint] -select = ["E", "F", "I", "W"] - -[tool.ruff.lint.per-file-ignores] -"src/codewraith/verifier/judge.py" = ["E501"] - -[tool.pytest.ini_options] -testpaths = ["tests"] - -[tool.coverage.run] -source = ["src"] -omit = [ - # Requires Ollama running - "src/codewraith/teacher/generator.py", - "src/codewraith/teacher/optimize.py", - # Requires HF datasets streaming - "src/codewraith/teacher/collect.py", - # Requires GPU / unsloth - "src/codewraith/student/trainer.py", - "src/codewraith/student/evaluate.py", - # Requires Ollama for LLM judge calls - "src/codewraith/verifier/judge.py", - # App (requires gradio + loaded model) - "src/codewraith/app/main.py", - "src/codewraith/app/retriever.py", -] +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "codewraith" +version = "0.1.0" +description = "Module-to-Spec Transformer: generates technical specifications from Python source code" +readme = "README.md" +requires-python = ">=3.10" +license = "MIT" +dependencies = [ + "pydantic>=2.0.0", +] + +[project.optional-dependencies] +ml = [ + "transformers>=4.40.0", + "torch>=2.1.0", + "accelerate>=0.27.0", + "datasets>=2.18.0", + "dspy>=2.5.0", + "outlines>=1.2.0", + "lark>=1.1.0", + "unsloth", + "peft>=0.10.0", + "trl>=0.8.0", + "bitsandbytes>=0.43.0", + "vllm>=0.8.0", +] +app = [ + "gradio>=4.0.0", + "chromadb>=0.5.0", + "sentence-transformers>=3.0.0", +] +all = [ + "codewraith[ml,app]", +] +dev = [ + "pytest>=8.0.0", + "pytest-cov>=5.0.0", + "ruff>=0.3.0", +] + +[tool.ruff] +target-version = "py310" +line-length = 100 +extend-exclude = ["data/"] + +[tool.ruff.lint] +select = ["E", "F", "I", "W"] + +[tool.ruff.lint.per-file-ignores] +"src/codewraith/verifier/judge.py" = ["E501"] + +[tool.pytest.ini_options] +testpaths = ["tests"] + +[tool.coverage.run] +source = ["src"] +omit = [ + # Requires Ollama running + "src/codewraith/teacher/generator.py", + "src/codewraith/teacher/optimize.py", + # Requires HF datasets streaming + "src/codewraith/teacher/collect.py", + # Requires GPU / unsloth + "src/codewraith/student/trainer.py", + "src/codewraith/student/evaluate.py", + # Requires Ollama for LLM judge calls + "src/codewraith/verifier/judge.py", + # App (requires gradio + loaded model) + "src/codewraith/app/main.py", + "src/codewraith/app/retriever.py", + "src/codewraith/app/repo_analyzer.py", +] diff --git a/src/codewraith/app/main.py b/src/codewraith/app/main.py index d0bbef0be55a91223962e9a4ae66e0852bd81e59..4e8c14f3ff818468664d18950296cf0a5eab17a0 100644 --- a/src/codewraith/app/main.py +++ b/src/codewraith/app/main.py @@ -86,6 +86,41 @@ def init_retriever() -> Any: return None +def render_mermaid_images(spec: str) -> str: + """Replace mermaid code blocks with rendered SVG images via mermaid.ink.""" + import base64 + import re + + valid_starts = ( + "graph ", + "graph\n", + "flowchart ", + "flowchart\n", + "classDiagram", + "sequenceDiagram", + "stateDiagram", + "erDiagram", + "gantt", + "pie", + "gitgraph", + ) + + def replace_block(match: re.Match) -> str: + block = match.group(1).strip() + if not any(block.startswith(s) for s in valid_starts): + return "*[Mermaid diagram removed: unrecognized diagram type]*" + if block.count("[") != block.count("]"): + return "*[Mermaid diagram removed: unbalanced brackets]*" + if block.count("{") != block.count("}"): + return "*[Mermaid diagram removed: unbalanced braces]*" + if block.count("(") != block.count(")"): + return "*[Mermaid diagram removed: unbalanced parentheses]*" + encoded = base64.urlsafe_b64encode(block.encode("utf-8")).decode("ascii") + return f"![Dependency Diagram](https://mermaid.ink/svg/{encoded})" + + return re.sub(r"```mermaid\s*\n(.*?)```", replace_block, spec, flags=re.DOTALL) + + def generate_spec( source_code: str, temperature: float = 0.7, @@ -144,7 +179,8 @@ def generate_spec( ) generated = outputs[0][inputs.shape[-1] :] - return tokenizer.decode(generated, skip_special_tokens=True) + spec = tokenizer.decode(generated, skip_special_tokens=True) + return render_mermaid_images(spec) def create_app(): @@ -177,7 +213,7 @@ def create_app(): with gr.Row(): temperature = gr.Slider(0.0, 2.0, value=0.7, step=0.1, label="Temperature") top_p = gr.Slider(0.0, 1.0, value=0.9, step=0.05, label="Top-p") - max_tokens = gr.Slider(256, 4096, value=2048, step=256, label="Max Tokens") + max_tokens = gr.Slider(256, 8192, value=4096, step=256, label="Max Tokens") use_rag = gr.Checkbox(value=True, label="Use RAG (retrieve similar examples)") generate_btn = gr.Button("Generate Specification", variant="primary") diff --git a/src/codewraith/app/repo_analyzer.py b/src/codewraith/app/repo_analyzer.py new file mode 100644 index 0000000000000000000000000000000000000000..d12c0e7ec9cd4dd5ab85c938beeb6ba4c5d31d40 --- /dev/null +++ b/src/codewraith/app/repo_analyzer.py @@ -0,0 +1,294 @@ +"""Repo-level analysis: generate specs for all modules with dependency graph. + +Walks a Python repository, extracts import relationships, generates +specifications for each module using the fine-tuned student model, +and produces a unified markdown document with a mermaid dependency graph. +""" + +from __future__ import annotations + +import ast +from pathlib import Path + + +def discover_modules( + repo_path: str, + exclude_dirs: set[str] | None = None, +) -> list[Path]: + """Find all Python modules in a repository. + + Args: + repo_path: Root path of the repository. + exclude_dirs: Directory names to skip (e.g. .venv, __pycache__). + + Returns: + Sorted list of .py file paths. + """ + if exclude_dirs is None: + exclude_dirs = { + ".venv", + "venv", + "__pycache__", + ".git", + "node_modules", + ".eggs", + "*.egg-info", + "dist", + "build", + ".tox", + ".pytest_cache", + "data", + "models", + "tests", + "unsloth_compiled_cache", + } + + root = Path(repo_path) + modules = [] + + for py_file in sorted(root.rglob("*.py")): + # Skip excluded directories + if any(part in exclude_dirs for part in py_file.parts): + continue + # Skip empty files + if py_file.stat().st_size == 0: + continue + modules.append(py_file) + + return modules + + +def extract_imports(source_code: str) -> list[str]: + """Extract all import statements from Python source code. + + Args: + source_code: Python source as a string. + + Returns: + List of imported module names. + """ + try: + tree = ast.parse(source_code) + except SyntaxError: + return [] + + imports = [] + for node in ast.walk(tree): + if isinstance(node, ast.Import): + for alias in node.names: + imports.append(alias.name) + elif isinstance(node, ast.ImportFrom): + if node.module: + imports.append(node.module) + + return imports + + +def build_dependency_graph( + repo_path: str, + modules: list[Path], +) -> dict[str, list[str]]: + """Build an internal dependency graph for the repository. + + Only tracks imports that resolve to other modules within the repo. + + Args: + repo_path: Root path of the repository. + modules: List of module paths from discover_modules. + + Returns: + Dict mapping module display names to lists of internal dependencies. + """ + root = Path(repo_path) + + # Build a set of known module dotted paths + known_modules = set() + path_to_name: dict[str, str] = {} + for mod_path in modules: + rel = mod_path.relative_to(root) + # Convert path to dotted module name + parts = list(rel.parts) + if parts[-1] == "__init__.py": + dotted = ".".join(parts[:-1]) + else: + dotted = ".".join(parts)[:-3] # strip .py + + # Also handle src-layout + if dotted.startswith("src."): + dotted = dotted[4:] + + known_modules.add(dotted) + display_name = str(rel) + path_to_name[display_name] = dotted + + # Build reverse lookup: dotted name -> display name + dotted_to_display = {v: k for k, v in path_to_name.items()} + + graph: dict[str, list[str]] = {} + + for mod_path in modules: + rel = str(mod_path.relative_to(root)) + source = mod_path.read_text(encoding="utf-8") + imports = extract_imports(source) + + internal_deps = [] + for imp in imports: + # Check if the import or any parent matches a known module + if imp in known_modules: + dep_display = dotted_to_display.get(imp, imp) + if dep_display != rel: + internal_deps.append(dep_display) + else: + # Check if a parent package matches + parts = imp.split(".") + for i in range(len(parts), 0, -1): + candidate = ".".join(parts[:i]) + if candidate in known_modules: + dep_display = dotted_to_display.get(candidate, candidate) + if dep_display != rel: + internal_deps.append(dep_display) + break + + graph[rel] = sorted(set(internal_deps)) + + return graph + + +def render_mermaid_graph(graph: dict[str, list[str]]) -> str: + """Render the dependency graph as a mermaid flowchart. + + Args: + graph: Dependency graph from build_dependency_graph. + + Returns: + Mermaid flowchart definition string. + """ + lines = ["graph TD"] + + # Create short IDs for each module + all_modules = set(graph.keys()) + for deps in graph.values(): + all_modules.update(deps) + + node_ids: dict[str, str] = {} + for i, mod in enumerate(sorted(all_modules)): + short = mod.replace("/", "_").replace(".", "_").replace("-", "_") + node_ids[mod] = short + # Use filename as label + label = Path(mod).stem + if label == "__init__": + label = Path(mod).parent.name + "/" + lines.append(f" {short}[{label}]") + + # Add edges + for mod, deps in sorted(graph.items()): + for dep in deps: + if mod in node_ids and dep in node_ids: + lines.append(f" {node_ids[mod]} --> {node_ids[dep]}") + + return "\n".join(lines) + + +def topological_sort(graph: dict[str, list[str]]) -> list[str]: + """Sort modules in dependency order (leaves first). + + Args: + graph: Dependency graph from build_dependency_graph. + + Returns: + List of module paths in generation order. + """ + visited: set[str] = set() + order: list[str] = [] + + def visit(node: str) -> None: + if node in visited: + return + visited.add(node) + for dep in graph.get(node, []): + visit(dep) + order.append(node) + + for node in sorted(graph.keys()): + visit(node) + + return order + + +def generate_repo_specs( + repo_path: str, + generate_fn: callable, + exclude_dirs: set[str] | None = None, + progress_callback: callable | None = None, +) -> str: + """Generate specifications for an entire repository. + + Args: + repo_path: Root path of the repository. + generate_fn: Function that takes source code string and returns spec string. + exclude_dirs: Directories to skip. + progress_callback: Optional callback(current, total, module_name) for progress. + + Returns: + Complete markdown document with dependency graph and all specs. + """ + # Step 1: Discover modules + modules = discover_modules(repo_path, exclude_dirs) + if not modules: + return "No Python modules found in the repository." + + # Step 2: Build dependency graph + graph = build_dependency_graph(repo_path, modules) + + # Step 3: Render mermaid diagram + mermaid = render_mermaid_graph(graph) + + # Step 4: Sort in dependency order + ordered = topological_sort(graph) + + # Step 5: Generate specs for each module + root = Path(repo_path) + specs: dict[str, str] = {} + total = len(ordered) + + for i, mod_rel in enumerate(ordered, 1): + mod_path = root / mod_rel + if not mod_path.exists(): + continue + + if progress_callback: + progress_callback(i, total, mod_rel) + + source = mod_path.read_text(encoding="utf-8") + if not source.strip(): + specs[mod_rel] = "*Empty module.*" + continue + + try: + spec = generate_fn(source) + specs[mod_rel] = spec + except Exception as e: + specs[mod_rel] = f"*Error generating spec: {e}*" + + # Step 6: Assemble document + repo_name = Path(repo_path).name + doc_parts = [ + f"# {repo_name} -- Repository Specification", + "", + f"Auto-generated specifications for {total} Python modules.", + "", + "## Dependency Graph", + "", + "```mermaid", + mermaid, + "```", + "", + ] + + for mod_rel in ordered: + if mod_rel in specs: + doc_parts.append(f"---\n\n## {mod_rel}\n") + doc_parts.append(specs[mod_rel]) + doc_parts.append("") + + return "\n".join(doc_parts) diff --git a/src/codewraith/spec_schema.py b/src/codewraith/spec_schema.py new file mode 100644 index 0000000000000000000000000000000000000000..98d57d2cb1d60934c050f4ba45c12eebb8875f8d --- /dev/null +++ b/src/codewraith/spec_schema.py @@ -0,0 +1,161 @@ +"""Structured spec schema for constrained generation. + +Defines a Pydantic model that enforces consistent spec structure via +JSON schema. Used with vLLM's structured output support for teacher +generation, then rendered to consistent markdown for training data. +""" + +from __future__ import annotations + +from pydantic import BaseModel, Field + + +class DependencySpec(BaseModel): + package: str = Field(description="Package name, e.g. 'os', 'chromadb'") + usage: str = Field(description="Brief description of how the package is used") + + +class ParameterSpec(BaseModel): + name: str = Field(description="Parameter name") + type: str = Field(description="Type annotation, e.g. 'str', 'int', 'list[dict]'") + default: str | None = Field(default="--", description="Default value or null if required") + description: str = Field(description="Brief description of the parameter") + + +class FunctionSpec(BaseModel): + signature: str = Field(description="Full signature, e.g. 'fibonacci(n: int) -> list[int]'") + description: str = Field(description="Brief description of behavior") + parameters: list[ParameterSpec] = Field(default_factory=list) + returns: str | list | dict | None = Field(default="", description="Return type and description") + raises: str | list | dict | None = Field(default="", description="Exception and condition") + + +class ClassSpec(BaseModel): + signature: str = Field( + description="Class signature, e.g. 'SpecRetriever' or 'MyClass(BaseClass)'" + ) + description: str = Field(description="Brief description of the class") + attributes: list[ParameterSpec] = Field( + default_factory=list, description="Class attributes (name, type, description)" + ) + methods: list[FunctionSpec] = Field(default_factory=list) + + +class MermaidNode(BaseModel): + source: str = Field(description="Source node ID, e.g. 'A[ModuleName]'") + target: str = Field(description="Target node ID, e.g. 'B[ClassName]'") + + +class ModuleSpec(BaseModel): + name: str = Field(description="Module name") + overview: str = Field(description="1-2 sentence module purpose") + dependencies: list[DependencySpec] = Field(default_factory=list) + classes: list[ClassSpec] = Field(default_factory=list) + functions: list[FunctionSpec] = Field(default_factory=list) + diagram_edges: list[MermaidNode] = Field( + default_factory=list, description="Mermaid graph edges" + ) + + +def render_markdown(spec: ModuleSpec) -> str: + """Render a ModuleSpec to consistent markdown format. + + Args: + spec: Parsed ModuleSpec from JSON output. + + Returns: + Markdown string following the standard spec format. + """ + parts = [] + + # Title + parts.append(f"# {spec.name}\n") + + # Overview + parts.append(f"## Overview\n\n{spec.overview}\n") + + # Dependencies + parts.append("## Dependencies\n") + parts.append("| Package | Usage |") + parts.append("|---------|-------|") + for dep in spec.dependencies: + parts.append(f"| `{dep.package}` | {dep.usage} |") + parts.append("") + + # Classes + if spec.classes: + parts.append("## Classes\n") + for cls in spec.classes: + parts.append(f"### `{cls.signature}`\n") + parts.append(f"{cls.description}\n") + + if cls.attributes: + parts.append("**Attributes:**\n") + parts.append("| Name | Type | Description |") + parts.append("|------|------|-------------|") + for attr in cls.attributes: + parts.append(f"| {attr.name} | {attr.type} | {attr.description} |") + parts.append("") + + if cls.methods: + parts.append("**Methods:**\n") + for i, method in enumerate(cls.methods): + _render_function(parts, method, separator=i > 0) + + # Functions + parts.append("## Functions\n") + for i, func in enumerate(spec.functions): + _render_function(parts, func, separator=i > 0) + + # Diagram + parts.append("## Module Diagram\n") + parts.append("```mermaid") + parts.append("graph TD") + for edge in spec.diagram_edges: + parts.append(f" {edge.source} --> {edge.target}") + parts.append("```\n") + + return "\n".join(parts) + + +def _flatten_field(value: str | list | dict | None) -> str: + """Coerce returns/raises to a flat string regardless of shape.""" + if not value: + return "" + if isinstance(value, str): + return value + if isinstance(value, dict): + return ", ".join(str(v) for v in value.values() if v) + # list — items may be str or dict + pieces = [] + for item in value: + if isinstance(item, dict): + pieces.append(", ".join(str(v) for v in item.values() if v)) + else: + pieces.append(str(item)) + return "; ".join(pieces) + + +def _render_function(parts: list[str], func: FunctionSpec, separator: bool = True) -> None: + """Render a single function spec to markdown lines.""" + if separator: + parts.append("---\n") + parts.append(f"### `{func.signature}`\n") + parts.append(f"{func.description}\n") + + if func.parameters: + parts.append("**Parameters:**\n") + parts.append("| Name | Type | Default | Description |") + parts.append("|------|------|---------|-------------|") + for param in func.parameters: + default = param.default if param.default is not None else "--" + parts.append(f"| {param.name} | {param.type} | {default} | {param.description} |") + parts.append("") + + returns = _flatten_field(func.returns) + if returns: + parts.append(f"**Returns:** `{returns}`\n") + + raises = _flatten_field(func.raises) + if raises: + parts.append(f"**Raises:** `{raises}`\n") diff --git a/src/codewraith/teacher/generator.py b/src/codewraith/teacher/generator.py index 0b4467b64856abb844be923e42b290e0f746f434..d58dd894ef190bc18753881b346da47e620e300f 100644 --- a/src/codewraith/teacher/generator.py +++ b/src/codewraith/teacher/generator.py @@ -1,10 +1,10 @@ """Teacher module: synthetic training data generation. -Uses a high-parameter model (Llama 3.1 70B via Ollama) to generate -training pairs: Python source code -> gold-standard technical specification. +Supports two backends: +1. Ollama (raw): fast, no structural guarantees +2. vLLM with EBNF grammar: constrained decoding ensures valid spec structure -The teacher model runs locally via Ollama at 127.0.0.1:11434 using the -llama3.1:70b-instruct-q4_K_M quantization (32GB VRAM with partial CPU offload). +The teacher model runs locally. Ollama uses 127.0.0.1:11434, vLLM uses 127.0.0.1:8081. """ from __future__ import annotations @@ -14,16 +14,52 @@ from pathlib import Path from urllib.request import Request, urlopen OLLAMA_BASE_URL = "http://127.0.0.1:11434" -TEACHER_MODEL = "gemma4:26b" +VLLM_BASE_URL = "http://192.168.13.21:8081" +TEACHER_MODEL = "qwen2.5-coder:32b-instruct-q6_K" SYSTEM_PROMPT = """You are a technical specification writer. Given Python source code, -produce a structured Markdown specification that captures: -- Module purpose and overview -- All classes with their hierarchies, attributes, and methods -- All functions with signatures, parameters, return types, and behavior -- Dependencies and imports -- Error handling patterns -Be precise. Every function signature must exactly match the source.""" +produce a structured Markdown specification following this exact format: + +# + +## Overview +<1-2 sentence purpose> + +## Dependencies +| Package | Usage | +|---------|-------| +| `` | | + +## Classes (if any) +### `` + +**Attributes:** +| Name | Type | Description | +|------|------|-------------| +| | | | +**Methods:** +### ` return_type>` + + +## Functions +### ` return_type>` + +**Parameters:** +| Name | Type | Default | Description | +|------|------|---------|-------------| +| | | | | +**Returns:** `` \u2014 +**Raises:** `` \u2014 + +## Module Diagram +```mermaid +graph TD + A[Name] --> B[Name] +``` + +Be precise. Every function signature must exactly match the source. +Use tables for dependencies, attributes, and parameters. +Use backtick-wrapped signatures for all functions and classes.""" def query_ollama(prompt: str, model: str = TEACHER_MODEL) -> str: @@ -62,6 +98,69 @@ def query_ollama(prompt: str, model: str = TEACHER_MODEL) -> str: return result.get("response", "") +VLLM_SYSTEM_PROMPT = ( + "Output JSON with keys: name, overview, " + "dependencies (list of {package, usage}), " + "classes (list of {signature, description, " + "attributes (list of {name, type, default, description}), " + "methods (list of function specs)}), " + "functions (list of {signature, description, " + "parameters (list of {name, type, default, description}), returns, raises}), " + "diagram_edges (list of {source, target}). " + "Signatures must exactly match source. Be concise." +) + + +def query_vllm( + prompt: str, + model: str = TEACHER_MODEL, + base_url: str = VLLM_BASE_URL, + temperature: float = 0.3, +) -> str: + """Send a prompt to vLLM with JSON schema constraint. + + Uses response_format json_object to ensure structured output, + then renders to consistent markdown via spec_schema. + + Args: + prompt: The user prompt to send. + model: The vLLM model name. + base_url: vLLM server URL. + temperature: Sampling temperature. + + Returns: + Consistently formatted markdown specification. + """ + from codewraith.spec_schema import ModuleSpec, render_markdown + + payload = json.dumps( + { + "model": model, + "messages": [ + {"role": "system", "content": VLLM_SYSTEM_PROMPT}, + {"role": "user", "content": prompt}, + ], + "max_tokens": 4096, + "temperature": temperature, + "response_format": {"type": "json_object"}, + } + ).encode() + + req = Request( + f"{base_url}/v1/chat/completions", + data=payload, + headers={"Content-Type": "application/json"}, + method="POST", + ) + + with urlopen(req, timeout=300) as resp: + result = json.loads(resp.read().decode()) + + content = result["choices"][0]["message"]["content"] + spec = ModuleSpec.model_validate_json(content) + return render_markdown(spec) + + def load_optimized_generator( optimized_path: str = "data/optimized_generator.json", model: str = TEACHER_MODEL, @@ -84,8 +183,6 @@ def load_optimized_generator( except ImportError: return None - from pathlib import Path - if not Path(optimized_path).exists(): return None @@ -106,39 +203,45 @@ def load_optimized_generator( _optimized_generator = None -def generate_training_pair(source_code: str, model: str = TEACHER_MODEL) -> dict[str, str]: +def generate_training_pair( + source_code: str, + model: str = TEACHER_MODEL, + backend: str = "ollama", +) -> dict[str, str]: """Generate a single training pair: source code -> technical specification. - Uses the DSPy-optimized generator if available (bootstrapped few-shot demos), - otherwise falls back to raw Ollama with the system prompt. - Args: source_code: Python source code to transform into a spec. - model: The Ollama model to use for generation. + model: The model to use for generation. + backend: "vllm" for grammar-constrained generation, "ollama" for raw. Returns: Dict with 'input' (source code) and 'output' (generated spec). """ - global _optimized_generator # noqa: PLW0603 - - # Try DSPy optimized path first - if _optimized_generator is None: - _optimized_generator = load_optimized_generator(model=model) or False - - if _optimized_generator: - try: - result = _optimized_generator(source_code=source_code) - if result.specification: - return {"input": source_code, "output": result.specification} - except Exception: - pass # Fall through to raw Ollama - - # Fallback to raw Ollama prompt = ( "Generate a technical specification for this Python module:" f"\n\n```python\n{source_code}\n```" ) - spec = query_ollama(prompt, model=model) + + if backend == "vllm": + spec = query_vllm(prompt, model=model) + else: + global _optimized_generator # noqa: PLW0603 + + # Try DSPy optimized path first + if _optimized_generator is None: + _optimized_generator = load_optimized_generator(model=model) or False + + if _optimized_generator: + try: + result = _optimized_generator(source_code=source_code) + if result.specification: + return {"input": source_code, "output": result.specification} + except Exception: + pass # Fall through to raw Ollama + + spec = query_ollama(prompt, model=model) + return {"input": source_code, "output": spec} @@ -167,6 +270,7 @@ def generate_dataset( source_dir: str, output_path: str, model: str = TEACHER_MODEL, + backend: str = "ollama", ) -> None: """Generate a dataset of training pairs from a directory of Python files. @@ -177,7 +281,8 @@ def generate_dataset( Args: source_dir: Directory containing Python source files. output_path: Path to write/append the JSONL output. - model: The Ollama model to use. + model: The model to use. + backend: "vllm" for grammar-constrained, "ollama" for raw. """ source_path = Path(source_dir) out = Path(output_path) @@ -206,7 +311,7 @@ def generate_dataset( print(f"[{i}/{total}] Generating spec for {rel_path}...") try: - pair = generate_training_pair(source_code, model=model) + pair = generate_training_pair(source_code, model=model, backend=backend) pair["source_file"] = rel_path with out.open("a", encoding="utf-8") as f: diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000000000000000000000000000000000000..56c6133bf8afe904df94205b3ac99c7a3807782c --- /dev/null +++ b/uv.lock @@ -0,0 +1,7768 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] + +[[package]] +name = "accelerate" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/14/787e5498cd062640f0f3d92ef4ae4063174f76f9afd29d13fc52a319daae/accelerate-1.13.0.tar.gz", hash = "sha256:d631b4e0f5b3de4aff2d7e9e6857d164810dfc3237d54d017f075122d057b236", size = 402835, upload-time = "2026-03-04T19:34:12.359Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/46/02ac5e262d4af18054b3e922b2baedbb2a03289ee792162de60a865defc5/accelerate-1.13.0-py3-none-any.whl", hash = "sha256:cf1a3efb96c18f7b152eb0fa7490f3710b19c3f395699358f08decca2b8b62e0", size = 383744, upload-time = "2026-03-04T19:34:10.313Z" }, +] + +[[package]] +name = "aiofiles" +version = "24.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247, upload-time = "2024-06-24T11:02:03.584Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896, upload-time = "2024-06-24T11:02:01.529Z" }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "async-timeout", marker = "python_full_version < '3.11'" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/9a/152096d4808df8e4268befa55fba462f440f14beab85e8ad9bf990516918/aiohttp-3.13.5.tar.gz", hash = "sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1", size = 7858271, upload-time = "2026-03-31T22:01:03.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/85/cebc47ee74d8b408749073a1a46c6fcba13d170dc8af7e61996c6c9394ac/aiohttp-3.13.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:02222e7e233295f40e011c1b00e3b0bd451f22cf853a0304c3595633ee47da4b", size = 750547, upload-time = "2026-03-31T21:56:30.024Z" }, + { url = "https://files.pythonhosted.org/packages/05/98/afd308e35b9d3d8c9ec54c0918f1d722c86dc17ddfec272fcdbcce5a3124/aiohttp-3.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bace460460ed20614fa6bc8cb09966c0b8517b8c58ad8046828c6078d25333b5", size = 503535, upload-time = "2026-03-31T21:56:31.935Z" }, + { url = "https://files.pythonhosted.org/packages/6f/4d/926c183e06b09d5270a309eb50fbde7b09782bfd305dec1e800f329834fb/aiohttp-3.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f546a4dc1e6a5edbb9fd1fd6ad18134550e096a5a43f4ad74acfbd834fc6670", size = 497830, upload-time = "2026-03-31T21:56:33.654Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d6/f47d1c690f115a5c2a5e8938cce4a232a5be9aac5c5fb2647efcbbbda333/aiohttp-3.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c86969d012e51b8e415a8c6ce96f7857d6a87d6207303ab02d5d11ef0cad2274", size = 1682474, upload-time = "2026-03-31T21:56:35.513Z" }, + { url = "https://files.pythonhosted.org/packages/01/44/056fd37b1bb52eac760303e5196acc74d9d546631b035704ae5927f7b4ac/aiohttp-3.13.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b6f6cd1560c5fa427e3b6074bb24d2c64e225afbb7165008903bd42e4e33e28a", size = 1655259, upload-time = "2026-03-31T21:56:37.843Z" }, + { url = "https://files.pythonhosted.org/packages/91/9f/78eb1a20c1c28ae02f6a3c0f4d7b0dcc66abce5290cadd53d78ce3084175/aiohttp-3.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:636bc362f0c5bbc7372bc3ae49737f9e3030dbce469f0f422c8f38079780363d", size = 1736204, upload-time = "2026-03-31T21:56:39.822Z" }, + { url = "https://files.pythonhosted.org/packages/de/6c/d20d7de23f0b52b8c1d9e2033b2db1ac4dacbb470bb74c56de0f5f86bb4f/aiohttp-3.13.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6a7cbeb06d1070f1d14895eeeed4dac5913b22d7b456f2eb969f11f4b3993796", size = 1826198, upload-time = "2026-03-31T21:56:41.378Z" }, + { url = "https://files.pythonhosted.org/packages/2f/86/a6f3ff1fd795f49545a7c74b2c92f62729135d73e7e4055bf74da5a26c82/aiohttp-3.13.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca9ef7517fd7874a1a08970ae88f497bf5c984610caa0bf40bd7e8450852b95", size = 1681329, upload-time = "2026-03-31T21:56:43.374Z" }, + { url = "https://files.pythonhosted.org/packages/fb/68/84cd3dab6b7b4f3e6fe9459a961acb142aaab846417f6e8905110d7027e5/aiohttp-3.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:019a67772e034a0e6b9b17c13d0a8fe56ad9fb150fc724b7f3ffd3724288d9e5", size = 1560023, upload-time = "2026-03-31T21:56:45.031Z" }, + { url = "https://files.pythonhosted.org/packages/41/2c/db61b64b0249e30f954a65ab4cb4970ced57544b1de2e3c98ee5dc24165f/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f34ecee82858e41dd217734f0c41a532bd066bcaab636ad830f03a30b2a96f2a", size = 1652372, upload-time = "2026-03-31T21:56:47.075Z" }, + { url = "https://files.pythonhosted.org/packages/25/6f/e96988a6c982d047810c772e28c43c64c300c943b0ed5c1c0c4ce1e1027c/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:4eac02d9af4813ee289cd63a361576da36dba57f5a1ab36377bc2600db0cbb73", size = 1662031, upload-time = "2026-03-31T21:56:48.835Z" }, + { url = "https://files.pythonhosted.org/packages/b7/26/a56feace81f3d347b4052403a9d03754a0ab23f7940780dada0849a38c92/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4beac52e9fe46d6abf98b0176a88154b742e878fdf209d2248e99fcdf73cd297", size = 1708118, upload-time = "2026-03-31T21:56:50.833Z" }, + { url = "https://files.pythonhosted.org/packages/78/6e/b6173a8ff03d01d5e1a694bc06764b5dad1df2d4ed8f0ceec12bb3277936/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c180f480207a9b2475f2b8d8bd7204e47aec952d084b2a2be58a782ffcf96074", size = 1548667, upload-time = "2026-03-31T21:56:52.81Z" }, + { url = "https://files.pythonhosted.org/packages/16/13/13296ffe2c132d888b3fe2c195c8b9c0c24c89c3fa5cc2c44464dc23b22e/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2837fb92951564d6339cedae4a7231692aa9f73cbc4fb2e04263b96844e03b4e", size = 1724490, upload-time = "2026-03-31T21:56:54.541Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1f1c287f4a79782ef36e5a6e62954c85343bc30470d862d30bd5f26c9fa2/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9010032a0b9710f58012a1e9c222528763d860ba2ee1422c03473eab47703e7", size = 1667109, upload-time = "2026-03-31T21:56:56.21Z" }, + { url = "https://files.pythonhosted.org/packages/ef/42/8461a2aaf60a8f4ea4549a4056be36b904b0eb03d97ca9a8a2604681a500/aiohttp-3.13.5-cp310-cp310-win32.whl", hash = "sha256:7c4b6668b2b2b9027f209ddf647f2a4407784b5d88b8be4efcc72036f365baf9", size = 439478, upload-time = "2026-03-31T21:56:58.292Z" }, + { url = "https://files.pythonhosted.org/packages/e5/71/06956304cb5ee439dfe8d86e1b2e70088bd88ed1ced1f42fb29e5d855f0e/aiohttp-3.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:cd3db5927bf9167d5a6157ddb2f036f6b6b0ad001ac82355d43e97a4bde76d76", size = 462047, upload-time = "2026-03-31T21:57:00.257Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/a20c4ac64aeaef1679e25c9983573618ff765d7aa829fa2b84ae7573169e/aiohttp-3.13.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ab7229b6f9b5c1ba4910d6c41a9eb11f543eadb3f384df1b4c293f4e73d44d6", size = 757513, upload-time = "2026-03-31T21:57:02.146Z" }, + { url = "https://files.pythonhosted.org/packages/75/0a/39fa6c6b179b53fcb3e4b3d2b6d6cad0180854eda17060c7218540102bef/aiohttp-3.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f14c50708bb156b3a3ca7230b3d820199d56a48e3af76fa21c2d6087190fe3d", size = 506748, upload-time = "2026-03-31T21:57:04.275Z" }, + { url = "https://files.pythonhosted.org/packages/87/ec/e38ce072e724fd7add6243613f8d1810da084f54175353d25ccf9f9c7e5a/aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c", size = 501673, upload-time = "2026-03-31T21:57:06.208Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ba/3bc7525d7e2beaa11b309a70d48b0d3cfc3c2089ec6a7d0820d59c657053/aiohttp-3.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2567b72e1ffc3ab25510db43f355b29eeada56c0a622e58dcdb19530eb0a3cb", size = 1763757, upload-time = "2026-03-31T21:57:07.882Z" }, + { url = "https://files.pythonhosted.org/packages/5e/ab/e87744cf18f1bd78263aba24924d4953b41086bd3a31d22452378e9028a0/aiohttp-3.13.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fb0540c854ac9c0c5ad495908fdfd3e332d553ec731698c0e29b1877ba0d2ec6", size = 1720152, upload-time = "2026-03-31T21:57:09.946Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f3/ed17a6f2d742af17b50bae2d152315ed1b164b07a5fd5cc1754d99e4dfa5/aiohttp-3.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9883051c6972f58bfc4ebb2116345ee2aa151178e99c3f2b2bbe2af712abd13", size = 1818010, upload-time = "2026-03-31T21:57:12.157Z" }, + { url = "https://files.pythonhosted.org/packages/53/06/ecbc63dc937192e2a5cb46df4d3edb21deb8225535818802f210a6ea5816/aiohttp-3.13.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2294172ce08a82fb7c7273485895de1fa1186cc8294cfeb6aef4af42ad261174", size = 1907251, upload-time = "2026-03-31T21:57:14.023Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a5/0521aa32c1ddf3aa1e71dcc466be0b7db2771907a13f18cddaa45967d97b/aiohttp-3.13.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc", size = 1759969, upload-time = "2026-03-31T21:57:16.146Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/a38f8c9105199dd3b9706745865a8a59d0041b6be0ca0cc4b2ccf1bab374/aiohttp-3.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa6d0d932e0f39c02b80744273cd5c388a2d9bc07760a03164f229c8e02662f6", size = 1616871, upload-time = "2026-03-31T21:57:17.856Z" }, + { url = "https://files.pythonhosted.org/packages/6f/41/27392a61ead8ab38072105c71aa44ff891e71653fe53d576a7067da2b4e8/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60869c7ac4aaabe7110f26499f3e6e5696eae98144735b12a9c3d9eae2b51a49", size = 1739844, upload-time = "2026-03-31T21:57:19.679Z" }, + { url = "https://files.pythonhosted.org/packages/6e/55/5564e7ae26d94f3214250009a0b1c65a0c6af4bf88924ccb6fdab901de28/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:26d2f8546f1dfa75efa50c3488215a903c0168d253b75fba4210f57ab77a0fb8", size = 1731969, upload-time = "2026-03-31T21:57:22.006Z" }, + { url = "https://files.pythonhosted.org/packages/6d/c5/705a3929149865fc941bcbdd1047b238e4a72bcb215a9b16b9d7a2e8d992/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1162a1492032c82f14271e831c8f4b49f2b6078f4f5fc74de2c912fa225d51d", size = 1795193, upload-time = "2026-03-31T21:57:24.256Z" }, + { url = "https://files.pythonhosted.org/packages/a6/19/edabed62f718d02cff7231ca0db4ef1c72504235bc467f7b67adb1679f48/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8b14eb3262fad0dc2f89c1a43b13727e709504972186ff6a99a3ecaa77102b6c", size = 1606477, upload-time = "2026-03-31T21:57:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/de/fc/76f80ef008675637d88d0b21584596dc27410a990b0918cb1e5776545b5b/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ca9ac61ac6db4eb6c2a0cd1d0f7e1357647b638ccc92f7e9d8d133e71ed3c6ac", size = 1813198, upload-time = "2026-03-31T21:57:28.316Z" }, + { url = "https://files.pythonhosted.org/packages/e5/67/5b3ac26b80adb20ea541c487f73730dc8fa107d632c998f25bbbab98fcda/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7996023b2ed59489ae4762256c8516df9820f751cf2c5da8ed2fb20ee50abab3", size = 1752321, upload-time = "2026-03-31T21:57:30.549Z" }, + { url = "https://files.pythonhosted.org/packages/88/06/e4a2e49255ea23fa4feeb5ab092d90240d927c15e47b5b5c48dff5a9ce29/aiohttp-3.13.5-cp311-cp311-win32.whl", hash = "sha256:77dfa48c9f8013271011e51c00f8ada19851f013cde2c48fca1ba5e0caf5bb06", size = 439069, upload-time = "2026-03-31T21:57:32.388Z" }, + { url = "https://files.pythonhosted.org/packages/c0/43/8c7163a596dab4f8be12c190cf467a1e07e4734cf90eebb39f7f5d53fc6a/aiohttp-3.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:d3a4834f221061624b8887090637db9ad4f61752001eae37d56c52fddade2dc8", size = 462859, upload-time = "2026-03-31T21:57:34.455Z" }, + { url = "https://files.pythonhosted.org/packages/be/6f/353954c29e7dcce7cf00280a02c75f30e133c00793c7a2ed3776d7b2f426/aiohttp-3.13.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:023ecba036ddd840b0b19bf195bfae970083fd7024ce1ac22e9bba90464620e9", size = 748876, upload-time = "2026-03-31T21:57:36.319Z" }, + { url = "https://files.pythonhosted.org/packages/f5/1b/428a7c64687b3b2e9cd293186695affc0e1e54a445d0361743b231f11066/aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15c933ad7920b7d9a20de151efcd05a6e38302cbf0e10c9b2acb9a42210a2416", size = 499557, upload-time = "2026-03-31T21:57:38.236Z" }, + { url = "https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2", size = 500258, upload-time = "2026-03-31T21:57:39.923Z" }, + { url = "https://files.pythonhosted.org/packages/67/84/c9ecc5828cb0b3695856c07c0a6817a99d51e2473400f705275a2b3d9239/aiohttp-3.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60eaa2d440cd4707696b52e40ed3e2b0f73f65be07fd0ef23b6b539c9c0b0b4", size = 1749199, upload-time = "2026-03-31T21:57:41.938Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d3/3c6d610e66b495657622edb6ae7c7fd31b2e9086b4ec50b47897ad6042a9/aiohttp-3.13.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:55b3bdd3292283295774ab585160c4004f4f2f203946997f49aac032c84649e9", size = 1721013, upload-time = "2026-03-31T21:57:43.904Z" }, + { url = "https://files.pythonhosted.org/packages/49/a0/24409c12217456df0bae7babe3b014e460b0b38a8e60753d6cb339f6556d/aiohttp-3.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2b2355dc094e5f7d45a7bb262fe7207aa0460b37a0d87027dcf21b5d890e7d5", size = 1781501, upload-time = "2026-03-31T21:57:46.285Z" }, + { url = "https://files.pythonhosted.org/packages/98/9d/b65ec649adc5bccc008b0957a9a9c691070aeac4e41cea18559fef49958b/aiohttp-3.13.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b38765950832f7d728297689ad78f5f2cf79ff82487131c4d26fe6ceecdc5f8e", size = 1878981, upload-time = "2026-03-31T21:57:48.734Z" }, + { url = "https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1", size = 1767934, upload-time = "2026-03-31T21:57:51.171Z" }, + { url = "https://files.pythonhosted.org/packages/31/04/d3f8211f273356f158e3464e9e45484d3fb8c4ce5eb2f6fe9405c3273983/aiohttp-3.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:33add2463dde55c4f2d9635c6ab33ce154e5ecf322bd26d09af95c5f81cfa286", size = 1566671, upload-time = "2026-03-31T21:57:53.326Z" }, + { url = "https://files.pythonhosted.org/packages/41/db/073e4ebe00b78e2dfcacff734291651729a62953b48933d765dc513bf798/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:327cc432fdf1356fb4fbc6fe833ad4e9f6aacb71a8acaa5f1855e4b25910e4a9", size = 1705219, upload-time = "2026-03-31T21:57:55.385Z" }, + { url = "https://files.pythonhosted.org/packages/48/45/7dfba71a2f9fd97b15c95c06819de7eb38113d2cdb6319669195a7d64270/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7c35b0bf0b48a70b4cb4fc5d7bed9b932532728e124874355de1a0af8ec4bc88", size = 1743049, upload-time = "2026-03-31T21:57:57.341Z" }, + { url = "https://files.pythonhosted.org/packages/18/71/901db0061e0f717d226386a7f471bb59b19566f2cae5f0d93874b017271f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:df23d57718f24badef8656c49743e11a89fd6f5358fa8a7b96e728fda2abf7d3", size = 1749557, upload-time = "2026-03-31T21:57:59.626Z" }, + { url = "https://files.pythonhosted.org/packages/08/d5/41eebd16066e59cd43728fe74bce953d7402f2b4ddfdfef2c0e9f17ca274/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:02e048037a6501a5ec1f6fc9736135aec6eb8a004ce48838cb951c515f32c80b", size = 1558931, upload-time = "2026-03-31T21:58:01.972Z" }, + { url = "https://files.pythonhosted.org/packages/30/e6/4a799798bf05740e66c3a1161079bda7a3dd8e22ca392481d7a7f9af82a6/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31cebae8b26f8a615d2b546fee45d5ffb76852ae6450e2a03f42c9102260d6fe", size = 1774125, upload-time = "2026-03-31T21:58:04.007Z" }, + { url = "https://files.pythonhosted.org/packages/84/63/7749337c90f92bc2cb18f9560d67aa6258c7060d1397d21529b8004fcf6f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:888e78eb5ca55a615d285c3c09a7a91b42e9dd6fc699b166ebd5dee87c9ccf14", size = 1732427, upload-time = "2026-03-31T21:58:06.337Z" }, + { url = "https://files.pythonhosted.org/packages/98/de/cf2f44ff98d307e72fb97d5f5bbae3bfcb442f0ea9790c0bf5c5c2331404/aiohttp-3.13.5-cp312-cp312-win32.whl", hash = "sha256:8bd3ec6376e68a41f9f95f5ed170e2fcf22d4eb27a1f8cb361d0508f6e0557f3", size = 433534, upload-time = "2026-03-31T21:58:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:110e448e02c729bcebb18c60b9214a87ba33bac4a9fa5e9a5f139938b56c6cb1", size = 460446, upload-time = "2026-03-31T21:58:10.945Z" }, + { url = "https://files.pythonhosted.org/packages/78/e9/d76bf503005709e390122d34e15256b88f7008e246c4bdbe915cd4f1adce/aiohttp-3.13.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5029cc80718bbd545123cd8fe5d15025eccaaaace5d0eeec6bd556ad6163d61", size = 742930, upload-time = "2026-03-31T21:58:13.155Z" }, + { url = "https://files.pythonhosted.org/packages/57/00/4b7b70223deaebd9bb85984d01a764b0d7bd6526fcdc73cca83bcbe7243e/aiohttp-3.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4bb6bf5811620003614076bdc807ef3b5e38244f9d25ca5fe888eaccea2a9832", size = 496927, upload-time = "2026-03-31T21:58:15.073Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f5/0fb20fb49f8efdcdce6cd8127604ad2c503e754a8f139f5e02b01626523f/aiohttp-3.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a84792f8631bf5a94e52d9cc881c0b824ab42717165a5579c760b830d9392ac9", size = 497141, upload-time = "2026-03-31T21:58:17.009Z" }, + { url = "https://files.pythonhosted.org/packages/3b/86/b7c870053e36a94e8951b803cb5b909bfbc9b90ca941527f5fcafbf6b0fa/aiohttp-3.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57653eac22c6a4c13eb22ecf4d673d64a12f266e72785ab1c8b8e5940d0e8090", size = 1732476, upload-time = "2026-03-31T21:58:18.925Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e5/4e161f84f98d80c03a238671b4136e6530453d65262867d989bbe78244d0/aiohttp-3.13.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5e5f7debc7a57af53fdf5c5009f9391d9f4c12867049d509bf7bb164a6e295b", size = 1706507, upload-time = "2026-03-31T21:58:21.094Z" }, + { url = "https://files.pythonhosted.org/packages/d4/56/ea11a9f01518bd5a2a2fcee869d248c4b8a0cfa0bb13401574fa31adf4d4/aiohttp-3.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c719f65bebcdf6716f10e9eff80d27567f7892d8988c06de12bbbd39307c6e3a", size = 1773465, upload-time = "2026-03-31T21:58:23.159Z" }, + { url = "https://files.pythonhosted.org/packages/eb/40/333ca27fb74b0383f17c90570c748f7582501507307350a79d9f9f3c6eb1/aiohttp-3.13.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d97f93fdae594d886c5a866636397e2bcab146fd7a132fd6bb9ce182224452f8", size = 1873523, upload-time = "2026-03-31T21:58:25.59Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d2/e2f77eef1acb7111405433c707dc735e63f67a56e176e72e9e7a2cd3f493/aiohttp-3.13.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3df334e39d4c2f899a914f1dba283c1aadc311790733f705182998c6f7cae665", size = 1754113, upload-time = "2026-03-31T21:58:27.624Z" }, + { url = "https://files.pythonhosted.org/packages/fb/56/3f653d7f53c89669301ec9e42c95233e2a0c0a6dd051269e6e678db4fdb0/aiohttp-3.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540", size = 1562351, upload-time = "2026-03-31T21:58:29.918Z" }, + { url = "https://files.pythonhosted.org/packages/ec/a6/9b3e91eb8ae791cce4ee736da02211c85c6f835f1bdfac0594a8a3b7018c/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7becdf835feff2f4f335d7477f121af787e3504b48b449ff737afb35869ba7bb", size = 1693205, upload-time = "2026-03-31T21:58:32.214Z" }, + { url = "https://files.pythonhosted.org/packages/98/fc/bfb437a99a2fcebd6b6eaec609571954de2ed424f01c352f4b5504371dd3/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:676e5651705ad5d8a70aeb8eb6936c436d8ebbd56e63436cb7dd9bb36d2a9a46", size = 1730618, upload-time = "2026-03-31T21:58:34.728Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b6/c8534862126191a034f68153194c389addc285a0f1347d85096d349bbc15/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9b16c653d38eb1a611cc898c41e76859ca27f119d25b53c12875fd0474ae31a8", size = 1745185, upload-time = "2026-03-31T21:58:36.909Z" }, + { url = "https://files.pythonhosted.org/packages/0b/93/4ca8ee2ef5236e2707e0fd5fecb10ce214aee1ff4ab307af9c558bda3b37/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:999802d5fa0389f58decd24b537c54aa63c01c3219ce17d1214cbda3c2b22d2d", size = 1557311, upload-time = "2026-03-31T21:58:39.38Z" }, + { url = "https://files.pythonhosted.org/packages/57/ae/76177b15f18c5f5d094f19901d284025db28eccc5ae374d1d254181d33f4/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ec707059ee75732b1ba130ed5f9580fe10ff75180c812bc267ded039db5128c6", size = 1773147, upload-time = "2026-03-31T21:58:41.476Z" }, + { url = "https://files.pythonhosted.org/packages/01/a4/62f05a0a98d88af59d93b7fcac564e5f18f513cb7471696ac286db970d6a/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d6d44a5b48132053c2f6cd5c8cb14bc67e99a63594e336b0f2af81e94d5530c", size = 1730356, upload-time = "2026-03-31T21:58:44.049Z" }, + { url = "https://files.pythonhosted.org/packages/e4/85/fc8601f59dfa8c9523808281f2da571f8b4699685f9809a228adcc90838d/aiohttp-3.13.5-cp313-cp313-win32.whl", hash = "sha256:329f292ed14d38a6c4c435e465f48bebb47479fd676a0411936cc371643225cc", size = 432637, upload-time = "2026-03-31T21:58:46.167Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1b/ac685a8882896acf0f6b31d689e3792199cfe7aba37969fa91da63a7fa27/aiohttp-3.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:69f571de7500e0557801c0b51f4780482c0ec5fe2ac851af5a92cfce1af1cb83", size = 458896, upload-time = "2026-03-31T21:58:48.119Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ce/46572759afc859e867a5bc8ec3487315869013f59281ce61764f76d879de/aiohttp-3.13.5-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:eb4639f32fd4a9904ab8fb45bf3383ba71137f3d9d4ba25b3b3f3109977c5b8c", size = 745721, upload-time = "2026-03-31T21:58:50.229Z" }, + { url = "https://files.pythonhosted.org/packages/13/fe/8a2efd7626dbe6049b2ef8ace18ffda8a4dfcbe1bcff3ac30c0c7575c20b/aiohttp-3.13.5-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:7e5dc4311bd5ac493886c63cbf76ab579dbe4641268e7c74e48e774c74b6f2be", size = 497663, upload-time = "2026-03-31T21:58:52.232Z" }, + { url = "https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25", size = 499094, upload-time = "2026-03-31T21:58:54.566Z" }, + { url = "https://files.pythonhosted.org/packages/0a/33/a8362cb15cf16a3af7e86ed11962d5cd7d59b449202dc576cdc731310bde/aiohttp-3.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecc26751323224cf8186efcf7fbcbc30f4e1d8c7970659daf25ad995e4032a56", size = 1726701, upload-time = "2026-03-31T21:58:56.864Z" }, + { url = "https://files.pythonhosted.org/packages/45/0c/c091ac5c3a17114bd76cbf85d674650969ddf93387876cf67f754204bd77/aiohttp-3.13.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10a75acfcf794edf9d8db50e5a7ec5fc818b2a8d3f591ce93bc7b1210df016d2", size = 1683360, upload-time = "2026-03-31T21:58:59.072Z" }, + { url = "https://files.pythonhosted.org/packages/23/73/bcee1c2b79bc275e964d1446c55c54441a461938e70267c86afaae6fba27/aiohttp-3.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f7a18f258d124cd678c5fe072fe4432a4d5232b0657fca7c1847f599233c83a", size = 1773023, upload-time = "2026-03-31T21:59:01.776Z" }, + { url = "https://files.pythonhosted.org/packages/c7/ef/720e639df03004fee2d869f771799d8c23046dec47d5b81e396c7cda583a/aiohttp-3.13.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:df6104c009713d3a89621096f3e3e88cc323fd269dbd7c20afe18535094320be", size = 1853795, upload-time = "2026-03-31T21:59:04.568Z" }, + { url = "https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b", size = 1730405, upload-time = "2026-03-31T21:59:07.221Z" }, + { url = "https://files.pythonhosted.org/packages/ce/75/ee1fd286ca7dc599d824b5651dad7b3be7ff8d9a7e7b3fe9820d9180f7db/aiohttp-3.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c974fb66180e58709b6fc402846f13791240d180b74de81d23913abe48e96d94", size = 1558082, upload-time = "2026-03-31T21:59:09.484Z" }, + { url = "https://files.pythonhosted.org/packages/c3/20/1e9e6650dfc436340116b7aa89ff8cb2bbdf0abc11dfaceaad8f74273a10/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6e27ea05d184afac78aabbac667450c75e54e35f62238d44463131bd3f96753d", size = 1692346, upload-time = "2026-03-31T21:59:12.068Z" }, + { url = "https://files.pythonhosted.org/packages/d8/40/8ebc6658d48ea630ac7903912fe0dd4e262f0e16825aa4c833c56c9f1f56/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a79a6d399cef33a11b6f004c67bb07741d91f2be01b8d712d52c75711b1e07c7", size = 1698891, upload-time = "2026-03-31T21:59:14.552Z" }, + { url = "https://files.pythonhosted.org/packages/d8/78/ea0ae5ec8ba7a5c10bdd6e318f1ba5e76fcde17db8275188772afc7917a4/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c632ce9c0b534fbe25b52c974515ed674937c5b99f549a92127c85f771a78772", size = 1742113, upload-time = "2026-03-31T21:59:17.068Z" }, + { url = "https://files.pythonhosted.org/packages/8a/66/9d308ed71e3f2491be1acb8769d96c6f0c47d92099f3bc9119cada27b357/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5", size = 1553088, upload-time = "2026-03-31T21:59:19.541Z" }, + { url = "https://files.pythonhosted.org/packages/da/a6/6cc25ed8dfc6e00c90f5c6d126a98e2cf28957ad06fa1036bd34b6f24a2c/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f92995dfec9420bb69ae629abf422e516923ba79ba4403bc750d94fb4a6c68c1", size = 1757976, upload-time = "2026-03-31T21:59:22.311Z" }, + { url = "https://files.pythonhosted.org/packages/c1/2b/cce5b0ffe0de99c83e5e36d8f828e4161e415660a9f3e58339d07cce3006/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20ae0ff08b1f2c8788d6fb85afcb798654ae6ba0b747575f8562de738078457b", size = 1712444, upload-time = "2026-03-31T21:59:24.635Z" }, + { url = "https://files.pythonhosted.org/packages/6c/cf/9e1795b4160c58d29421eafd1a69c6ce351e2f7c8d3c6b7e4ca44aea1a5b/aiohttp-3.13.5-cp314-cp314-win32.whl", hash = "sha256:b20df693de16f42b2472a9c485e1c948ee55524786a0a34345511afdd22246f3", size = 438128, upload-time = "2026-03-31T21:59:27.291Z" }, + { url = "https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162", size = 464029, upload-time = "2026-03-31T21:59:29.429Z" }, + { url = "https://files.pythonhosted.org/packages/79/11/c27d9332ee20d68dd164dc12a6ecdef2e2e35ecc97ed6cf0d2442844624b/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:1efb06900858bb618ff5cee184ae2de5828896c448403d51fb633f09e109be0a", size = 778758, upload-time = "2026-03-31T21:59:31.547Z" }, + { url = "https://files.pythonhosted.org/packages/04/fb/377aead2e0a3ba5f09b7624f702a964bdf4f08b5b6728a9799830c80041e/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254", size = 512883, upload-time = "2026-03-31T21:59:34.098Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a6/aa109a33671f7a5d3bd78b46da9d852797c5e665bfda7d6b373f56bff2ec/aiohttp-3.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:20058e23909b9e65f9da62b396b77dfa95965cbe840f8def6e572538b1d32e36", size = 516668, upload-time = "2026-03-31T21:59:36.497Z" }, + { url = "https://files.pythonhosted.org/packages/79/b3/ca078f9f2fa9563c36fb8ef89053ea2bb146d6f792c5104574d49d8acb63/aiohttp-3.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cf20a8d6868cb15a73cab329ffc07291ba8c22b1b88176026106ae39aa6df0f", size = 1883461, upload-time = "2026-03-31T21:59:38.723Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e3/a7ad633ca1ca497b852233a3cce6906a56c3225fb6d9217b5e5e60b7419d/aiohttp-3.13.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:330f5da04c987f1d5bdb8ae189137c77139f36bd1cb23779ca1a354a4b027800", size = 1747661, upload-time = "2026-03-31T21:59:41.187Z" }, + { url = "https://files.pythonhosted.org/packages/33/b9/cd6fe579bed34a906d3d783fe60f2fa297ef55b27bb4538438ee49d4dc41/aiohttp-3.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f1cbf0c7926d315c3c26c2da41fd2b5d2fe01ac0e157b78caefc51a782196cf", size = 1863800, upload-time = "2026-03-31T21:59:43.84Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3f/2c1e2f5144cefa889c8afd5cf431994c32f3b29da9961698ff4e3811b79a/aiohttp-3.13.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:53fc049ed6390d05423ba33103ded7281fe897cf97878f369a527070bd95795b", size = 1958382, upload-time = "2026-03-31T21:59:46.187Z" }, + { url = "https://files.pythonhosted.org/packages/66/1d/f31ec3f1013723b3babe3609e7f119c2c2fb6ef33da90061a705ef3e1bc8/aiohttp-3.13.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:898703aa2667e3c5ca4c54ca36cd73f58b7a38ef87a5606414799ebce4d3fd3a", size = 1803724, upload-time = "2026-03-31T21:59:48.656Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b4/57712dfc6f1542f067daa81eb61da282fab3e6f1966fca25db06c4fc62d5/aiohttp-3.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0494a01ca9584eea1e5fbd6d748e61ecff218c51b576ee1999c23db7066417d8", size = 1640027, upload-time = "2026-03-31T21:59:51.284Z" }, + { url = "https://files.pythonhosted.org/packages/25/3c/734c878fb43ec083d8e31bf029daae1beafeae582d1b35da234739e82ee7/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6cf81fe010b8c17b09495cbd15c1d35afbc8fb405c0c9cf4738e5ae3af1d65be", size = 1806644, upload-time = "2026-03-31T21:59:53.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/a5/f671e5cbec1c21d044ff3078223f949748f3a7f86b14e34a365d74a5d21f/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:c564dd5f09ddc9d8f2c2d0a301cd30a79a2cc1b46dd1a73bef8f0038863d016b", size = 1791630, upload-time = "2026-03-31T21:59:56.239Z" }, + { url = "https://files.pythonhosted.org/packages/0b/63/fb8d0ad63a0b8a99be97deac8c04dacf0785721c158bdf23d679a87aa99e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2994be9f6e51046c4f864598fd9abeb4fba6e88f0b2152422c9666dcd4aea9c6", size = 1809403, upload-time = "2026-03-31T21:59:59.103Z" }, + { url = "https://files.pythonhosted.org/packages/59/0c/bfed7f30662fcf12206481c2aac57dedee43fe1c49275e85b3a1e1742294/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:157826e2fa245d2ef46c83ea8a5faf77ca19355d278d425c29fda0beb3318037", size = 1634924, upload-time = "2026-03-31T22:00:02.116Z" }, + { url = "https://files.pythonhosted.org/packages/17/d6/fd518d668a09fd5a3319ae5e984d4d80b9a4b3df4e21c52f02251ef5a32e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a8aca50daa9493e9e13c0f566201a9006f080e7c50e5e90d0b06f53146a54500", size = 1836119, upload-time = "2026-03-31T22:00:04.756Z" }, + { url = "https://files.pythonhosted.org/packages/78/b7/15fb7a9d52e112a25b621c67b69c167805cb1f2ab8f1708a5c490d1b52fe/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3b13560160d07e047a93f23aaa30718606493036253d5430887514715b67c9d9", size = 1772072, upload-time = "2026-03-31T22:00:07.494Z" }, + { url = "https://files.pythonhosted.org/packages/7e/df/57ba7f0c4a553fc2bd8b6321df236870ec6fd64a2a473a8a13d4f733214e/aiohttp-3.13.5-cp314-cp314t-win32.whl", hash = "sha256:9a0f4474b6ea6818b41f82172d799e4b3d29e22c2c520ce4357856fced9af2f8", size = 471819, upload-time = "2026-03-31T22:00:10.277Z" }, + { url = "https://files.pythonhosted.org/packages/62/29/2f8418269e46454a26171bfdd6a055d74febf32234e474930f2f60a17145/aiohttp-3.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:18a2f6c1182c51baa1d28d68fea51513cb2a76612f038853c0ad3c145423d3d9", size = 505441, upload-time = "2026-03-31T22:00:12.791Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "alembic" +version = "1.18.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mako" }, + { name = "sqlalchemy" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/94/13/8b084e0f2efb0275a1d534838844926f798bd766566b1375174e2448cd31/alembic-1.18.4.tar.gz", hash = "sha256:cb6e1fd84b6174ab8dbb2329f86d631ba9559dd78df550b57804d607672cedbc", size = 2056725, upload-time = "2026-02-10T16:00:47.195Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/29/6533c317b74f707ea28f8d633734dbda2119bbadfc61b2f3640ba835d0f7/alembic-1.18.4-py3-none-any.whl", hash = "sha256:a5ed4adcf6d8a4cb575f3d759f071b03cd6e5c7618eb796cb52497be25bfe19a", size = 263893, upload-time = "2026-02-10T16:00:49.997Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anthropic" +version = "0.94.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "docstring-parser" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/f2/fb4a04ff676742588a41f94dd318883d6d77e88e2b5e20b664ae3bf20e1b/anthropic-0.94.1.tar.gz", hash = "sha256:96c7033069c16074f90638dff8bf1f1616f9eefeb8ef7d1b0df4a0393ab34685", size = 654451, upload-time = "2026-04-13T18:08:18.453Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/18/6d5b5948cbe450d3c98336c8a8c4804aedb3ab24fa37922d05063f8ba266/anthropic-0.94.1-py3-none-any.whl", hash = "sha256:58fb20dc60f35e75a5a82a1c73a3e196ac3b18ff2ed4826cba345f4adb78919d", size = 627710, upload-time = "2026-04-13T18:08:19.629Z" }, +] + +[[package]] +name = "anyio" +version = "4.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353, upload-time = "2026-03-24T12:59:08.246Z" }, +] + +[[package]] +name = "apache-tvm-ffi" +version = "0.1.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/17/b0/5114e30faffe3279a51a5f3b45dd1b7ce09af1246b62447b45a39a374e54/apache_tvm_ffi-0.1.10.tar.gz", hash = "sha256:974c208766c304c780c17c6d405449e862f83b22c7b6b2b8c28b29d55a806ae3", size = 2691605, upload-time = "2026-04-07T19:58:51.767Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/3b/8c850c36a522e8b3d57bd209b94464c98066cf9c0550a1c8af708b09669b/apache_tvm_ffi-0.1.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ef1059d8f8ae6e497440b94805b30f9ff5db21cd0b1745c8520b2874d3eb9efb", size = 2331240, upload-time = "2026-04-07T19:57:53.837Z" }, + { url = "https://files.pythonhosted.org/packages/e1/09/61c294a0b72b37071e5227838a2ee56681d4bfe154b387eb6fbbb8f1d073/apache_tvm_ffi-0.1.10-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b4a3381f6e93f675217bf5421bd21a1ee1f3841c522a588d42dc37d9c9148108", size = 2544126, upload-time = "2026-04-07T19:57:55.69Z" }, + { url = "https://files.pythonhosted.org/packages/15/5c/d4444fb595c5d8f9309a5587f961d28a2918d02cf88d386a36d788ef8085/apache_tvm_ffi-0.1.10-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28dbe0c1d8c5c43b7d3574d1c9f0606437e7008efbd2b7cb118385465815e45d", size = 2651634, upload-time = "2026-04-07T19:57:57.411Z" }, + { url = "https://files.pythonhosted.org/packages/24/e2/03f8af49c08aabaad292296523280ee2b1c10982baf6411aea75fe3a01cb/apache_tvm_ffi-0.1.10-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dec05560e84b007998795484a3306965fe1d8de7d8de7e8c0bb7ccd84a246336", size = 2461544, upload-time = "2026-04-07T19:57:59.305Z" }, + { url = "https://files.pythonhosted.org/packages/f3/e3/436b573a23ef171c14e90181ff379819ef8481d8236fda9afb29b3b15516/apache_tvm_ffi-0.1.10-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5dda14f065520c3bdec6889fecfa7c1b06a4f6fb23e7b2475d9a0477eb8588d8", size = 2632276, upload-time = "2026-04-07T19:58:00.962Z" }, + { url = "https://files.pythonhosted.org/packages/29/a8/d1a17ac7d85183bfceaa26efa5bda9093010d00c9da70fd852baf3c37224/apache_tvm_ffi-0.1.10-cp310-cp310-win_amd64.whl", hash = "sha256:d9109b81b2584a1a2f8bf40bc92f2a187ea848573796c210c13379535a0404f7", size = 2303306, upload-time = "2026-04-07T19:58:02.667Z" }, + { url = "https://files.pythonhosted.org/packages/54/1b/05b0581b9d4ebb406f717533ec1f984ae3e020c15da37518ee1ac663f2da/apache_tvm_ffi-0.1.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e6fb3b33e0ab087de3a0fa3803dbd48a9acbaddee61bd2cc13bd8ad7ea87d0e7", size = 2329920, upload-time = "2026-04-07T19:58:04.017Z" }, + { url = "https://files.pythonhosted.org/packages/55/c3/598da8bf49e850aa329a024929643eb141d7907f4d97705b74e49ca499f6/apache_tvm_ffi-0.1.10-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d5cf055a83e1b1944dd05386c593bc22de29a1aeb6cae45af54735796875194a", size = 2543849, upload-time = "2026-04-07T19:58:05.419Z" }, + { url = "https://files.pythonhosted.org/packages/50/58/221b41c5f77405f99875754f2a38c01da49387e366bf0fd40302b2cd25f3/apache_tvm_ffi-0.1.10-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:81c4144fc06750312f2829960862bd52ba6f0bb17e6d7aae3f7a09f9170f7e7a", size = 2650260, upload-time = "2026-04-07T19:58:07.002Z" }, + { url = "https://files.pythonhosted.org/packages/01/2b/36b5210d24492dc4dda488d785dd4039c0788238f6aa4aa5067b2ea494d1/apache_tvm_ffi-0.1.10-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7bafe9a6191c77f3978e9cd9726799abbe7fd574913fa2416402bc876633524e", size = 2459987, upload-time = "2026-04-07T19:58:08.409Z" }, + { url = "https://files.pythonhosted.org/packages/9f/36/8f8f719c1c52ed978fc99acde51827f5fc48380e69a310a02a6a5ae94d0f/apache_tvm_ffi-0.1.10-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2ba653825f806a87fe2ca48ebab1abb9ae0f17d6642fbada622c6c5eea9fe96", size = 2631364, upload-time = "2026-04-07T19:58:09.784Z" }, + { url = "https://files.pythonhosted.org/packages/65/64/4ec0ea8eebc79b17dd8bdcf06c809b5ae5ff58aa9c3ffbe8dd26b976d55f/apache_tvm_ffi-0.1.10-cp311-cp311-win_amd64.whl", hash = "sha256:8009ec2a9ca5c04cd8686102f2d3b648dfa5a3cb2ceb57a21f03f7b8480a58fb", size = 2304477, upload-time = "2026-04-07T19:58:11.183Z" }, + { url = "https://files.pythonhosted.org/packages/1a/12/0ba672dba52f9ecc813ce7ff4ef4aa5a2c5f27243d26165f09053f057a76/apache_tvm_ffi-0.1.10-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:52ed8fec82451c3af1e205f55500e5adc5eaa1913c82ce15b2064d305d7f880b", size = 2285850, upload-time = "2026-04-07T19:58:12.784Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2a/1978a1c827e1212de4f369ec08cfeb44719bbe6cbeab90b15e967c68c108/apache_tvm_ffi-0.1.10-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ec5c4a81e294e6379e4dea68c86266924d3f22829c3de272806c980238e43e59", size = 2476596, upload-time = "2026-04-07T19:58:14.316Z" }, + { url = "https://files.pythonhosted.org/packages/50/6f/23740f06829030704e6f8f1f7093a06b7a68f904baa40053a5f594705bae/apache_tvm_ffi-0.1.10-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:73d478395a8625dd92fde7b7fd92b4719f18f480b78336e422cb66cc7985213d", size = 2589574, upload-time = "2026-04-07T19:58:15.94Z" }, + { url = "https://files.pythonhosted.org/packages/92/d0/54badf5c8f6208e06f331a20ddd154f19c94c2e906da5b8cce7d60727d4b/apache_tvm_ffi-0.1.10-cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3829216a8500c2f61062e48c627f6db6c3fa49416b3ffa85bc04243ae5d759f7", size = 2396434, upload-time = "2026-04-07T19:58:17.519Z" }, + { url = "https://files.pythonhosted.org/packages/51/f7/ca3fdadc2468e8b67a2f3f13bb7aa132c584feefd8a25dbf920e4bf0a03b/apache_tvm_ffi-0.1.10-cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:96b69030c722572e13e30182733adfa2d604258e988b3f6630a16f397c7f9288", size = 2571084, upload-time = "2026-04-07T19:58:20.399Z" }, + { url = "https://files.pythonhosted.org/packages/23/2d/bf899e1ba4ea1da6a55a04ad3e9c07338ee06a140862b05310bae9a00cf9/apache_tvm_ffi-0.1.10-cp312-abi3-win_amd64.whl", hash = "sha256:14e59f6f69881d37a25b03943cfac33317a06f6745df0ff2dfb3b0cd3ed3698f", size = 2261853, upload-time = "2026-04-07T19:58:21.772Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ec/305fe5cc45d41a24d8d7236b886cacc2d6dd3c29eab68dc5cec06a9fd22c/apache_tvm_ffi-0.1.10-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:40c7caddf7b73cabf06f814e8d1bdef0f9bd5676bf7563546dd61f14df9e656d", size = 2344135, upload-time = "2026-04-07T19:58:23.512Z" }, + { url = "https://files.pythonhosted.org/packages/2e/5d/b1661512164772fc9ef1642234bf117182b440fc0a0b2ca8bd829fe7b40e/apache_tvm_ffi-0.1.10-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:32b9f4a44c09fcdd0994ee3c4415bf0371d68ea35a46da94ddcc666c9a6cf677", size = 2508518, upload-time = "2026-04-07T19:58:25.3Z" }, + { url = "https://files.pythonhosted.org/packages/d2/57/7266807b34344b9d8e4d776ebff38fd25f93a73e8c24bc595a67b6b69b3c/apache_tvm_ffi-0.1.10-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c9b93dc7fdc99d4cc44e9ac95063073b4fb8ced94929197ea3d631b70f554d8a", size = 2617108, upload-time = "2026-04-07T19:58:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/96/c3/a152ed68f57a491baaf70819224b98643309c7488fdcbc6fa3c84ebb9ca8/apache_tvm_ffi-0.1.10-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74724db54dfb825951e2deb3d2024b2c1867bff456db81512e475f9ccdd9b86b", size = 2432434, upload-time = "2026-04-07T19:58:28.681Z" }, + { url = "https://files.pythonhosted.org/packages/c4/09/5e2877c635edc8ac83caa106a6e78bd4816cbc2e52e1daea652c1fe956cf/apache_tvm_ffi-0.1.10-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac03c04145d9c248992e6f2ec2392a6914966a416eeeeaa729393f40b047be42", size = 2602517, upload-time = "2026-04-07T19:58:30.35Z" }, + { url = "https://files.pythonhosted.org/packages/81/50/900d55d8c3ca5a3fcdcef3a6d999f316d01f9e45e5297c444a2940eff5d2/apache_tvm_ffi-0.1.10-cp314-cp314t-win_amd64.whl", hash = "sha256:25d9130788f9b4563330122503b21e6c0ed37198f1552df36c1561b3704f1b2f", size = 2370990, upload-time = "2026-04-07T19:58:31.855Z" }, +] + +[[package]] +name = "astor" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/21/75b771132fee241dfe601d39ade629548a9626d1d39f333fde31bc46febe/astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e", size = 35090, upload-time = "2019-12-10T01:50:35.51Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/88/97eef84f48fa04fbd6750e62dcceafba6c63c81b7ac1420856c8dcc0a3f9/astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5", size = 27488, upload-time = "2019-12-10T01:50:33.628Z" }, +] + +[[package]] +name = "async-timeout" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, +] + +[[package]] +name = "asyncer" +version = "0.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/67/7ea59c3e69eaeee42e7fc91a5be67ca5849c8979acac2b920249760c6af2/asyncer-0.0.8.tar.gz", hash = "sha256:a589d980f57e20efb07ed91d0dbe67f1d2fd343e7142c66d3a099f05c620739c", size = 18217, upload-time = "2024-08-24T23:15:36.449Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/04/15b6ca6b7842eda2748bda0a0af73f2d054e9344320f8bba01f994294bcb/asyncer-0.0.8-py3-none-any.whl", hash = "sha256:5920d48fc99c8f8f0f1576e1882f5022885589c5fcbc46ce4224ec3e53776eeb", size = 9209, upload-time = "2024-08-24T23:15:35.317Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "audioop-lts" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/38/53/946db57842a50b2da2e0c1e34bd37f36f5aadba1a929a3971c5d7841dbca/audioop_lts-0.2.2.tar.gz", hash = "sha256:64d0c62d88e67b98a1a5e71987b7aa7b5bcffc7dcee65b635823dbdd0a8dbbd0", size = 30686, upload-time = "2025-08-05T16:43:17.409Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/d4/94d277ca941de5a507b07f0b592f199c22454eeaec8f008a286b3fbbacd6/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_universal2.whl", hash = "sha256:fd3d4602dc64914d462924a08c1a9816435a2155d74f325853c1f1ac3b2d9800", size = 46523, upload-time = "2025-08-05T16:42:20.836Z" }, + { url = "https://files.pythonhosted.org/packages/f8/5a/656d1c2da4b555920ce4177167bfeb8623d98765594af59702c8873f60ec/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_x86_64.whl", hash = "sha256:550c114a8df0aafe9a05442a1162dfc8fec37e9af1d625ae6060fed6e756f303", size = 27455, upload-time = "2025-08-05T16:42:22.283Z" }, + { url = "https://files.pythonhosted.org/packages/1b/83/ea581e364ce7b0d41456fb79d6ee0ad482beda61faf0cab20cbd4c63a541/audioop_lts-0.2.2-cp313-abi3-macosx_11_0_arm64.whl", hash = "sha256:9a13dc409f2564de15dd68be65b462ba0dde01b19663720c68c1140c782d1d75", size = 26997, upload-time = "2025-08-05T16:42:23.849Z" }, + { url = "https://files.pythonhosted.org/packages/b8/3b/e8964210b5e216e5041593b7d33e97ee65967f17c282e8510d19c666dab4/audioop_lts-0.2.2-cp313-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51c916108c56aa6e426ce611946f901badac950ee2ddaf302b7ed35d9958970d", size = 85844, upload-time = "2025-08-05T16:42:25.208Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2e/0a1c52faf10d51def20531a59ce4c706cb7952323b11709e10de324d6493/audioop_lts-0.2.2-cp313-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47eba38322370347b1c47024defbd36374a211e8dd5b0dcbce7b34fdb6f8847b", size = 85056, upload-time = "2025-08-05T16:42:26.559Z" }, + { url = "https://files.pythonhosted.org/packages/75/e8/cd95eef479656cb75ab05dfece8c1f8c395d17a7c651d88f8e6e291a63ab/audioop_lts-0.2.2-cp313-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba7c3a7e5f23e215cb271516197030c32aef2e754252c4c70a50aaff7031a2c8", size = 93892, upload-time = "2025-08-05T16:42:27.902Z" }, + { url = "https://files.pythonhosted.org/packages/5c/1e/a0c42570b74f83efa5cca34905b3eef03f7ab09fe5637015df538a7f3345/audioop_lts-0.2.2-cp313-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def246fe9e180626731b26e89816e79aae2276f825420a07b4a647abaa84becc", size = 96660, upload-time = "2025-08-05T16:42:28.9Z" }, + { url = "https://files.pythonhosted.org/packages/50/d5/8a0ae607ca07dbb34027bac8db805498ee7bfecc05fd2c148cc1ed7646e7/audioop_lts-0.2.2-cp313-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e160bf9df356d841bb6c180eeeea1834085464626dc1b68fa4e1d59070affdc3", size = 79143, upload-time = "2025-08-05T16:42:29.929Z" }, + { url = "https://files.pythonhosted.org/packages/12/17/0d28c46179e7910bfb0bb62760ccb33edb5de973052cb2230b662c14ca2e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4b4cd51a57b698b2d06cb9993b7ac8dfe89a3b2878e96bc7948e9f19ff51dba6", size = 84313, upload-time = "2025-08-05T16:42:30.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/ba/bd5d3806641564f2024e97ca98ea8f8811d4e01d9b9f9831474bc9e14f9e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4a53aa7c16a60a6857e6b0b165261436396ef7293f8b5c9c828a3a203147ed4a", size = 93044, upload-time = "2025-08-05T16:42:31.959Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5e/435ce8d5642f1f7679540d1e73c1c42d933331c0976eb397d1717d7f01a3/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:3fc38008969796f0f689f1453722a0f463da1b8a6fbee11987830bfbb664f623", size = 78766, upload-time = "2025-08-05T16:42:33.302Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3b/b909e76b606cbfd53875693ec8c156e93e15a1366a012f0b7e4fb52d3c34/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_s390x.whl", hash = "sha256:15ab25dd3e620790f40e9ead897f91e79c0d3ce65fe193c8ed6c26cffdd24be7", size = 87640, upload-time = "2025-08-05T16:42:34.854Z" }, + { url = "https://files.pythonhosted.org/packages/30/e7/8f1603b4572d79b775f2140d7952f200f5e6c62904585d08a01f0a70393a/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:03f061a1915538fd96272bac9551841859dbb2e3bf73ebe4a23ef043766f5449", size = 86052, upload-time = "2025-08-05T16:42:35.839Z" }, + { url = "https://files.pythonhosted.org/packages/b5/96/c37846df657ccdda62ba1ae2b6534fa90e2e1b1742ca8dcf8ebd38c53801/audioop_lts-0.2.2-cp313-abi3-win32.whl", hash = "sha256:3bcddaaf6cc5935a300a8387c99f7a7fbbe212a11568ec6cf6e4bc458c048636", size = 26185, upload-time = "2025-08-05T16:42:37.04Z" }, + { url = "https://files.pythonhosted.org/packages/34/a5/9d78fdb5b844a83da8a71226c7bdae7cc638861085fff7a1d707cb4823fa/audioop_lts-0.2.2-cp313-abi3-win_amd64.whl", hash = "sha256:a2c2a947fae7d1062ef08c4e369e0ba2086049a5e598fda41122535557012e9e", size = 30503, upload-time = "2025-08-05T16:42:38.427Z" }, + { url = "https://files.pythonhosted.org/packages/34/25/20d8fde083123e90c61b51afb547bb0ea7e77bab50d98c0ab243d02a0e43/audioop_lts-0.2.2-cp313-abi3-win_arm64.whl", hash = "sha256:5f93a5db13927a37d2d09637ccca4b2b6b48c19cd9eda7b17a2e9f77edee6a6f", size = 24173, upload-time = "2025-08-05T16:42:39.704Z" }, + { url = "https://files.pythonhosted.org/packages/58/a7/0a764f77b5c4ac58dc13c01a580f5d32ae8c74c92020b961556a43e26d02/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:73f80bf4cd5d2ca7814da30a120de1f9408ee0619cc75da87d0641273d202a09", size = 47096, upload-time = "2025-08-05T16:42:40.684Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ed/ebebedde1a18848b085ad0fa54b66ceb95f1f94a3fc04f1cd1b5ccb0ed42/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:106753a83a25ee4d6f473f2be6b0966fc1c9af7e0017192f5531a3e7463dce58", size = 27748, upload-time = "2025-08-05T16:42:41.992Z" }, + { url = "https://files.pythonhosted.org/packages/cb/6e/11ca8c21af79f15dbb1c7f8017952ee8c810c438ce4e2b25638dfef2b02c/audioop_lts-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fbdd522624141e40948ab3e8cdae6e04c748d78710e9f0f8d4dae2750831de19", size = 27329, upload-time = "2025-08-05T16:42:42.987Z" }, + { url = "https://files.pythonhosted.org/packages/84/52/0022f93d56d85eec5da6b9da6a958a1ef09e80c39f2cc0a590c6af81dcbb/audioop_lts-0.2.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:143fad0311e8209ece30a8dbddab3b65ab419cbe8c0dde6e8828da25999be911", size = 92407, upload-time = "2025-08-05T16:42:44.336Z" }, + { url = "https://files.pythonhosted.org/packages/87/1d/48a889855e67be8718adbc7a01f3c01d5743c325453a5e81cf3717664aad/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbbc74ec68a0fd08cfec1f4b5e8cca3d3cd7de5501b01c4b5d209995033cde9", size = 91811, upload-time = "2025-08-05T16:42:45.325Z" }, + { url = "https://files.pythonhosted.org/packages/98/a6/94b7213190e8077547ffae75e13ed05edc488653c85aa5c41472c297d295/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cfcac6aa6f42397471e4943e0feb2244549db5c5d01efcd02725b96af417f3fe", size = 100470, upload-time = "2025-08-05T16:42:46.468Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e9/78450d7cb921ede0cfc33426d3a8023a3bda755883c95c868ee36db8d48d/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:752d76472d9804ac60f0078c79cdae8b956f293177acd2316cd1e15149aee132", size = 103878, upload-time = "2025-08-05T16:42:47.576Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e2/cd5439aad4f3e34ae1ee852025dc6aa8f67a82b97641e390bf7bd9891d3e/audioop_lts-0.2.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:83c381767e2cc10e93e40281a04852facc4cd9334550e0f392f72d1c0a9c5753", size = 84867, upload-time = "2025-08-05T16:42:49.003Z" }, + { url = "https://files.pythonhosted.org/packages/68/4b/9d853e9076c43ebba0d411e8d2aa19061083349ac695a7d082540bad64d0/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c0022283e9556e0f3643b7c3c03f05063ca72b3063291834cca43234f20c60bb", size = 90001, upload-time = "2025-08-05T16:42:50.038Z" }, + { url = "https://files.pythonhosted.org/packages/58/26/4bae7f9d2f116ed5593989d0e521d679b0d583973d203384679323d8fa85/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a2d4f1513d63c795e82948e1305f31a6d530626e5f9f2605408b300ae6095093", size = 99046, upload-time = "2025-08-05T16:42:51.111Z" }, + { url = "https://files.pythonhosted.org/packages/b2/67/a9f4fb3e250dda9e9046f8866e9fa7d52664f8985e445c6b4ad6dfb55641/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:c9c8e68d8b4a56fda8c025e538e639f8c5953f5073886b596c93ec9b620055e7", size = 84788, upload-time = "2025-08-05T16:42:52.198Z" }, + { url = "https://files.pythonhosted.org/packages/70/f7/3de86562db0121956148bcb0fe5b506615e3bcf6e63c4357a612b910765a/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:96f19de485a2925314f5020e85911fb447ff5fbef56e8c7c6927851b95533a1c", size = 94472, upload-time = "2025-08-05T16:42:53.59Z" }, + { url = "https://files.pythonhosted.org/packages/f1/32/fd772bf9078ae1001207d2df1eef3da05bea611a87dd0e8217989b2848fa/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e541c3ef484852ef36545f66209444c48b28661e864ccadb29daddb6a4b8e5f5", size = 92279, upload-time = "2025-08-05T16:42:54.632Z" }, + { url = "https://files.pythonhosted.org/packages/4f/41/affea7181592ab0ab560044632571a38edaf9130b84928177823fbf3176a/audioop_lts-0.2.2-cp313-cp313t-win32.whl", hash = "sha256:d5e73fa573e273e4f2e5ff96f9043858a5e9311e94ffefd88a3186a910c70917", size = 26568, upload-time = "2025-08-05T16:42:55.627Z" }, + { url = "https://files.pythonhosted.org/packages/28/2b/0372842877016641db8fc54d5c88596b542eec2f8f6c20a36fb6612bf9ee/audioop_lts-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9191d68659eda01e448188f60364c7763a7ca6653ed3f87ebb165822153a8547", size = 30942, upload-time = "2025-08-05T16:42:56.674Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/baf2b9cc7e96c179bb4a54f30fcd83e6ecb340031bde68f486403f943768/audioop_lts-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c174e322bb5783c099aaf87faeb240c8d210686b04bd61dfd05a8e5a83d88969", size = 24603, upload-time = "2025-08-05T16:42:57.571Z" }, + { url = "https://files.pythonhosted.org/packages/5c/73/413b5a2804091e2c7d5def1d618e4837f1cb82464e230f827226278556b7/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f9ee9b52f5f857fbaf9d605a360884f034c92c1c23021fb90b2e39b8e64bede6", size = 47104, upload-time = "2025-08-05T16:42:58.518Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/daa3308dc6593944410c2c68306a5e217f5c05b70a12e70228e7dd42dc5c/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:49ee1a41738a23e98d98b937a0638357a2477bc99e61b0f768a8f654f45d9b7a", size = 27754, upload-time = "2025-08-05T16:43:00.132Z" }, + { url = "https://files.pythonhosted.org/packages/4e/86/c2e0f627168fcf61781a8f72cab06b228fe1da4b9fa4ab39cfb791b5836b/audioop_lts-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5b00be98ccd0fc123dcfad31d50030d25fcf31488cde9e61692029cd7394733b", size = 27332, upload-time = "2025-08-05T16:43:01.666Z" }, + { url = "https://files.pythonhosted.org/packages/c7/bd/35dce665255434f54e5307de39e31912a6f902d4572da7c37582809de14f/audioop_lts-0.2.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6d2e0f9f7a69403e388894d4ca5ada5c47230716a03f2847cfc7bd1ecb589d6", size = 92396, upload-time = "2025-08-05T16:43:02.991Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d2/deeb9f51def1437b3afa35aeb729d577c04bcd89394cb56f9239a9f50b6f/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9b0b8a03ef474f56d1a842af1a2e01398b8f7654009823c6d9e0ecff4d5cfbf", size = 91811, upload-time = "2025-08-05T16:43:04.096Z" }, + { url = "https://files.pythonhosted.org/packages/76/3b/09f8b35b227cee28cc8231e296a82759ed80c1a08e349811d69773c48426/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2b267b70747d82125f1a021506565bdc5609a2b24bcb4773c16d79d2bb260bbd", size = 100483, upload-time = "2025-08-05T16:43:05.085Z" }, + { url = "https://files.pythonhosted.org/packages/0b/15/05b48a935cf3b130c248bfdbdea71ce6437f5394ee8533e0edd7cfd93d5e/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0337d658f9b81f4cd0fdb1f47635070cc084871a3d4646d9de74fdf4e7c3d24a", size = 103885, upload-time = "2025-08-05T16:43:06.197Z" }, + { url = "https://files.pythonhosted.org/packages/83/80/186b7fce6d35b68d3d739f228dc31d60b3412105854edb975aa155a58339/audioop_lts-0.2.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:167d3b62586faef8b6b2275c3218796b12621a60e43f7e9d5845d627b9c9b80e", size = 84899, upload-time = "2025-08-05T16:43:07.291Z" }, + { url = "https://files.pythonhosted.org/packages/49/89/c78cc5ac6cb5828f17514fb12966e299c850bc885e80f8ad94e38d450886/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0d9385e96f9f6da847f4d571ce3cb15b5091140edf3db97276872647ce37efd7", size = 89998, upload-time = "2025-08-05T16:43:08.335Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4b/6401888d0c010e586c2ca50fce4c903d70a6bb55928b16cfbdfd957a13da/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:48159d96962674eccdca9a3df280e864e8ac75e40a577cc97c5c42667ffabfc5", size = 99046, upload-time = "2025-08-05T16:43:09.367Z" }, + { url = "https://files.pythonhosted.org/packages/de/f8/c874ca9bb447dae0e2ef2e231f6c4c2b0c39e31ae684d2420b0f9e97ee68/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8fefe5868cd082db1186f2837d64cfbfa78b548ea0d0543e9b28935ccce81ce9", size = 84843, upload-time = "2025-08-05T16:43:10.749Z" }, + { url = "https://files.pythonhosted.org/packages/3e/c0/0323e66f3daebc13fd46b36b30c3be47e3fc4257eae44f1e77eb828c703f/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:58cf54380c3884fb49fdd37dfb7a772632b6701d28edd3e2904743c5e1773602", size = 94490, upload-time = "2025-08-05T16:43:12.131Z" }, + { url = "https://files.pythonhosted.org/packages/98/6b/acc7734ac02d95ab791c10c3f17ffa3584ccb9ac5c18fd771c638ed6d1f5/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:088327f00488cdeed296edd9215ca159f3a5a5034741465789cad403fcf4bec0", size = 92297, upload-time = "2025-08-05T16:43:13.139Z" }, + { url = "https://files.pythonhosted.org/packages/13/c3/c3dc3f564ce6877ecd2a05f8d751b9b27a8c320c2533a98b0c86349778d0/audioop_lts-0.2.2-cp314-cp314t-win32.whl", hash = "sha256:068aa17a38b4e0e7de771c62c60bbca2455924b67a8814f3b0dee92b5820c0b3", size = 27331, upload-time = "2025-08-05T16:43:14.19Z" }, + { url = "https://files.pythonhosted.org/packages/72/bb/b4608537e9ffcb86449091939d52d24a055216a36a8bf66b936af8c3e7ac/audioop_lts-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a5bf613e96f49712073de86f20dbdd4014ca18efd4d34ed18c75bd808337851b", size = 31697, upload-time = "2025-08-05T16:43:15.193Z" }, + { url = "https://files.pythonhosted.org/packages/f6/22/91616fe707a5c5510de2cac9b046a30defe7007ba8a0c04f9c08f27df312/audioop_lts-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:b492c3b040153e68b9fdaff5913305aaaba5bb433d8a7f73d5cf6a64ed3cc1dd", size = 25206, upload-time = "2025-08-05T16:43:16.444Z" }, +] + +[[package]] +name = "bcrypt" +version = "5.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/36/3329e2518d70ad8e2e5817d5a4cac6bba05a47767ec416c7d020a965f408/bcrypt-5.0.0.tar.gz", hash = "sha256:f748f7c2d6fd375cc93d3fba7ef4a9e3a092421b8dbf34d8d4dc06be9492dfdd", size = 25386, upload-time = "2025-09-25T19:50:47.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/85/3e65e01985fddf25b64ca67275bb5bdb4040bd1a53b66d355c6c37c8a680/bcrypt-5.0.0-cp313-cp313t-macosx_10_12_universal2.whl", hash = "sha256:f3c08197f3039bec79cee59a606d62b96b16669cff3949f21e74796b6e3cd2be", size = 481806, upload-time = "2025-09-25T19:49:05.102Z" }, + { url = "https://files.pythonhosted.org/packages/44/dc/01eb79f12b177017a726cbf78330eb0eb442fae0e7b3dfd84ea2849552f3/bcrypt-5.0.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:200af71bc25f22006f4069060c88ed36f8aa4ff7f53e67ff04d2ab3f1e79a5b2", size = 268626, upload-time = "2025-09-25T19:49:06.723Z" }, + { url = "https://files.pythonhosted.org/packages/8c/cf/e82388ad5959c40d6afd94fb4743cc077129d45b952d46bdc3180310e2df/bcrypt-5.0.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:baade0a5657654c2984468efb7d6c110db87ea63ef5a4b54732e7e337253e44f", size = 271853, upload-time = "2025-09-25T19:49:08.028Z" }, + { url = "https://files.pythonhosted.org/packages/ec/86/7134b9dae7cf0efa85671651341f6afa695857fae172615e960fb6a466fa/bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c58b56cdfb03202b3bcc9fd8daee8e8e9b6d7e3163aa97c631dfcfcc24d36c86", size = 269793, upload-time = "2025-09-25T19:49:09.727Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/6296688ac1b9e503d034e7d0614d56e80c5d1a08402ff856a4549cb59207/bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4bfd2a34de661f34d0bda43c3e4e79df586e4716ef401fe31ea39d69d581ef23", size = 289930, upload-time = "2025-09-25T19:49:11.204Z" }, + { url = "https://files.pythonhosted.org/packages/d1/18/884a44aa47f2a3b88dd09bc05a1e40b57878ecd111d17e5bba6f09f8bb77/bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ed2e1365e31fc73f1825fa830f1c8f8917ca1b3ca6185773b349c20fd606cec2", size = 272194, upload-time = "2025-09-25T19:49:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/0e/8f/371a3ab33c6982070b674f1788e05b656cfbf5685894acbfef0c65483a59/bcrypt-5.0.0-cp313-cp313t-manylinux_2_34_aarch64.whl", hash = "sha256:83e787d7a84dbbfba6f250dd7a5efd689e935f03dd83b0f919d39349e1f23f83", size = 269381, upload-time = "2025-09-25T19:49:14.308Z" }, + { url = "https://files.pythonhosted.org/packages/b1/34/7e4e6abb7a8778db6422e88b1f06eb07c47682313997ee8a8f9352e5a6f1/bcrypt-5.0.0-cp313-cp313t-manylinux_2_34_x86_64.whl", hash = "sha256:137c5156524328a24b9fac1cb5db0ba618bc97d11970b39184c1d87dc4bf1746", size = 271750, upload-time = "2025-09-25T19:49:15.584Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1b/54f416be2499bd72123c70d98d36c6cd61a4e33d9b89562c22481c81bb30/bcrypt-5.0.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:38cac74101777a6a7d3b3e3cfefa57089b5ada650dce2baf0cbdd9d65db22a9e", size = 303757, upload-time = "2025-09-25T19:49:17.244Z" }, + { url = "https://files.pythonhosted.org/packages/13/62/062c24c7bcf9d2826a1a843d0d605c65a755bc98002923d01fd61270705a/bcrypt-5.0.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d8d65b564ec849643d9f7ea05c6d9f0cd7ca23bdd4ac0c2dbef1104ab504543d", size = 306740, upload-time = "2025-09-25T19:49:18.693Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c8/1fdbfc8c0f20875b6b4020f3c7dc447b8de60aa0be5faaf009d24242aec9/bcrypt-5.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:741449132f64b3524e95cd30e5cd3343006ce146088f074f31ab26b94e6c75ba", size = 334197, upload-time = "2025-09-25T19:49:20.523Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c1/8b84545382d75bef226fbc6588af0f7b7d095f7cd6a670b42a86243183cd/bcrypt-5.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:212139484ab3207b1f0c00633d3be92fef3c5f0af17cad155679d03ff2ee1e41", size = 352974, upload-time = "2025-09-25T19:49:22.254Z" }, + { url = "https://files.pythonhosted.org/packages/10/a6/ffb49d4254ed085e62e3e5dd05982b4393e32fe1e49bb1130186617c29cd/bcrypt-5.0.0-cp313-cp313t-win32.whl", hash = "sha256:9d52ed507c2488eddd6a95bccee4e808d3234fa78dd370e24bac65a21212b861", size = 148498, upload-time = "2025-09-25T19:49:24.134Z" }, + { url = "https://files.pythonhosted.org/packages/48/a9/259559edc85258b6d5fc5471a62a3299a6aa37a6611a169756bf4689323c/bcrypt-5.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f6984a24db30548fd39a44360532898c33528b74aedf81c26cf29c51ee47057e", size = 145853, upload-time = "2025-09-25T19:49:25.702Z" }, + { url = "https://files.pythonhosted.org/packages/2d/df/9714173403c7e8b245acf8e4be8876aac64a209d1b392af457c79e60492e/bcrypt-5.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:9fffdb387abe6aa775af36ef16f55e318dcda4194ddbf82007a6f21da29de8f5", size = 139626, upload-time = "2025-09-25T19:49:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/f8/14/c18006f91816606a4abe294ccc5d1e6f0e42304df5a33710e9e8e95416e1/bcrypt-5.0.0-cp314-cp314t-macosx_10_12_universal2.whl", hash = "sha256:4870a52610537037adb382444fefd3706d96d663ac44cbb2f37e3919dca3d7ef", size = 481862, upload-time = "2025-09-25T19:49:28.365Z" }, + { url = "https://files.pythonhosted.org/packages/67/49/dd074d831f00e589537e07a0725cf0e220d1f0d5d8e85ad5bbff251c45aa/bcrypt-5.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48f753100931605686f74e27a7b49238122aa761a9aefe9373265b8b7aa43ea4", size = 268544, upload-time = "2025-09-25T19:49:30.39Z" }, + { url = "https://files.pythonhosted.org/packages/f5/91/50ccba088b8c474545b034a1424d05195d9fcbaaf802ab8bfe2be5a4e0d7/bcrypt-5.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f70aadb7a809305226daedf75d90379c397b094755a710d7014b8b117df1ebbf", size = 271787, upload-time = "2025-09-25T19:49:32.144Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e7/d7dba133e02abcda3b52087a7eea8c0d4f64d3e593b4fffc10c31b7061f3/bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:744d3c6b164caa658adcb72cb8cc9ad9b4b75c7db507ab4bc2480474a51989da", size = 269753, upload-time = "2025-09-25T19:49:33.885Z" }, + { url = "https://files.pythonhosted.org/packages/33/fc/5b145673c4b8d01018307b5c2c1fc87a6f5a436f0ad56607aee389de8ee3/bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a28bc05039bdf3289d757f49d616ab3efe8cf40d8e8001ccdd621cd4f98f4fc9", size = 289587, upload-time = "2025-09-25T19:49:35.144Z" }, + { url = "https://files.pythonhosted.org/packages/27/d7/1ff22703ec6d4f90e62f1a5654b8867ef96bafb8e8102c2288333e1a6ca6/bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:7f277a4b3390ab4bebe597800a90da0edae882c6196d3038a73adf446c4f969f", size = 272178, upload-time = "2025-09-25T19:49:36.793Z" }, + { url = "https://files.pythonhosted.org/packages/c8/88/815b6d558a1e4d40ece04a2f84865b0fef233513bd85fd0e40c294272d62/bcrypt-5.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:79cfa161eda8d2ddf29acad370356b47f02387153b11d46042e93a0a95127493", size = 269295, upload-time = "2025-09-25T19:49:38.164Z" }, + { url = "https://files.pythonhosted.org/packages/51/8c/e0db387c79ab4931fc89827d37608c31cc57b6edc08ccd2386139028dc0d/bcrypt-5.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:a5393eae5722bcef046a990b84dff02b954904c36a194f6cfc817d7dca6c6f0b", size = 271700, upload-time = "2025-09-25T19:49:39.917Z" }, + { url = "https://files.pythonhosted.org/packages/06/83/1570edddd150f572dbe9fc00f6203a89fc7d4226821f67328a85c330f239/bcrypt-5.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7f4c94dec1b5ab5d522750cb059bb9409ea8872d4494fd152b53cca99f1ddd8c", size = 334034, upload-time = "2025-09-25T19:49:41.227Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f2/ea64e51a65e56ae7a8a4ec236c2bfbdd4b23008abd50ac33fbb2d1d15424/bcrypt-5.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0cae4cb350934dfd74c020525eeae0a5f79257e8a201c0c176f4b84fdbf2a4b4", size = 352766, upload-time = "2025-09-25T19:49:43.08Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d4/1a388d21ee66876f27d1a1f41287897d0c0f1712ef97d395d708ba93004c/bcrypt-5.0.0-cp314-cp314t-win32.whl", hash = "sha256:b17366316c654e1ad0306a6858e189fc835eca39f7eb2cafd6aaca8ce0c40a2e", size = 152449, upload-time = "2025-09-25T19:49:44.971Z" }, + { url = "https://files.pythonhosted.org/packages/3f/61/3291c2243ae0229e5bca5d19f4032cecad5dfb05a2557169d3a69dc0ba91/bcrypt-5.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:92864f54fb48b4c718fc92a32825d0e42265a627f956bc0361fe869f1adc3e7d", size = 149310, upload-time = "2025-09-25T19:49:46.162Z" }, + { url = "https://files.pythonhosted.org/packages/3e/89/4b01c52ae0c1a681d4021e5dd3e45b111a8fb47254a274fa9a378d8d834b/bcrypt-5.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dd19cf5184a90c873009244586396a6a884d591a5323f0e8a5922560718d4993", size = 143761, upload-time = "2025-09-25T19:49:47.345Z" }, + { url = "https://files.pythonhosted.org/packages/84/29/6237f151fbfe295fe3e074ecc6d44228faa1e842a81f6d34a02937ee1736/bcrypt-5.0.0-cp38-abi3-macosx_10_12_universal2.whl", hash = "sha256:fc746432b951e92b58317af8e0ca746efe93e66555f1b40888865ef5bf56446b", size = 494553, upload-time = "2025-09-25T19:49:49.006Z" }, + { url = "https://files.pythonhosted.org/packages/45/b6/4c1205dde5e464ea3bd88e8742e19f899c16fa8916fb8510a851fae985b5/bcrypt-5.0.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c2388ca94ffee269b6038d48747f4ce8df0ffbea43f31abfa18ac72f0218effb", size = 275009, upload-time = "2025-09-25T19:49:50.581Z" }, + { url = "https://files.pythonhosted.org/packages/3b/71/427945e6ead72ccffe77894b2655b695ccf14ae1866cd977e185d606dd2f/bcrypt-5.0.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:560ddb6ec730386e7b3b26b8b4c88197aaed924430e7b74666a586ac997249ef", size = 278029, upload-time = "2025-09-25T19:49:52.533Z" }, + { url = "https://files.pythonhosted.org/packages/17/72/c344825e3b83c5389a369c8a8e58ffe1480b8a699f46c127c34580c4666b/bcrypt-5.0.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d79e5c65dcc9af213594d6f7f1fa2c98ad3fc10431e7aa53c176b441943efbdd", size = 275907, upload-time = "2025-09-25T19:49:54.709Z" }, + { url = "https://files.pythonhosted.org/packages/0b/7e/d4e47d2df1641a36d1212e5c0514f5291e1a956a7749f1e595c07a972038/bcrypt-5.0.0-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2b732e7d388fa22d48920baa267ba5d97cca38070b69c0e2d37087b381c681fd", size = 296500, upload-time = "2025-09-25T19:49:56.013Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c3/0ae57a68be2039287ec28bc463b82e4b8dc23f9d12c0be331f4782e19108/bcrypt-5.0.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0c8e093ea2532601a6f686edbc2c6b2ec24131ff5c52f7610dd64fa4553b5464", size = 278412, upload-time = "2025-09-25T19:49:57.356Z" }, + { url = "https://files.pythonhosted.org/packages/45/2b/77424511adb11e6a99e3a00dcc7745034bee89036ad7d7e255a7e47be7d8/bcrypt-5.0.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5b1589f4839a0899c146e8892efe320c0fa096568abd9b95593efac50a87cb75", size = 275486, upload-time = "2025-09-25T19:49:59.116Z" }, + { url = "https://files.pythonhosted.org/packages/43/0a/405c753f6158e0f3f14b00b462d8bca31296f7ecfc8fc8bc7919c0c7d73a/bcrypt-5.0.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:89042e61b5e808b67daf24a434d89bab164d4de1746b37a8d173b6b14f3db9ff", size = 277940, upload-time = "2025-09-25T19:50:00.869Z" }, + { url = "https://files.pythonhosted.org/packages/62/83/b3efc285d4aadc1fa83db385ec64dcfa1707e890eb42f03b127d66ac1b7b/bcrypt-5.0.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e3cf5b2560c7b5a142286f69bde914494b6d8f901aaa71e453078388a50881c4", size = 310776, upload-time = "2025-09-25T19:50:02.393Z" }, + { url = "https://files.pythonhosted.org/packages/95/7d/47ee337dacecde6d234890fe929936cb03ebc4c3a7460854bbd9c97780b8/bcrypt-5.0.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f632fd56fc4e61564f78b46a2269153122db34988e78b6be8b32d28507b7eaeb", size = 312922, upload-time = "2025-09-25T19:50:04.232Z" }, + { url = "https://files.pythonhosted.org/packages/d6/3a/43d494dfb728f55f4e1cf8fd435d50c16a2d75493225b54c8d06122523c6/bcrypt-5.0.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:801cad5ccb6b87d1b430f183269b94c24f248dddbbc5c1f78b6ed231743e001c", size = 341367, upload-time = "2025-09-25T19:50:05.559Z" }, + { url = "https://files.pythonhosted.org/packages/55/ab/a0727a4547e383e2e22a630e0f908113db37904f58719dc48d4622139b5c/bcrypt-5.0.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3cf67a804fc66fc217e6914a5635000259fbbbb12e78a99488e4d5ba445a71eb", size = 359187, upload-time = "2025-09-25T19:50:06.916Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bb/461f352fdca663524b4643d8b09e8435b4990f17fbf4fea6bc2a90aa0cc7/bcrypt-5.0.0-cp38-abi3-win32.whl", hash = "sha256:3abeb543874b2c0524ff40c57a4e14e5d3a66ff33fb423529c88f180fd756538", size = 153752, upload-time = "2025-09-25T19:50:08.515Z" }, + { url = "https://files.pythonhosted.org/packages/41/aa/4190e60921927b7056820291f56fc57d00d04757c8b316b2d3c0d1d6da2c/bcrypt-5.0.0-cp38-abi3-win_amd64.whl", hash = "sha256:35a77ec55b541e5e583eb3436ffbbf53b0ffa1fa16ca6782279daf95d146dcd9", size = 150881, upload-time = "2025-09-25T19:50:09.742Z" }, + { url = "https://files.pythonhosted.org/packages/54/12/cd77221719d0b39ac0b55dbd39358db1cd1246e0282e104366ebbfb8266a/bcrypt-5.0.0-cp38-abi3-win_arm64.whl", hash = "sha256:cde08734f12c6a4e28dc6755cd11d3bdfea608d93d958fffbe95a7026ebe4980", size = 144931, upload-time = "2025-09-25T19:50:11.016Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ba/2af136406e1c3839aea9ecadc2f6be2bcd1eff255bd451dd39bcf302c47a/bcrypt-5.0.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0c418ca99fd47e9c59a301744d63328f17798b5947b0f791e9af3c1c499c2d0a", size = 495313, upload-time = "2025-09-25T19:50:12.309Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ee/2f4985dbad090ace5ad1f7dd8ff94477fe089b5fab2040bd784a3d5f187b/bcrypt-5.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddb4e1500f6efdd402218ffe34d040a1196c072e07929b9820f363a1fd1f4191", size = 275290, upload-time = "2025-09-25T19:50:13.673Z" }, + { url = "https://files.pythonhosted.org/packages/e4/6e/b77ade812672d15cf50842e167eead80ac3514f3beacac8902915417f8b7/bcrypt-5.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7aeef54b60ceddb6f30ee3db090351ecf0d40ec6e2abf41430997407a46d2254", size = 278253, upload-time = "2025-09-25T19:50:15.089Z" }, + { url = "https://files.pythonhosted.org/packages/36/c4/ed00ed32f1040f7990dac7115f82273e3c03da1e1a1587a778d8cea496d8/bcrypt-5.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f0ce778135f60799d89c9693b9b398819d15f1921ba15fe719acb3178215a7db", size = 276084, upload-time = "2025-09-25T19:50:16.699Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c4/fa6e16145e145e87f1fa351bbd54b429354fd72145cd3d4e0c5157cf4c70/bcrypt-5.0.0-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a71f70ee269671460b37a449f5ff26982a6f2ba493b3eabdd687b4bf35f875ac", size = 297185, upload-time = "2025-09-25T19:50:18.525Z" }, + { url = "https://files.pythonhosted.org/packages/24/b4/11f8a31d8b67cca3371e046db49baa7c0594d71eb40ac8121e2fc0888db0/bcrypt-5.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8429e1c410b4073944f03bd778a9e066e7fad723564a52ff91841d278dfc822", size = 278656, upload-time = "2025-09-25T19:50:19.809Z" }, + { url = "https://files.pythonhosted.org/packages/ac/31/79f11865f8078e192847d2cb526e3fa27c200933c982c5b2869720fa5fce/bcrypt-5.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:edfcdcedd0d0f05850c52ba3127b1fce70b9f89e0fe5ff16517df7e81fa3cbb8", size = 275662, upload-time = "2025-09-25T19:50:21.567Z" }, + { url = "https://files.pythonhosted.org/packages/d4/8d/5e43d9584b3b3591a6f9b68f755a4da879a59712981ef5ad2a0ac1379f7a/bcrypt-5.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:611f0a17aa4a25a69362dcc299fda5c8a3d4f160e2abb3831041feb77393a14a", size = 278240, upload-time = "2025-09-25T19:50:23.305Z" }, + { url = "https://files.pythonhosted.org/packages/89/48/44590e3fc158620f680a978aafe8f87a4c4320da81ed11552f0323aa9a57/bcrypt-5.0.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:db99dca3b1fdc3db87d7c57eac0c82281242d1eabf19dcb8a6b10eb29a2e72d1", size = 311152, upload-time = "2025-09-25T19:50:24.597Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/e4fbfc46f14f47b0d20493669a625da5827d07e8a88ee460af6cd9768b44/bcrypt-5.0.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:5feebf85a9cefda32966d8171f5db7e3ba964b77fdfe31919622256f80f9cf42", size = 313284, upload-time = "2025-09-25T19:50:26.268Z" }, + { url = "https://files.pythonhosted.org/packages/25/ae/479f81d3f4594456a01ea2f05b132a519eff9ab5768a70430fa1132384b1/bcrypt-5.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3ca8a166b1140436e058298a34d88032ab62f15aae1c598580333dc21d27ef10", size = 341643, upload-time = "2025-09-25T19:50:28.02Z" }, + { url = "https://files.pythonhosted.org/packages/df/d2/36a086dee1473b14276cd6ea7f61aef3b2648710b5d7f1c9e032c29b859f/bcrypt-5.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:61afc381250c3182d9078551e3ac3a41da14154fbff647ddf52a769f588c4172", size = 359698, upload-time = "2025-09-25T19:50:31.347Z" }, + { url = "https://files.pythonhosted.org/packages/c0/f6/688d2cd64bfd0b14d805ddb8a565e11ca1fb0fd6817175d58b10052b6d88/bcrypt-5.0.0-cp39-abi3-win32.whl", hash = "sha256:64d7ce196203e468c457c37ec22390f1a61c85c6f0b8160fd752940ccfb3a683", size = 153725, upload-time = "2025-09-25T19:50:34.384Z" }, + { url = "https://files.pythonhosted.org/packages/9f/b9/9d9a641194a730bda138b3dfe53f584d61c58cd5230e37566e83ec2ffa0d/bcrypt-5.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:64ee8434b0da054d830fa8e89e1c8bf30061d539044a39524ff7dec90481e5c2", size = 150912, upload-time = "2025-09-25T19:50:35.69Z" }, + { url = "https://files.pythonhosted.org/packages/27/44/d2ef5e87509158ad2187f4dd0852df80695bb1ee0cfe0a684727b01a69e0/bcrypt-5.0.0-cp39-abi3-win_arm64.whl", hash = "sha256:f2347d3534e76bf50bca5500989d6c1d05ed64b440408057a37673282c654927", size = 144953, upload-time = "2025-09-25T19:50:37.32Z" }, + { url = "https://files.pythonhosted.org/packages/8a/75/4aa9f5a4d40d762892066ba1046000b329c7cd58e888a6db878019b282dc/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7edda91d5ab52b15636d9c30da87d2cc84f426c72b9dba7a9b4fe142ba11f534", size = 271180, upload-time = "2025-09-25T19:50:38.575Z" }, + { url = "https://files.pythonhosted.org/packages/54/79/875f9558179573d40a9cc743038ac2bf67dfb79cecb1e8b5d70e88c94c3d/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:046ad6db88edb3c5ece4369af997938fb1c19d6a699b9c1b27b0db432faae4c4", size = 273791, upload-time = "2025-09-25T19:50:39.913Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fe/975adb8c216174bf70fc17535f75e85ac06ed5252ea077be10d9cff5ce24/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dcd58e2b3a908b5ecc9b9df2f0085592506ac2d5110786018ee5e160f28e0911", size = 270746, upload-time = "2025-09-25T19:50:43.306Z" }, + { url = "https://files.pythonhosted.org/packages/e4/f8/972c96f5a2b6c4b3deca57009d93e946bbdbe2241dca9806d502f29dd3ee/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:6b8f520b61e8781efee73cba14e3e8c9556ccfb375623f4f97429544734545b4", size = 273375, upload-time = "2025-09-25T19:50:45.43Z" }, +] + +[[package]] +name = "bitsandbytes" +version = "0.49.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "torch" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/7d/f1fe0992334b18cd8494f89aeec1dcc674635584fcd9f115784fea3a1d05/bitsandbytes-0.49.2-py3-none-macosx_14_0_arm64.whl", hash = "sha256:87be5975edeac5396d699ecbc39dfc47cf2c026daaf2d5852a94368611a6823f", size = 131940, upload-time = "2026-02-16T21:26:04.572Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/acff7af06c818664aa87ff73e17a52c7788ad746b72aea09d3cb8e424348/bitsandbytes-0.49.2-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:2fc0830c5f7169be36e60e11f2be067c8f812dfcb829801a8703735842450750", size = 31442815, upload-time = "2026-02-16T21:26:06.783Z" }, + { url = "https://files.pythonhosted.org/packages/19/57/3443d6f183436fbdaf5000aac332c4d5ddb056665d459244a5608e98ae92/bitsandbytes-0.49.2-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:54b771f06e1a3c73af5c7f16ccf0fc23a846052813d4b008d10cb6e017dd1c8c", size = 60651714, upload-time = "2026-02-16T21:26:11.579Z" }, + { url = "https://files.pythonhosted.org/packages/b6/d4/501655842ad6771fb077f576d78cbedb5445d15b1c3c91343ed58ca46f0e/bitsandbytes-0.49.2-py3-none-win_amd64.whl", hash = "sha256:2e0ddd09cd778155388023cbe81f00afbb7c000c214caef3ce83386e7144df7d", size = 55372289, upload-time = "2026-02-16T21:26:16.267Z" }, +] + +[[package]] +name = "blake3" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/75/aa/abcd75e9600987a0bc6cfe9b6b2ff3f0e2cb08c170addc6e76035b5c4cb3/blake3-1.0.8.tar.gz", hash = "sha256:513cc7f0f5a7c035812604c2c852a0c1468311345573de647e310aca4ab165ba", size = 117308, upload-time = "2025-10-14T06:47:48.83Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/a0/fbe66cf17f72cab1600246b90db6cb39b52a88335b9bd2821688379d8dde/blake3-1.0.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8956bb9aec47b6c37ccce935a943588f1f5e6e2e85d43bb7cb76a574238f8a9b", size = 350634, upload-time = "2025-10-14T06:45:09.621Z" }, + { url = "https://files.pythonhosted.org/packages/20/bc/f4b88873054aa87b8c36398775713bf674807e7449a9c7fefe35d3cf1dc5/blake3-1.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7adbbee5dd0c302218eb8acdfd82b7006930eb5798f56f79f9cca89f6f192662", size = 328382, upload-time = "2025-10-14T06:45:11.137Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e5/4c37ced9358cece71f2f380a57f77a449f6e87cc6d9f450613237b7a3078/blake3-1.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:859cd57bac097a2cd63cb36d64c2f6f16c9edece5590f929e70157478e46dc9e", size = 371337, upload-time = "2025-10-14T06:45:12.296Z" }, + { url = "https://files.pythonhosted.org/packages/d1/df/0825da1cde7ca63a8bcdc785ca7f8647b025e9497eef18c75bb9754dbd26/blake3-1.0.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e1d70bf76c02846d0868a3d413eb6c430b76a315e12f1b2e59b5cf56c1f62a3", size = 374945, upload-time = "2025-10-14T06:45:13.99Z" }, + { url = "https://files.pythonhosted.org/packages/b7/a3/43f10c623179dce789ca9e3b8f4064fb6312e99f05c1aae360d07ad95bb0/blake3-1.0.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3fe26f145fcb82931d1820b55c0279f72f8f8e49450dd9d74efbfd409b28423", size = 448766, upload-time = "2025-10-14T06:45:15.471Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/9431bf5fe0eedeb2aadb4fe81fb18945cf8d49adad98e7988fb3cdac76c2/blake3-1.0.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97c076d58ee37eb5b2d8d91bb9db59c5a008fd59c71845dc57fe438aeeabaf10", size = 507107, upload-time = "2025-10-14T06:45:17.055Z" }, + { url = "https://files.pythonhosted.org/packages/ac/55/3712cdaebaefa8d5acec46f8df7861ba1832e1e188bc1333dd5acd31f760/blake3-1.0.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78731ce7fca46f776ae45fb5271a2a76c4a92c9687dd4337e84b2ae9a174b28f", size = 393955, upload-time = "2025-10-14T06:45:18.718Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d0/add0441e7aaa6b358cac0ddc9246f0799b60d25f06bd542b554afe19fd85/blake3-1.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65e373c8b47174b969ee61a89ee56922f722972eb650192845c8546df8d9db9", size = 387577, upload-time = "2025-10-14T06:45:20.332Z" }, + { url = "https://files.pythonhosted.org/packages/b2/9a/e4a61f5c0cad4d51a886e8f4367e590caaead8a4809892292bf724c4421d/blake3-1.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db54946792d2b8c6fa4be73e6e334519f13c1b52e7ff346b3e2ec8ad3eb59401", size = 550515, upload-time = "2025-10-14T06:45:21.867Z" }, + { url = "https://files.pythonhosted.org/packages/28/c7/90c01091465628acff96534e82d4b3bc16ca22c515f69916d2715273c0e3/blake3-1.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:67d9c42c42eb1c7aedcf901591c743266009fcf48babf6d6f8450f567cb94a84", size = 554650, upload-time = "2025-10-14T06:45:23.047Z" }, + { url = "https://files.pythonhosted.org/packages/d5/11/812d7125c6e99e5e0e841a9af2c4161ac811c027e08886353df76eae7b96/blake3-1.0.8-cp310-cp310-win32.whl", hash = "sha256:444215a1e5201f8fa4e5c7352e938a7070cd33d66aeb1dd9b1103a64b6920f9e", size = 228695, upload-time = "2025-10-14T06:45:24.255Z" }, + { url = "https://files.pythonhosted.org/packages/3c/7e/ab9b5c4b650ff397d347451bfb1ad7e6e53dc06c945e2fd091f27a76422e/blake3-1.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:725c52c4d393c7bd1a10682df322d480734002a1389b320366c660568708846b", size = 215660, upload-time = "2025-10-14T06:45:25.381Z" }, + { url = "https://files.pythonhosted.org/packages/7d/e1/1df74c915fde3c48940247ad64984f40f5968191d7b5230bcc7b31402e7c/blake3-1.0.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9a8946cb6b1d2b2096daaaa89856f39887bce2b78503fa31b78173e3a86fa281", size = 350481, upload-time = "2025-10-14T06:45:26.625Z" }, + { url = "https://files.pythonhosted.org/packages/bb/0d/7c47ae1f5f8d60783ce6234a8b31db351fc62be243006a6276284ca3d40d/blake3-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:adccc3a139207e02bb7d7bb0715fe0b87069685aad5f3afff820b2f829467904", size = 328039, upload-time = "2025-10-14T06:45:32.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/0a/515209b0c282c360e249b89cd85350d97cfd55fadbb4df736c67b77b27a1/blake3-1.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fcfe81b3ae3fb5d2e88be0d3259603ff95f0d5ed69f655c28fdaef31e49a470", size = 371092, upload-time = "2025-10-14T06:45:34.062Z" }, + { url = "https://files.pythonhosted.org/packages/a0/33/9d342a2bf5817f006bbe947335e5d387327541ea47590854947befd01251/blake3-1.0.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58ce8d45a5bb5326482de72ea1969a378634236186a970fef63058a5b7b8b435", size = 374859, upload-time = "2025-10-14T06:45:35.262Z" }, + { url = "https://files.pythonhosted.org/packages/5b/fc/ea4bef850a7ec9fbb383503fd3c56056dd9fa44e10c3bc61050ab7b2bac0/blake3-1.0.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83605dbf43f581d8b7175b7f3bfe5388bad5a7c6ac175c9c11d669da31133f4b", size = 448585, upload-time = "2025-10-14T06:45:36.542Z" }, + { url = "https://files.pythonhosted.org/packages/a5/67/167a65a4c431715407d07b1b8b1367698a3ad88e7260edb85f0c5293f08a/blake3-1.0.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b5573b052777142b2cecc453d022c3f21aa4aba75011258410bb98f41c1a727", size = 507519, upload-time = "2025-10-14T06:45:37.814Z" }, + { url = "https://files.pythonhosted.org/packages/32/e2/0886e192d634b264c613b0fbf380745b39992b424a0effc00ef08783644e/blake3-1.0.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe1b02ab49bfd969ef50b9f17482a2011c77536654af21807ba5c2674e0bb2a0", size = 393645, upload-time = "2025-10-14T06:45:39.146Z" }, + { url = "https://files.pythonhosted.org/packages/fc/3b/7fb2fe615448caaa5f6632b2c7551117b38ccac747a3a5769181e9751641/blake3-1.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7780666dc6be809b49442d6d5ce06fdbe33024a87560b58471103ec17644682", size = 387640, upload-time = "2025-10-14T06:45:40.546Z" }, + { url = "https://files.pythonhosted.org/packages/bc/8c/2bfc942c6c97cb3d20f341859343bb86ee20af723fedfc886373e606079b/blake3-1.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af394b50c6aa0b1b957a99453d1ee440ef67cd2d1b5669c731647dc723de8a3a", size = 550316, upload-time = "2025-10-14T06:45:42.003Z" }, + { url = "https://files.pythonhosted.org/packages/7e/75/0252be37620699b79dbaa799c9b402d63142a131d16731df4ef09d135dd7/blake3-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c63ece266a43014cf29e772a82857cd8e90315ae3ed53e3c5204851596edd5f2", size = 554463, upload-time = "2025-10-14T06:45:43.22Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6d/d698ae2d5ddd25976fd2c11b079ca071334aecbba6414da8c9cc8e19d833/blake3-1.0.8-cp311-cp311-win32.whl", hash = "sha256:44c2815d4616fad7e2d757d121c0a11780f70ffc817547b3059b5c7e224031a7", size = 228375, upload-time = "2025-10-14T06:45:44.425Z" }, + { url = "https://files.pythonhosted.org/packages/34/d7/33b01e27dc3542dc9ec44132684506f880cd0257b04da0bf7f4b2afa41c8/blake3-1.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:8f2ef8527a7a8afd99b16997d015851ccc0fe2a409082cebb980af2554e5c74c", size = 215733, upload-time = "2025-10-14T06:45:46.049Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a0/b7b6dff04012cfd6e665c09ee446f749bd8ea161b00f730fe1bdecd0f033/blake3-1.0.8-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d8da4233984d51471bd4e4366feda1d90d781e712e0a504ea54b1f2b3577557b", size = 347983, upload-time = "2025-10-14T06:45:47.214Z" }, + { url = "https://files.pythonhosted.org/packages/5b/a2/264091cac31d7ae913f1f296abc20b8da578b958ffb86100a7ce80e8bf5c/blake3-1.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1257be19f2d381c868a34cc822fc7f12f817ddc49681b6d1a2790bfbda1a9865", size = 325415, upload-time = "2025-10-14T06:45:48.482Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/85a4c0782f613de23d114a7a78fcce270f75b193b3ff3493a0de24ba104a/blake3-1.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:269f255b110840e52b6ce9db02217e39660ebad3e34ddd5bca8b8d378a77e4e1", size = 371296, upload-time = "2025-10-14T06:45:49.674Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/488475254976ed93fab57c67aa80d3b40df77f7d9db6528c9274bff53e08/blake3-1.0.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66ca28a673025c40db3eba21a9cac52f559f83637efa675b3f6bd8683f0415f3", size = 374516, upload-time = "2025-10-14T06:45:51.23Z" }, + { url = "https://files.pythonhosted.org/packages/7b/21/2a1c47fedb77fb396512677ec6d46caf42ac6e9a897db77edd0a2a46f7bb/blake3-1.0.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb04966537777af56c1f399b35525aa70a1225816e121ff95071c33c0f7abca", size = 447911, upload-time = "2025-10-14T06:45:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/cb/7d/db0626df16029713e7e61b67314c4835e85c296d82bd907c21c6ea271da2/blake3-1.0.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5b5da177d62cc4b7edf0cea08fe4dec960c9ac27f916131efa890a01f747b93", size = 505420, upload-time = "2025-10-14T06:45:54.445Z" }, + { url = "https://files.pythonhosted.org/packages/5b/55/6e737850c2d58a6d9de8a76dad2ae0f75b852a23eb4ecb07a0b165e6e436/blake3-1.0.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:38209b10482c97e151681ea3e91cc7141f56adbbf4820a7d701a923124b41e6a", size = 394189, upload-time = "2025-10-14T06:45:55.719Z" }, + { url = "https://files.pythonhosted.org/packages/5b/94/eafaa5cdddadc0c9c603a6a6d8339433475e1a9f60c8bb9c2eed2d8736b6/blake3-1.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:504d1399b7fb91dfe5c25722d2807990493185faa1917456455480c36867adb5", size = 388001, upload-time = "2025-10-14T06:45:57.067Z" }, + { url = "https://files.pythonhosted.org/packages/17/81/735fa00d13de7f68b25e1b9cb36ff08c6f165e688d85d8ec2cbfcdedccc5/blake3-1.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c84af132aa09abeadf9a0118c8fb26f4528f3f42c10ef8be0fcf31c478774ec4", size = 550302, upload-time = "2025-10-14T06:45:58.657Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c6/d1fe8bdea4a6088bd54b5a58bc40aed89a4e784cd796af7722a06f74bae7/blake3-1.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a25db3d36b55f5ed6a86470155cc749fc9c5b91c949b8d14f48658f9d960d9ec", size = 554211, upload-time = "2025-10-14T06:46:00.269Z" }, + { url = "https://files.pythonhosted.org/packages/55/d1/ca74aa450cbe10e396e061f26f7a043891ffa1485537d6b30d3757e20995/blake3-1.0.8-cp312-cp312-win32.whl", hash = "sha256:e0fee93d5adcd44378b008c147e84f181f23715307a64f7b3db432394bbfce8b", size = 228343, upload-time = "2025-10-14T06:46:01.533Z" }, + { url = "https://files.pythonhosted.org/packages/4d/42/bbd02647169e3fbed27558555653ac2578c6f17ccacf7d1956c58ef1d214/blake3-1.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:6a6eafc29e4f478d365a87d2f25782a521870c8514bb43734ac85ae9be71caf7", size = 215704, upload-time = "2025-10-14T06:46:02.79Z" }, + { url = "https://files.pythonhosted.org/packages/55/b8/11de9528c257f7f1633f957ccaff253b706838d22c5d2908e4735798ec01/blake3-1.0.8-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:46dc20976bd6c235959ef0246ec73420d1063c3da2839a9c87ca395cf1fd7943", size = 347771, upload-time = "2025-10-14T06:46:04.248Z" }, + { url = "https://files.pythonhosted.org/packages/50/26/f7668be55c909678b001ecacff11ad7016cd9b4e9c7cc87b5971d638c5a9/blake3-1.0.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d17eb6382634b3a5bc0c0e0454d5265b0becaeeadb6801ed25150b39a999d0cc", size = 325431, upload-time = "2025-10-14T06:46:06.136Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/e8a85fa261894bf7ce7af928ff3408aab60287ab8d58b55d13a3f700b619/blake3-1.0.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19fc6f2b7edab8acff6895fc6e38c19bd79f4c089e21153020c75dfc7397d52d", size = 370994, upload-time = "2025-10-14T06:46:07.398Z" }, + { url = "https://files.pythonhosted.org/packages/62/cd/765b76bb48b8b294fea94c9008b0d82b4cfa0fa2f3c6008d840d01a597e4/blake3-1.0.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f54cff7f15d91dc78a63a2dd02a3dccdc932946f271e2adb4130e0b4cf608ba", size = 374372, upload-time = "2025-10-14T06:46:08.698Z" }, + { url = "https://files.pythonhosted.org/packages/36/7a/32084eadbb28592bb07298f0de316d2da586c62f31500a6b1339a7e7b29b/blake3-1.0.8-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7e12a777f6b798eb8d06f875d6e108e3008bd658d274d8c676dcf98e0f10537", size = 447627, upload-time = "2025-10-14T06:46:10.002Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f4/3788a1d86e17425eea147e28d7195d7053565fc279236a9fd278c2ec495e/blake3-1.0.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddfc59b0176fb31168f08d5dd536e69b1f4f13b5a0f4b0c3be1003efd47f9308", size = 507536, upload-time = "2025-10-14T06:46:11.614Z" }, + { url = "https://files.pythonhosted.org/packages/fe/01/4639cba48513b94192681b4da472cdec843d3001c5344d7051ee5eaef606/blake3-1.0.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a2336d5b2a801a7256da21150348f41610a6c21dae885a3acb1ebbd7333d88d8", size = 394105, upload-time = "2025-10-14T06:46:12.808Z" }, + { url = "https://files.pythonhosted.org/packages/21/ae/6e55c19c8460fada86cd1306a390a09b0c5a2e2e424f9317d2edacea439f/blake3-1.0.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4072196547484c95a5a09adbb952e9bb501949f03f9e2a85e7249ef85faaba8", size = 386928, upload-time = "2025-10-14T06:46:16.284Z" }, + { url = "https://files.pythonhosted.org/packages/ee/6c/05b7a5a907df1be53a8f19e7828986fc6b608a44119641ef9c0804fbef15/blake3-1.0.8-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0eab3318ec02f8e16fe549244791ace2ada2c259332f0c77ab22cf94dfff7130", size = 550003, upload-time = "2025-10-14T06:46:17.791Z" }, + { url = "https://files.pythonhosted.org/packages/b4/03/f0ea4adfedc1717623be6460b3710fcb725ca38082c14274369803f727e1/blake3-1.0.8-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a33b9a1fb6d1d559a8e0d04b041e99419a6bb771311c774f6ff57ed7119c70ed", size = 553857, upload-time = "2025-10-14T06:46:19.088Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6f/e5410d2e2a30c8aba8389ffc1c0061356916bf5ecd0a210344e7b69b62ab/blake3-1.0.8-cp313-cp313-win32.whl", hash = "sha256:e171b169cb7ea618e362a4dddb7a4d4c173bbc08b9ba41ea3086dd1265530d4f", size = 228315, upload-time = "2025-10-14T06:46:20.391Z" }, + { url = "https://files.pythonhosted.org/packages/79/ef/d9c297956dfecd893f29f59e7b22445aba5b47b7f6815d9ba5dcd73fcae6/blake3-1.0.8-cp313-cp313-win_amd64.whl", hash = "sha256:3168c457255b5d2a2fc356ba696996fcaff5d38284f968210d54376312107662", size = 215477, upload-time = "2025-10-14T06:46:21.542Z" }, + { url = "https://files.pythonhosted.org/packages/20/ba/eaa7723d66dd8ab762a3e85e139bb9c46167b751df6e950ad287adb8fb61/blake3-1.0.8-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4d672c24dc15ec617d212a338a4ca14b449829b6072d09c96c63b6e6b621aed", size = 347289, upload-time = "2025-10-14T06:46:22.772Z" }, + { url = "https://files.pythonhosted.org/packages/47/b3/6957f6ee27f0d5b8c4efdfda68a1298926a88c099f4dd89c711049d16526/blake3-1.0.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:1af0e5a29aa56d4fba904452ae784740997440afd477a15e583c38338e641f41", size = 324444, upload-time = "2025-10-14T06:46:24.729Z" }, + { url = "https://files.pythonhosted.org/packages/13/da/722cebca11238f3b24d3cefd2361c9c9ea47cfa0ad9288eeb4d1e0b7cf93/blake3-1.0.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef153c5860d5bf1cc71aece69b28097d2a392913eb323d6b52555c875d0439fc", size = 370441, upload-time = "2025-10-14T06:46:26.29Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d5/2f7440c8e41c0af995bad3a159e042af0f4ed1994710af5b4766ca918f65/blake3-1.0.8-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ae3689f0c7bfa6ce6ae45cab110e4c3442125c4c23b28f1f097856de26e4d1", size = 374312, upload-time = "2025-10-14T06:46:27.451Z" }, + { url = "https://files.pythonhosted.org/packages/a6/6c/fb6a7812e60ce3e110bcbbb11f167caf3e975c589572c41e1271f35f2c41/blake3-1.0.8-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fb83532f7456ddeb68dae1b36e1f7c52f9cb72852ac01159bbcb1a12b0f8be0", size = 447007, upload-time = "2025-10-14T06:46:29.056Z" }, + { url = "https://files.pythonhosted.org/packages/13/3b/c99b43fae5047276ea9d944077c190fc1e5f22f57528b9794e21f7adedc6/blake3-1.0.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ae7754c7d96e92a70a52e07c732d594cf9924d780f49fffd3a1e9235e0f5ba7", size = 507323, upload-time = "2025-10-14T06:46:30.661Z" }, + { url = "https://files.pythonhosted.org/packages/fc/bb/ba90eddd592f8c074a0694cb0a744b6bd76bfe67a14c2b490c8bdfca3119/blake3-1.0.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bacaae75e98dee3b7da6c5ee3b81ee21a3352dd2477d6f1d1dbfd38cdbf158a", size = 393449, upload-time = "2025-10-14T06:46:31.805Z" }, + { url = "https://files.pythonhosted.org/packages/25/ed/58a2acd0b9e14459cdaef4344db414d4a36e329b9720921b442a454dd443/blake3-1.0.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9456c829601d72852d8ba0af8dae0610f7def1d59f5942efde1e2ef93e8a8b57", size = 386844, upload-time = "2025-10-14T06:46:33.195Z" }, + { url = "https://files.pythonhosted.org/packages/4a/04/fed09845b18d90862100c8e48308261e2f663aab25d3c71a6a0bdda6618b/blake3-1.0.8-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:497ef8096ec4ac1ffba9a66152cee3992337cebf8ea434331d8fd9ce5423d227", size = 549550, upload-time = "2025-10-14T06:46:35.23Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/1859fddfabc1cc72548c2269d988819aad96d854e25eae00531517925901/blake3-1.0.8-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:511133bab85ff60ed143424ce484d08c60894ff7323f685d7a6095f43f0c85c3", size = 553805, upload-time = "2025-10-14T06:46:36.532Z" }, + { url = "https://files.pythonhosted.org/packages/c1/c7/2969352017f62378e388bb07bb2191bc9a953f818dc1cd6b9dd5c24916e1/blake3-1.0.8-cp313-cp313t-win32.whl", hash = "sha256:9c9fbdacfdeb68f7ca53bb5a7a5a593ec996eaf21155ad5b08d35e6f97e60877", size = 228068, upload-time = "2025-10-14T06:46:37.826Z" }, + { url = "https://files.pythonhosted.org/packages/d8/fc/923e25ac9cadfff1cd20038bcc0854d0f98061eb6bc78e42c43615f5982d/blake3-1.0.8-cp313-cp313t-win_amd64.whl", hash = "sha256:3cec94ed5676821cf371e9c9d25a41b4f3ebdb5724719b31b2749653b7cc1dfa", size = 215369, upload-time = "2025-10-14T06:46:39.054Z" }, + { url = "https://files.pythonhosted.org/packages/2e/2a/9f13ea01b03b1b4751a1cc2b6c1ef4b782e19433a59cf35b59cafb2a2696/blake3-1.0.8-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:2c33dac2c6112bc23f961a7ca305c7e34702c8177040eb98d0389d13a347b9e1", size = 347016, upload-time = "2025-10-14T06:46:40.318Z" }, + { url = "https://files.pythonhosted.org/packages/06/8e/8458c4285fbc5de76414f243e4e0fcab795d71a8b75324e14959aee699da/blake3-1.0.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c445eff665d21c3b3b44f864f849a2225b1164c08654beb23224a02f087b7ff1", size = 324496, upload-time = "2025-10-14T06:46:42.355Z" }, + { url = "https://files.pythonhosted.org/packages/49/fa/b913eb9cc4af708c03e01e6b88a8bb3a74833ba4ae4b16b87e2829198e06/blake3-1.0.8-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47939f04b89c5c6ff1e51e883e5efab1ea1bf01a02f4d208d216dddd63d0dd8", size = 370654, upload-time = "2025-10-14T06:46:43.907Z" }, + { url = "https://files.pythonhosted.org/packages/7f/4f/245e0800c33b99c8f2b570d9a7199b51803694913ee4897f339648502933/blake3-1.0.8-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:73e0b4fa25f6e3078526a592fb38fca85ef204fd02eced6731e1cdd9396552d4", size = 374693, upload-time = "2025-10-14T06:46:45.186Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a6/8cb182c8e482071dbdfcc6ec0048271fd48bcb78782d346119ff54993700/blake3-1.0.8-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0543c57eb9d6dac9d4bced63e9f7f7b546886ac04cec8da3c3d9c8f30cbbb7", size = 447673, upload-time = "2025-10-14T06:46:46.358Z" }, + { url = "https://files.pythonhosted.org/packages/06/b7/1cbbb5574d2a9436d1b15e7eb5b9d82e178adcaca71a97b0fddaca4bfe3a/blake3-1.0.8-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed972ebd553c0c25363459e9fc71a38c045d8419e365b59acd8cd791eff13981", size = 507233, upload-time = "2025-10-14T06:46:48.109Z" }, + { url = "https://files.pythonhosted.org/packages/9c/45/b55825d90af353b3e26c653bab278da9d6563afcf66736677f9397e465be/blake3-1.0.8-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3bafdec95dfffa3f6571e529644744e280337df15ddd9728f224ba70c5779b23", size = 393852, upload-time = "2025-10-14T06:46:49.511Z" }, + { url = "https://files.pythonhosted.org/packages/34/73/9058a1a457dd20491d1b37de53d6876eff125e1520d9b2dd7d0acbc88de2/blake3-1.0.8-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d78f06f3fb838b34c330e2987090376145cbe5944d8608a0c4779c779618f7b", size = 386442, upload-time = "2025-10-14T06:46:51.205Z" }, + { url = "https://files.pythonhosted.org/packages/30/6d/561d537ffc17985e276e08bf4513f1c106f1fdbef571e782604dc4e44070/blake3-1.0.8-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:dd03ff08d1b6e4fdda1cd03826f971ae8966ef6f683a8c68aa27fb21904b5aa9", size = 549929, upload-time = "2025-10-14T06:46:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/03/2f/dbe20d2c57f1a67c63be4ba310bcebc707b945c902a0bde075d2a8f5cd5c/blake3-1.0.8-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:4e02a3c499e35bf51fc15b2738aca1a76410804c877bcd914752cac4f71f052a", size = 553750, upload-time = "2025-10-14T06:46:54.194Z" }, + { url = "https://files.pythonhosted.org/packages/6b/da/c6cb712663c869b2814870c2798e57289c4268c5ac5fb12d467fce244860/blake3-1.0.8-cp314-cp314-win32.whl", hash = "sha256:a585357d5d8774aad9ffc12435de457f9e35cde55e0dc8bc43ab590a6929e59f", size = 228404, upload-time = "2025-10-14T06:46:56.807Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/c7dcd8bc3094bba1c4274e432f9e77a7df703532ca000eaa550bd066b870/blake3-1.0.8-cp314-cp314-win_amd64.whl", hash = "sha256:9ab5998e2abd9754819753bc2f1cf3edf82d95402bff46aeef45ed392a5468bf", size = 215460, upload-time = "2025-10-14T06:46:58.15Z" }, + { url = "https://files.pythonhosted.org/packages/75/3c/6c8afd856c353176836daa5cc33a7989e8f54569e9d53eb1c53fc8f80c34/blake3-1.0.8-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:e2df12f295f95a804338bd300e8fad4a6f54fd49bd4d9c5893855a230b5188a8", size = 347482, upload-time = "2025-10-14T06:47:00.189Z" }, + { url = "https://files.pythonhosted.org/packages/6a/35/92cd5501ce8e1f5cabdc0c3ac62d69fdb13ff0b60b62abbb2b6d0a53a790/blake3-1.0.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:63379be58438878eeb76ebe4f0efbeaabf42b79f2cff23b6126b7991588ced67", size = 324376, upload-time = "2025-10-14T06:47:01.413Z" }, + { url = "https://files.pythonhosted.org/packages/11/33/503b37220a3e2e31917ef13722efd00055af51c5e88ae30974c733d7ece6/blake3-1.0.8-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88d527c247f9609dc1d45a08fd243e39f0d5300d54c57e048de24d4fa9240ebb", size = 370220, upload-time = "2025-10-14T06:47:02.573Z" }, + { url = "https://files.pythonhosted.org/packages/3e/df/fe817843adf59516c04d44387bd643b422a3b0400ea95c6ede6a49920737/blake3-1.0.8-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506a47897a11ebe8f3cdeb52f1365d6a2f83959e98ccb0c830f8f73277d4d358", size = 373454, upload-time = "2025-10-14T06:47:03.784Z" }, + { url = "https://files.pythonhosted.org/packages/d1/4d/90a2a623575373dfc9b683f1bad1bf017feafa5a6d65d94fb09543050740/blake3-1.0.8-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5122a61b3b004bbbd979bdf83a3aaab432da3e2a842d7ddf1c273f2503b4884", size = 447102, upload-time = "2025-10-14T06:47:04.958Z" }, + { url = "https://files.pythonhosted.org/packages/93/ff/4e8ce314f60115c4c657b1fdbe9225b991da4f5bcc5d1c1f1d151e2f39d6/blake3-1.0.8-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0171e85d56dec1219abdae5f49a0ed12cb3f86a454c29160a64fd8a8166bba37", size = 506791, upload-time = "2025-10-14T06:47:06.82Z" }, + { url = "https://files.pythonhosted.org/packages/44/88/2963a1f18aab52bdcf35379b2b48c34bbc462320c37e76960636b8602c36/blake3-1.0.8-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:003f61e8c41dd9931edddf1cc6a1bb680fb2ac0ad15493ef4a1df9adc59ce9df", size = 393717, upload-time = "2025-10-14T06:47:09.085Z" }, + { url = "https://files.pythonhosted.org/packages/45/d1/a848ed8e8d4e236b9b16381768c9ae99d92890c24886bb4505aa9c3d2033/blake3-1.0.8-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2c3151955efb09ba58cd3e1263521e15e9e3866a40d6bd3556d86fc968e8f95", size = 386150, upload-time = "2025-10-14T06:47:10.363Z" }, + { url = "https://files.pythonhosted.org/packages/96/09/e3eb5d60f97c01de23d9f434e6e1fc117efb466eaa1f6ddbbbcb62580d6e/blake3-1.0.8-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:5eb25bca3cee2e0dd746a214784fb36be6a43640c01c55b6b4e26196e72d076c", size = 549120, upload-time = "2025-10-14T06:47:11.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/ad/3d9661c710febb8957dd685fdb3e5a861aa0ac918eda3031365ce45789e2/blake3-1.0.8-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ab4e1dea4fa857944944db78e8f20d99ee2e16b2dea5a14f514fb0607753ac83", size = 553264, upload-time = "2025-10-14T06:47:13.317Z" }, + { url = "https://files.pythonhosted.org/packages/11/55/e332a5b49edf377d0690e95951cca21a00c568f6e37315f9749efee52617/blake3-1.0.8-cp314-cp314t-win32.whl", hash = "sha256:67f1bc11bf59464ef092488c707b13dd4e872db36e25c453dfb6e0c7498df9f1", size = 228116, upload-time = "2025-10-14T06:47:14.516Z" }, + { url = "https://files.pythonhosted.org/packages/b0/5c/dbd00727a3dd165d7e0e8af40e630cd7e45d77b525a3218afaff8a87358e/blake3-1.0.8-cp314-cp314t-win_amd64.whl", hash = "sha256:421b99cdf1ff2d1bf703bc56c454f4b286fce68454dd8711abbcb5a0df90c19a", size = 215133, upload-time = "2025-10-14T06:47:16.069Z" }, +] + +[[package]] +name = "brotli" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/16/c92ca344d646e71a43b8bb353f0a6490d7f6e06210f8554c8f874e454285/brotli-1.2.0.tar.gz", hash = "sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a", size = 7388632, upload-time = "2025-11-05T18:39:42.86Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/10/a090475284fc4a71aed40a96f32e44a7fe5bda39687353dd977720b211b6/brotli-1.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e", size = 863089, upload-time = "2025-11-05T18:38:01.181Z" }, + { url = "https://files.pythonhosted.org/packages/03/41/17416630e46c07ac21e378c3464815dd2e120b441e641bc516ac32cc51d2/brotli-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984", size = 445442, upload-time = "2025-11-05T18:38:02.434Z" }, + { url = "https://files.pythonhosted.org/packages/24/31/90cc06584deb5d4fcafc0985e37741fc6b9717926a78674bbb3ce018957e/brotli-1.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de", size = 1532658, upload-time = "2025-11-05T18:38:03.588Z" }, + { url = "https://files.pythonhosted.org/packages/62/17/33bf0c83bcbc96756dfd712201d87342732fad70bb3472c27e833a44a4f9/brotli-1.2.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947", size = 1631241, upload-time = "2025-11-05T18:38:04.582Z" }, + { url = "https://files.pythonhosted.org/packages/48/10/f47854a1917b62efe29bc98ac18e5d4f71df03f629184575b862ef2e743b/brotli-1.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2", size = 1424307, upload-time = "2025-11-05T18:38:05.587Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b7/f88eb461719259c17483484ea8456925ee057897f8e64487d76e24e5e38d/brotli-1.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84", size = 1488208, upload-time = "2025-11-05T18:38:06.613Z" }, + { url = "https://files.pythonhosted.org/packages/26/59/41bbcb983a0c48b0b8004203e74706c6b6e99a04f3c7ca6f4f41f364db50/brotli-1.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d", size = 1597574, upload-time = "2025-11-05T18:38:07.838Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e6/8c89c3bdabbe802febb4c5c6ca224a395e97913b5df0dff11b54f23c1788/brotli-1.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1", size = 1492109, upload-time = "2025-11-05T18:38:08.816Z" }, + { url = "https://files.pythonhosted.org/packages/ed/9a/4b19d4310b2dbd545c0c33f176b0528fa68c3cd0754e34b2f2bcf56548ae/brotli-1.2.0-cp310-cp310-win32.whl", hash = "sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997", size = 334461, upload-time = "2025-11-05T18:38:10.729Z" }, + { url = "https://files.pythonhosted.org/packages/ac/39/70981d9f47705e3c2b95c0847dfa3e7a37aa3b7c6030aedc4873081ed005/brotli-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196", size = 369035, upload-time = "2025-11-05T18:38:11.827Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ef/f285668811a9e1ddb47a18cb0b437d5fc2760d537a2fe8a57875ad6f8448/brotli-1.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744", size = 863110, upload-time = "2025-11-05T18:38:12.978Z" }, + { url = "https://files.pythonhosted.org/packages/50/62/a3b77593587010c789a9d6eaa527c79e0848b7b860402cc64bc0bc28a86c/brotli-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f", size = 445438, upload-time = "2025-11-05T18:38:14.208Z" }, + { url = "https://files.pythonhosted.org/packages/cd/e1/7fadd47f40ce5549dc44493877db40292277db373da5053aff181656e16e/brotli-1.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd", size = 1534420, upload-time = "2025-11-05T18:38:15.111Z" }, + { url = "https://files.pythonhosted.org/packages/12/8b/1ed2f64054a5a008a4ccd2f271dbba7a5fb1a3067a99f5ceadedd4c1d5a7/brotli-1.2.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe", size = 1632619, upload-time = "2025-11-05T18:38:16.094Z" }, + { url = "https://files.pythonhosted.org/packages/89/5a/7071a621eb2d052d64efd5da2ef55ecdac7c3b0c6e4f9d519e9c66d987ef/brotli-1.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a", size = 1426014, upload-time = "2025-11-05T18:38:17.177Z" }, + { url = "https://files.pythonhosted.org/packages/26/6d/0971a8ea435af5156acaaccec1a505f981c9c80227633851f2810abd252a/brotli-1.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b", size = 1489661, upload-time = "2025-11-05T18:38:18.41Z" }, + { url = "https://files.pythonhosted.org/packages/f3/75/c1baca8b4ec6c96a03ef8230fab2a785e35297632f402ebb1e78a1e39116/brotli-1.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3", size = 1599150, upload-time = "2025-11-05T18:38:19.792Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1a/23fcfee1c324fd48a63d7ebf4bac3a4115bdb1b00e600f80f727d850b1ae/brotli-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae", size = 1493505, upload-time = "2025-11-05T18:38:20.913Z" }, + { url = "https://files.pythonhosted.org/packages/36/e5/12904bbd36afeef53d45a84881a4810ae8810ad7e328a971ebbfd760a0b3/brotli-1.2.0-cp311-cp311-win32.whl", hash = "sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03", size = 334451, upload-time = "2025-11-05T18:38:21.94Z" }, + { url = "https://files.pythonhosted.org/packages/02/8b/ecb5761b989629a4758c394b9301607a5880de61ee2ee5fe104b87149ebc/brotli-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24", size = 369035, upload-time = "2025-11-05T18:38:22.941Z" }, + { url = "https://files.pythonhosted.org/packages/11/ee/b0a11ab2315c69bb9b45a2aaed022499c9c24a205c3a49c3513b541a7967/brotli-1.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84", size = 861543, upload-time = "2025-11-05T18:38:24.183Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2f/29c1459513cd35828e25531ebfcbf3e92a5e49f560b1777a9af7203eb46e/brotli-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b", size = 444288, upload-time = "2025-11-05T18:38:25.139Z" }, + { url = "https://files.pythonhosted.org/packages/3d/6f/feba03130d5fceadfa3a1bb102cb14650798c848b1df2a808356f939bb16/brotli-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d", size = 1528071, upload-time = "2025-11-05T18:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/2b/38/f3abb554eee089bd15471057ba85f47e53a44a462cfce265d9bf7088eb09/brotli-1.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca", size = 1626913, upload-time = "2025-11-05T18:38:27.284Z" }, + { url = "https://files.pythonhosted.org/packages/03/a7/03aa61fbc3c5cbf99b44d158665f9b0dd3d8059be16c460208d9e385c837/brotli-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f", size = 1419762, upload-time = "2025-11-05T18:38:28.295Z" }, + { url = "https://files.pythonhosted.org/packages/21/1b/0374a89ee27d152a5069c356c96b93afd1b94eae83f1e004b57eb6ce2f10/brotli-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28", size = 1484494, upload-time = "2025-11-05T18:38:29.29Z" }, + { url = "https://files.pythonhosted.org/packages/cf/57/69d4fe84a67aef4f524dcd075c6eee868d7850e85bf01d778a857d8dbe0a/brotli-1.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7", size = 1593302, upload-time = "2025-11-05T18:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/d5/3b/39e13ce78a8e9a621c5df3aeb5fd181fcc8caba8c48a194cd629771f6828/brotli-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036", size = 1487913, upload-time = "2025-11-05T18:38:31.618Z" }, + { url = "https://files.pythonhosted.org/packages/62/28/4d00cb9bd76a6357a66fcd54b4b6d70288385584063f4b07884c1e7286ac/brotli-1.2.0-cp312-cp312-win32.whl", hash = "sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161", size = 334362, upload-time = "2025-11-05T18:38:32.939Z" }, + { url = "https://files.pythonhosted.org/packages/1c/4e/bc1dcac9498859d5e353c9b153627a3752868a9d5f05ce8dedd81a2354ab/brotli-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44", size = 369115, upload-time = "2025-11-05T18:38:33.765Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d4/4ad5432ac98c73096159d9ce7ffeb82d151c2ac84adcc6168e476bb54674/brotli-1.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab", size = 861523, upload-time = "2025-11-05T18:38:34.67Z" }, + { url = "https://files.pythonhosted.org/packages/91/9f/9cc5bd03ee68a85dc4bc89114f7067c056a3c14b3d95f171918c088bf88d/brotli-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c", size = 444289, upload-time = "2025-11-05T18:38:35.6Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b6/fe84227c56a865d16a6614e2c4722864b380cb14b13f3e6bef441e73a85a/brotli-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f", size = 1528076, upload-time = "2025-11-05T18:38:36.639Z" }, + { url = "https://files.pythonhosted.org/packages/55/de/de4ae0aaca06c790371cf6e7ee93a024f6b4bb0568727da8c3de112e726c/brotli-1.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6", size = 1626880, upload-time = "2025-11-05T18:38:37.623Z" }, + { url = "https://files.pythonhosted.org/packages/5f/16/a1b22cbea436642e071adcaf8d4b350a2ad02f5e0ad0da879a1be16188a0/brotli-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c", size = 1419737, upload-time = "2025-11-05T18:38:38.729Z" }, + { url = "https://files.pythonhosted.org/packages/46/63/c968a97cbb3bdbf7f974ef5a6ab467a2879b82afbc5ffb65b8acbb744f95/brotli-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48", size = 1484440, upload-time = "2025-11-05T18:38:39.916Z" }, + { url = "https://files.pythonhosted.org/packages/06/9d/102c67ea5c9fc171f423e8399e585dabea29b5bc79b05572891e70013cdd/brotli-1.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18", size = 1593313, upload-time = "2025-11-05T18:38:41.24Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/9526d14fa6b87bc827ba1755a8440e214ff90de03095cacd78a64abe2b7d/brotli-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5", size = 1487945, upload-time = "2025-11-05T18:38:42.277Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e8/3fe1ffed70cbef83c5236166acaed7bb9c766509b157854c80e2f766b38c/brotli-1.2.0-cp313-cp313-win32.whl", hash = "sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a", size = 334368, upload-time = "2025-11-05T18:38:43.345Z" }, + { url = "https://files.pythonhosted.org/packages/ff/91/e739587be970a113b37b821eae8097aac5a48e5f0eca438c22e4c7dd8648/brotli-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8", size = 369116, upload-time = "2025-11-05T18:38:44.609Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/298c2ddf786bb7347a1cd71d63a347a79e5712a7c0cba9e3c3458ebd976f/brotli-1.2.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21", size = 863080, upload-time = "2025-11-05T18:38:45.503Z" }, + { url = "https://files.pythonhosted.org/packages/84/0c/aac98e286ba66868b2b3b50338ffbd85a35c7122e9531a73a37a29763d38/brotli-1.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac", size = 445453, upload-time = "2025-11-05T18:38:46.433Z" }, + { url = "https://files.pythonhosted.org/packages/ec/f1/0ca1f3f99ae300372635ab3fe2f7a79fa335fee3d874fa7f9e68575e0e62/brotli-1.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e", size = 1528168, upload-time = "2025-11-05T18:38:47.371Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a6/2ebfc8f766d46df8d3e65b880a2e220732395e6d7dc312c1e1244b0f074a/brotli-1.2.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7", size = 1627098, upload-time = "2025-11-05T18:38:48.385Z" }, + { url = "https://files.pythonhosted.org/packages/f3/2f/0976d5b097ff8a22163b10617f76b2557f15f0f39d6a0fe1f02b1a53e92b/brotli-1.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63", size = 1419861, upload-time = "2025-11-05T18:38:49.372Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/d76df7176a2ce7616ff94c1fb72d307c9a30d2189fe877f3dd99af00ea5a/brotli-1.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b", size = 1484594, upload-time = "2025-11-05T18:38:50.655Z" }, + { url = "https://files.pythonhosted.org/packages/d3/93/14cf0b1216f43df5609f5b272050b0abd219e0b54ea80b47cef9867b45e7/brotli-1.2.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361", size = 1593455, upload-time = "2025-11-05T18:38:51.624Z" }, + { url = "https://files.pythonhosted.org/packages/b3/73/3183c9e41ca755713bdf2cc1d0810df742c09484e2e1ddd693bee53877c1/brotli-1.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888", size = 1488164, upload-time = "2025-11-05T18:38:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/64/6a/0c78d8f3a582859236482fd9fa86a65a60328a00983006bcf6d83b7b2253/brotli-1.2.0-cp314-cp314-win32.whl", hash = "sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d", size = 339280, upload-time = "2025-11-05T18:38:54.02Z" }, + { url = "https://files.pythonhosted.org/packages/f5/10/56978295c14794b2c12007b07f3e41ba26acda9257457d7085b0bb3bb90c/brotli-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3", size = 375639, upload-time = "2025-11-05T18:38:55.67Z" }, +] + +[[package]] +name = "build" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10.2'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/1d/ab15c8ac57f4ee8778d7633bc6685f808ab414437b8644f555389cdc875e/build-1.4.2.tar.gz", hash = "sha256:35b14e1ee329c186d3f08466003521ed7685ec15ecffc07e68d706090bf161d1", size = 83433, upload-time = "2026-03-25T14:20:27.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl", hash = "sha256:7a4d8651ea877cb2a89458b1b198f2e69f536c95e89129dbf5d448045d60db88", size = 24643, upload-time = "2026-03-25T14:20:26.568Z" }, +] + +[[package]] +name = "cachetools" +version = "7.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/dd/57fe3fdb6e65b25a5987fd2cdc7e22db0aef508b91634d2e57d22928d41b/cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990", size = 37367, upload-time = "2026-03-09T20:51:29.451Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114", size = 13918, upload-time = "2026-03-09T20:51:27.33Z" }, +] + +[[package]] +name = "cbor2" +version = "5.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/cb/09939728be094d155b5d4ac262e39877875f5f7e36eea66beb359f647bd0/cbor2-5.9.0.tar.gz", hash = "sha256:85c7a46279ac8f226e1059275221e6b3d0e370d2bb6bd0500f9780781615bcea", size = 111231, upload-time = "2026-03-22T15:56:50.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/bf/12b337e5354e47f6378da18989480c0c1e2cc5fe9b865e6fab45d6332aa6/cbor2-5.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:55bea0dd9a7d354e35f4e5fe58ceab393e76962713749dc3a0a64a0e5d19545e", size = 70577, upload-time = "2026-03-22T15:55:54.174Z" }, + { url = "https://files.pythonhosted.org/packages/45/7b/74c524ce81c1ddc6c44b4865028ffb7d3a8e7ae653b1061650375a28cbb1/cbor2-5.9.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3095dc49e75572841a9534cbfdabc2a17487ea4ee33341436abc4a7ac7245a3a", size = 261074, upload-time = "2026-03-22T15:55:55.654Z" }, + { url = "https://files.pythonhosted.org/packages/4b/97/c496c71422b2ca18ff2acc5f49e8c45cd7294b7df1359eccec78021b428e/cbor2-5.9.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25bec7beb2089465382b1be72e78667fe9090598800826559c3e3008cf0db743", size = 255498, upload-time = "2026-03-22T15:55:57.256Z" }, + { url = "https://files.pythonhosted.org/packages/c2/40/9bd7e66dba7aea674a440e004faea406de42c49aeac23453954b67768532/cbor2-5.9.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cc5efec69055c3c470997935d95762be7e4bfd1248d88fb1a33bb7e0f45712e9", size = 255683, upload-time = "2026-03-22T15:55:58.721Z" }, + { url = "https://files.pythonhosted.org/packages/b3/d1/fa3e158dbe4c08091495b720c604624b285bc272afdbcfac2150725d955b/cbor2-5.9.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:420d2490c7836c81151b4bd591c35cffc55391e33e7e333c50fda391bcea7d31", size = 250798, upload-time = "2026-03-22T15:55:59.953Z" }, + { url = "https://files.pythonhosted.org/packages/7c/16/3186084b441c4b0caebfaaa2c66a57bde82ceaacd469570c77c8030b6b95/cbor2-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:d1a21c006760f95acd9509cc5a7d15d6fc82e58f721f94fa9039b4e77189a6e5", size = 69436, upload-time = "2026-03-22T15:56:01.466Z" }, + { url = "https://files.pythonhosted.org/packages/36/1f/57d00cd13e0f9391bcd616795aa78409210a7464570fe21e3b9cd42eb5a7/cbor2-5.9.0-cp310-cp310-win_arm64.whl", hash = "sha256:08388ea54195738602b4c4999966bcaef6f0b17d293c9658658409d9fff96f57", size = 65312, upload-time = "2026-03-22T15:56:02.804Z" }, + { url = "https://files.pythonhosted.org/packages/43/aa/317c7118b8dda4c9563125c1a12c70c5b41e36677964a49c72b1aac061ec/cbor2-5.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0485d3372fc832c5e16d4eb45fa1a20fc53e806e6c29a1d2b0d3e176cedd52b9", size = 70578, upload-time = "2026-03-22T15:56:03.835Z" }, + { url = "https://files.pythonhosted.org/packages/31/43/fe29b1f897770011a5e7497f4523c2712282ee4a6cbf775ea6383fb7afb9/cbor2-5.9.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9d6e4e0f988b0e766509a8071975a8ee99f930e14a524620bf38083106158d2", size = 268738, upload-time = "2026-03-22T15:56:05.222Z" }, + { url = "https://files.pythonhosted.org/packages/0a/1a/e494568f3d8aafbcdfe361df44c3bcf5cdab5183e25ea08e3d3f9fcf4075/cbor2-5.9.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5326336f633cc89dfe543c78829c16c3a6449c2c03277d1ddba99086c3323363", size = 262571, upload-time = "2026-03-22T15:56:06.411Z" }, + { url = "https://files.pythonhosted.org/packages/42/2e/92acd6f87382fd44a34d9d7e85cc45372e6ba664040b72d1d9df648b25d0/cbor2-5.9.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5e702b02d42a5ace45425b595ffe70fe35aebaf9a3cdfdc2c758b6189c744422", size = 262356, upload-time = "2026-03-22T15:56:08.236Z" }, + { url = "https://files.pythonhosted.org/packages/3f/68/52c039a28688baeeb78b0be7483855e6c66ea05884a937444deede0c87b8/cbor2-5.9.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2372d357d403e7912f104ff085950ffc82a5854d6d717f1ca1ce16a40a0ef5a7", size = 257604, upload-time = "2026-03-22T15:56:09.835Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e4/10d96a7f73ed9227090ce6e3df5d73329eb6a267dab7d5b989e6fbf6c504/cbor2-5.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:1d02b65f070fd726bdc310d927228975bb655d155bf059b6eb7cacefb3dca86f", size = 69388, upload-time = "2026-03-22T15:56:11.28Z" }, + { url = "https://files.pythonhosted.org/packages/d4/c6/eea5829aa5a649db540f47ea35f4bf2313383d28246f0cbc50432cfad6b3/cbor2-5.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:837754ece9052b3f607047e1741e5f852a538aa2b0ee3db11c82a8fa11804aa4", size = 65315, upload-time = "2026-03-22T15:56:12.326Z" }, + { url = "https://files.pythonhosted.org/packages/ee/39/72d8a5a4b06565561ec28f4fcb41aff7bb77f51705c01f00b8254a2aca4f/cbor2-5.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1f223dffb1bcdd2764665f04c1152943d9daa4bc124a576cd8dee1cad4264313", size = 71223, upload-time = "2026-03-22T15:56:13.68Z" }, + { url = "https://files.pythonhosted.org/packages/09/fd/7ddf3d3153b54c69c3be77172b8d9aa3a9d74f62a7fbde614d53eaeed9a4/cbor2-5.9.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae6c706ac1d85a0b3cb3395308fd0c4d55e3202b4760773675957e93cdff45fc", size = 287865, upload-time = "2026-03-22T15:56:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/db/9d/7ede2cc42f9bb4260492e7d29d2aab781eacbbcfb09d983de1e695077199/cbor2-5.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4cd43d8fc374b31643b2830910f28177a606a7bc84975a62675dd3f2e320fc7b", size = 288246, upload-time = "2026-03-22T15:56:16.113Z" }, + { url = "https://files.pythonhosted.org/packages/ce/9d/588ebc7c5bc5843f609b05fe07be8575c7dec987735b0bbc908ac9c1264a/cbor2-5.9.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4aa07b392cc3d76fb31c08a46a226b58c320d1c172ff3073e864409ced7bc50f", size = 280214, upload-time = "2026-03-22T15:56:17.519Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a1/6fc8f4b15c6a27e7fbb7966c30c2b4b18c274a3221fa2f5e6235502d34bc/cbor2-5.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:971d425b3a23b75953d8853d5f9911bdeefa09d759ee3b5e6b07b5ff3cbd9073", size = 282162, upload-time = "2026-03-22T15:56:18.975Z" }, + { url = "https://files.pythonhosted.org/packages/cf/20/9a22cfe08be16ddfeef2542cf4eeed1b29f3f57ddbba0b42f7e0bb8331fd/cbor2-5.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:34a6cb15e6ab6a8eae94ad2041731cd3ef786af43a8df99f847969af5b902ee7", size = 70049, upload-time = "2026-03-22T15:56:20.502Z" }, + { url = "https://files.pythonhosted.org/packages/c6/9e/695f92d09006614034e25a9f5b10620f3b219f79c1bec3c37b7c6f27a7a9/cbor2-5.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:7d1ddc4541e7367ac58c2470cc0df847f7137167fe4f5729e2d3cc0b993d7da4", size = 65382, upload-time = "2026-03-22T15:56:21.526Z" }, + { url = "https://files.pythonhosted.org/packages/81/c5/4901e21a8afe9448fd947b11e8f383903207cd6dd0800e5f5a386838de5b/cbor2-5.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fbb06f34aa645b4deca66643bba3d400d20c15312d1fe88d429be60c1ab50f27", size = 71284, upload-time = "2026-03-22T15:56:22.836Z" }, + { url = "https://files.pythonhosted.org/packages/1b/10/df643a381aebc3f05486de4813662bc58accb640fc3275cb276a75e89694/cbor2-5.9.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac684fe195c39821fca70d18afbf748f728aefbfbf88456018d299e559b8cae0", size = 287682, upload-time = "2026-03-22T15:56:24.024Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0c/8aa6b766059ae4a0ca1ec3ff96fe3823a69a7be880dba2e249f7fbe2700b/cbor2-5.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a54fbb32cb828c214f7f333a707e4aec61182e7efdc06ea5d9596d3ecee624a", size = 288009, upload-time = "2026-03-22T15:56:25.305Z" }, + { url = "https://files.pythonhosted.org/packages/74/07/6236bc25c183a9cf7e8062e5dddf9eae9b0b14ebf14a58a69fe5a1e872c6/cbor2-5.9.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4753a6d1bc71054d9179557bc65740860f185095ccb401d46637fff028a5b3ec", size = 280437, upload-time = "2026-03-22T15:56:26.479Z" }, + { url = "https://files.pythonhosted.org/packages/4e/0a/84328d23c3c68874ac6497edb9b1900579a1028efa54734df3f1762bbc15/cbor2-5.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:380e534482b843e43442b87d8777a7bf9bed20cb7526f89b780c3400f617304b", size = 282247, upload-time = "2026-03-22T15:56:28.644Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f6/89b4627e09d028c8e5fcaf7cb55f225c33ce6e037ec1844e65d02bcfa945/cbor2-5.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:dcf0f695873e5c94bd072d6af8698e72b8fb7f7a18f37e0bced1041b7111a6cf", size = 70089, upload-time = "2026-03-22T15:56:29.801Z" }, + { url = "https://files.pythonhosted.org/packages/e2/7c/efadcd5f0102db692490e4e206988a2f98d39a09912090db497a2b800885/cbor2-5.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:f7c9751a9611601ab326d8f5837f01379195bbf06175fb4effeb552140e7c9e8", size = 65466, upload-time = "2026-03-22T15:56:30.823Z" }, + { url = "https://files.pythonhosted.org/packages/08/7d/9ccc36d10ef96e6038e48046ebe1ce35a1e7814da0e1e204d09e6ef09b8d/cbor2-5.9.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23606d31ba1368bd1b6602e3020ee88fe9523ca80e8630faf6b2fc904fd84560", size = 71500, upload-time = "2026-03-22T15:56:31.876Z" }, + { url = "https://files.pythonhosted.org/packages/70/e1/a6cca2cc72e13f00030c6a649f57ae703eb2c620806ab70c40db8eab33fa/cbor2-5.9.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0322296b9d52f55880e300ba8ba09ecf644303b99b51138bbb1c0fb644fa7c3e", size = 286953, upload-time = "2026-03-22T15:56:33.292Z" }, + { url = "https://files.pythonhosted.org/packages/08/3c/24cd5ef488a957d90e016f200a3aad820e4c2f85edd61c9fe4523007a1ee/cbor2-5.9.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:422817286c1d0ce947fb2f7eca9212b39bddd7231e8b452e2d2cc52f15332dba", size = 285454, upload-time = "2026-03-22T15:56:34.703Z" }, + { url = "https://files.pythonhosted.org/packages/a4/35/dca96818494c0ba47cdd73e8d809b27fa91f8fa0ce32a068a09237687454/cbor2-5.9.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9a4907e0c3035bb8836116854ed8e56d8aef23909d601fa59706320897ec2551", size = 279441, upload-time = "2026-03-22T15:56:35.888Z" }, + { url = "https://files.pythonhosted.org/packages/a4/44/d3362378b16e53cf7e535a3f5aed8476e2109068154e24e31981ef5bde9e/cbor2-5.9.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fb7afe77f8d269e42d7c4b515c6fd14f1ccc0625379fb6829b269f493d16eddd", size = 279673, upload-time = "2026-03-22T15:56:37.08Z" }, + { url = "https://files.pythonhosted.org/packages/43/d1/3533a697e5842fff7c2f64912eb251f8dcab3a8b5d88e228d6eebc3b5021/cbor2-5.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:86baf870d4c0bfc6f79de3801f3860a84ab76d9c8b0abb7f081f2c14c38d79d3", size = 71940, upload-time = "2026-03-22T15:56:38.366Z" }, + { url = "https://files.pythonhosted.org/packages/ff/e2/c6ba75f3fb25dfa15ab6999cc8709c821987e9ed8e375d7f58539261bcb9/cbor2-5.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:7221483fad0c63afa4244624d552abf89d7dfdbc5f5edfc56fc1ff2b4b818975", size = 67639, upload-time = "2026-03-22T15:56:39.39Z" }, + { url = "https://files.pythonhosted.org/packages/42/ff/b83492b096fbef26e9cb62c1a4bf2d3cef579ea7b33138c6c37c4ae66f67/cbor2-5.9.0-py3-none-any.whl", hash = "sha256:27695cbd70c90b8de5c4a284642c2836449b14e2c2e07e3ffe0744cb7669a01b", size = 24627, upload-time = "2026-03-22T15:56:48.847Z" }, +] + +[[package]] +name = "certifi" +version = "2026.2.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182, upload-time = "2026-04-02T09:25:40.673Z" }, + { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329, upload-time = "2026-04-02T09:25:42.354Z" }, + { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230, upload-time = "2026-04-02T09:25:44.281Z" }, + { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890, upload-time = "2026-04-02T09:25:45.475Z" }, + { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930, upload-time = "2026-04-02T09:25:46.58Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109, upload-time = "2026-04-02T09:25:48.031Z" }, + { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684, upload-time = "2026-04-02T09:25:49.245Z" }, + { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785, upload-time = "2026-04-02T09:25:50.671Z" }, + { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055, upload-time = "2026-04-02T09:25:51.802Z" }, + { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502, upload-time = "2026-04-02T09:25:53.388Z" }, + { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295, upload-time = "2026-04-02T09:25:54.765Z" }, + { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145, upload-time = "2026-04-02T09:25:55.904Z" }, + { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884, upload-time = "2026-04-02T09:25:57.074Z" }, + { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343, upload-time = "2026-04-02T09:25:58.199Z" }, + { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174, upload-time = "2026-04-02T09:25:59.322Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805, upload-time = "2026-04-02T09:26:00.756Z" }, + { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, + { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, + { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, + { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, + { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, + { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, + { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, + { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, + { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, + { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, + { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, + { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, + { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819, upload-time = "2026-04-02T09:26:20.295Z" }, + { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281, upload-time = "2026-04-02T09:26:21.74Z" }, + { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843, upload-time = "2026-04-02T09:26:22.901Z" }, + { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +] + +[[package]] +name = "chromadb" +version = "1.5.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bcrypt" }, + { name = "build" }, + { name = "grpcio" }, + { name = "httpx" }, + { name = "importlib-resources" }, + { name = "jsonschema" }, + { name = "kubernetes" }, + { name = "mmh3" }, + { name = "numpy" }, + { name = "onnxruntime", version = "1.24.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "onnxruntime", version = "1.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-grpc" }, + { name = "opentelemetry-sdk" }, + { name = "orjson" }, + { name = "overrides" }, + { name = "pybase64" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pypika" }, + { name = "pyyaml" }, + { name = "rich" }, + { name = "tenacity" }, + { name = "tokenizers" }, + { name = "tqdm" }, + { name = "typer" }, + { name = "typing-extensions" }, + { name = "uvicorn", extra = ["standard"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/16/1de79a685650f2cae8ae15d40ff6fbd243fa5d4a66ea8db8fcfcc2d3c700/chromadb-1.5.7.tar.gz", hash = "sha256:9c4b01d164c088c42945795177fe6ec3a1447f0f23fdaaefff771cdc119e3d8e", size = 2485750, upload-time = "2026-04-08T07:18:22.842Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/95/84591b90c477c1698c979dc0c2f3c077df203dcaf8d5d651b67f16733575/chromadb-1.5.7-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b5cb5309a687ed8723648736d31ed92aa7f34555e9605e3ad701be3d16c2cb6e", size = 22169269, upload-time = "2026-04-08T07:18:20.226Z" }, + { url = "https://files.pythonhosted.org/packages/ea/82/576876f28d804af14e290043bcc5ba7beda7edfa408168844d054a4a9039/chromadb-1.5.7-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:adde835a4754eb6c452f9c9410c427678758d46992810bf626089aea2afe4d68", size = 21340057, upload-time = "2026-04-08T07:18:16.373Z" }, + { url = "https://files.pythonhosted.org/packages/df/82/7e69c63e045be54e3d590c1f479e8a3d4520fd7a822ad643677768296d35/chromadb-1.5.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:840b633089637f01485fa013ee4004288ac164da794258b693c5ead98405a3a7", size = 22360408, upload-time = "2026-04-08T07:18:10.245Z" }, + { url = "https://files.pythonhosted.org/packages/e4/30/c81b33b2d8d3d03c4ca7364348e03e6e80d15b36dd6bd1ca6c22e03a89f5/chromadb-1.5.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d5d30691ed3207e31f5029ce3c915d98bf154f01541361b820bcfe8c7fab862", size = 22987687, upload-time = "2026-04-08T07:18:13.425Z" }, + { url = "https://files.pythonhosted.org/packages/e2/81/1d50da242d4f69c4643467ec7704fcba8a790d48fd194b3be5d657b20c45/chromadb-1.5.7-cp39-abi3-win_amd64.whl", hash = "sha256:d281f346e638ade719c2952d88641c0582616058881073db0248e6301bf93a7d", size = 23074878, upload-time = "2026-04-08T07:18:25.589Z" }, +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + +[[package]] +name = "codewraith" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "pydantic" }, +] + +[package.optional-dependencies] +all = [ + { name = "accelerate" }, + { name = "bitsandbytes" }, + { name = "chromadb" }, + { name = "datasets" }, + { name = "dspy" }, + { name = "gradio" }, + { name = "lark" }, + { name = "outlines" }, + { name = "peft" }, + { name = "sentence-transformers" }, + { name = "torch" }, + { name = "transformers" }, + { name = "trl" }, + { name = "unsloth" }, + { name = "vllm" }, +] +app = [ + { name = "chromadb" }, + { name = "gradio" }, + { name = "sentence-transformers" }, +] +dev = [ + { name = "pytest" }, + { name = "pytest-cov" }, + { name = "ruff" }, +] +ml = [ + { name = "accelerate" }, + { name = "bitsandbytes" }, + { name = "datasets" }, + { name = "dspy" }, + { name = "lark" }, + { name = "outlines" }, + { name = "peft" }, + { name = "torch" }, + { name = "transformers" }, + { name = "trl" }, + { name = "unsloth" }, + { name = "vllm" }, +] + +[package.metadata] +requires-dist = [ + { name = "accelerate", marker = "extra == 'ml'", specifier = ">=0.27.0" }, + { name = "bitsandbytes", marker = "extra == 'ml'", specifier = ">=0.43.0" }, + { name = "chromadb", marker = "extra == 'app'", specifier = ">=0.5.0" }, + { name = "codewraith", extras = ["ml", "app"], marker = "extra == 'all'" }, + { name = "datasets", marker = "extra == 'ml'", specifier = ">=2.18.0" }, + { name = "dspy", marker = "extra == 'ml'", specifier = ">=2.5.0" }, + { name = "gradio", marker = "extra == 'app'", specifier = ">=4.0.0" }, + { name = "lark", marker = "extra == 'ml'", specifier = ">=1.1.0" }, + { name = "outlines", marker = "extra == 'ml'", specifier = ">=1.2.0" }, + { name = "peft", marker = "extra == 'ml'", specifier = ">=0.10.0" }, + { name = "pydantic", specifier = ">=2.0.0" }, + { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0.0" }, + { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=5.0.0" }, + { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.3.0" }, + { name = "sentence-transformers", marker = "extra == 'app'", specifier = ">=3.0.0" }, + { name = "torch", marker = "extra == 'ml'", specifier = ">=2.1.0" }, + { name = "transformers", marker = "extra == 'ml'", specifier = ">=4.40.0" }, + { name = "trl", marker = "extra == 'ml'", specifier = ">=0.8.0" }, + { name = "unsloth", marker = "extra == 'ml'" }, + { name = "vllm", marker = "extra == 'ml'", specifier = ">=0.8.0" }, +] +provides-extras = ["ml", "app", "all", "dev"] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "colorlog" +version = "6.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/61/f083b5ac52e505dfc1c624eafbf8c7589a0d7f32daa398d2e7590efa5fda/colorlog-6.10.1.tar.gz", hash = "sha256:eb4ae5cb65fe7fec7773c2306061a8e63e02efc2c72eba9d27b0fa23c94f1321", size = 17162, upload-time = "2025-10-16T16:14:11.978Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl", hash = "sha256:2d7e8348291948af66122cff006c9f8da6255d224e7cf8e37d8de2df3bad8c9c", size = 11743, upload-time = "2025-10-16T16:14:10.512Z" }, +] + +[[package]] +name = "compressed-tensors" +version = "0.14.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "loguru" }, + { name = "pydantic" }, + { name = "torch" }, + { name = "transformers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/f1/4c9b01ceaf82ad58ad00919223e09b8e74d4073a2ba8e3ab2f97521ef65c/compressed_tensors-0.14.0.1.tar.gz", hash = "sha256:5ad3841184b6f5020e06059b2463191c5c57a144bb97cab9159978d8118839b1", size = 226393, upload-time = "2026-03-11T17:04:35.57Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/26/16a13993ecf4fdc9c39d63b3a6daabafd32a452cf68b81aa9eb3b8170913/compressed_tensors-0.14.0.1-py3-none-any.whl", hash = "sha256:46c4940a3a779d3d97108c294bfcd9acf4bd0491f7c6737c320f0e815ec732e4", size = 196454, upload-time = "2026-03-11T17:04:33.2Z" }, +] + +[[package]] +name = "coverage" +version = "7.13.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/e0/70553e3000e345daff267cec284ce4cbf3fc141b6da229ac52775b5428f1/coverage-7.13.5.tar.gz", hash = "sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179", size = 915967, upload-time = "2026-03-17T10:33:18.341Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/33/e8c48488c29a73fd089f9d71f9653c1be7478f2ad6b5bc870db11a55d23d/coverage-7.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0723d2c96324561b9aa76fb982406e11d93cdb388a7a7da2b16e04719cf7ca5", size = 219255, upload-time = "2026-03-17T10:29:51.081Z" }, + { url = "https://files.pythonhosted.org/packages/da/bd/b0ebe9f677d7f4b74a3e115eec7ddd4bcf892074963a00d91e8b164a6386/coverage-7.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52f444e86475992506b32d4e5ca55c24fc88d73bcbda0e9745095b28ef4dc0cf", size = 219772, upload-time = "2026-03-17T10:29:52.867Z" }, + { url = "https://files.pythonhosted.org/packages/48/cc/5cb9502f4e01972f54eedd48218bb203fe81e294be606a2bc93970208013/coverage-7.13.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:704de6328e3d612a8f6c07000a878ff38181ec3263d5a11da1db294fa6a9bdf8", size = 246532, upload-time = "2026-03-17T10:29:54.688Z" }, + { url = "https://files.pythonhosted.org/packages/7d/d8/3217636d86c7e7b12e126e4f30ef1581047da73140614523af7495ed5f2d/coverage-7.13.5-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a1a6d79a14e1ec1832cabc833898636ad5f3754a678ef8bb4908515208bf84f4", size = 248333, upload-time = "2026-03-17T10:29:56.221Z" }, + { url = "https://files.pythonhosted.org/packages/2b/30/2002ac6729ba2d4357438e2ed3c447ad8562866c8c63fc16f6dfc33afe56/coverage-7.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79060214983769c7ba3f0cee10b54c97609dca4d478fa1aa32b914480fd5738d", size = 250211, upload-time = "2026-03-17T10:29:57.938Z" }, + { url = "https://files.pythonhosted.org/packages/6c/85/552496626d6b9359eb0e2f86f920037c9cbfba09b24d914c6e1528155f7d/coverage-7.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:356e76b46783a98c2a2fe81ec79df4883a1e62895ea952968fb253c114e7f930", size = 252125, upload-time = "2026-03-17T10:29:59.388Z" }, + { url = "https://files.pythonhosted.org/packages/44/21/40256eabdcbccdb6acf6b381b3016a154399a75fe39d406f790ae84d1f3c/coverage-7.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0cef0cdec915d11254a7f549c1170afecce708d30610c6abdded1f74e581666d", size = 247219, upload-time = "2026-03-17T10:30:01.199Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e8/96e2a6c3f21a0ea77d7830b254a1542d0328acc8d7bdf6a284ba7e529f77/coverage-7.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc022073d063b25a402454e5712ef9e007113e3a676b96c5f29b2bda29352f40", size = 248248, upload-time = "2026-03-17T10:30:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/da/ba/8477f549e554827da390ec659f3c38e4b6d95470f4daafc2d8ff94eaa9c2/coverage-7.13.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9b74db26dfea4f4e50d48a4602207cd1e78be33182bc9cbf22da94f332f99878", size = 246254, upload-time = "2026-03-17T10:30:04.832Z" }, + { url = "https://files.pythonhosted.org/packages/55/59/bc22aef0e6aa179d5b1b001e8b3654785e9adf27ef24c93dc4228ebd5d68/coverage-7.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ad146744ca4fd09b50c482650e3c1b1f4dfa1d4792e0a04a369c7f23336f0400", size = 250067, upload-time = "2026-03-17T10:30:06.535Z" }, + { url = "https://files.pythonhosted.org/packages/de/1b/c6a023a160806a5137dca53468fd97530d6acad24a22003b1578a9c2e429/coverage-7.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c555b48be1853fe3997c11c4bd521cdd9a9612352de01fa4508f16ec341e6fe0", size = 246521, upload-time = "2026-03-17T10:30:08.486Z" }, + { url = "https://files.pythonhosted.org/packages/2d/3f/3532c85a55aa2f899fa17c186f831cfa1aa434d88ff792a709636f64130e/coverage-7.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7034b5c56a58ae5e85f23949d52c14aca2cfc6848a31764995b7de88f13a1ea0", size = 247126, upload-time = "2026-03-17T10:30:09.966Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2e/b9d56af4a24ef45dfbcda88e06870cb7d57b2b0bfa3a888d79b4c8debd76/coverage-7.13.5-cp310-cp310-win32.whl", hash = "sha256:eb7fdf1ef130660e7415e0253a01a7d5a88c9c4d158bcf75cbbd922fd65a5b58", size = 221860, upload-time = "2026-03-17T10:30:11.393Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cc/d938417e7a4d7f0433ad4edee8bb2acdc60dc7ac5af19e2a07a048ecbee3/coverage-7.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:3e1bb5f6c78feeb1be3475789b14a0f0a5b47d505bfc7267126ccbd50289999e", size = 222788, upload-time = "2026-03-17T10:30:12.886Z" }, + { url = "https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d", size = 219381, upload-time = "2026-03-17T10:30:14.68Z" }, + { url = "https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587", size = 219880, upload-time = "2026-03-17T10:30:16.231Z" }, + { url = "https://files.pythonhosted.org/packages/55/2f/e0e5b237bffdb5d6c530ce87cc1d413a5b7d7dfd60fb067ad6d254c35c76/coverage-7.13.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642", size = 250303, upload-time = "2026-03-17T10:30:17.748Z" }, + { url = "https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b", size = 252218, upload-time = "2026-03-17T10:30:19.804Z" }, + { url = "https://files.pythonhosted.org/packages/da/69/2f47bb6fa1b8d1e3e5d0c4be8ccb4313c63d742476a619418f85740d597b/coverage-7.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686", size = 254326, upload-time = "2026-03-17T10:30:21.321Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d0/79db81da58965bd29dabc8f4ad2a2af70611a57cba9d1ec006f072f30a54/coverage-7.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743", size = 256267, upload-time = "2026-03-17T10:30:23.094Z" }, + { url = "https://files.pythonhosted.org/packages/e5/32/d0d7cc8168f91ddab44c0ce4806b969df5f5fdfdbb568eaca2dbc2a04936/coverage-7.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75", size = 250430, upload-time = "2026-03-17T10:30:25.311Z" }, + { url = "https://files.pythonhosted.org/packages/4d/06/a055311d891ddbe231cd69fdd20ea4be6e3603ffebddf8704b8ca8e10a3c/coverage-7.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209", size = 252017, upload-time = "2026-03-17T10:30:27.284Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f6/d0fd2d21e29a657b5f77a2fe7082e1568158340dceb941954f776dce1b7b/coverage-7.13.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a", size = 250080, upload-time = "2026-03-17T10:30:29.481Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ab/0d7fb2efc2e9a5eb7ddcc6e722f834a69b454b7e6e5888c3a8567ecffb31/coverage-7.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e", size = 253843, upload-time = "2026-03-17T10:30:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/ba/6f/7467b917bbf5408610178f62a49c0ed4377bb16c1657f689cc61470da8ce/coverage-7.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd", size = 249802, upload-time = "2026-03-17T10:30:33.358Z" }, + { url = "https://files.pythonhosted.org/packages/75/2c/1172fb689df92135f5bfbbd69fc83017a76d24ea2e2f3a1154007e2fb9f8/coverage-7.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8", size = 250707, upload-time = "2026-03-17T10:30:35.2Z" }, + { url = "https://files.pythonhosted.org/packages/67/21/9ac389377380a07884e3b48ba7a620fcd9dbfaf1d40565facdc6b36ec9ef/coverage-7.13.5-cp311-cp311-win32.whl", hash = "sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf", size = 221880, upload-time = "2026-03-17T10:30:36.775Z" }, + { url = "https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9", size = 222816, upload-time = "2026-03-17T10:30:38.891Z" }, + { url = "https://files.pythonhosted.org/packages/12/a6/1d3f6155fb0010ca68eba7fe48ca6c9da7385058b77a95848710ecf189b1/coverage-7.13.5-cp311-cp311-win_arm64.whl", hash = "sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028", size = 221483, upload-time = "2026-03-17T10:30:40.463Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01", size = 219554, upload-time = "2026-03-17T10:30:42.208Z" }, + { url = "https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422", size = 219908, upload-time = "2026-03-17T10:30:43.906Z" }, + { url = "https://files.pythonhosted.org/packages/29/72/20b917c6793af3a5ceb7fb9c50033f3ec7865f2911a1416b34a7cfa0813b/coverage-7.13.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f", size = 251419, upload-time = "2026-03-17T10:30:45.545Z" }, + { url = "https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5", size = 254159, upload-time = "2026-03-17T10:30:47.204Z" }, + { url = "https://files.pythonhosted.org/packages/9d/00/7b0edcfe64e2ed4c0340dac14a52ad0f4c9bd0b8b5e531af7d55b703db7c/coverage-7.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376", size = 255270, upload-time = "2026-03-17T10:30:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/93/89/7ffc4ba0f5d0a55c1e84ea7cee39c9fc06af7b170513d83fbf3bbefce280/coverage-7.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256", size = 257538, upload-time = "2026-03-17T10:30:50.77Z" }, + { url = "https://files.pythonhosted.org/packages/81/bd/73ddf85f93f7e6fa83e77ccecb6162d9415c79007b4bc124008a4995e4a7/coverage-7.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c", size = 251821, upload-time = "2026-03-17T10:30:52.5Z" }, + { url = "https://files.pythonhosted.org/packages/a0/81/278aff4e8dec4926a0bcb9486320752811f543a3ce5b602cc7a29978d073/coverage-7.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5", size = 253191, upload-time = "2026-03-17T10:30:54.543Z" }, + { url = "https://files.pythonhosted.org/packages/70/ee/fe1621488e2e0a58d7e94c4800f0d96f79671553488d401a612bebae324b/coverage-7.13.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09", size = 251337, upload-time = "2026-03-17T10:30:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/37/a6/f79fb37aa104b562207cc23cb5711ab6793608e246cae1e93f26b2236ed9/coverage-7.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9", size = 255404, upload-time = "2026-03-17T10:30:58.427Z" }, + { url = "https://files.pythonhosted.org/packages/75/f0/ed15262a58ec81ce457ceb717b7f78752a1713556b19081b76e90896e8d4/coverage-7.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf", size = 250903, upload-time = "2026-03-17T10:31:00.093Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e9/9129958f20e7e9d4d56d51d42ccf708d15cac355ff4ac6e736e97a9393d2/coverage-7.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c", size = 252780, upload-time = "2026-03-17T10:31:01.916Z" }, + { url = "https://files.pythonhosted.org/packages/a4/d7/0ad9b15812d81272db94379fe4c6df8fd17781cc7671fdfa30c76ba5ff7b/coverage-7.13.5-cp312-cp312-win32.whl", hash = "sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf", size = 222093, upload-time = "2026-03-17T10:31:03.642Z" }, + { url = "https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810", size = 222900, upload-time = "2026-03-17T10:31:05.651Z" }, + { url = "https://files.pythonhosted.org/packages/d4/fa/2238c2ad08e35cf4f020ea721f717e09ec3152aea75d191a7faf3ef009a8/coverage-7.13.5-cp312-cp312-win_arm64.whl", hash = "sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de", size = 221515, upload-time = "2026-03-17T10:31:07.293Z" }, + { url = "https://files.pythonhosted.org/packages/74/8c/74fedc9663dcf168b0a059d4ea756ecae4da77a489048f94b5f512a8d0b3/coverage-7.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1", size = 219576, upload-time = "2026-03-17T10:31:09.045Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c9/44fb661c55062f0818a6ffd2685c67aa30816200d5f2817543717d4b92eb/coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3", size = 219942, upload-time = "2026-03-17T10:31:10.708Z" }, + { url = "https://files.pythonhosted.org/packages/5f/13/93419671cee82b780bab7ea96b67c8ef448f5f295f36bf5031154ec9a790/coverage-7.13.5-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26", size = 250935, upload-time = "2026-03-17T10:31:12.392Z" }, + { url = "https://files.pythonhosted.org/packages/ac/68/1666e3a4462f8202d836920114fa7a5ee9275d1fa45366d336c551a162dd/coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3", size = 253541, upload-time = "2026-03-17T10:31:14.247Z" }, + { url = "https://files.pythonhosted.org/packages/4e/5e/3ee3b835647be646dcf3c65a7c6c18f87c27326a858f72ab22c12730773d/coverage-7.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b", size = 254780, upload-time = "2026-03-17T10:31:16.193Z" }, + { url = "https://files.pythonhosted.org/packages/44/b3/cb5bd1a04cfcc49ede6cd8409d80bee17661167686741e041abc7ee1b9a9/coverage-7.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a", size = 256912, upload-time = "2026-03-17T10:31:17.89Z" }, + { url = "https://files.pythonhosted.org/packages/1b/66/c1dceb7b9714473800b075f5c8a84f4588f887a90eb8645282031676e242/coverage-7.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969", size = 251165, upload-time = "2026-03-17T10:31:19.605Z" }, + { url = "https://files.pythonhosted.org/packages/b7/62/5502b73b97aa2e53ea22a39cf8649ff44827bef76d90bf638777daa27a9d/coverage-7.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161", size = 252908, upload-time = "2026-03-17T10:31:21.312Z" }, + { url = "https://files.pythonhosted.org/packages/7d/37/7792c2d69854397ca77a55c4646e5897c467928b0e27f2d235d83b5d08c6/coverage-7.13.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15", size = 250873, upload-time = "2026-03-17T10:31:23.565Z" }, + { url = "https://files.pythonhosted.org/packages/a3/23/bc866fb6163be52a8a9e5d708ba0d3b1283c12158cefca0a8bbb6e247a43/coverage-7.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1", size = 255030, upload-time = "2026-03-17T10:31:25.58Z" }, + { url = "https://files.pythonhosted.org/packages/7d/8b/ef67e1c222ef49860701d346b8bbb70881bef283bd5f6cbba68a39a086c7/coverage-7.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6", size = 250694, upload-time = "2026-03-17T10:31:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/46/0d/866d1f74f0acddbb906db212e096dee77a8e2158ca5e6bb44729f9d93298/coverage-7.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17", size = 252469, upload-time = "2026-03-17T10:31:29.472Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f5/be742fec31118f02ce42b21c6af187ad6a344fed546b56ca60caacc6a9a0/coverage-7.13.5-cp313-cp313-win32.whl", hash = "sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85", size = 222112, upload-time = "2026-03-17T10:31:31.526Z" }, + { url = "https://files.pythonhosted.org/packages/66/40/7732d648ab9d069a46e686043241f01206348e2bbf128daea85be4d6414b/coverage-7.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b", size = 222923, upload-time = "2026-03-17T10:31:33.633Z" }, + { url = "https://files.pythonhosted.org/packages/48/af/fea819c12a095781f6ccd504890aaddaf88b8fab263c4940e82c7b770124/coverage-7.13.5-cp313-cp313-win_arm64.whl", hash = "sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664", size = 221540, upload-time = "2026-03-17T10:31:35.445Z" }, + { url = "https://files.pythonhosted.org/packages/23/d2/17879af479df7fbbd44bd528a31692a48f6b25055d16482fdf5cdb633805/coverage-7.13.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d", size = 220262, upload-time = "2026-03-17T10:31:37.184Z" }, + { url = "https://files.pythonhosted.org/packages/5b/4c/d20e554f988c8f91d6a02c5118f9abbbf73a8768a3048cb4962230d5743f/coverage-7.13.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0", size = 220617, upload-time = "2026-03-17T10:31:39.245Z" }, + { url = "https://files.pythonhosted.org/packages/29/9c/f9f5277b95184f764b24e7231e166dfdb5780a46d408a2ac665969416d61/coverage-7.13.5-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806", size = 261912, upload-time = "2026-03-17T10:31:41.324Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f6/7f1ab39393eeb50cfe4747ae8ef0e4fc564b989225aa1152e13a180d74f8/coverage-7.13.5-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3", size = 263987, upload-time = "2026-03-17T10:31:43.724Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d7/62c084fb489ed9c6fbdf57e006752e7c516ea46fd690e5ed8b8617c7d52e/coverage-7.13.5-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9", size = 266416, upload-time = "2026-03-17T10:31:45.769Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f6/df63d8660e1a0bff6125947afda112a0502736f470d62ca68b288ea762d8/coverage-7.13.5-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd", size = 267558, upload-time = "2026-03-17T10:31:48.293Z" }, + { url = "https://files.pythonhosted.org/packages/5b/02/353ca81d36779bd108f6d384425f7139ac3c58c750dcfaafe5d0bee6436b/coverage-7.13.5-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606", size = 261163, upload-time = "2026-03-17T10:31:50.125Z" }, + { url = "https://files.pythonhosted.org/packages/2c/16/2e79106d5749bcaf3aee6d309123548e3276517cd7851faa8da213bc61bf/coverage-7.13.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e", size = 263981, upload-time = "2026-03-17T10:31:51.961Z" }, + { url = "https://files.pythonhosted.org/packages/29/c7/c29e0c59ffa6942030ae6f50b88ae49988e7e8da06de7ecdbf49c6d4feae/coverage-7.13.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0", size = 261604, upload-time = "2026-03-17T10:31:53.872Z" }, + { url = "https://files.pythonhosted.org/packages/40/48/097cdc3db342f34006a308ab41c3a7c11c3f0d84750d340f45d88a782e00/coverage-7.13.5-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87", size = 265321, upload-time = "2026-03-17T10:31:55.997Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1f/4994af354689e14fd03a75f8ec85a9a68d94e0188bbdab3fc1516b55e512/coverage-7.13.5-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479", size = 260502, upload-time = "2026-03-17T10:31:58.308Z" }, + { url = "https://files.pythonhosted.org/packages/22/c6/9bb9ef55903e628033560885f5c31aa227e46878118b63ab15dc7ba87797/coverage-7.13.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2", size = 262688, upload-time = "2026-03-17T10:32:00.141Z" }, + { url = "https://files.pythonhosted.org/packages/14/4f/f5df9007e50b15e53e01edea486814783a7f019893733d9e4d6caad75557/coverage-7.13.5-cp313-cp313t-win32.whl", hash = "sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a", size = 222788, upload-time = "2026-03-17T10:32:02.246Z" }, + { url = "https://files.pythonhosted.org/packages/e1/98/aa7fccaa97d0f3192bec013c4e6fd6d294a6ed44b640e6bb61f479e00ed5/coverage-7.13.5-cp313-cp313t-win_amd64.whl", hash = "sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819", size = 223851, upload-time = "2026-03-17T10:32:04.416Z" }, + { url = "https://files.pythonhosted.org/packages/3d/8b/e5c469f7352651e5f013198e9e21f97510b23de957dd06a84071683b4b60/coverage-7.13.5-cp313-cp313t-win_arm64.whl", hash = "sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911", size = 222104, upload-time = "2026-03-17T10:32:06.65Z" }, + { url = "https://files.pythonhosted.org/packages/8e/77/39703f0d1d4b478bfd30191d3c14f53caf596fac00efb3f8f6ee23646439/coverage-7.13.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f", size = 219621, upload-time = "2026-03-17T10:32:08.589Z" }, + { url = "https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e", size = 219953, upload-time = "2026-03-17T10:32:10.507Z" }, + { url = "https://files.pythonhosted.org/packages/6a/6c/1f1917b01eb647c2f2adc9962bd66c79eb978951cab61bdc1acab3290c07/coverage-7.13.5-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a", size = 250992, upload-time = "2026-03-17T10:32:12.41Z" }, + { url = "https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510", size = 253503, upload-time = "2026-03-17T10:32:14.449Z" }, + { url = "https://files.pythonhosted.org/packages/80/28/2a148a51e5907e504fa7b85490277734e6771d8844ebcc48764a15e28155/coverage-7.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247", size = 254852, upload-time = "2026-03-17T10:32:16.56Z" }, + { url = "https://files.pythonhosted.org/packages/61/77/50e8d3d85cc0b7ebe09f30f151d670e302c7ff4a1bf6243f71dd8b0981fa/coverage-7.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6", size = 257161, upload-time = "2026-03-17T10:32:19.004Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c4/b5fd1d4b7bf8d0e75d997afd3925c59ba629fc8616f1b3aae7605132e256/coverage-7.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0", size = 251021, upload-time = "2026-03-17T10:32:21.344Z" }, + { url = "https://files.pythonhosted.org/packages/f8/66/6ea21f910e92d69ef0b1c3346ea5922a51bad4446c9126db2ae96ee24c4c/coverage-7.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882", size = 252858, upload-time = "2026-03-17T10:32:23.506Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ea/879c83cb5d61aa2a35fb80e72715e92672daef8191b84911a643f533840c/coverage-7.13.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740", size = 250823, upload-time = "2026-03-17T10:32:25.516Z" }, + { url = "https://files.pythonhosted.org/packages/8a/fb/616d95d3adb88b9803b275580bdeee8bd1b69a886d057652521f83d7322f/coverage-7.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16", size = 255099, upload-time = "2026-03-17T10:32:27.944Z" }, + { url = "https://files.pythonhosted.org/packages/1c/93/25e6917c90ec1c9a56b0b26f6cad6408e5f13bb6b35d484a0d75c9cf000d/coverage-7.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0", size = 250638, upload-time = "2026-03-17T10:32:29.914Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7b/dc1776b0464145a929deed214aef9fb1493f159b59ff3c7eeeedf91eddd0/coverage-7.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0", size = 252295, upload-time = "2026-03-17T10:32:31.981Z" }, + { url = "https://files.pythonhosted.org/packages/ea/fb/99cbbc56a26e07762a2740713f3c8f9f3f3106e3a3dd8cc4474954bccd34/coverage-7.13.5-cp314-cp314-win32.whl", hash = "sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc", size = 222360, upload-time = "2026-03-17T10:32:34.233Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633", size = 223174, upload-time = "2026-03-17T10:32:36.369Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f2/24d84e1dfe70f8ac9fdf30d338239860d0d1d5da0bda528959d0ebc9da28/coverage-7.13.5-cp314-cp314-win_arm64.whl", hash = "sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8", size = 221739, upload-time = "2026-03-17T10:32:38.736Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/4a168591057b3668c2428bff25dd3ebc21b629d666d90bcdfa0217940e84/coverage-7.13.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b", size = 220351, upload-time = "2026-03-17T10:32:41.196Z" }, + { url = "https://files.pythonhosted.org/packages/f5/21/1fd5c4dbfe4a58b6b99649125635df46decdfd4a784c3cd6d410d303e370/coverage-7.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c", size = 220612, upload-time = "2026-03-17T10:32:43.204Z" }, + { url = "https://files.pythonhosted.org/packages/d6/fe/2a924b3055a5e7e4512655a9d4609781b0d62334fa0140c3e742926834e2/coverage-7.13.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9", size = 261985, upload-time = "2026-03-17T10:32:45.514Z" }, + { url = "https://files.pythonhosted.org/packages/d7/0d/c8928f2bd518c45990fe1a2ab8db42e914ef9b726c975facc4282578c3eb/coverage-7.13.5-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29", size = 264107, upload-time = "2026-03-17T10:32:47.971Z" }, + { url = "https://files.pythonhosted.org/packages/ef/ae/4ae35bbd9a0af9d820362751f0766582833c211224b38665c0f8de3d487f/coverage-7.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607", size = 266513, upload-time = "2026-03-17T10:32:50.1Z" }, + { url = "https://files.pythonhosted.org/packages/9c/20/d326174c55af36f74eac6ae781612d9492f060ce8244b570bb9d50d9d609/coverage-7.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90", size = 267650, upload-time = "2026-03-17T10:32:52.391Z" }, + { url = "https://files.pythonhosted.org/packages/7a/5e/31484d62cbd0eabd3412e30d74386ece4a0837d4f6c3040a653878bfc019/coverage-7.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3", size = 261089, upload-time = "2026-03-17T10:32:54.544Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d8/49a72d6de146eebb0b7e48cc0f4bc2c0dd858e3d4790ab2b39a2872b62bd/coverage-7.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab", size = 263982, upload-time = "2026-03-17T10:32:56.803Z" }, + { url = "https://files.pythonhosted.org/packages/06/3b/0351f1bd566e6e4dd39e978efe7958bde1d32f879e85589de147654f57bb/coverage-7.13.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562", size = 261579, upload-time = "2026-03-17T10:32:59.466Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ce/796a2a2f4017f554d7810f5c573449b35b1e46788424a548d4d19201b222/coverage-7.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2", size = 265316, upload-time = "2026-03-17T10:33:01.847Z" }, + { url = "https://files.pythonhosted.org/packages/3d/16/d5ae91455541d1a78bc90abf495be600588aff8f6db5c8b0dae739fa39c9/coverage-7.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea", size = 260427, upload-time = "2026-03-17T10:33:03.945Z" }, + { url = "https://files.pythonhosted.org/packages/48/11/07f413dba62db21fb3fad5d0de013a50e073cc4e2dc4306e770360f6dfc8/coverage-7.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a", size = 262745, upload-time = "2026-03-17T10:33:06.285Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/d792371332eb4663115becf4bad47e047d16234b1aff687b1b18c58d60ae/coverage-7.13.5-cp314-cp314t-win32.whl", hash = "sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215", size = 223146, upload-time = "2026-03-17T10:33:08.756Z" }, + { url = "https://files.pythonhosted.org/packages/db/51/37221f59a111dca5e85be7dbf09696323b5b9f13ff65e0641d535ed06ea8/coverage-7.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43", size = 224254, upload-time = "2026-03-17T10:33:11.174Z" }, + { url = "https://files.pythonhosted.org/packages/54/83/6acacc889de8987441aa7d5adfbdbf33d288dad28704a67e574f1df9bcbb/coverage-7.13.5-cp314-cp314t-win_arm64.whl", hash = "sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45", size = 222276, upload-time = "2026-03-17T10:33:13.466Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ee/a4cf96b8ce1e566ed238f0659ac2d3f007ed1d14b181bcb684e19561a69a/coverage-7.13.5-py3-none-any.whl", hash = "sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61", size = 211346, upload-time = "2026-03-17T10:33:15.691Z" }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version <= '3.11'" }, +] + +[[package]] +name = "cryptography" +version = "46.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/93/ac8f3d5ff04d54bc814e961a43ae5b0b146154c89c61b47bb07557679b18/cryptography-46.0.7.tar.gz", hash = "sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5", size = 750652, upload-time = "2026-04-08T01:57:54.692Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/5d/4a8f770695d73be252331e60e526291e3df0c9b27556a90a6b47bccca4c2/cryptography-46.0.7-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4", size = 7179869, upload-time = "2026-04-08T01:56:17.157Z" }, + { url = "https://files.pythonhosted.org/packages/5f/45/6d80dc379b0bbc1f9d1e429f42e4cb9e1d319c7a8201beffd967c516ea01/cryptography-46.0.7-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325", size = 4275492, upload-time = "2026-04-08T01:56:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9a/1765afe9f572e239c3469f2cb429f3ba7b31878c893b246b4b2994ffe2fe/cryptography-46.0.7-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308", size = 4426670, upload-time = "2026-04-08T01:56:21.415Z" }, + { url = "https://files.pythonhosted.org/packages/8f/3e/af9246aaf23cd4ee060699adab1e47ced3f5f7e7a8ffdd339f817b446462/cryptography-46.0.7-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77", size = 4280275, upload-time = "2026-04-08T01:56:23.539Z" }, + { url = "https://files.pythonhosted.org/packages/0f/54/6bbbfc5efe86f9d71041827b793c24811a017c6ac0fd12883e4caa86b8ed/cryptography-46.0.7-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1", size = 4928402, upload-time = "2026-04-08T01:56:25.624Z" }, + { url = "https://files.pythonhosted.org/packages/2d/cf/054b9d8220f81509939599c8bdbc0c408dbd2bdd41688616a20731371fe0/cryptography-46.0.7-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef", size = 4459985, upload-time = "2026-04-08T01:56:27.309Z" }, + { url = "https://files.pythonhosted.org/packages/f9/46/4e4e9c6040fb01c7467d47217d2f882daddeb8828f7df800cb806d8a2288/cryptography-46.0.7-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de", size = 3990652, upload-time = "2026-04-08T01:56:29.095Z" }, + { url = "https://files.pythonhosted.org/packages/36/5f/313586c3be5a2fbe87e4c9a254207b860155a8e1f3cca99f9910008e7d08/cryptography-46.0.7-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83", size = 4279805, upload-time = "2026-04-08T01:56:30.928Z" }, + { url = "https://files.pythonhosted.org/packages/69/33/60dfc4595f334a2082749673386a4d05e4f0cf4df8248e63b2c3437585f2/cryptography-46.0.7-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb", size = 4892883, upload-time = "2026-04-08T01:56:32.614Z" }, + { url = "https://files.pythonhosted.org/packages/c7/0b/333ddab4270c4f5b972f980adef4faa66951a4aaf646ca067af597f15563/cryptography-46.0.7-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b", size = 4459756, upload-time = "2026-04-08T01:56:34.306Z" }, + { url = "https://files.pythonhosted.org/packages/d2/14/633913398b43b75f1234834170947957c6b623d1701ffc7a9600da907e89/cryptography-46.0.7-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85", size = 4410244, upload-time = "2026-04-08T01:56:35.977Z" }, + { url = "https://files.pythonhosted.org/packages/10/f2/19ceb3b3dc14009373432af0c13f46aa08e3ce334ec6eff13492e1812ccd/cryptography-46.0.7-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e", size = 4674868, upload-time = "2026-04-08T01:56:38.034Z" }, + { url = "https://files.pythonhosted.org/packages/1a/bb/a5c213c19ee94b15dfccc48f363738633a493812687f5567addbcbba9f6f/cryptography-46.0.7-cp311-abi3-win32.whl", hash = "sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457", size = 3026504, upload-time = "2026-04-08T01:56:39.666Z" }, + { url = "https://files.pythonhosted.org/packages/2b/02/7788f9fefa1d060ca68717c3901ae7fffa21ee087a90b7f23c7a603c32ae/cryptography-46.0.7-cp311-abi3-win_amd64.whl", hash = "sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b", size = 3488363, upload-time = "2026-04-08T01:56:41.893Z" }, + { url = "https://files.pythonhosted.org/packages/7b/56/15619b210e689c5403bb0540e4cb7dbf11a6bf42e483b7644e471a2812b3/cryptography-46.0.7-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842", size = 7119671, upload-time = "2026-04-08T01:56:44Z" }, + { url = "https://files.pythonhosted.org/packages/74/66/e3ce040721b0b5599e175ba91ab08884c75928fbeb74597dd10ef13505d2/cryptography-46.0.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c", size = 4268551, upload-time = "2026-04-08T01:56:46.071Z" }, + { url = "https://files.pythonhosted.org/packages/03/11/5e395f961d6868269835dee1bafec6a1ac176505a167f68b7d8818431068/cryptography-46.0.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902", size = 4408887, upload-time = "2026-04-08T01:56:47.718Z" }, + { url = "https://files.pythonhosted.org/packages/40/53/8ed1cf4c3b9c8e611e7122fb56f1c32d09e1fff0f1d77e78d9ff7c82653e/cryptography-46.0.7-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d", size = 4271354, upload-time = "2026-04-08T01:56:49.312Z" }, + { url = "https://files.pythonhosted.org/packages/50/46/cf71e26025c2e767c5609162c866a78e8a2915bbcfa408b7ca495c6140c4/cryptography-46.0.7-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022", size = 4905845, upload-time = "2026-04-08T01:56:50.916Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ea/01276740375bac6249d0a971ebdf6b4dc9ead0ee0a34ef3b5a88c1a9b0d4/cryptography-46.0.7-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce", size = 4444641, upload-time = "2026-04-08T01:56:52.882Z" }, + { url = "https://files.pythonhosted.org/packages/3d/4c/7d258f169ae71230f25d9f3d06caabcff8c3baf0978e2b7d65e0acac3827/cryptography-46.0.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f", size = 3967749, upload-time = "2026-04-08T01:56:54.597Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2a/2ea0767cad19e71b3530e4cad9605d0b5e338b6a1e72c37c9c1ceb86c333/cryptography-46.0.7-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99", size = 4270942, upload-time = "2026-04-08T01:56:56.416Z" }, + { url = "https://files.pythonhosted.org/packages/41/3d/fe14df95a83319af25717677e956567a105bb6ab25641acaa093db79975d/cryptography-46.0.7-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1", size = 4871079, upload-time = "2026-04-08T01:56:58.31Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/4a479e0f36f8f378d397f4eab4c850b4ffb79a2f0d58704b8fa0703ddc11/cryptography-46.0.7-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2", size = 4443999, upload-time = "2026-04-08T01:57:00.508Z" }, + { url = "https://files.pythonhosted.org/packages/28/17/b59a741645822ec6d04732b43c5d35e4ef58be7bfa84a81e5ae6f05a1d33/cryptography-46.0.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e", size = 4399191, upload-time = "2026-04-08T01:57:02.654Z" }, + { url = "https://files.pythonhosted.org/packages/59/6a/bb2e166d6d0e0955f1e9ff70f10ec4b2824c9cfcdb4da772c7dd69cc7d80/cryptography-46.0.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee", size = 4655782, upload-time = "2026-04-08T01:57:04.592Z" }, + { url = "https://files.pythonhosted.org/packages/95/b6/3da51d48415bcb63b00dc17c2eff3a651b7c4fed484308d0f19b30e8cb2c/cryptography-46.0.7-cp314-cp314t-win32.whl", hash = "sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298", size = 3002227, upload-time = "2026-04-08T01:57:06.91Z" }, + { url = "https://files.pythonhosted.org/packages/32/a8/9f0e4ed57ec9cebe506e58db11ae472972ecb0c659e4d52bbaee80ca340a/cryptography-46.0.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb", size = 3475332, upload-time = "2026-04-08T01:57:08.807Z" }, + { url = "https://files.pythonhosted.org/packages/a7/7f/cd42fc3614386bc0c12f0cb3c4ae1fc2bbca5c9662dfed031514911d513d/cryptography-46.0.7-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4", size = 7165618, upload-time = "2026-04-08T01:57:10.645Z" }, + { url = "https://files.pythonhosted.org/packages/a5/d0/36a49f0262d2319139d2829f773f1b97ef8aef7f97e6e5bd21455e5a8fb5/cryptography-46.0.7-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7", size = 4270628, upload-time = "2026-04-08T01:57:12.885Z" }, + { url = "https://files.pythonhosted.org/packages/8a/6c/1a42450f464dda6ffbe578a911f773e54dd48c10f9895a23a7e88b3e7db5/cryptography-46.0.7-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832", size = 4415405, upload-time = "2026-04-08T01:57:14.923Z" }, + { url = "https://files.pythonhosted.org/packages/9a/92/4ed714dbe93a066dc1f4b4581a464d2d7dbec9046f7c8b7016f5286329e2/cryptography-46.0.7-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163", size = 4272715, upload-time = "2026-04-08T01:57:16.638Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e6/a26b84096eddd51494bba19111f8fffe976f6a09f132706f8f1bf03f51f7/cryptography-46.0.7-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2", size = 4918400, upload-time = "2026-04-08T01:57:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/c7/08/ffd537b605568a148543ac3c2b239708ae0bd635064bab41359252ef88ed/cryptography-46.0.7-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067", size = 4450634, upload-time = "2026-04-08T01:57:21.185Z" }, + { url = "https://files.pythonhosted.org/packages/16/01/0cd51dd86ab5b9befe0d031e276510491976c3a80e9f6e31810cce46c4ad/cryptography-46.0.7-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0", size = 3985233, upload-time = "2026-04-08T01:57:22.862Z" }, + { url = "https://files.pythonhosted.org/packages/92/49/819d6ed3a7d9349c2939f81b500a738cb733ab62fbecdbc1e38e83d45e12/cryptography-46.0.7-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba", size = 4271955, upload-time = "2026-04-08T01:57:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/ad9b3c56ebb95ed2473d46df0847357e01583f4c52a85754d1a55e29e4d0/cryptography-46.0.7-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006", size = 4879888, upload-time = "2026-04-08T01:57:26.88Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c7/201d3d58f30c4c2bdbe9b03844c291feb77c20511cc3586daf7edc12a47b/cryptography-46.0.7-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0", size = 4449961, upload-time = "2026-04-08T01:57:29.068Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ef/649750cbf96f3033c3c976e112265c33906f8e462291a33d77f90356548c/cryptography-46.0.7-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85", size = 4401696, upload-time = "2026-04-08T01:57:31.029Z" }, + { url = "https://files.pythonhosted.org/packages/41/52/a8908dcb1a389a459a29008c29966c1d552588d4ae6d43f3a1a4512e0ebe/cryptography-46.0.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e", size = 4664256, upload-time = "2026-04-08T01:57:33.144Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/f0ab06238e899cc3fb332623f337a7364f36f4bb3f2534c2bb95a35b132c/cryptography-46.0.7-cp38-abi3-win32.whl", hash = "sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246", size = 3013001, upload-time = "2026-04-08T01:57:34.933Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f1/00ce3bde3ca542d1acd8f8cfa38e446840945aa6363f9b74746394b14127/cryptography-46.0.7-cp38-abi3-win_amd64.whl", hash = "sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3", size = 3472985, upload-time = "2026-04-08T01:57:36.714Z" }, + { url = "https://files.pythonhosted.org/packages/63/0c/dca8abb64e7ca4f6b2978769f6fea5ad06686a190cec381f0a796fdcaaba/cryptography-46.0.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f", size = 3476879, upload-time = "2026-04-08T01:57:38.664Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ea/075aac6a84b7c271578d81a2f9968acb6e273002408729f2ddff517fed4a/cryptography-46.0.7-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15", size = 4219700, upload-time = "2026-04-08T01:57:40.625Z" }, + { url = "https://files.pythonhosted.org/packages/6c/7b/1c55db7242b5e5612b29fc7a630e91ee7a6e3c8e7bf5406d22e206875fbd/cryptography-46.0.7-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455", size = 4385982, upload-time = "2026-04-08T01:57:42.725Z" }, + { url = "https://files.pythonhosted.org/packages/cb/da/9870eec4b69c63ef5925bf7d8342b7e13bc2ee3d47791461c4e49ca212f4/cryptography-46.0.7-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65", size = 4219115, upload-time = "2026-04-08T01:57:44.939Z" }, + { url = "https://files.pythonhosted.org/packages/f4/72/05aa5832b82dd341969e9a734d1812a6aadb088d9eb6f0430fc337cc5a8f/cryptography-46.0.7-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968", size = 4385479, upload-time = "2026-04-08T01:57:46.86Z" }, + { url = "https://files.pythonhosted.org/packages/20/2a/1b016902351a523aa2bd446b50a5bc1175d7a7d1cf90fe2ef904f9b84ebc/cryptography-46.0.7-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4", size = 3412829, upload-time = "2026-04-08T01:57:48.874Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "12.9.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] +dependencies = [ + { name = "cuda-pathfinder", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/31/bfcc870f69c6a017c4ad5c42316207fc7551940db6f3639aa4466ec5faf3/cuda_bindings-12.9.4-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a022c96b8bd847e8dc0675523431149a4c3e872f440e3002213dbb9e08f0331a", size = 11800959, upload-time = "2025-10-21T14:51:26.458Z" }, + { url = "https://files.pythonhosted.org/packages/7a/d8/b546104b8da3f562c1ff8ab36d130c8fe1dd6a045ced80b4f6ad74f7d4e1/cuda_bindings-12.9.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d3c842c2a4303b2a580fe955018e31aea30278be19795ae05226235268032e5", size = 12148218, upload-time = "2025-10-21T14:51:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/b5/1e/9c8ed3f3dbed7b7d038805fdc65cbc65fda9983e84437778a9571e7092bc/cuda_bindings-12.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:f69107389e6b9948969bfd0a20c4f571fd1aefcfb1d2e1b72cc8ba5ecb7918ab", size = 11464568, upload-time = "2025-10-21T14:51:31.454Z" }, + { url = "https://files.pythonhosted.org/packages/a9/2b/ebcbb60aa6dba830474cd360c42e10282f7a343c0a1f58d24fbd3b7c2d77/cuda_bindings-12.9.4-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6a429dc6c13148ff1e27c44f40a3dd23203823e637b87fd0854205195988306", size = 11840604, upload-time = "2025-10-21T14:51:34.565Z" }, + { url = "https://files.pythonhosted.org/packages/45/e7/b47792cc2d01c7e1d37c32402182524774dadd2d26339bd224e0e913832e/cuda_bindings-12.9.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c912a3d9e6b6651853eed8eed96d6800d69c08e94052c292fec3f282c5a817c9", size = 12210593, upload-time = "2025-10-21T14:51:36.574Z" }, + { url = "https://files.pythonhosted.org/packages/dd/be/90d32049e06abcfba4b2e7df1dbcb5e16215c8852eef0cd8b25f38a66bd4/cuda_bindings-12.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:443b0875916879c2e4c3722941e25e42d5ab9bcbf34c9e83404fb100fa1f6913", size = 11490933, upload-time = "2025-10-21T14:51:38.792Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c2/65bfd79292b8ff18be4dd7f7442cea37bcbc1a228c1886f1dea515c45b67/cuda_bindings-12.9.4-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:694ba35023846625ef471257e6b5a4bc8af690f961d197d77d34b1d1db393f56", size = 11760260, upload-time = "2025-10-21T14:51:40.79Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c1/dabe88f52c3e3760d861401bb994df08f672ec893b8f7592dc91626adcf3/cuda_bindings-12.9.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fda147a344e8eaeca0c6ff113d2851ffca8f7dfc0a6c932374ee5c47caa649c8", size = 12151019, upload-time = "2025-10-21T14:51:43.167Z" }, + { url = "https://files.pythonhosted.org/packages/df/6b/9c1b1a6c01392bfdd758e9486f52a1a72bc8f49e98f9355774ef98b5fb4e/cuda_bindings-12.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:696ca75d249ddf287d01b9a698b8e2d8a05046495a9c051ca15659dc52d17615", size = 11586961, upload-time = "2025-10-21T14:51:45.394Z" }, + { url = "https://files.pythonhosted.org/packages/05/8b/b4b2d1c7775fa403b64333e720cfcfccef8dcb9cdeb99947061ca5a77628/cuda_bindings-12.9.4-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cf8bfaedc238f3b115d957d1fd6562b7e8435ba57f6d0e2f87d0e7149ccb2da5", size = 11570071, upload-time = "2025-10-21T14:51:47.472Z" }, + { url = "https://files.pythonhosted.org/packages/63/56/e465c31dc9111be3441a9ba7df1941fe98f4aa6e71e8788a3fb4534ce24d/cuda_bindings-12.9.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:32bdc5a76906be4c61eb98f546a6786c5773a881f3b166486449b5d141e4a39f", size = 11906628, upload-time = "2025-10-21T14:51:49.905Z" }, + { url = "https://files.pythonhosted.org/packages/05/d0/d0e4e2e047d8e899f023fa15ad5e9894ce951253f4c894f1cd68490fdb14/cuda_bindings-12.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:a2e82c8985948f953c2be51df45c3fe11c812a928fca525154fb9503190b3e64", size = 11556719, upload-time = "2025-10-21T14:51:52.248Z" }, + { url = "https://files.pythonhosted.org/packages/ec/07/6aff13bc1e977e35aaa6b22f52b172e2890c608c6db22438cf7ed2bf43a6/cuda_bindings-12.9.4-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3adf4958dcf68ae7801a59b73fb00a8b37f8d0595060d66ceae111b1002de38d", size = 11566797, upload-time = "2025-10-21T14:51:54.581Z" }, + { url = "https://files.pythonhosted.org/packages/a3/84/1e6be415e37478070aeeee5884c2022713c1ecc735e6d82d744de0252eee/cuda_bindings-12.9.4-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56e0043c457a99ac473ddc926fe0dc4046694d99caef633e92601ab52cbe17eb", size = 11925991, upload-time = "2025-10-21T14:51:56.535Z" }, + { url = "https://files.pythonhosted.org/packages/4d/3c/972edfddb4ae8a9fccd3c3766ed47453b6f805b6026b32f10209dd4b8ad4/cuda_bindings-12.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:b32d8b685f0e66f5658bcf4601ef034e89fc2843582886f0a58784a4302da06c", size = 11894363, upload-time = "2025-10-21T14:51:58.633Z" }, + { url = "https://files.pythonhosted.org/packages/1e/b5/96a6696e20c4ffd2b327f54c7d0fde2259bdb998d045c25d5dedbbe30290/cuda_bindings-12.9.4-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f53a7f453d4b2643d8663d036bafe29b5ba89eb904c133180f295df6dc151e5", size = 11624530, upload-time = "2025-10-21T14:52:01.539Z" }, + { url = "https://files.pythonhosted.org/packages/d1/af/6dfd8f2ed90b1d4719bc053ff8940e494640fe4212dc3dd72f383e4992da/cuda_bindings-12.9.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8b72ee72a9cc1b531db31eebaaee5c69a8ec3500e32c6933f2d3b15297b53686", size = 11922703, upload-time = "2025-10-21T14:52:03.585Z" }, + { url = "https://files.pythonhosted.org/packages/e6/87/652796522cc1a7af559460e1ce59b642e05c1468b9c08522a9a096b4cf04/cuda_bindings-12.9.4-cp314-cp314-win_amd64.whl", hash = "sha256:53a10c71fdbdb743e0268d07964e5a996dd00b4e43831cbfce9804515d97d575", size = 11517716, upload-time = "2025-10-21T14:52:06.013Z" }, + { url = "https://files.pythonhosted.org/packages/39/73/d2fc40c043bac699c3880bf88d3cebe9d88410cd043795382826c93a89f0/cuda_bindings-12.9.4-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20f2699d61d724de3eb3f3369d57e2b245f93085cab44fd37c3bea036cea1a6f", size = 11565056, upload-time = "2025-10-21T14:52:08.338Z" }, + { url = "https://files.pythonhosted.org/packages/6c/19/90ac264acc00f6df8a49378eedec9fd2db3061bf9263bf9f39fd3d8377c3/cuda_bindings-12.9.4-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d80bffc357df9988dca279734bc9674c3934a654cab10cadeed27ce17d8635ee", size = 11924658, upload-time = "2025-10-21T14:52:10.411Z" }, + { url = "https://files.pythonhosted.org/packages/ab/52/a30f46e822bfa6b4a659d1e8de8c4a4adf908ea075dac568b55362541bd8/cuda_bindings-12.9.4-cp314-cp314t-win_amd64.whl", hash = "sha256:53e11991a92ff6f26a0c8a98554cd5d6721c308a6b7bfb08bebac9201e039e43", size = 12055608, upload-time = "2025-10-21T14:52:12.335Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "13.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", +] +dependencies = [ + { name = "cuda-pathfinder", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/ea/81999d01375645f34596c76eb046b4b36d58cc6fe2bddb2410f8a7b7a827/cuda_bindings-13.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:845025438a1b9e20718b9fb42add3e0eb72e85458bcab3eeb80bfd8f0a9dab33", size = 5600047, upload-time = "2026-03-11T00:12:34.848Z" }, + { url = "https://files.pythonhosted.org/packages/29/5a/0ce1731c48bcd9f40996a4ef1abbf634f1a7fe4a15c5050b1e75ce3a7acf/cuda_bindings-13.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:debb51b211d246f8326f6b6e982506a5d0d9906672c91bc478b66addc7ecc60a", size = 5631363, upload-time = "2026-03-11T00:12:41.58Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a5/d7f01a415e134546248cef612adad8153c9f1eb10ec79505a7cd8294370b/cuda_bindings-13.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:45815daeb595bf3b405c52671a2542b1f8e9329f3b029494acbfcc74aeaa1f2d", size = 5840830, upload-time = "2026-03-11T00:12:48.43Z" }, + { url = "https://files.pythonhosted.org/packages/c4/84/d3b6220b51cbc02ca14db7387e97445126b4ff5125aaa6c5dd7dcb75e679/cuda_bindings-13.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8cebe3ce4aeeca5af9c490e175f76c4b569bbf4a35a62294b777bc77bf7ac4d8", size = 5796512, upload-time = "2026-03-11T00:12:54.483Z" }, + { url = "https://files.pythonhosted.org/packages/e3/73/98bcb069778fe420226db75aff54b5dd6c3ecfd0912edabab723326e80b7/cuda_bindings-13.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:bd658bb5c0e55b7b3e5dd0ed509c6addb298c665db26a9bfba35e1e626000ba2", size = 5938605, upload-time = "2026-03-11T00:13:01.639Z" }, + { url = "https://files.pythonhosted.org/packages/52/49/4e01cc06447d39476e138d1b1adec8d35c0d04eccd2c8d69befc08cd66e8/cuda_bindings-13.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6ccf14e0c1def3b7200100aafff3a9f7e210ecb6e409329e92dcf6cd2c00d5c7", size = 6662637, upload-time = "2026-03-11T00:13:07.881Z" }, +] + +[[package]] +name = "cuda-pathfinder" +version = "1.5.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/f9/1b9b60a30fc463c14cdea7a77228131a0ccc89572e8df9cb86c9648271ab/cuda_pathfinder-1.5.2-py3-none-any.whl", hash = "sha256:0c5f160a7756c5b072723cbbd6d861e38917ef956c68150b02f0b6e9271c71fa", size = 49988, upload-time = "2026-04-06T23:01:05.17Z" }, +] + +[[package]] +name = "cuda-python" +version = "12.9.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] +dependencies = [ + { name = "cuda-bindings", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/f3/6b032a554019cfb3447e671798c1bd3e79b5f1af20d10253f56cea269ef2/cuda_python-12.9.4-py3-none-any.whl", hash = "sha256:d2cacea882a69863f1e7d27ee71d75f0684f4c76910aff839067e4f89c902279", size = 7594, upload-time = "2025-10-21T14:55:12.846Z" }, +] + +[[package]] +name = "cuda-python" +version = "13.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", +] +dependencies = [ + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "cuda-pathfinder", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/da/b4dbe129f941afe1c24a09ba53521b78875626763d96414798a74763282f/cuda_python-13.2.0-py3-none-any.whl", hash = "sha256:2f092b0ec13a860115fa595411889ee939ad203450ea4f91e9461b174ea7b084", size = 8145, upload-time = "2026-03-11T13:55:19.143Z" }, +] + +[[package]] +name = "cut-cross-entropy" +version = "25.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch" }, + { name = "triton", marker = "sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/97/45ff09cfcda7b200389204daa0125168e6544fba257adbbcdf728501d4f9/cut_cross_entropy-25.1.1.tar.gz", hash = "sha256:5fe5924509248b1aea5c890f8887c6a7759f7c8b1ebc0490e42c247c4f7c1e34", size = 22972, upload-time = "2025-01-07T12:21:53.896Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/5f/62fdb048f84d19e2123b6bbd722fe09c8c79b4964c50094d1e979db808e2/cut_cross_entropy-25.1.1-py3-none-any.whl", hash = "sha256:e46f26d348f6a67927d17e65c5a212e795be13dcad5b10a77a200d6b8102d9d1", size = 22672, upload-time = "2025-01-07T12:21:51.678Z" }, +] + +[[package]] +name = "datasets" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, + { name = "filelock" }, + { name = "fsspec", extra = ["http"] }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "multiprocess" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or python_full_version >= '3.14'" }, + { name = "pandas", version = "3.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "pyarrow" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/47/325206ac160f7699ed9f1798afa8f8f8d5189b03bf3815654859ac1d5cba/datasets-4.3.0.tar.gz", hash = "sha256:bc9118ed9afd92346c5be7ed3aaa00177eb907c25467f9d072a0d22777efbd2b", size = 582801, upload-time = "2025-10-23T16:31:51.547Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/51/409a8184ed35453d9cbb3d6b20d524b1115c2c2d117b85d5e9b06cd70b45/datasets-4.3.0-py3-none-any.whl", hash = "sha256:0ea157e72138b3ca6c7d2415f19a164ecf7d4c4fa72da2a570da286882e96903", size = 506846, upload-time = "2025-10-23T16:31:49.965Z" }, +] + +[[package]] +name = "depyf" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "astor" }, + { name = "dill" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/88/35/83fb0178212279aa0af031031905804c6de5618435d229f41ed21bb9ad2c/depyf-0.20.0.tar.gz", hash = "sha256:fb7683bd72c44f67b56029df2c47721e9a02ffa4d7b19095f1c54c4ebf797a98", size = 6168761, upload-time = "2025-10-13T12:33:38.589Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/65/4df6936130b56e1429114e663e7c1576cf845f3aef1b2dd200c0a5d19dba/depyf-0.20.0-py3-none-any.whl", hash = "sha256:d31effad4261cebecb58955d832e448ace88f432328f95f82fd99c30fd9308d4", size = 39381, upload-time = "2025-10-13T12:33:33.647Z" }, +] + +[[package]] +name = "diffusers" +version = "0.37.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "importlib-metadata" }, + { name = "numpy" }, + { name = "pillow" }, + { name = "regex" }, + { name = "requests" }, + { name = "safetensors" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/5c/f4c2eb8d481fe8784a7e2331fbaab820079c06676185fa6d2177b386d590/diffusers-0.37.1.tar.gz", hash = "sha256:2346c21f77f835f273b7aacbaada1c34a596a3a2cc6ddc99d149efcd0ec298fa", size = 4135139, upload-time = "2026-03-25T08:04:04.515Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/dd/51c38785ce5e1c287b5ad17ba550edaaaffce0deb0da4857019c6700fbaf/diffusers-0.37.1-py3-none-any.whl", hash = "sha256:0537c0b28cb53cf39d6195489bcf8f833986df556c10f5e28ab7427b86fc8b90", size = 5001536, upload-time = "2026-03-25T08:04:02.385Z" }, +] + +[[package]] +name = "dill" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", size = 186976, upload-time = "2025-04-16T00:41:48.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668, upload-time = "2025-04-16T00:41:47.671Z" }, +] + +[[package]] +name = "diskcache" +version = "5.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload-time = "2023-08-31T06:12:00.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" }, +] + +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "docstring-parser" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/9d/c3b43da9515bd270df0f80548d9944e389870713cc1fe2b8fb35fe2bcefd/docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912", size = 27442, upload-time = "2025-07-21T07:35:01.868Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708", size = 36896, upload-time = "2025-07-21T07:35:00.684Z" }, +] + +[[package]] +name = "dspy" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "asyncer" }, + { name = "cachetools" }, + { name = "cloudpickle" }, + { name = "diskcache" }, + { name = "gepa" }, + { name = "json-repair" }, + { name = "litellm" }, + { name = "numpy" }, + { name = "openai" }, + { name = "optuna" }, + { name = "orjson" }, + { name = "pydantic" }, + { name = "regex" }, + { name = "requests" }, + { name = "tenacity" }, + { name = "tqdm" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/06/1b693d28a08e7a8b9ea17641259a73760de111ce0187cdcf030148a42ec1/dspy-3.1.3.tar.gz", hash = "sha256:e2fd9edc8678e0abcacd5d7b901f37b84a9f48a3c50718fc7fee95a492796019", size = 261178, upload-time = "2026-02-05T16:24:18.489Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/83/2432c2f987e738e4c15dfa3497daa5811a145facf4525bebcb9d240736db/dspy-3.1.3-py3-none-any.whl", hash = "sha256:26f983372ebb284324cc2162458f7bce509ef5ef7b48be4c9f490fa06ea73e37", size = 312353, upload-time = "2026-02-05T16:24:16.753Z" }, +] + +[[package]] +name = "durationpy" +version = "0.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/a4/e44218c2b394e31a6dd0d6b095c4e1f32d0be54c2a4b250032d717647bab/durationpy-0.10.tar.gz", hash = "sha256:1fa6893409a6e739c9c72334fc65cca1f355dbdd93405d30f726deb5bde42fba", size = 3335, upload-time = "2025-05-17T13:52:37.26Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/0d/9feae160378a3553fa9a339b0e9c1a048e147a4127210e286ef18b730f03/durationpy-0.10-py3-none-any.whl", hash = "sha256:3b41e1b601234296b4fb368338fdcd3e13e0b4fb5b67345948f4f2bf9868b286", size = 3922, upload-time = "2025-05-17T13:52:36.463Z" }, +] + +[[package]] +name = "einops" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/77/850bef8d72ffb9219f0b1aac23fbc1bf7d038ee6ea666f331fa273031aa2/einops-0.8.2.tar.gz", hash = "sha256:609da665570e5e265e27283aab09e7f279ade90c4f01bcfca111f3d3e13f2827", size = 56261, upload-time = "2026-01-26T04:13:17.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/09/f8d8f8f31e4483c10a906437b4ce31bdf3d6d417b73fe33f1a8b59e34228/einops-0.8.2-py3-none-any.whl", hash = "sha256:54058201ac7087911181bfec4af6091bb59380360f069276601256a76af08193", size = 65638, upload-time = "2026-01-26T04:13:18.546Z" }, +] + +[[package]] +name = "email-validator" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "fastapi" +version = "0.135.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f7/e6/7adb4c5fa231e82c35b8f5741a9f2d055f520c29af5546fd70d3e8e1cd2e/fastapi-0.135.3.tar.gz", hash = "sha256:bd6d7caf1a2bdd8d676843cdcd2287729572a1ef524fc4d65c17ae002a1be654", size = 396524, upload-time = "2026-04-01T16:23:58.188Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/a4/5caa2de7f917a04ada20018eccf60d6cc6145b0199d55ca3711b0fc08312/fastapi-0.135.3-py3-none-any.whl", hash = "sha256:9b0f590c813acd13d0ab43dd8494138eb58e484bfac405db1f3187cfc5810d98", size = 117734, upload-time = "2026-04-01T16:23:59.328Z" }, +] + +[package.optional-dependencies] +standard = [ + { name = "email-validator" }, + { name = "fastapi-cli", extra = ["standard"] }, + { name = "httpx" }, + { name = "jinja2" }, + { name = "pydantic-extra-types" }, + { name = "pydantic-settings" }, + { name = "python-multipart" }, + { name = "uvicorn", extra = ["standard"] }, +] + +[[package]] +name = "fastapi-cli" +version = "0.0.24" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "rich-toolkit" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typer" }, + { name = "uvicorn", extra = ["standard"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/58/74797ae9e4610cfa0c6b34c8309096d3b20bb29be3b8b5fbf1004d10fa5f/fastapi_cli-0.0.24.tar.gz", hash = "sha256:1afc9c9e21d7ebc8a3ca5e31790cd8d837742be7e4f8b9236e99cb3451f0de00", size = 19043, upload-time = "2026-02-24T10:45:10.476Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/4b/68f9fe268e535d79c76910519530026a4f994ce07189ac0dded45c6af825/fastapi_cli-0.0.24-py3-none-any.whl", hash = "sha256:4a1f78ed798f106b4fee85ca93b85d8fe33c0a3570f775964d37edb80b8f0edc", size = 12304, upload-time = "2026-02-24T10:45:09.552Z" }, +] + +[package.optional-dependencies] +standard = [ + { name = "fastapi-cloud-cli" }, + { name = "uvicorn", extra = ["standard"] }, +] + +[[package]] +name = "fastapi-cloud-cli" +version = "0.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastar" }, + { name = "httpx" }, + { name = "pydantic", extra = ["email"] }, + { name = "rich-toolkit" }, + { name = "rignore" }, + { name = "sentry-sdk" }, + { name = "typer" }, + { name = "uvicorn", extra = ["standard"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/70/ca14fae57a221610d3e2e3dfad2b6e97ee31fcafaa36f90a2158d57e9a73/fastapi_cloud_cli-0.16.1.tar.gz", hash = "sha256:33b552c4ad46cd33823ef53f93b8b7813db2306c80c1cbcfa4d72067c99b26ab", size = 46193, upload-time = "2026-04-08T09:12:54.151Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/8b/f8c9eb116d2e89de5e0875c5fce90f23143410f41fe27725be04bdcec328/fastapi_cloud_cli-0.16.1-py3-none-any.whl", hash = "sha256:8b43bd8c7dd3710393d3be4c248c6a00807202b488a543716562529a8316cbee", size = 33212, upload-time = "2026-04-08T09:12:52.949Z" }, +] + +[[package]] +name = "fastar" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/0f/0aeb3fc50046617702acc0078b277b58367fd62eb727b9ec733ae0e8bbcc/fastar-0.11.0.tar.gz", hash = "sha256:aa7f100f7313c03fdb20f1385927ba95671071ba308ad0c1763fef295e1895ce", size = 70238, upload-time = "2026-04-13T17:11:17.143Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/4a/0d79fe52243a4130aa41d0a3a9eea22e00427db761e1a6782ee817c50222/fastar-0.11.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e7c906ad371ca365591ebcb7630009923f3eceb20956814494d15591a78e9e46", size = 709786, upload-time = "2026-04-13T17:09:53.974Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e4/77c94eaafc035e39f5ce5176e32743da4e3fe890f28790e708e53d8f75cd/fastar-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6919497b35fa5bd978d2c26ee117cf1771b90ee5073f7518e44b9bc364b57715", size = 632127, upload-time = "2026-04-13T17:09:39.023Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f6/97658dd992f4e45747d35adb24c0b100f6b6d451490685ae3fe8a3a2ee1b/fastar-0.11.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:56b50206aeedd99e22b83289e6fb3ff8f7d7da4407d2419902e4716b4f90585a", size = 869608, upload-time = "2026-04-13T17:09:08.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/fc/81c1ec4d8146a437399e7b95631b51be312f323a9ce64569f932db6c3914/fastar-0.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a1811a69ae81d469720df0c8af3f84f834a93b5e4f8be0e0e8bde6a52fa11f2", size = 762925, upload-time = "2026-04-13T17:07:52.788Z" }, + { url = "https://files.pythonhosted.org/packages/b9/35/49baf480ecb197aea7ce2515c503a2f25061958dd3b4c98e98a3a11cdcc7/fastar-0.11.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10486238c55589a3947c38f9cfb88a67d8a608eb8dddc722038237d0278a41d7", size = 759913, upload-time = "2026-04-13T17:08:07.324Z" }, + { url = "https://files.pythonhosted.org/packages/94/eb/946f1980267f2824efb7d7c518d47a49b89c0e9cd7c449301f5a7531558a/fastar-0.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1555ef9992d368a6ec39092276990cef8d329c39a1d86ebd847eaa3b10efd472", size = 926054, upload-time = "2026-04-13T17:08:22.196Z" }, + { url = "https://files.pythonhosted.org/packages/0c/19/d5eb611085ce054382570d8d4e24a5e2ff23cd6d2404528a6643841d6059/fastar-0.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1f4aca0a9620b76988bbf6225cdea6678a392902444ca18bb8a51495b165a89", size = 818594, upload-time = "2026-04-13T17:08:52.366Z" }, + { url = "https://files.pythonhosted.org/packages/4a/52/18e8d55c0d3d917713f381cb2d0cb793da00c209c802e011d8dc72018cd5/fastar-0.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75beeecac7d11a666a6c4a0b7f7e80842ae5cf523f2f890b99c78fc82b403545", size = 823005, upload-time = "2026-04-13T17:09:23.051Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b4/0fecdcf33e5aaffe777b96a1c10a3204fe0b05bf18e971033a0bfedafc1c/fastar-0.11.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a08cdf5d16daa401c65c9c7493a18db7dc515c52155a17071ec7098bb07da9d3", size = 887115, upload-time = "2026-04-13T17:08:37.385Z" }, + { url = "https://files.pythonhosted.org/packages/08/f8/2a6ad1c2523eb72a4595a9331162fc67ce0f0aee3348728598026c516986/fastar-0.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6e210375e5a7ba53586cbd6017aa417d2d2ceacbe8671682470281bd0a15e8ef", size = 973595, upload-time = "2026-04-13T17:10:09.258Z" }, + { url = "https://files.pythonhosted.org/packages/5c/a6/2aa48843228673feacc2b80876b8924e63ea9c5f5f607bd7a72416b86bae/fastar-0.11.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a2988eb2604b8e15670f355425e8c800e4dcd4edfbcbfe194397f8f17b7eb19e", size = 1036988, upload-time = "2026-04-13T17:10:26.133Z" }, + { url = "https://files.pythonhosted.org/packages/92/ac/3dd14b21c323e8484f47c910110d1d93139ba44621ac2c4c597dbe9fcdb7/fastar-0.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34abc857b46068fdf91d157bd0203bfd6791dc7a432d1ed180f5af6c2f5bcce9", size = 1078267, upload-time = "2026-04-13T17:10:43.645Z" }, + { url = "https://files.pythonhosted.org/packages/de/a1/3f89e58d6fa99160c9e7e17220c8ab5040b5cc017c4fac2356c6ed18453d/fastar-0.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0d884be84e37a01053776395441fc960031974e0265801ce574efc3d05e0cdaf", size = 1032551, upload-time = "2026-04-13T17:11:00.667Z" }, + { url = "https://files.pythonhosted.org/packages/f6/ea/24dd3cfc2096933d7d2a80c926e79602cff1fa481124ed2165b60c1dd9ef/fastar-0.11.0-cp310-cp310-win32.whl", hash = "sha256:c721c1ad758e3e4c2c1fd9e96911a0fa58c0a6be5668f1bcfd0b741e72c7cb63", size = 456022, upload-time = "2026-04-13T17:11:41.859Z" }, + { url = "https://files.pythonhosted.org/packages/82/ef/6eb39ee9cdd59822d1c7337c4d28fdc948885bdf455af9e70efa9879e06f/fastar-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:ba4180b7c3080f55f9035fdd7d8c39fe0e1485087a68ff615bb4784a10b8106b", size = 488392, upload-time = "2026-04-13T17:11:27.486Z" }, + { url = "https://files.pythonhosted.org/packages/11/7a/fb367bdaf4efa2c7952a45aeab2e87a564293ecffe150af673ec8edfda46/fastar-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b82fd6f996e65a86f67a6bd64dd22ef3e8ae2dcaed0ae3b550e71f7e1bbb1df5", size = 709869, upload-time = "2026-04-13T17:09:55.62Z" }, + { url = "https://files.pythonhosted.org/packages/80/ff/b87efb0dcfd081c62c7c7601d7681dabe63103cd51fc16f8d57a1ab45961/fastar-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27eed386fd0558e6daa29211111bbd7b740f7c7e881197f8a00ac7c0f3cdb1d7", size = 631668, upload-time = "2026-04-13T17:09:40.537Z" }, + { url = "https://files.pythonhosted.org/packages/24/7c/0ed6dd38b9adc04b3a8ec3b7045908e7c2170ba0ff6e6d2c51bc9fc770f3/fastar-0.11.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a6931bebc1d8e95ddeef55732c195449e6b44ef33aa31b325505097ed3b4d6aa", size = 869663, upload-time = "2026-04-13T17:09:09.78Z" }, + { url = "https://files.pythonhosted.org/packages/58/ce/8b7fb3f23855accebaaf2d2637eac7f261a7a5d936f861a172079f1ef511/fastar-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f72ce42a5e28a74fbd4d5fbf1a3ac1a1163d13cbc200cbd005fb0fabc54bd", size = 762938, upload-time = "2026-04-13T17:07:54.51Z" }, + { url = "https://files.pythonhosted.org/packages/07/cc/5491e2b677bb841f768e3aba052d0344338a5c78aa5d4c18b443831a8e8d/fastar-0.11.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5b83c1f61f7017d6e1498568038f8745440cfc16ca2f697ec81bac83050108f6", size = 759232, upload-time = "2026-04-13T17:08:08.864Z" }, + { url = "https://files.pythonhosted.org/packages/4e/b7/643630bdbd179e41e9fae31c03b4cf6061dbf4d6fbbae8425d16eb12545d/fastar-0.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db73a9b765a516e73983b25341e7b5e0189733878279e278b2295131b0e3a21e", size = 926271, upload-time = "2026-04-13T17:08:23.68Z" }, + { url = "https://files.pythonhosted.org/packages/09/5d/37ade50003b4540e0a53ef100f6692d7ab2ac1122d5acf39920cc09a3e8b/fastar-0.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:625827d52eb4e8fec942e0233f125ff8010fcf6a67c0a974a8e5f4666b771e3c", size = 818634, upload-time = "2026-04-13T17:08:54.268Z" }, + { url = "https://files.pythonhosted.org/packages/c3/ff/135d177de32cc1e837c99019e4643e6e79352bde49544d4ece5b5eebf56b/fastar-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7f5fd8fa21ec0a88296a38dc5d7fc35efd3b26d46a17b8b7c73c5563925ca15", size = 822755, upload-time = "2026-04-13T17:09:25.01Z" }, + { url = "https://files.pythonhosted.org/packages/27/cb/b835dbe76ceac7fa6105851468c259ffd06830eb9c029402e499d0ec153b/fastar-0.11.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8c15af91b8cd87ddf23ea55355ae513c1de3ab67178f26dad017c9e9c0af6096", size = 887101, upload-time = "2026-04-13T17:08:39.248Z" }, + { url = "https://files.pythonhosted.org/packages/9e/54/aa8289eb57fc550535470397cb051f5a58a7c89ca4de31d5502b916dd894/fastar-0.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:03a112395a8b0bff251423bd1564c012f0cc058ad8b6bd8fba96f3d7fc117e44", size = 973606, upload-time = "2026-04-13T17:10:10.98Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fd/776d50a0897c01dc6bfd0926772ee913436fdae91b9affaf0a0cbd09f0a1/fastar-0.11.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f2994bb8f5f8c11eb12beae1e6e77a907173c9819236b8a4c8f0573652ceccce", size = 1036696, upload-time = "2026-04-13T17:10:28.502Z" }, + { url = "https://files.pythonhosted.org/packages/c8/f1/cf0f9b499fb37ac065c8a01ec642f96a3c5eb849c38ae983b59f3b3245e0/fastar-0.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dcf99e4b5973d842c7f19c776c3a83cdc0977d505edce6206438505c0456b517", size = 1078182, upload-time = "2026-04-13T17:10:45.318Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9e/21e4701aec4a1123d4dc4d31578dc18875582b5710e4725f7ceb752a248b/fastar-0.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29c9c386dc0d5dda78845a8e6b1480d26ab861c1e0b68f42ae5735cb70ca07f1", size = 1032336, upload-time = "2026-04-13T17:11:02.364Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/5872b28c72c27ec1a00760eace6ff35f714f41ebbd5208cf016b12e29250/fastar-0.11.0-cp311-cp311-win32.whl", hash = "sha256:030b2580fc394f2c9b7890b6735810404e9b9ed5e0344db150b945965b5482b7", size = 457368, upload-time = "2026-04-13T17:11:43.528Z" }, + { url = "https://files.pythonhosted.org/packages/fd/6e/ce6832a16193eb4466f4108be8809c249b51cb1f89dd7894545700d079d5/fastar-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:83ab57ae067969cd0b483ac3b6dccc4b595fc77f5c820760998648d4c42822b5", size = 488605, upload-time = "2026-04-13T17:11:29.161Z" }, + { url = "https://files.pythonhosted.org/packages/15/5a/9cfb80661cf38fd7b0889224beb7d2746784d4ade2a931ed9775a18d8602/fastar-0.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:27b1a4cee2298b704de8151d310462ee7335ed036011ca9aa6e784b30b6c73a9", size = 464580, upload-time = "2026-04-13T17:11:18.583Z" }, + { url = "https://files.pythonhosted.org/packages/0f/06/a5773706afc8bd496769786590bbc56d2d0ee419a299cc12ea3f5717fcf3/fastar-0.11.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3c51f1c2cdddbd1420d2897ace7738e36c65e17f6ae84e0bfe763f8d1068bb97", size = 708394, upload-time = "2026-04-13T17:09:57.269Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a6/d5e2a4e48495616440a21eed07558219ca90243ad00b0502586f95bd4833/fastar-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0d9d6b052baf5380baea866675dab6ccd04ec2460d12b1c46f10ce3f4ee6a820", size = 628417, upload-time = "2026-04-13T17:09:42.145Z" }, + { url = "https://files.pythonhosted.org/packages/ab/69/9816d69ac8265c9e50456637a487ccfb7a9c566efd9dbcd673df9c2558c2/fastar-0.11.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bd2f05666d4df7e14885b5c38fefd92a785917387513d33d837ff42ec143a22f", size = 863950, upload-time = "2026-04-13T17:09:11.506Z" }, + { url = "https://files.pythonhosted.org/packages/5b/0d/f88daad53aff2e754b6b5ff2a7113f72447a34f6ef17cc23ca99988117b7/fastar-0.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1e6e74aba1ae77ca4aedcaf1697cd413319f4c88a5ccbe5b42c709517c5097e", size = 760737, upload-time = "2026-04-13T17:07:55.958Z" }, + { url = "https://files.pythonhosted.org/packages/2f/a6/82ef4ecd969d50d92ed3ed9dbd8fe77faa24be5e5736f716edc9f4ce8d62/fastar-0.11.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38ef77fe940bbc9b37a98bd838727f844b11731cd39358a2640ff864fb385086", size = 757603, upload-time = "2026-04-13T17:08:10.623Z" }, + { url = "https://files.pythonhosted.org/packages/03/35/50249f0d827251f8ac511495e2eacccebda80a00a0ad73e9615b8113b84f/fastar-0.11.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8955e61b32d6aff82c983217abf80933fd823b0e727586fc72f08043d996fd59", size = 923952, upload-time = "2026-04-13T17:08:25.526Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d8/faee41659e9c379d906d24eaee6d6833ac8cfef0a5df480e5c2a8d3efb33/fastar-0.11.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:483532442cdb08fbff0169510224eae0836f2f672cea6aacb52847d90fefdc46", size = 816574, upload-time = "2026-04-13T17:08:56.076Z" }, + { url = "https://files.pythonhosted.org/packages/22/47/0448ea7992b997dad2bf004bfd98eca74b5858630eae080b50c7b17d9ddc/fastar-0.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef5a6071121e05d8287fc75bccb054bcbac8bb0501200a0c0a8feeace5303ea4", size = 819382, upload-time = "2026-04-13T17:09:26.66Z" }, + { url = "https://files.pythonhosted.org/packages/33/ef/0d63eb43586831b7a6f8b22c4d77125a7c594423af1f4f090fa9541b9b40/fastar-0.11.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:e45e598af5afe8412197d4786efd6cf29be02e7d3d4f6a3461149eae5d7e94f1", size = 885254, upload-time = "2026-04-13T17:08:40.9Z" }, + { url = "https://files.pythonhosted.org/packages/01/25/edd584675d69e49a165052c3ee886df1c5d574f3e7d813c990306387c623/fastar-0.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2e160919b1c47ddb8538e7e8eb4cd527281b40f0bf75110a75993838ef61f286", size = 971239, upload-time = "2026-04-13T17:10:12.997Z" }, + { url = "https://files.pythonhosted.org/packages/a5/37/e8bb24f506ba2b08fbaf36c5800e843bd4d542954e9331f00418e2d23349/fastar-0.11.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4bb4dc0fc8f7a6807febcebce8a2f3626ba4955a9263d81ecc630aad83be84c0", size = 1035185, upload-time = "2026-04-13T17:10:30.207Z" }, + { url = "https://files.pythonhosted.org/packages/9a/bf/be753736296338149ee4cb3e92e2b5423d6ba17c7b951d15218fd7e99bbf/fastar-0.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4ec95af56aa173f6e320e1183001bf108ba59beaf13edd1fc8200648db203588", size = 1072191, upload-time = "2026-04-13T17:10:47.072Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cd/a81c1aaafb5a22ce57c98ae22f39c89413ed53e4ee6e1b1444b0bd666a6c/fastar-0.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:136cf342735464091c39dc3708168f9fdeb9ebea40b1ead937c61afaf46143d9", size = 1028054, upload-time = "2026-04-13T17:11:04.293Z" }, + { url = "https://files.pythonhosted.org/packages/ec/88/1ce4eed3d70627c95f49ca017f6bbbf2ddcc4b0c601d293259de7689bc20/fastar-0.11.0-cp312-cp312-win32.whl", hash = "sha256:35f23c11b556cc4d3704587faacbc0037f7bdf6c4525cd1d09c70bda4b1c6809", size = 454198, upload-time = "2026-04-13T17:11:45.168Z" }, + { url = "https://files.pythonhosted.org/packages/8f/1d/26ce92f4331cd61a69840db9ca6115829805eec24f285481a854f578e917/fastar-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:920bc56c3c0b8a8ca492904941d1883c1c947c858cd93343356c29122a38f44c", size = 486697, upload-time = "2026-04-13T17:11:31.084Z" }, + { url = "https://files.pythonhosted.org/packages/ed/96/e6eda4480559c69b05d466e7b5ea9170e81fef3795a73e059959a3258319/fastar-0.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:395248faf89e8a6bd5dc1fd544c8465113b627cb6d7c8b296796b60ebea33593", size = 462591, upload-time = "2026-04-13T17:11:20.577Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d6/3be260037e86fb694e88d47f583bac3a0188c99cee1a6b257ac26cb6b53c/fastar-0.11.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:33f544b08b4541b678e53749b4552a44720d96761fb79c172b005b1089c443ed", size = 707975, upload-time = "2026-04-13T17:09:58.866Z" }, + { url = "https://files.pythonhosted.org/packages/e1/cd/7867aefb1784662554a335f2952c75a50f0c70585ed0d2210d6cc15e5627/fastar-0.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:91c1c792447e4a642745f347ff9847c52af39633071c57ee67ed53c157fc3506", size = 628460, upload-time = "2026-04-13T17:09:43.776Z" }, + { url = "https://files.pythonhosted.org/packages/e5/2b/d11d84bdd5e0e377771b955755771e3460b290da5809cb78c1b735ee2228/fastar-0.11.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:881247e6b6eaea59fc6569f9b61447aa6b9fc2ee864e048b4643d69c52745805", size = 863054, upload-time = "2026-04-13T17:09:13.048Z" }, + { url = "https://files.pythonhosted.org/packages/25/39/d3f428b318fa940b1b6e785b8d54fc895dfb5d5b945ef8d5442ffa904fb2/fastar-0.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:863b7929845c9fec92ef6c8d59579cf46af5136655e5342f8df5cebe46cab06c", size = 760247, upload-time = "2026-04-13T17:07:57.396Z" }, + { url = "https://files.pythonhosted.org/packages/9e/04/03949aee82aabb8ede06ac5a4a5579ffaf98a8fe59ce958494508ff15513/fastar-0.11.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:96b4a57df12bf3211662627a3ea29d62ecb314a2434a0d0843f9fc23e47536e5", size = 756512, upload-time = "2026-04-13T17:08:12.415Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0c/2ca1ae0a3828ca51047962d932b80daca2522db73e8cb9d040cb6ebe28d5/fastar-0.11.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceef1c2c4df7b7b8ebd3f5d718bbf457b9bbdf25ce0bd07870211ec4fbd9aff4", size = 922183, upload-time = "2026-04-13T17:08:27.187Z" }, + { url = "https://files.pythonhosted.org/packages/65/68/7fe808b1f73a68e686f25434f538c6dc10ef4dfb3db0ace22cd861744bf8/fastar-0.11.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8e545918441910a779659d4759ad0eef349e935fbdb4668a666d3681567eb05", size = 816394, upload-time = "2026-04-13T17:08:57.657Z" }, + { url = "https://files.pythonhosted.org/packages/1f/17/07d086080f8a83b8d7966955e29bcdbd6a060f5bd949dc9d5abd3658cead/fastar-0.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28095bb8f821e85fc2764e1a55f03e5e2876dee2abe7cd0ee9420d929905d643", size = 818983, upload-time = "2026-04-13T17:09:28.46Z" }, + { url = "https://files.pythonhosted.org/packages/fb/e2/2c4edf0910af2e814ff6d65b77a91196d472ca8a9fb2033bd983f6856caa/fastar-0.11.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0fafb95ecbe70f666a5e9b35dd63974ccdc9bb3d99ccdbd4014a823ec3e659b5", size = 884689, upload-time = "2026-04-13T17:08:42.763Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ba/04fdcbd6558e60de4ced3b55230fac47675d181252582b2fcec3c74608e5/fastar-0.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:af48fed039b94016629dcdad1c95c90c486326dd068de2b0a4df419ee09b6821", size = 970677, upload-time = "2026-04-13T17:10:15.124Z" }, + { url = "https://files.pythonhosted.org/packages/df/b3/2b860a9658550167dbd5824c85e88d0b4b912bf493e42a6322544d6e483d/fastar-0.11.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:74cd96163f39b8638ab4e8d49708ca887959672a22871d8170d01f067319533b", size = 1034026, upload-time = "2026-04-13T17:10:32.318Z" }, + { url = "https://files.pythonhosted.org/packages/b7/9b/fa42ea1188b144bac4b1b60753dfd449974a4d5eda132029ee7711569f94/fastar-0.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4e8b993cb5613bab495ed482810bedc0986633fcb9a3b55c37ec88e0d6714f6a", size = 1071147, upload-time = "2026-04-13T17:10:48.833Z" }, + { url = "https://files.pythonhosted.org/packages/95/c8/d2e501556dca9f1fbc9246111a31792fb49ad908fa4927f34938a97a3604/fastar-0.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfe39d91fc28e37e06162d94afe01050220edb7df554acb5b702b5503e564816", size = 1028377, upload-time = "2026-04-13T17:11:06.374Z" }, + { url = "https://files.pythonhosted.org/packages/db/33/5f11f23eca0a569cd052507bc45dda2e5468697f8665728d25be44120f7d/fastar-0.11.0-cp313-cp313-win32.whl", hash = "sha256:c5f63d4d99ff4bfb37c659982ec413358bdee747005348756cc50a04d412d989", size = 454089, upload-time = "2026-04-13T17:11:46.821Z" }, + { url = "https://files.pythonhosted.org/packages/da/2f/35ff03c939cba7a255a9132367873fec6c355fd06a7f84fedcbaf4c8129f/fastar-0.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:8690ed1928d31ded3ada308e1086525fb3871f5fa81e1b69601a3f7774004583", size = 486312, upload-time = "2026-04-13T17:11:32.86Z" }, + { url = "https://files.pythonhosted.org/packages/ef/71/ee9246cbfcbfd4144558f35e7e9a306ffe0a7564730a5188c45f21d2dab8/fastar-0.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:d977ded9d98a0719a305e0a4d5ee811f1d3e856d853a50acb8ae833c3cd6d5d2", size = 461975, upload-time = "2026-04-13T17:11:22.589Z" }, + { url = "https://files.pythonhosted.org/packages/7a/cd/3644c48ecac456f928c12d47ec3bed36c36555b17c3859856f1ff860265d/fastar-0.11.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:71375bd6f03c2a43eb47bd949ea38ff45434917f9cdac79675c5b9f60de4fa73", size = 707860, upload-time = "2026-04-13T17:10:00.371Z" }, + { url = "https://files.pythonhosted.org/packages/69/ca/dee04476ae3626b2b040a60ad84628f77e1ffd8444232f2426b0ca1e0d7e/fastar-0.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:eddfd9cab16e19ae247fe44bf992cb403ccfe27d3931d6de29a4695d95ad386c", size = 628216, upload-time = "2026-04-13T17:09:45.355Z" }, + { url = "https://files.pythonhosted.org/packages/dc/5e/9395c7353d079cb4f5be0f7982ce0dc9f2e7dec5fd175eef466729d6023a/fastar-0.11.0-cp314-cp314-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c371f1d4386c699018bb64eb2fa785feacf32785559049d2bb72fe4af023f53", size = 864378, upload-time = "2026-04-13T17:09:14.611Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ba/1e4f67148223ff219612b6281a6000357abbcc2417964fa5c83f11d68fce/fastar-0.11.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cad7fa41e3e66554387481c1a09365e4638becd322904932674159d5f4046728", size = 760921, upload-time = "2026-04-13T17:07:59.138Z" }, + { url = "https://files.pythonhosted.org/packages/0f/82/09d11fb6d12f17993ffaf32ffd30c3c121a11e2966e84f19fb6f66430118/fastar-0.11.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf36652fa71b83761717c9899b98732498f8a2cb6327ff16bbf07f6be85c3437", size = 757012, upload-time = "2026-04-13T17:08:14.186Z" }, + { url = "https://files.pythonhosted.org/packages/52/1f/5aeeacc4cb65615e2c9292cd9c5b0cd6fb6d2e6ee472ca6adc6c1b1b22ef/fastar-0.11.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f68ff8c17833053da4841720e95edde80ce45bb994b6b7d51418dddaac70ee47", size = 924510, upload-time = "2026-04-13T17:08:28.741Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1a/1e5bdabbeaf2e856928956292609f2ff6a650f94480fb8afaca30229e483/fastar-0.11.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4563ed37a12ea1cdc398af8571258d24b988bf342b7b3bf5451bd5891243280c", size = 816602, upload-time = "2026-04-13T17:08:59.461Z" }, + { url = "https://files.pythonhosted.org/packages/87/24/f960147910da3bed41a3adfcb026e17d5f50f4cf467a3324237a7088f61a/fastar-0.11.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cee63c9875cba3b70dc44338c560facc5d6e763047dcc4a30501f9a68cf5f890", size = 819452, upload-time = "2026-04-13T17:09:29.926Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f4/3e77d7901d5707fd7f8a352e153c8ae09ea974e6fabad0b7c4eb9944b8d4/fastar-0.11.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:bd76bfffae6d0a91f4ac4a612f721e7aec108db97dccdd120ae063cd66959f27", size = 885254, upload-time = "2026-04-13T17:08:44.285Z" }, + { url = "https://files.pythonhosted.org/packages/47/01/1585edd5ec47782ae93cd94edf05828e0ab02ef00aec00aea4194a600464/fastar-0.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f5b707501ec01c1bc0518f741f01d322e50c9adc19a451aa24f67a2316e9397", size = 971496, upload-time = "2026-04-13T17:10:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e9/6874c9d1236ded565a0bed54b320ac9f165f287b1d89490fb70f9f323c81/fastar-0.11.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:37c0b5a88a657839aad98b0a6c9e4ac4c2c15d6b49c44ee3935c6b08e9d3e479", size = 1034685, upload-time = "2026-04-13T17:10:34.063Z" }, + { url = "https://files.pythonhosted.org/packages/14/d8/4ab20613ce2983427aee958e39be878dba874aa227c530a845e32429c4f6/fastar-0.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:6c55f536c62a6efb180c1af0d5182948bff576bbfe6276e8e1359c9c7d2215d8", size = 1072675, upload-time = "2026-04-13T17:10:50.53Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ae/5ac3b7c20ce4b08f011dd2b979f96caabe64f9b10b157f211ea91bdfadca/fastar-0.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3082eeca59e189b9039335862f4c2780c0c8871d656bfdf559db4414a105b251", size = 1029330, upload-time = "2026-04-13T17:11:08.138Z" }, + { url = "https://files.pythonhosted.org/packages/8a/e7/37cd6a1d4e288292170b64e19d79ecce2a7de8bb76790323399a2abc4619/fastar-0.11.0-cp314-cp314-win32.whl", hash = "sha256:b201a0a4e29f9fec2a177e13154b8725ec65ab9f83bd6415483efaa2aa18344b", size = 453940, upload-time = "2026-04-13T17:11:48.713Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1c/795c878b1ee29d79021cf8ed81f18f2b25ccde58453b0d34b9bdc7e025ea/fastar-0.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:868fddb26072a43e870a8819134b9f80ee602931be5a76e6fb873e04da343637", size = 486334, upload-time = "2026-04-13T17:11:34.882Z" }, + { url = "https://files.pythonhosted.org/packages/ff/a4/113f104301df8bddcc0b3775b611a30cb7610baa3add933c7ccac9386467/fastar-0.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:3db39c9cc42abb0c780a26b299f24dfbc8be455985e969e15336d70d7b2f833b", size = 461534, upload-time = "2026-04-13T17:11:24.329Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a6/5c5f2c2c8e0c63e56a5636ebc7721589c889e94c0092cec7eb28ae7207e6/fastar-0.11.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:49c3299dec5e125e7ebaa27545714da9c7391777366015427e0ae62d548b442b", size = 707156, upload-time = "2026-04-13T17:10:02.176Z" }, + { url = "https://files.pythonhosted.org/packages/df/f7/982c01b61f0fc135ad2b16d01e6d0ee53cf8791e68827f5f7c5a65b2e5b1/fastar-0.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3328ed1ed56d31f5198350b17dd60449b8d6b9d47abb4688bab6aef4450a165b", size = 627032, upload-time = "2026-04-13T17:09:46.978Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c3/38f1dac77ae0c71c37b176277c96d830796b8ce2fe69705f917829b53829/fastar-0.11.0-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bd3eca3bbfec84a614bcb4143b4ad4f784d0895babc26cfc88436af88ca23c7a", size = 864403, upload-time = "2026-04-13T17:09:16.58Z" }, + { url = "https://files.pythonhosted.org/packages/6e/f0/e69c363bdb3e5a5848e937b662b5469581ee6682c51bc1c0556494773929/fastar-0.11.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff86a967acb0d621dd24063dda090daa67bf4993b9570e97fe156de88a9006ca", size = 759480, upload-time = "2026-04-13T17:08:00.599Z" }, + { url = "https://files.pythonhosted.org/packages/3b/29/4d8737590c2a6357d614d7cc7288e8f68e7e449680b8922997cc4349e65e/fastar-0.11.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:86eaf7c0e985d93a7734168be2fb232b2a8cca53e41431c2782d7c12b12c03b1", size = 756219, upload-time = "2026-04-13T17:08:15.699Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ec/400de7b3b7d48801908f19cf5462177104395799472671b3e8152b2b04ca/fastar-0.11.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91f07b0b8eb67e2f177733a1f884edad7dfb9f8977ffef15927b20cb9604027d", size = 923669, upload-time = "2026-04-13T17:08:30.574Z" }, + { url = "https://files.pythonhosted.org/packages/5d/01/8926c53da923fed7ab4b96e7fbf7f73b663beb4f02095b654d6fab46f9ad/fastar-0.11.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f85c896885eb4abf1a635d54dea22cac6ae48d04fc2ea26ae652fcf1febe1220", size = 815729, upload-time = "2026-04-13T17:09:01.204Z" }, + { url = "https://files.pythonhosted.org/packages/89/f0/5fef4c7946e352651b504b1a4235dac3505e7cfd24020788ab50552e84bf/fastar-0.11.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:075c07095c8de4b774ba8f28b9c0a02b1a2cd254da50cbe464dd3bb2432e9158", size = 819812, upload-time = "2026-04-13T17:09:31.907Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c8/0ebc3298b4a45e7bddc50b169ae6a6f5b80c939394d4befe6e60de535ee7/fastar-0.11.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:07f028933820c65750baf3383b807ecce1cd9385cf00ce192b79d263ad6b856c", size = 884074, upload-time = "2026-04-13T17:08:45.802Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9f/7baa4cdff8d6fbca41fa5c764b48a941fed8a9ec6c4cc92de65895a28299/fastar-0.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:039f875efa0f01fa43c20bf4e2fc7305489c61d0ac76eda991acfba7820a0e63", size = 969450, upload-time = "2026-04-13T17:10:18.667Z" }, + { url = "https://files.pythonhosted.org/packages/d4/dc/1ebbfb58a47056ba866494f19efbcdd2ba2897096b94f36e796594b4d05b/fastar-0.11.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:fff12452a9a5c6814a012445f26365541cc3d99dcca61f09762e6a389f7a32ea", size = 1033775, upload-time = "2026-04-13T17:10:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/c2/5f/ce4e3914066f08c99eb8c32952cc07c1a013e81b1db1b0f598130bf6b974/fastar-0.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:2bf733e09f942b6fa876efe30a90508d1f4caef5630c00fb2a84fba355873712", size = 1072158, upload-time = "2026-04-13T17:10:52.497Z" }, + { url = "https://files.pythonhosted.org/packages/03/2a/6bca72992c84151c387cc6558f3867f5ebe5fb3684ee6fa9b76280ba4b8e/fastar-0.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d1531fa848fdd3677d2dce0a4b436ea64d9ae38fb8babe2ddbc180dd153cb7a3", size = 1028577, upload-time = "2026-04-13T17:11:09.934Z" }, + { url = "https://files.pythonhosted.org/packages/83/18/7a7c15657a3da5569b26fc51cde6a80f8d84cb54b3b1aea6d74a103db4ad/fastar-0.11.0-cp314-cp314t-win32.whl", hash = "sha256:5744551bc67c6fc6581cbd0e34a0fd6e2cd0bd30b43e94b1c3119cf35064b162", size = 453601, upload-time = "2026-04-13T17:11:53.726Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d8/331b59a6de279f3ad75c10c02c40a12f21d64a437d9c3d6f1af2dcbd7a76/fastar-0.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f4ce44e3b56c47cf38244b98d29f269b259740a580c47a2552efa5b96a5458fb", size = 486436, upload-time = "2026-04-13T17:11:40.089Z" }, + { url = "https://files.pythonhosted.org/packages/6b/fd/5390ec4f49100f3ecb9968a392f9e6d039f1e3fe0ecd28443716ff01e589/fastar-0.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:76c1359314355eafbc6989f20fb1ad565a3d10200117923b9da765a17e2f6f11", size = 461049, upload-time = "2026-04-13T17:11:25.918Z" }, + { url = "https://files.pythonhosted.org/packages/cc/5c/9bbeffbf1905391446dd98aa520422ce7affde5c9a7c22d757cc5d7c1397/fastar-0.11.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1266d6a004f427b0d61bd6c7b544d84cc964691b2232c2f4d635a1b75f2f6d5e", size = 711644, upload-time = "2026-04-13T17:10:07.663Z" }, + { url = "https://files.pythonhosted.org/packages/7e/af/ae5cf39d4fb82d0c592705f5ec6db1b065be5265c151b108f86126ee8773/fastar-0.11.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:298a827ec04ade43733f6ca960d0faec38706aa1494175869ea7ea17f5bad5d3", size = 634371, upload-time = "2026-04-13T17:09:52.083Z" }, + { url = "https://files.pythonhosted.org/packages/7e/36/8d4569e26473c72ccb02d1c5df3ed710073f1c06eca09c26d52ea79fd815/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8800e2387e463a0e5799416a1cbe72dd0fde7270a20e4bde684145e7878f6516", size = 870850, upload-time = "2026-04-13T17:09:21.439Z" }, + { url = "https://files.pythonhosted.org/packages/bf/46/724dc796e1756d3977970f820d30d59bb8cab8e3671b285f1d82ab513aec/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7496def0a2befd82d429cb004ef7ca831585cc887947bd6b9abb68a5ef852b0b", size = 764469, upload-time = "2026-04-13T17:08:05.638Z" }, + { url = "https://files.pythonhosted.org/packages/99/e3/74d6859e632e8fb9339a14f652fb9f800c2bd6aa53071e311c0be3fbab8b/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:878eaf15463eb572e3538af7ca3a8534e5e279cf8196db902d24e5725c4af86e", size = 761375, upload-time = "2026-04-13T17:08:20.669Z" }, + { url = "https://files.pythonhosted.org/packages/a3/e7/cc70e2be5ef8731a7525552b1c35c1448cf9eae6a62cb3a56f12c1bf27ea/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0324ed1d1ef0186e1bbd843b17807d6d837d0906899d4c99378b02c5d86bdd9c", size = 928189, upload-time = "2026-04-13T17:08:35.663Z" }, + { url = "https://files.pythonhosted.org/packages/3c/33/c9a969e78dca323547276a6fee5f4f9588f7cd5ab45acec3778c67399589/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdf9bd863205590beaf8ef6e66f315310196632180dceaf674985d01a876cac3", size = 820864, upload-time = "2026-04-13T17:09:06.366Z" }, + { url = "https://files.pythonhosted.org/packages/84/bd/6b9434b541fe55c125b5f2e017a565596a2d215aa09207e4555e4585064f/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59af8dbb683b24b90fb5b506de080faeab0a17a908e6c2a5d93a97260ed75d7b", size = 824060, upload-time = "2026-04-13T17:09:37.377Z" }, + { url = "https://files.pythonhosted.org/packages/24/8d/871d5f8cf4c6f13987119fb0a9ae8be131e34f2756c2524e9974adf33824/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:9f3df73a3c4292cfe15696cdf59cdb6c309ab59d30b34c733be13c6e32d9a264", size = 889217, upload-time = "2026-04-13T17:08:50.884Z" }, + { url = "https://files.pythonhosted.org/packages/d0/26/cca0fd2704f3ed20165e5613ed911549aef3aaf3b0b5b02fee0e8e23e6cc/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:aa3762cbb16e41a76b61f4a6914937a71aab3a7b6c2d82ca233bc686ebaf756b", size = 975418, upload-time = "2026-04-13T17:10:24.307Z" }, + { url = "https://files.pythonhosted.org/packages/99/94/8bbb0b13f5b6cbe2492f0b7cbba5103e6163976a3331466d010e781fa189/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:a8c7bc8ac74cb359bb546b199288c83236372d094b402e557c197e85527495cd", size = 1038492, upload-time = "2026-04-13T17:10:41.939Z" }, + { url = "https://files.pythonhosted.org/packages/ed/d3/5b7df222a30eac2822ffd00f82fd4c2ce84fba4b369d1e1a03732fd177fc/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:587cbd060a2699c5f66281081395bb4657b2b1e0eef5c206b1aabf740019d670", size = 1080210, upload-time = "2026-04-13T17:10:58.462Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/56ef943ea524784598c035ccbd42e564e937da0438ae3f55f0e76cb95571/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a1c56957ac82408be37a3f63594bc83e0919e8760492a4475e542f9f1828778", size = 1034886, upload-time = "2026-04-13T17:11:15.617Z" }, +] + +[[package]] +name = "fastuuid" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/7d/d9daedf0f2ebcacd20d599928f8913e9d2aea1d56d2d355a93bfa2b611d7/fastuuid-0.14.0.tar.gz", hash = "sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26", size = 18232, upload-time = "2025-10-19T22:19:22.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/b2/731a6696e37cd20eed353f69a09f37a984a43c9713764ee3f7ad5f57f7f9/fastuuid-0.14.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a", size = 516760, upload-time = "2025-10-19T22:25:21.509Z" }, + { url = "https://files.pythonhosted.org/packages/c5/79/c73c47be2a3b8734d16e628982653517f80bbe0570e27185d91af6096507/fastuuid-0.14.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00", size = 264748, upload-time = "2025-10-19T22:41:52.873Z" }, + { url = "https://files.pythonhosted.org/packages/24/c5/84c1eea05977c8ba5173555b0133e3558dc628bcf868d6bf1689ff14aedc/fastuuid-0.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470", size = 254537, upload-time = "2025-10-19T22:33:55.603Z" }, + { url = "https://files.pythonhosted.org/packages/0e/23/4e362367b7fa17dbed646922f216b9921efb486e7abe02147e4b917359f8/fastuuid-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d", size = 278994, upload-time = "2025-10-19T22:26:17.631Z" }, + { url = "https://files.pythonhosted.org/packages/b2/72/3985be633b5a428e9eaec4287ed4b873b7c4c53a9639a8b416637223c4cd/fastuuid-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8", size = 280003, upload-time = "2025-10-19T22:23:45.415Z" }, + { url = "https://files.pythonhosted.org/packages/b3/6d/6ef192a6df34e2266d5c9deb39cd3eea986df650cbcfeaf171aa52a059c3/fastuuid-0.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219", size = 303583, upload-time = "2025-10-19T22:26:00.756Z" }, + { url = "https://files.pythonhosted.org/packages/9d/11/8a2ea753c68d4fece29d5d7c6f3f903948cc6e82d1823bc9f7f7c0355db3/fastuuid-0.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6", size = 460955, upload-time = "2025-10-19T22:36:25.196Z" }, + { url = "https://files.pythonhosted.org/packages/23/42/7a32c93b6ce12642d9a152ee4753a078f372c9ebb893bc489d838dd4afd5/fastuuid-0.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe", size = 480763, upload-time = "2025-10-19T22:24:28.451Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e9/a5f6f686b46e3ed4ed3b93770111c233baac87dd6586a411b4988018ef1d/fastuuid-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d", size = 452613, upload-time = "2025-10-19T22:25:06.827Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c9/18abc73c9c5b7fc0e476c1733b678783b2e8a35b0be9babd423571d44e98/fastuuid-0.14.0-cp310-cp310-win32.whl", hash = "sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a", size = 155045, upload-time = "2025-10-19T22:28:32.732Z" }, + { url = "https://files.pythonhosted.org/packages/5e/8a/d9e33f4eb4d4f6d9f2c5c7d7e96b5cdbb535c93f3b1ad6acce97ee9d4bf8/fastuuid-0.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4", size = 156122, upload-time = "2025-10-19T22:23:15.59Z" }, + { url = "https://files.pythonhosted.org/packages/98/f3/12481bda4e5b6d3e698fbf525df4443cc7dce746f246b86b6fcb2fba1844/fastuuid-0.14.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34", size = 516386, upload-time = "2025-10-19T22:42:40.176Z" }, + { url = "https://files.pythonhosted.org/packages/59/19/2fc58a1446e4d72b655648eb0879b04e88ed6fa70d474efcf550f640f6ec/fastuuid-0.14.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7", size = 264569, upload-time = "2025-10-19T22:25:50.977Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/3c74756e5b02c40cfcc8b1d8b5bac4edbd532b55917a6bcc9113550e99d1/fastuuid-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1", size = 254366, upload-time = "2025-10-19T22:29:49.166Z" }, + { url = "https://files.pythonhosted.org/packages/52/96/d761da3fccfa84f0f353ce6e3eb8b7f76b3aa21fd25e1b00a19f9c80a063/fastuuid-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc", size = 278978, upload-time = "2025-10-19T22:35:41.306Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c2/f84c90167cc7765cb82b3ff7808057608b21c14a38531845d933a4637307/fastuuid-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8", size = 279692, upload-time = "2025-10-19T22:25:36.997Z" }, + { url = "https://files.pythonhosted.org/packages/af/7b/4bacd03897b88c12348e7bd77943bac32ccf80ff98100598fcff74f75f2e/fastuuid-0.14.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7", size = 303384, upload-time = "2025-10-19T22:29:46.578Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a2/584f2c29641df8bd810d00c1f21d408c12e9ad0c0dafdb8b7b29e5ddf787/fastuuid-0.14.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73", size = 460921, upload-time = "2025-10-19T22:36:42.006Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/c6b77443bb7764c760e211002c8638c0c7cce11cb584927e723215ba1398/fastuuid-0.14.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36", size = 480575, upload-time = "2025-10-19T22:28:18.975Z" }, + { url = "https://files.pythonhosted.org/packages/5a/87/93f553111b33f9bb83145be12868c3c475bf8ea87c107063d01377cc0e8e/fastuuid-0.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94", size = 452317, upload-time = "2025-10-19T22:25:32.75Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8c/a04d486ca55b5abb7eaa65b39df8d891b7b1635b22db2163734dc273579a/fastuuid-0.14.0-cp311-cp311-win32.whl", hash = "sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24", size = 154804, upload-time = "2025-10-19T22:24:15.615Z" }, + { url = "https://files.pythonhosted.org/packages/9c/b2/2d40bf00820de94b9280366a122cbaa60090c8cf59e89ac3938cf5d75895/fastuuid-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa", size = 156099, upload-time = "2025-10-19T22:24:31.646Z" }, + { url = "https://files.pythonhosted.org/packages/02/a2/e78fcc5df65467f0d207661b7ef86c5b7ac62eea337c0c0fcedbeee6fb13/fastuuid-0.14.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a", size = 510164, upload-time = "2025-10-19T22:31:45.635Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b3/c846f933f22f581f558ee63f81f29fa924acd971ce903dab1a9b6701816e/fastuuid-0.14.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d", size = 261837, upload-time = "2025-10-19T22:38:38.53Z" }, + { url = "https://files.pythonhosted.org/packages/54/ea/682551030f8c4fa9a769d9825570ad28c0c71e30cf34020b85c1f7ee7382/fastuuid-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070", size = 251370, upload-time = "2025-10-19T22:40:26.07Z" }, + { url = "https://files.pythonhosted.org/packages/14/dd/5927f0a523d8e6a76b70968e6004966ee7df30322f5fc9b6cdfb0276646a/fastuuid-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796", size = 277766, upload-time = "2025-10-19T22:37:23.779Z" }, + { url = "https://files.pythonhosted.org/packages/16/6e/c0fb547eef61293153348f12e0f75a06abb322664b34a1573a7760501336/fastuuid-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09", size = 278105, upload-time = "2025-10-19T22:26:56.821Z" }, + { url = "https://files.pythonhosted.org/packages/2d/b1/b9c75e03b768f61cf2e84ee193dc18601aeaf89a4684b20f2f0e9f52b62c/fastuuid-0.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8", size = 301564, upload-time = "2025-10-19T22:30:31.604Z" }, + { url = "https://files.pythonhosted.org/packages/fc/fa/f7395fdac07c7a54f18f801744573707321ca0cee082e638e36452355a9d/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741", size = 459659, upload-time = "2025-10-19T22:31:32.341Z" }, + { url = "https://files.pythonhosted.org/packages/66/49/c9fd06a4a0b1f0f048aacb6599e7d96e5d6bc6fa680ed0d46bf111929d1b/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057", size = 478430, upload-time = "2025-10-19T22:26:22.962Z" }, + { url = "https://files.pythonhosted.org/packages/be/9c/909e8c95b494e8e140e8be6165d5fc3f61fdc46198c1554df7b3e1764471/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8", size = 450894, upload-time = "2025-10-19T22:27:01.647Z" }, + { url = "https://files.pythonhosted.org/packages/90/eb/d29d17521976e673c55ef7f210d4cdd72091a9ec6755d0fd4710d9b3c871/fastuuid-0.14.0-cp312-cp312-win32.whl", hash = "sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176", size = 154374, upload-time = "2025-10-19T22:29:19.879Z" }, + { url = "https://files.pythonhosted.org/packages/cc/fc/f5c799a6ea6d877faec0472d0b27c079b47c86b1cdc577720a5386483b36/fastuuid-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397", size = 156550, upload-time = "2025-10-19T22:27:49.658Z" }, + { url = "https://files.pythonhosted.org/packages/a5/83/ae12dd39b9a39b55d7f90abb8971f1a5f3c321fd72d5aa83f90dc67fe9ed/fastuuid-0.14.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021", size = 510720, upload-time = "2025-10-19T22:42:34.633Z" }, + { url = "https://files.pythonhosted.org/packages/53/b0/a4b03ff5d00f563cc7546b933c28cb3f2a07344b2aec5834e874f7d44143/fastuuid-0.14.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc", size = 262024, upload-time = "2025-10-19T22:30:25.482Z" }, + { url = "https://files.pythonhosted.org/packages/9c/6d/64aee0a0f6a58eeabadd582e55d0d7d70258ffdd01d093b30c53d668303b/fastuuid-0.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5", size = 251679, upload-time = "2025-10-19T22:36:14.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/f5/a7e9cda8369e4f7919d36552db9b2ae21db7915083bc6336f1b0082c8b2e/fastuuid-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f", size = 277862, upload-time = "2025-10-19T22:36:23.302Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d3/8ce11827c783affffd5bd4d6378b28eb6cc6d2ddf41474006b8d62e7448e/fastuuid-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87", size = 278278, upload-time = "2025-10-19T22:29:43.809Z" }, + { url = "https://files.pythonhosted.org/packages/a2/51/680fb6352d0bbade04036da46264a8001f74b7484e2fd1f4da9e3db1c666/fastuuid-0.14.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b", size = 301788, upload-time = "2025-10-19T22:36:06.825Z" }, + { url = "https://files.pythonhosted.org/packages/fa/7c/2014b5785bd8ebdab04ec857635ebd84d5ee4950186a577db9eff0fb8ff6/fastuuid-0.14.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022", size = 459819, upload-time = "2025-10-19T22:35:31.623Z" }, + { url = "https://files.pythonhosted.org/packages/01/d2/524d4ceeba9160e7a9bc2ea3e8f4ccf1ad78f3bde34090ca0c51f09a5e91/fastuuid-0.14.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995", size = 478546, upload-time = "2025-10-19T22:26:03.023Z" }, + { url = "https://files.pythonhosted.org/packages/bc/17/354d04951ce114bf4afc78e27a18cfbd6ee319ab1829c2d5fb5e94063ac6/fastuuid-0.14.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab", size = 450921, upload-time = "2025-10-19T22:31:02.151Z" }, + { url = "https://files.pythonhosted.org/packages/fb/be/d7be8670151d16d88f15bb121c5b66cdb5ea6a0c2a362d0dcf30276ade53/fastuuid-0.14.0-cp313-cp313-win32.whl", hash = "sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad", size = 154559, upload-time = "2025-10-19T22:36:36.011Z" }, + { url = "https://files.pythonhosted.org/packages/22/1d/5573ef3624ceb7abf4a46073d3554e37191c868abc3aecd5289a72f9810a/fastuuid-0.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed", size = 156539, upload-time = "2025-10-19T22:33:35.898Z" }, + { url = "https://files.pythonhosted.org/packages/16/c9/8c7660d1fe3862e3f8acabd9be7fc9ad71eb270f1c65cce9a2b7a31329ab/fastuuid-0.14.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad", size = 510600, upload-time = "2025-10-19T22:43:44.17Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f4/a989c82f9a90d0ad995aa957b3e572ebef163c5299823b4027986f133dfb/fastuuid-0.14.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b", size = 262069, upload-time = "2025-10-19T22:43:38.38Z" }, + { url = "https://files.pythonhosted.org/packages/da/6c/a1a24f73574ac995482b1326cf7ab41301af0fabaa3e37eeb6b3df00e6e2/fastuuid-0.14.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714", size = 251543, upload-time = "2025-10-19T22:32:22.537Z" }, + { url = "https://files.pythonhosted.org/packages/1a/20/2a9b59185ba7a6c7b37808431477c2d739fcbdabbf63e00243e37bd6bf49/fastuuid-0.14.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f", size = 277798, upload-time = "2025-10-19T22:33:53.821Z" }, + { url = "https://files.pythonhosted.org/packages/ef/33/4105ca574f6ded0af6a797d39add041bcfb468a1255fbbe82fcb6f592da2/fastuuid-0.14.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f", size = 278283, upload-time = "2025-10-19T22:29:02.812Z" }, + { url = "https://files.pythonhosted.org/packages/fe/8c/fca59f8e21c4deb013f574eae05723737ddb1d2937ce87cb2a5d20992dc3/fastuuid-0.14.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75", size = 301627, upload-time = "2025-10-19T22:35:54.985Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e2/f78c271b909c034d429218f2798ca4e89eeda7983f4257d7865976ddbb6c/fastuuid-0.14.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4", size = 459778, upload-time = "2025-10-19T22:28:00.999Z" }, + { url = "https://files.pythonhosted.org/packages/1e/f0/5ff209d865897667a2ff3e7a572267a9ced8f7313919f6d6043aed8b1caa/fastuuid-0.14.0-cp314-cp314-musllinux_1_1_i686.whl", hash = "sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad", size = 478605, upload-time = "2025-10-19T22:36:21.764Z" }, + { url = "https://files.pythonhosted.org/packages/e0/c8/2ce1c78f983a2c4987ea865d9516dbdfb141a120fd3abb977ae6f02ba7ca/fastuuid-0.14.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8", size = 450837, upload-time = "2025-10-19T22:34:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/df/60/dad662ec9a33b4a5fe44f60699258da64172c39bd041da2994422cdc40fe/fastuuid-0.14.0-cp314-cp314-win32.whl", hash = "sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06", size = 154532, upload-time = "2025-10-19T22:35:18.217Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f6/da4db31001e854025ffd26bc9ba0740a9cbba2c3259695f7c5834908b336/fastuuid-0.14.0-cp314-cp314-win_amd64.whl", hash = "sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a", size = 156457, upload-time = "2025-10-19T22:33:44.579Z" }, +] + +[[package]] +name = "ffmpy" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/d2/1c4c582d71bcc65c76fa69fab85de6257d50fdf6fd4a2317c53917e9a581/ffmpy-1.0.0.tar.gz", hash = "sha256:b12932e95435c8820f1cd041024402765f821971e4bae753b327fc02a6e12f8b", size = 5101, upload-time = "2025-11-11T06:24:23.856Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/56/dd3669eccebb6d8ac81e624542ebd53fe6f08e1b8f2f8d50aeb7e3b83f99/ffmpy-1.0.0-py3-none-any.whl", hash = "sha256:5640e5f0fd03fb6236d0e119b16ccf6522db1c826fdf35dcb87087b60fd7504f", size = 5614, upload-time = "2025-11-11T06:24:22.818Z" }, +] + +[[package]] +name = "filelock" +version = "3.25.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480, upload-time = "2026-03-11T20:45:38.487Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759, upload-time = "2026-03-11T20:45:37.437Z" }, +] + +[[package]] +name = "flashinfer-cubin" +version = "0.6.6" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/e8/826f9452bc5f76b94d7eb025f03dcaf1b51b9ed7790386c0285191e69be4/flashinfer_cubin-0.6.6-py3-none-any.whl", hash = "sha256:36508dfc792eb5ecfb15d2c140a7702812e1fa1ab0fb03929b2ed55e3e8191f3", size = 267661457, upload-time = "2026-03-11T01:36:36.538Z" }, +] + +[[package]] +name = "flashinfer-python" +version = "0.6.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "apache-tvm-ffi" }, + { name = "click" }, + { name = "einops" }, + { name = "ninja" }, + { name = "numpy" }, + { name = "nvidia-cudnn-frontend" }, + { name = "nvidia-cutlass-dsl" }, + { name = "nvidia-ml-py" }, + { name = "packaging" }, + { name = "requests" }, + { name = "tabulate" }, + { name = "torch" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/03/70/c5a235297351021f5d3d3233523a85f5a6468495587489ad2f257e8eafe2/flashinfer_python-0.6.6.tar.gz", hash = "sha256:0730ba7c7aad332961933bcebc5119762797161ede57d955f6fd199818ed1d92", size = 5344156, upload-time = "2026-03-11T01:36:21.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/61/385d06755f3ab66333018285657adf0daf8a90a129448231fd09e315bd2e/flashinfer_python-0.6.6-py3-none-any.whl", hash = "sha256:078f158636969eec1a0d3dea19c3ca90b426b66df89bbf7b7b8276ce2ec08148", size = 7817047, upload-time = "2026-03-11T01:36:19.198Z" }, +] + +[[package]] +name = "flatbuffers" +version = "25.12.19" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, + { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, + { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, + { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, + { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, + { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, + { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, + { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, + { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, + { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, + { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, + { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, + { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, + { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, + { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, + { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, + { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, + { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, + { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, + { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, + { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, + { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, + { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, + { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, + { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, + { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, + { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, + { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, + { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, + { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, + { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, + { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, + { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, + { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, + { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "fsspec" +version = "2025.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/e0/bab50af11c2d75c9c4a2a26a5254573c0bd97cea152254401510950486fa/fsspec-2025.9.0.tar.gz", hash = "sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19", size = 304847, upload-time = "2025-09-02T19:10:49.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/71/70db47e4f6ce3e5c37a607355f80da8860a33226be640226ac52cb05ef2e/fsspec-2025.9.0-py3-none-any.whl", hash = "sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7", size = 199289, upload-time = "2025-09-02T19:10:47.708Z" }, +] + +[package.optional-dependencies] +http = [ + { name = "aiohttp" }, +] + +[[package]] +name = "genson" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/cf/2303c8ad276dcf5ee2ad6cf69c4338fd86ef0f471a5207b069adf7a393cf/genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37", size = 34919, upload-time = "2024-05-15T22:08:49.123Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/5c/e226de133afd8bb267ec27eead9ae3d784b95b39a287ed404caab39a5f50/genson-1.3.0-py3-none-any.whl", hash = "sha256:468feccd00274cc7e4c09e84b08704270ba8d95232aa280f65b986139cec67f7", size = 21470, upload-time = "2024-05-15T22:08:47.056Z" }, +] + +[[package]] +name = "gepa" +version = "0.0.26" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/98/b8f1ccc8cc2a319f21433df45bcec8a8f7903ee08aacd0acfdc475f47c05/gepa-0.0.26.tar.gz", hash = "sha256:0119ca8022e93b6236bc154a57bb910bdb117485dc067d77777933dd3e9e9ad8", size = 141776, upload-time = "2026-01-24T18:11:18.362Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/6e/f1141b76398026ef77f0d52a17b37d26ceb7cd320e0ad3a72c59fe00b983/gepa-0.0.26-py3-none-any.whl", hash = "sha256:331e40d8693a4192de2eb3b2b4df10d410ead49173f748d50c32a035cf746e63", size = 139666, upload-time = "2026-01-24T18:11:16.836Z" }, +] + +[[package]] +name = "gguf" +version = "0.18.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/26/7622a41c39db9d7090225a4bf8368550e59694dcf7313b44f9a82b501209/gguf-0.18.0.tar.gz", hash = "sha256:b4659093d5d0dccdb5902a904d54b327f4052879fe5e90946ad5fce9f8018c2e", size = 107170, upload-time = "2026-02-27T15:05:39.254Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/0c/e0f1eae7535a97476fb903f65301e35da2a66182b8161066b7eb312b2cb8/gguf-0.18.0-py3-none-any.whl", hash = "sha256:af93f7ef198a265cbde5fa6a6b3101528bca285903949ab0a3e591cd993a1864", size = 114244, upload-time = "2026-02-27T15:05:37.991Z" }, +] + +[[package]] +name = "googleapis-common-protos" +version = "1.74.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/18/a746c8344152d368a5aac738d4c857012f2c5d1fd2eac7e17b647a7861bd/googleapis_common_protos-1.74.0.tar.gz", hash = "sha256:57971e4eeeba6aad1163c1f0fc88543f965bb49129b8bb55b2b7b26ecab084f1", size = 151254, upload-time = "2026-04-02T21:23:26.679Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/b0/be5d3329badb9230b765de6eea66b73abd5944bdeb5afb3562ddcd80ae84/googleapis_common_protos-1.74.0-py3-none-any.whl", hash = "sha256:702216f78610bb510e3f12ac3cafd281b7ac45cc5d86e90ad87e4d301a3426b5", size = 300743, upload-time = "2026-04-02T21:22:49.108Z" }, +] + +[[package]] +name = "gradio" +version = "6.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiofiles" }, + { name = "anyio" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, + { name = "brotli" }, + { name = "fastapi" }, + { name = "ffmpy" }, + { name = "gradio-client" }, + { name = "groovy" }, + { name = "hf-gradio" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "numpy" }, + { name = "orjson" }, + { name = "packaging" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or python_full_version >= '3.14'" }, + { name = "pandas", version = "3.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pydub" }, + { name = "python-multipart" }, + { name = "pytz" }, + { name = "pyyaml" }, + { name = "safehttpx" }, + { name = "semantic-version" }, + { name = "starlette" }, + { name = "tomlkit" }, + { name = "typer" }, + { name = "typing-extensions" }, + { name = "uvicorn" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/a9/95923f9107f706040cab06a5fbc292ba0ceef573f46d449ef260f4f70503/gradio-6.11.0.tar.gz", hash = "sha256:da706246fae711007e752ae85acdb0300d68e60eb4bcea29d43371d28432b787", size = 52028942, upload-time = "2026-04-03T01:10:17.983Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/5b/c816b9dd76a2e5e502aa25833c43cc00574c2579c0db84e79e93c5d13c4c/gradio-6.11.0-py3-none-any.whl", hash = "sha256:9b72461cf55c9b1bee8818c9a7ceeac78af1dedb5e8c4d3d48b5a0c6c66db7b8", size = 36791822, upload-time = "2026-04-03T01:10:14.384Z" }, +] + +[[package]] +name = "gradio-client" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fsspec" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "packaging" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/4a/ddfaa8b3fef0238768a42301a3361981af1afd90f92c27adfe6cd031eca7/gradio_client-2.4.0.tar.gz", hash = "sha256:781885374f86759b8db5195e13e716c301d14e48e0442aef63362f1eeea4cce2", size = 58203, upload-time = "2026-03-24T21:20:25.276Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/b3/10cb03cf684aab2bec97cb0b9bbba4f93e7a20c6e0f3b4100c235a55ad93/gradio_client-2.4.0-py3-none-any.whl", hash = "sha256:7c170807b924ed6056b2a1fa9d659d349dd20567c00ee0b4dc249dc1e2def620", size = 59156, upload-time = "2026-03-24T21:20:24.018Z" }, +] + +[[package]] +name = "greenlet" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/94/a5935717b307d7c71fe877b52b884c6af707d2d2090db118a03fbd799369/greenlet-3.4.0.tar.gz", hash = "sha256:f50a96b64dafd6169e595a5c56c9146ef80333e67d4476a65a9c55f400fc22ff", size = 195913, upload-time = "2026-04-08T17:08:00.863Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/bc/e30e1e3d5e8860b0e0ce4d2b16b2681b77fd13542fc0d72f7e3c22d16eff/greenlet-3.4.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d18eae9a7fb0f499efcd146b8c9750a2e1f6e0e93b5a382b3481875354a430e6", size = 284315, upload-time = "2026-04-08T17:02:52.322Z" }, + { url = "https://files.pythonhosted.org/packages/5b/cc/e023ae1967d2a26737387cac083e99e47f65f58868bd155c4c80c01ec4e0/greenlet-3.4.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:636d2f95c309e35f650e421c23297d5011716be15d966e6328b367c9fc513a82", size = 601916, upload-time = "2026-04-08T16:24:35.533Z" }, + { url = "https://files.pythonhosted.org/packages/67/32/5be1677954b6d8810b33abe94e3eb88726311c58fa777dc97e390f7caf5a/greenlet-3.4.0-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:234582c20af9742583c3b2ddfbdbb58a756cfff803763ffaae1ac7990a9fac31", size = 616399, upload-time = "2026-04-08T16:30:54.536Z" }, + { url = "https://files.pythonhosted.org/packages/82/0a/3a4af092b09ea02bcda30f33fd7db397619132fe52c6ece24b9363130d34/greenlet-3.4.0-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ac6a5f618be581e1e0713aecec8e54093c235e5fa17d6d8eb7ffc487e2300508", size = 621077, upload-time = "2026-04-08T16:40:34.946Z" }, + { url = "https://files.pythonhosted.org/packages/74/bf/2d58d5ea515704f83e34699128c9072a34bea27d2b6a556e102105fe62a5/greenlet-3.4.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:523677e69cd4711b5a014e37bc1fb3a29947c3e3a5bb6a527e1cc50312e5a398", size = 611978, upload-time = "2026-04-08T15:56:31.335Z" }, + { url = "https://files.pythonhosted.org/packages/8c/39/3786520a7d5e33ee87b3da2531f589a3882abf686a42a3773183a41ef010/greenlet-3.4.0-cp310-cp310-manylinux_2_39_riscv64.whl", hash = "sha256:d336d46878e486de7d9458653c722875547ac8d36a1cff9ffaf4a74a3c1f62eb", size = 416893, upload-time = "2026-04-08T16:43:02.392Z" }, + { url = "https://files.pythonhosted.org/packages/bd/69/6525049b6c179d8a923256304d8387b8bdd4acab1acf0407852463c6d514/greenlet-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b45e45fe47a19051a396abb22e19e7836a59ee6c5a90f3be427343c37908d65b", size = 1571957, upload-time = "2026-04-08T16:26:17.041Z" }, + { url = "https://files.pythonhosted.org/packages/4e/6c/bbfb798b05fec736a0d24dc23e81b45bcee87f45a83cfb39db031853bddc/greenlet-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5434271357be07f3ad0936c312645853b7e689e679e29310e2de09a9ea6c3adf", size = 1637223, upload-time = "2026-04-08T15:57:27.556Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7d/981fe0e7c07bd9d5e7eb18decb8590a11e3955878291f7a7de2e9c668eb7/greenlet-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:a19093fbad824ed7c0f355b5ff4214bffda5f1a7f35f29b31fcaa240cc0135ab", size = 237902, upload-time = "2026-04-08T17:03:14.16Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c6/dba32cab7e3a625b011aa5647486e2d28423a48845a2998c126dd69c85e1/greenlet-3.4.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:805bebb4945094acbab757d34d6e1098be6de8966009ab9ca54f06ff492def58", size = 285504, upload-time = "2026-04-08T15:52:14.071Z" }, + { url = "https://files.pythonhosted.org/packages/54/f4/7cb5c2b1feb9a1f50e038be79980dfa969aa91979e5e3a18fdbcfad2c517/greenlet-3.4.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:439fc2f12b9b512d9dfa681c5afe5f6b3232c708d13e6f02c845e0d9f4c2d8c6", size = 605476, upload-time = "2026-04-08T16:24:37.064Z" }, + { url = "https://files.pythonhosted.org/packages/d6/af/b66ab0b2f9a4c5a867c136bf66d9599f34f21a1bcca26a2884a29c450bd9/greenlet-3.4.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a70ed1cb0295bee1df57b63bf7f46b4e56a5c93709eea769c1fec1bb23a95875", size = 618336, upload-time = "2026-04-08T16:30:56.59Z" }, + { url = "https://files.pythonhosted.org/packages/6d/31/56c43d2b5de476f77d36ceeec436328533bff960a4cba9a07616e93063ab/greenlet-3.4.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8c5696c42e6bb5cfb7c6ff4453789081c66b9b91f061e5e9367fa15792644e76", size = 625045, upload-time = "2026-04-08T16:40:37.111Z" }, + { url = "https://files.pythonhosted.org/packages/e5/5c/8c5633ece6ba611d64bf2770219a98dd439921d6424e4e8cf16b0ac74ea5/greenlet-3.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c660bce1940a1acae5f51f0a064f1bc785d07ea16efcb4bc708090afc4d69e83", size = 613515, upload-time = "2026-04-08T15:56:32.478Z" }, + { url = "https://files.pythonhosted.org/packages/80/ca/704d4e2c90acb8bdf7ae593f5cbc95f58e82de95cc540fb75631c1054533/greenlet-3.4.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:89995ce5ddcd2896d89615116dd39b9703bfa0c07b583b85b89bf1b5d6eddf81", size = 419745, upload-time = "2026-04-08T16:43:04.022Z" }, + { url = "https://files.pythonhosted.org/packages/a9/df/950d15bca0d90a0e7395eb777903060504cdb509b7b705631e8fb69ff415/greenlet-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ee407d4d1ca9dc632265aee1c8732c4a2d60adff848057cdebfe5fe94eb2c8a2", size = 1574623, upload-time = "2026-04-08T16:26:18.596Z" }, + { url = "https://files.pythonhosted.org/packages/1a/e7/0839afab829fcb7333c9ff6d80c040949510055d2d4d63251f0d1c7c804e/greenlet-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:956215d5e355fffa7c021d168728321fd4d31fd730ac609b1653b450f6a4bc71", size = 1639579, upload-time = "2026-04-08T15:57:29.231Z" }, + { url = "https://files.pythonhosted.org/packages/d9/2b/b4482401e9bcaf9f5c97f67ead38db89c19520ff6d0d6699979c6efcc200/greenlet-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:5cb614ace7c27571270354e9c9f696554d073f8aa9319079dcba466bbdead711", size = 238233, upload-time = "2026-04-08T17:02:54.286Z" }, + { url = "https://files.pythonhosted.org/packages/0c/4d/d8123a4e0bcd583d5cfc8ddae0bbe29c67aab96711be331a7cc935a35966/greenlet-3.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:04403ac74fe295a361f650818de93be11b5038a78f49ccfb64d3b1be8fbf1267", size = 235045, upload-time = "2026-04-08T17:04:05.072Z" }, + { url = "https://files.pythonhosted.org/packages/65/8b/3669ad3b3f247a791b2b4aceb3aa5a31f5f6817bf547e4e1ff712338145a/greenlet-3.4.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:1a54a921561dd9518d31d2d3db4d7f80e589083063ab4d3e2e950756ef809e1a", size = 286902, upload-time = "2026-04-08T15:52:12.138Z" }, + { url = "https://files.pythonhosted.org/packages/38/3e/3c0e19b82900873e2d8469b590a6c4b3dfd2b316d0591f1c26b38a4879a5/greenlet-3.4.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:16dec271460a9a2b154e3b1c2fa1050ce6280878430320e85e08c166772e3f97", size = 606099, upload-time = "2026-04-08T16:24:38.408Z" }, + { url = "https://files.pythonhosted.org/packages/b5/33/99fef65e7754fc76a4ed14794074c38c9ed3394a5bd129d7f61b705f3168/greenlet-3.4.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:90036ce224ed6fe75508c1907a77e4540176dcf0744473627785dd519c6f9996", size = 618837, upload-time = "2026-04-08T16:30:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/44/57/eae2cac10421feae6c0987e3dc106c6d86262b1cb379e171b017aba893a6/greenlet-3.4.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6f0def07ec9a71d72315cf26c061aceee53b306c36ed38c35caba952ea1b319d", size = 624901, upload-time = "2026-04-08T16:40:38.981Z" }, + { url = "https://files.pythonhosted.org/packages/36/f7/229f3aed6948faa20e0616a0b8568da22e365ede6a54d7d369058b128afd/greenlet-3.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a1c4f6b453006efb8310affb2d132832e9bbb4fc01ce6df6b70d810d38f1f6dc", size = 615062, upload-time = "2026-04-08T15:56:33.766Z" }, + { url = "https://files.pythonhosted.org/packages/6a/8a/0e73c9b94f31d1cc257fe79a0eff621674141cdae7d6d00f40de378a1e42/greenlet-3.4.0-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:0e1254cf0cbaa17b04320c3a78575f29f3c161ef38f59c977108f19ffddaf077", size = 423927, upload-time = "2026-04-08T16:43:05.293Z" }, + { url = "https://files.pythonhosted.org/packages/08/97/d988180011aa40135c46cd0d0cf01dd97f7162bae14139b4a3ef54889ba5/greenlet-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9b2d9a138ffa0e306d0e2b72976d2fb10b97e690d40ab36a472acaab0838e2de", size = 1573511, upload-time = "2026-04-08T16:26:20.058Z" }, + { url = "https://files.pythonhosted.org/packages/d4/0f/a5a26fe152fb3d12e6a474181f6e9848283504d0afd095f353d85726374b/greenlet-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8424683caf46eb0eb6f626cb95e008e8cc30d0cb675bdfa48200925c79b38a08", size = 1640396, upload-time = "2026-04-08T15:57:30.88Z" }, + { url = "https://files.pythonhosted.org/packages/42/cf/bb2c32d9a100e36ee9f6e38fad6b1e082b8184010cb06259b49e1266ca01/greenlet-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0a53fb071531d003b075c444014ff8f8b1a9898d36bb88abd9ac7b3524648a2", size = 238892, upload-time = "2026-04-08T17:03:10.094Z" }, + { url = "https://files.pythonhosted.org/packages/b7/47/6c41314bac56e71436ce551c7fbe3cc830ed857e6aa9708dbb9c65142eb6/greenlet-3.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:f38b81880ba28f232f1f675893a39cf7b6db25b31cc0a09bb50787ecf957e85e", size = 235599, upload-time = "2026-04-08T15:52:54.3Z" }, + { url = "https://files.pythonhosted.org/packages/7a/75/7e9cd1126a1e1f0cd67b0eda02e5221b28488d352684704a78ed505bd719/greenlet-3.4.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:43748988b097f9c6f09364f260741aa73c80747f63389824435c7a50bfdfd5c1", size = 285856, upload-time = "2026-04-08T15:52:45.82Z" }, + { url = "https://files.pythonhosted.org/packages/9d/c4/3e2df392e5cb199527c4d9dbcaa75c14edcc394b45040f0189f649631e3c/greenlet-3.4.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5566e4e2cd7a880e8c27618e3eab20f3494452d12fd5129edef7b2f7aa9a36d1", size = 610208, upload-time = "2026-04-08T16:24:39.674Z" }, + { url = "https://files.pythonhosted.org/packages/da/af/750cdfda1d1bd30a6c28080245be8d0346e669a98fdbae7f4102aa95fff3/greenlet-3.4.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1054c5a3c78e2ab599d452f23f7adafef55062a783a8e241d24f3b633ba6ff82", size = 621269, upload-time = "2026-04-08T16:30:59.767Z" }, + { url = "https://files.pythonhosted.org/packages/e0/93/c8c508d68ba93232784bbc1b5474d92371f2897dfc6bc281b419f2e0d492/greenlet-3.4.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:98eedd1803353daf1cd9ef23eef23eda5a4d22f99b1f998d273a8b78b70dd47f", size = 628455, upload-time = "2026-04-08T16:40:40.698Z" }, + { url = "https://files.pythonhosted.org/packages/54/78/0cbc693622cd54ebe25207efbb3a0eb07c2639cb8594f6e3aaaa0bb077a8/greenlet-3.4.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f82cb6cddc27dd81c96b1506f4aa7def15070c3b2a67d4e46fd19016aacce6cf", size = 617549, upload-time = "2026-04-08T15:56:34.893Z" }, + { url = "https://files.pythonhosted.org/packages/7f/46/cfaaa0ade435a60550fd83d07dfd5c41f873a01da17ede5c4cade0b9bab8/greenlet-3.4.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:b7857e2202aae67bc5725e0c1f6403c20a8ff46094ece015e7d474f5f7020b55", size = 426238, upload-time = "2026-04-08T16:43:06.865Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c0/8966767de01343c1ff47e8b855dc78e7d1a8ed2b7b9c83576a57e289f81d/greenlet-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:227a46251ecba4ff46ae742bc5ce95c91d5aceb4b02f885487aff269c127a729", size = 1575310, upload-time = "2026-04-08T16:26:21.671Z" }, + { url = "https://files.pythonhosted.org/packages/b8/38/bcdc71ba05e9a5fda87f63ffc2abcd1f15693b659346df994a48c968003d/greenlet-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5b99e87be7eba788dd5b75ba1cde5639edffdec5f91fe0d734a249535ec3408c", size = 1640435, upload-time = "2026-04-08T15:57:32.572Z" }, + { url = "https://files.pythonhosted.org/packages/a1/c2/19b664b7173b9e4ef5f77e8cef9f14c20ec7fce7920dc1ccd7afd955d093/greenlet-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:849f8bc17acd6295fcb5de8e46d55cc0e52381c56eaf50a2afd258e97bc65940", size = 238760, upload-time = "2026-04-08T17:04:03.878Z" }, + { url = "https://files.pythonhosted.org/packages/9b/96/795619651d39c7fbd809a522f881aa6f0ead504cc8201c3a5b789dfaef99/greenlet-3.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:9390ad88b652b1903814eaabd629ca184db15e0eeb6fe8a390bbf8b9106ae15a", size = 235498, upload-time = "2026-04-08T17:05:00.584Z" }, + { url = "https://files.pythonhosted.org/packages/78/02/bde66806e8f169cf90b14d02c500c44cdbe02c8e224c9c67bafd1b8cadd1/greenlet-3.4.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:10a07aca6babdd18c16a3f4f8880acfffc2b88dfe431ad6aa5f5740759d7d75e", size = 286291, upload-time = "2026-04-08T17:09:34.307Z" }, + { url = "https://files.pythonhosted.org/packages/05/1f/39da1c336a87d47c58352fb8a78541ce63d63ae57c5b9dae1fe02801bbc2/greenlet-3.4.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:076e21040b3a917d3ce4ad68fb5c3c6b32f1405616c4a57aa83120979649bd3d", size = 656749, upload-time = "2026-04-08T16:24:41.721Z" }, + { url = "https://files.pythonhosted.org/packages/d3/6c/90ee29a4ee27af7aa2e2ec408799eeb69ee3fcc5abcecac6ddd07a5cd0f2/greenlet-3.4.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e82689eea4a237e530bb5cb41b180ef81fa2160e1f89422a67be7d90da67f615", size = 669084, upload-time = "2026-04-08T16:31:01.372Z" }, + { url = "https://files.pythonhosted.org/packages/d2/4a/74078d3936712cff6d3c91a930016f476ce4198d84e224fe6d81d3e02880/greenlet-3.4.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:06c2d3b89e0c62ba50bd7adf491b14f39da9e7e701647cb7b9ff4c99bee04b19", size = 673405, upload-time = "2026-04-08T16:40:42.527Z" }, + { url = "https://files.pythonhosted.org/packages/07/49/d4cad6e5381a50947bb973d2f6cf6592621451b09368b8c20d9b8af49c5b/greenlet-3.4.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4df3b0b2289ec686d3c821a5fee44259c05cfe824dd5e6e12c8e5f5df23085cf", size = 665621, upload-time = "2026-04-08T15:56:35.995Z" }, + { url = "https://files.pythonhosted.org/packages/79/3e/df8a83ab894751bc31e1106fdfaa80ca9753222f106b04de93faaa55feb7/greenlet-3.4.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:070b8bac2ff3b4d9e0ff36a0d19e42103331d9737e8504747cd1e659f76297bd", size = 471670, upload-time = "2026-04-08T16:43:08.512Z" }, + { url = "https://files.pythonhosted.org/packages/37/31/d1edd54f424761b5d47718822f506b435b6aab2f3f93b465441143ea5119/greenlet-3.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8bff29d586ea415688f4cec96a591fcc3bf762d046a796cdadc1fdb6e7f2d5bf", size = 1622259, upload-time = "2026-04-08T16:26:23.201Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c6/6d3f9cdcb21c4e12a79cb332579f1c6aa1af78eb68059c5a957c7812d95e/greenlet-3.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8a569c2fb840c53c13a2b8967c63621fafbd1a0e015b9c82f408c33d626a2fda", size = 1686916, upload-time = "2026-04-08T15:57:34.282Z" }, + { url = "https://files.pythonhosted.org/packages/63/45/c1ca4a1ad975de4727e52d3ffe641ae23e1d7a8ffaa8ff7a0477e1827b92/greenlet-3.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:207ba5b97ea8b0b60eb43ffcacf26969dd83726095161d676aac03ff913ee50d", size = 239821, upload-time = "2026-04-08T17:03:48.423Z" }, + { url = "https://files.pythonhosted.org/packages/71/c4/6f621023364d7e85a4769c014c8982f98053246d142420e0328980933ceb/greenlet-3.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:f8296d4e2b92af34ebde81085a01690f26a51eb9ac09a0fcadb331eb36dbc802", size = 236932, upload-time = "2026-04-08T17:04:33.551Z" }, + { url = "https://files.pythonhosted.org/packages/d4/8f/18d72b629783f5e8d045a76f5325c1e938e659a9e4da79c7dcd10169a48d/greenlet-3.4.0-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:d70012e51df2dbbccfaf63a40aaf9b40c8bed37c3e3a38751c926301ce538ece", size = 294681, upload-time = "2026-04-08T15:52:35.778Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ad/5fa86ec46769c4153820d58a04062285b3b9e10ba3d461ee257b68dcbf53/greenlet-3.4.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a58bec0751f43068cd40cff31bb3ca02ad6000b3a51ca81367af4eb5abc480c8", size = 658899, upload-time = "2026-04-08T16:24:43.32Z" }, + { url = "https://files.pythonhosted.org/packages/43/f0/4e8174ca0e87ae748c409f055a1ba161038c43cc0a5a6f1433a26ac2e5bf/greenlet-3.4.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05fa0803561028f4b2e3b490ee41216a842eaee11aed004cc343a996d9523aa2", size = 665284, upload-time = "2026-04-08T16:31:02.833Z" }, + { url = "https://files.pythonhosted.org/packages/ef/92/466b0d9afd44b8af623139a3599d651c7564fa4152f25f117e1ee5949ffb/greenlet-3.4.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c4cd56a9eb7a6444edbc19062f7b6fbc8f287c663b946e3171d899693b1c19fa", size = 665872, upload-time = "2026-04-08T16:40:43.912Z" }, + { url = "https://files.pythonhosted.org/packages/19/da/991cf7cd33662e2df92a1274b7eb4d61769294d38a1bba8a45f31364845e/greenlet-3.4.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e60d38719cb80b3ab5e85f9f1aed4960acfde09868af6762ccb27b260d68f4ed", size = 661861, upload-time = "2026-04-08T15:56:37.269Z" }, + { url = "https://files.pythonhosted.org/packages/0d/14/3395a7ef3e260de0325152ddfe19dffb3e49fe10873b94654352b53ad48e/greenlet-3.4.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:1f85f204c4d54134ae850d401fa435c89cd667d5ce9dc567571776b45941af72", size = 489237, upload-time = "2026-04-08T16:43:09.993Z" }, + { url = "https://files.pythonhosted.org/packages/36/c5/6c2c708e14db3d9caea4b459d8464f58c32047451142fe2cfd90e7458f41/greenlet-3.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7f50c804733b43eded05ae694691c9aa68bca7d0a867d67d4a3f514742a2d53f", size = 1622182, upload-time = "2026-04-08T16:26:24.777Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4c/50c5fed19378e11a29fabab1f6be39ea95358f4a0a07e115a51ca93385d8/greenlet-3.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2d4f0635dc4aa638cda4b2f5a07ae9a2cff9280327b581a3fcb6f317b4fbc38a", size = 1685050, upload-time = "2026-04-08T15:57:36.453Z" }, + { url = "https://files.pythonhosted.org/packages/db/72/85ae954d734703ab48e622c59d4ce35d77ce840c265814af9c078cacc7aa/greenlet-3.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1a4a48f24681300c640f143ba7c404270e1ebbbcf34331d7104a4ff40f8ea705", size = 245554, upload-time = "2026-04-08T17:03:50.044Z" }, +] + +[[package]] +name = "groovy" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/36/bbdede67400277bef33d3ec0e6a31750da972c469f75966b4930c753218f/groovy-0.1.2.tar.gz", hash = "sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083", size = 17325, upload-time = "2025-02-28T20:24:56.068Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090, upload-time = "2025-02-28T20:24:55.152Z" }, +] + +[[package]] +name = "grpcio" +version = "1.80.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/48/af6173dbca4454f4637a4678b67f52ca7e0c1ed7d5894d89d434fecede05/grpcio-1.80.0.tar.gz", hash = "sha256:29aca15edd0688c22ba01d7cc01cb000d72b2033f4a3c72a81a19b56fd143257", size = 12978905, upload-time = "2026-03-30T08:49:10.502Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/cd/bb7b7e54084a344c03d68144450da7ddd5564e51a298ae1662de65f48e2d/grpcio-1.80.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:886457a7768e408cdce226ad1ca67d2958917d306523a0e21e1a2fdaa75c9c9c", size = 6050363, upload-time = "2026-03-30T08:46:20.894Z" }, + { url = "https://files.pythonhosted.org/packages/16/02/1417f5c3460dea65f7a2e3c14e8b31e77f7ffb730e9bfadd89eda7a9f477/grpcio-1.80.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:7b641fc3f1dc647bfd80bd713addc68f6d145956f64677e56d9ebafc0bd72388", size = 12026037, upload-time = "2026-03-30T08:46:25.144Z" }, + { url = "https://files.pythonhosted.org/packages/43/98/c910254eedf2cae368d78336a2de0678e66a7317d27c02522392f949b5c6/grpcio-1.80.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:33eb763f18f006dc7fee1e69831d38d23f5eccd15b2e0f92a13ee1d9242e5e02", size = 6602306, upload-time = "2026-03-30T08:46:27.593Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f8/88ca4e78c077b2b2113d95da1e1ab43efd43d723c9a0397d26529c2c1a56/grpcio-1.80.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:52d143637e3872633fc7dd7c3c6a1c84e396b359f3a72e215f8bf69fd82084fc", size = 7301535, upload-time = "2026-03-30T08:46:29.556Z" }, + { url = "https://files.pythonhosted.org/packages/f9/96/f28660fe2fe0f153288bf4a04e4910b7309d442395135c88ed4f5b3b8b40/grpcio-1.80.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c51bf8ac4575af2e0678bccfb07e47321fc7acb5049b4482832c5c195e04e13a", size = 6808669, upload-time = "2026-03-30T08:46:31.984Z" }, + { url = "https://files.pythonhosted.org/packages/47/eb/3f68a5e955779c00aeef23850e019c1c1d0e032d90633ba49c01ad5a96e0/grpcio-1.80.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:50a9871536d71c4fba24ee856abc03a87764570f0c457dd8db0b4018f379fed9", size = 7409489, upload-time = "2026-03-30T08:46:34.684Z" }, + { url = "https://files.pythonhosted.org/packages/5b/a7/d2f681a4bfb881be40659a309771f3bdfbfdb1190619442816c3f0ffc079/grpcio-1.80.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a72d84ad0514db063e21887fbacd1fd7acb4d494a564cae22227cd45c7fbf199", size = 8423167, upload-time = "2026-03-30T08:46:36.833Z" }, + { url = "https://files.pythonhosted.org/packages/97/8a/29b4589c204959aa35ce5708400a05bba72181807c45c47b3ec000c39333/grpcio-1.80.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f7691a6788ad9196872f95716df5bc643ebba13c97140b7a5ee5c8e75d1dea81", size = 7846761, upload-time = "2026-03-30T08:46:40.091Z" }, + { url = "https://files.pythonhosted.org/packages/6b/d2/ed143e097230ee121ac5848f6ff14372dba91289b10b536d54fb1b7cbae7/grpcio-1.80.0-cp310-cp310-win32.whl", hash = "sha256:46c2390b59d67f84e882694d489f5b45707c657832d7934859ceb8c33f467069", size = 4156534, upload-time = "2026-03-30T08:46:42.026Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c9/df8279bb49b29409995e95efa85b72973d62f8aeff89abee58c91f393710/grpcio-1.80.0-cp310-cp310-win_amd64.whl", hash = "sha256:dc053420fc75749c961e2a4c906398d7c15725d36ccc04ae6d16093167223b58", size = 4889869, upload-time = "2026-03-30T08:46:44.219Z" }, + { url = "https://files.pythonhosted.org/packages/5d/db/1d56e5f5823257b291962d6c0ce106146c6447f405b60b234c4f222a7cde/grpcio-1.80.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:dfab85db094068ff42e2a3563f60ab3dddcc9d6488a35abf0132daec13209c8a", size = 6055009, upload-time = "2026-03-30T08:46:46.265Z" }, + { url = "https://files.pythonhosted.org/packages/6e/18/c83f3cad64c5ca63bca7e91e5e46b0d026afc5af9d0a9972472ceba294b3/grpcio-1.80.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:5c07e82e822e1161354e32da2662f741a4944ea955f9f580ec8fb409dd6f6060", size = 12035295, upload-time = "2026-03-30T08:46:49.099Z" }, + { url = "https://files.pythonhosted.org/packages/0f/8e/e14966b435be2dda99fbe89db9525ea436edc79780431a1c2875a3582644/grpcio-1.80.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba0915d51fd4ced2db5ff719f84e270afe0e2d4c45a7bdb1e8d036e4502928c2", size = 6610297, upload-time = "2026-03-30T08:46:52.123Z" }, + { url = "https://files.pythonhosted.org/packages/cc/26/d5eb38f42ce0e3fdc8174ea4d52036ef8d58cc4426cb800f2610f625dd75/grpcio-1.80.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:3cb8130ba457d2aa09fa6b7c3ed6b6e4e6a2685fce63cb803d479576c4d80e21", size = 7300208, upload-time = "2026-03-30T08:46:54.859Z" }, + { url = "https://files.pythonhosted.org/packages/25/51/bd267c989f85a17a5b3eea65a6feb4ff672af41ca614e5a0279cc0ea381c/grpcio-1.80.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:09e5e478b3d14afd23f12e49e8b44c8684ac3c5f08561c43a5b9691c54d136ab", size = 6813442, upload-time = "2026-03-30T08:46:57.056Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d9/d80eef735b19e9169e30164bbf889b46f9df9127598a83d174eb13a48b26/grpcio-1.80.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:00168469238b022500e486c1c33916acf2f2a9b2c022202cf8a1885d2e3073c1", size = 7414743, upload-time = "2026-03-30T08:46:59.682Z" }, + { url = "https://files.pythonhosted.org/packages/de/f2/567f5bd5054398ed6b0509b9a30900376dcf2786bd936812098808b49d8d/grpcio-1.80.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8502122a3cc1714038e39a0b071acb1207ca7844208d5ea0d091317555ee7106", size = 8426046, upload-time = "2026-03-30T08:47:02.474Z" }, + { url = "https://files.pythonhosted.org/packages/62/29/73ef0141b4732ff5eacd68430ff2512a65c004696997f70476a83e548e7e/grpcio-1.80.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce1794f4ea6cc3ca29463f42d665c32ba1b964b48958a66497917fe9069f26e6", size = 7851641, upload-time = "2026-03-30T08:47:05.462Z" }, + { url = "https://files.pythonhosted.org/packages/46/69/abbfa360eb229a8623bab5f5a4f8105e445bd38ce81a89514ba55d281ad0/grpcio-1.80.0-cp311-cp311-win32.whl", hash = "sha256:51b4a7189b0bef2aa30adce3c78f09c83526cf3dddb24c6a96555e3b97340440", size = 4154368, upload-time = "2026-03-30T08:47:08.027Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d4/ae92206d01183b08613e846076115f5ac5991bae358d2a749fa864da5699/grpcio-1.80.0-cp311-cp311-win_amd64.whl", hash = "sha256:02e64bb0bb2da14d947a49e6f120a75e947250aebe65f9629b62bb1f5c14e6e9", size = 4894235, upload-time = "2026-03-30T08:47:10.839Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e8/a2b749265eb3415abc94f2e619bbd9e9707bebdda787e61c593004ec927a/grpcio-1.80.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:c624cc9f1008361014378c9d776de7182b11fe8b2e5a81bc69f23a295f2a1ad0", size = 6015616, upload-time = "2026-03-30T08:47:13.428Z" }, + { url = "https://files.pythonhosted.org/packages/3e/97/b1282161a15d699d1e90c360df18d19165a045ce1c343c7f313f5e8a0b77/grpcio-1.80.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:f49eddcac43c3bf350c0385366a58f36bed8cc2c0ec35ef7b74b49e56552c0c2", size = 12014204, upload-time = "2026-03-30T08:47:15.873Z" }, + { url = "https://files.pythonhosted.org/packages/6e/5e/d319c6e997b50c155ac5a8cb12f5173d5b42677510e886d250d50264949d/grpcio-1.80.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d334591df610ab94714048e0d5b4f3dd5ad1bee74dfec11eee344220077a79de", size = 6563866, upload-time = "2026-03-30T08:47:18.588Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f6/fdd975a2cb4d78eb67769a7b3b3830970bfa2e919f1decf724ae4445f42c/grpcio-1.80.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0cb517eb1d0d0aaf1d87af7cc5b801d686557c1d88b2619f5e31fab3c2315921", size = 7273060, upload-time = "2026-03-30T08:47:21.113Z" }, + { url = "https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e78c4ac0d97dc2e569b2f4bcbbb447491167cb358d1a389fc4af71ab6f70411", size = 6782121, upload-time = "2026-03-30T08:47:23.827Z" }, + { url = "https://files.pythonhosted.org/packages/ca/84/36c6dcfddc093e108141f757c407902a05085e0c328007cb090d56646cdf/grpcio-1.80.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2ed770b4c06984f3b47eb0517b1c69ad0b84ef3f40128f51448433be904634cd", size = 7383811, upload-time = "2026-03-30T08:47:26.517Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ef/f3a77e3dc5b471a0ec86c564c98d6adfa3510d38f8ee99010410858d591e/grpcio-1.80.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:256507e2f524092f1473071a05e65a5b10d84b82e3ff24c5b571513cfaa61e2f", size = 8393860, upload-time = "2026-03-30T08:47:29.439Z" }, + { url = "https://files.pythonhosted.org/packages/9b/8d/9d4d27ed7f33d109c50d6b5ce578a9914aa68edab75d65869a17e630a8d1/grpcio-1.80.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a6284a5d907c37db53350645567c522be314bac859a64a7a5ca63b77bb7958f", size = 7830132, upload-time = "2026-03-30T08:47:33.254Z" }, + { url = "https://files.pythonhosted.org/packages/14/e4/9990b41c6d7a44e1e9dee8ac11d7a9802ba1378b40d77468a7761d1ad288/grpcio-1.80.0-cp312-cp312-win32.whl", hash = "sha256:c71309cfce2f22be26aa4a847357c502db6c621f1a49825ae98aa0907595b193", size = 4140904, upload-time = "2026-03-30T08:47:35.319Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2c/296f6138caca1f4b92a31ace4ae1b87dab692fc16a7a3417af3bb3c805bf/grpcio-1.80.0-cp312-cp312-win_amd64.whl", hash = "sha256:9fe648599c0e37594c4809d81a9e77bd138cc82eb8baa71b6a86af65426723ff", size = 4880944, upload-time = "2026-03-30T08:47:37.831Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/7c3c25789e3f069e581dc342e03613c5b1cb012c4e8c7d9d5cf960a75856/grpcio-1.80.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:e9e408fc016dffd20661f0126c53d8a31c2821b5c13c5d67a0f5ed5de93319ad", size = 6017243, upload-time = "2026-03-30T08:47:40.075Z" }, + { url = "https://files.pythonhosted.org/packages/04/19/21a9806eb8240e174fd1ab0cd5b9aa948bb0e05c2f2f55f9d5d7405e6d08/grpcio-1.80.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:92d787312e613754d4d8b9ca6d3297e69994a7912a32fa38c4c4e01c272974b0", size = 12010840, upload-time = "2026-03-30T08:47:43.11Z" }, + { url = "https://files.pythonhosted.org/packages/18/3a/23347d35f76f639e807fb7a36fad3068aed100996849a33809591f26eca6/grpcio-1.80.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac393b58aa16991a2f1144ec578084d544038c12242da3a215966b512904d0f", size = 6567644, upload-time = "2026-03-30T08:47:46.806Z" }, + { url = "https://files.pythonhosted.org/packages/ff/40/96e07ecb604a6a67ae6ab151e3e35b132875d98bc68ec65f3e5ab3e781d7/grpcio-1.80.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:68e5851ac4b9afe07e7f84483803ad167852570d65326b34d54ca560bfa53fb6", size = 7277830, upload-time = "2026-03-30T08:47:49.643Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e2/da1506ecea1f34a5e365964644b35edef53803052b763ca214ba3870c856/grpcio-1.80.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:873ff5d17d68992ef6605330127425d2fc4e77e612fa3c3e0ed4e668685e3140", size = 6783216, upload-time = "2026-03-30T08:47:52.817Z" }, + { url = "https://files.pythonhosted.org/packages/44/83/3b20ff58d0c3b7f6caaa3af9a4174d4023701df40a3f39f7f1c8e7c48f9d/grpcio-1.80.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2bea16af2750fd0a899bf1abd9022244418b55d1f37da2202249ba4ba673838d", size = 7385866, upload-time = "2026-03-30T08:47:55.687Z" }, + { url = "https://files.pythonhosted.org/packages/47/45/55c507599c5520416de5eefecc927d6a0d7af55e91cfffb2e410607e5744/grpcio-1.80.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba0db34f7e1d803a878284cd70e4c63cb6ae2510ba51937bf8f45ba997cefcf7", size = 8391602, upload-time = "2026-03-30T08:47:58.303Z" }, + { url = "https://files.pythonhosted.org/packages/10/bb/dd06f4c24c01db9cf11341b547d0a016b2c90ed7dbbb086a5710df7dd1d7/grpcio-1.80.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8eb613f02d34721f1acf3626dfdb3545bd3c8505b0e52bf8b5710a28d02e8aa7", size = 7826752, upload-time = "2026-03-30T08:48:01.311Z" }, + { url = "https://files.pythonhosted.org/packages/f9/1e/9d67992ba23371fd63d4527096eb8c6b76d74d52b500df992a3343fd7251/grpcio-1.80.0-cp313-cp313-win32.whl", hash = "sha256:93b6f823810720912fd131f561f91f5fed0fda372b6b7028a2681b8194d5d294", size = 4142310, upload-time = "2026-03-30T08:48:04.594Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e6/283326a27da9e2c3038bc93eeea36fb118ce0b2d03922a9cda6688f53c5b/grpcio-1.80.0-cp313-cp313-win_amd64.whl", hash = "sha256:e172cf795a3ba5246d3529e4d34c53db70e888fa582a8ffebd2e6e48bc0cba50", size = 4882833, upload-time = "2026-03-30T08:48:07.363Z" }, + { url = "https://files.pythonhosted.org/packages/c5/6d/e65307ce20f5a09244ba9e9d8476e99fb039de7154f37fb85f26978b59c3/grpcio-1.80.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:3d4147a97c8344d065d01bbf8b6acec2cf86fb0400d40696c8bdad34a64ffc0e", size = 6017376, upload-time = "2026-03-30T08:48:10.005Z" }, + { url = "https://files.pythonhosted.org/packages/69/10/9cef5d9650c72625a699c549940f0abb3c4bfdb5ed45a5ce431f92f31806/grpcio-1.80.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d8e11f167935b3eb089ac9038e1a063e6d7dbe995c0bb4a661e614583352e76f", size = 12018133, upload-time = "2026-03-30T08:48:12.927Z" }, + { url = "https://files.pythonhosted.org/packages/04/82/983aabaad82ba26113caceeb9091706a0696b25da004fe3defb5b346e15b/grpcio-1.80.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f14b618fc30de822681ee986cfdcc2d9327229dc4c98aed16896761cacd468b9", size = 6574748, upload-time = "2026-03-30T08:48:16.386Z" }, + { url = "https://files.pythonhosted.org/packages/07/d7/031666ef155aa0bf399ed7e19439656c38bbd143779ae0861b038ce82abd/grpcio-1.80.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4ed39fbdcf9b87370f6e8df4e39ca7b38b3e5e9d1b0013c7b6be9639d6578d14", size = 7277711, upload-time = "2026-03-30T08:48:19.627Z" }, + { url = "https://files.pythonhosted.org/packages/e8/43/f437a78f7f4f1d311804189e8f11fb311a01049b2e08557c1068d470cb2e/grpcio-1.80.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2dcc70e9f0ba987526e8e8603a610fb4f460e42899e74e7a518bf3c68fe1bf05", size = 6785372, upload-time = "2026-03-30T08:48:22.373Z" }, + { url = "https://files.pythonhosted.org/packages/93/3d/f6558e9c6296cb4227faa5c43c54a34c68d32654b829f53288313d16a86e/grpcio-1.80.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:448c884b668b868562b1bda833c5fce6272d26e1926ec46747cda05741d302c1", size = 7395268, upload-time = "2026-03-30T08:48:25.638Z" }, + { url = "https://files.pythonhosted.org/packages/06/21/0fdd77e84720b08843c371a2efa6f2e19dbebf56adc72df73d891f5506f0/grpcio-1.80.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a1dc80fe55685b4a543555e6eef975303b36c8db1023b1599b094b92aa77965f", size = 8392000, upload-time = "2026-03-30T08:48:28.974Z" }, + { url = "https://files.pythonhosted.org/packages/f5/68/67f4947ed55d2e69f2cc199ab9fd85e0a0034d813bbeef84df6d2ba4d4b7/grpcio-1.80.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:31b9ac4ad1aa28ffee5503821fafd09e4da0a261ce1c1281c6c8da0423c83b6e", size = 7828477, upload-time = "2026-03-30T08:48:32.054Z" }, + { url = "https://files.pythonhosted.org/packages/44/b6/8d4096691b2e385e8271911a0de4f35f0a6c7d05aff7098e296c3de86939/grpcio-1.80.0-cp314-cp314-win32.whl", hash = "sha256:367ce30ba67d05e0592470428f0ec1c31714cab9ef19b8f2e37be1f4c7d32fae", size = 4218563, upload-time = "2026-03-30T08:48:34.538Z" }, + { url = "https://files.pythonhosted.org/packages/e5/8c/bbe6baf2557262834f2070cf668515fa308b2d38a4bbf771f8f7872a7036/grpcio-1.80.0-cp314-cp314-win_amd64.whl", hash = "sha256:3b01e1f5464c583d2f567b2e46ff0d516ef979978f72091fd81f5ab7fa6e2e7f", size = 5019457, upload-time = "2026-03-30T08:48:37.308Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "hf-gradio" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gradio-client" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/d8/1771d6f1591099ecd10776782d08c6f87e7c2501f9e9e6ffb7c2ecc07d0c/hf_gradio-0.3.0.tar.gz", hash = "sha256:e74a0f9eab14a1d6f54c523c2192aa5283ca51f01605f661b2542387da5b9fc0", size = 6235, upload-time = "2026-03-27T13:13:43.9Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/52/04816d2a15691a63cec3187e3e592c4493448eb4834492eadd532972b035/hf_gradio-0.3.0-py3-none-any.whl", hash = "sha256:159d33d1f0affae8164d29c0c51a63dfcc0bbc90803b07c6f139137206a796ae", size = 4154, upload-time = "2026-03-23T19:50:08.586Z" }, +] + +[[package]] +name = "hf-transfer" +version = "0.1.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/eb/8fc64f40388c29ce8ce3b2b180a089d4d6b25b1d0d232d016704cb852104/hf_transfer-0.1.9.tar.gz", hash = "sha256:035572865dab29d17e783fbf1e84cf1cb24f3fcf8f1b17db1cfc7fdf139f02bf", size = 25201, upload-time = "2025-01-07T10:05:12.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/78/0dce00208f585fae675f40033ef9a30dedfa83665d5ac79f16beb4a0a6c2/hf_transfer-0.1.9-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:6e94e8822da79573c9b6ae4d6b2f847c59a7a06c5327d7db20751b68538dc4f6", size = 1386084, upload-time = "2025-01-07T10:04:47.874Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2e/3d60b1a9e9f29a2152aa66c823bf5e399ae7be3fef310ff0de86779c5d2d/hf_transfer-0.1.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ebc4ab9023414880c8b1d3c38174d1c9989eb5022d37e814fa91a3060123eb0", size = 1343558, upload-time = "2025-01-07T10:04:42.313Z" }, + { url = "https://files.pythonhosted.org/packages/fb/38/130a5ac3747f104033591bcac1c961cb1faadfdc91704f59b09c0b465ff2/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8674026f21ed369aa2a0a4b46000aca850fc44cd2b54af33a172ce5325b4fc82", size = 3726676, upload-time = "2025-01-07T10:04:11.539Z" }, + { url = "https://files.pythonhosted.org/packages/15/a1/f4e27c5ad17aac616ae0849e2aede5aae31db8267a948c6b3eeb9fd96446/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a736dfbb2c84f5a2c975478ad200c0c8bfcb58a25a35db402678fb87ce17fa4", size = 3062920, upload-time = "2025-01-07T10:04:16.297Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0d/727abdfba39bc3f1132cfa4c970588c2c0bb0d82fe2d645cc10f4e2f8e0b/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:504b8427fd785dd8546d53b9fafe6e436bd7a3adf76b9dce556507650a7b4567", size = 3578681, upload-time = "2025-01-07T10:04:29.702Z" }, + { url = "https://files.pythonhosted.org/packages/50/d0/2b213eb1ea8b1252ccaf1a6c804d0aba03fea38aae4124df6a3acb70511a/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c7fc1b85f4d0f76e452765d7648c9f4bfd0aedb9ced2ae1ebfece2d8cfaf8e2", size = 3398837, upload-time = "2025-01-07T10:04:22.778Z" }, + { url = "https://files.pythonhosted.org/packages/8c/8a/79dbce9006e0bd6b74516f97451a7b7c64dbbb426df15d901dd438cfeee3/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d991376f0eac70a60f0cbc95602aa708a6f7c8617f28b4945c1431d67b8e3c8", size = 3546986, upload-time = "2025-01-07T10:04:36.415Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f7/9ac239b6ee6fe0bad130325d987a93ea58c4118e50479f0786f1733b37e8/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e6ac4eddcd99575ed3735ed911ddf9d1697e2bd13aa3f0ad7e3904dd4863842e", size = 4071715, upload-time = "2025-01-07T10:04:53.224Z" }, + { url = "https://files.pythonhosted.org/packages/d8/a3/0ed697279f5eeb7a40f279bd783cf50e6d0b91f24120dcf66ef2cf8822b4/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:57fd9880da1ee0f47250f735f791fab788f0aa1ee36afc49f761349869c8b4d9", size = 3388081, upload-time = "2025-01-07T10:04:57.818Z" }, + { url = "https://files.pythonhosted.org/packages/dc/eb/47e477bdf1d784f31c7540db6cc8c354b777e51a186897a7abda34517f36/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:5d561f0520f493c66b016d99ceabe69c23289aa90be38dd802d2aef279f15751", size = 3658654, upload-time = "2025-01-07T10:05:03.168Z" }, + { url = "https://files.pythonhosted.org/packages/45/07/6661e43fbee09594a8a5e9bb778107d95fe38dac4c653982afe03d32bd4d/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a5b366d34cd449fe9b20ef25941e6eef0460a2f74e7389f02e673e1f88ebd538", size = 3690551, upload-time = "2025-01-07T10:05:09.238Z" }, + { url = "https://files.pythonhosted.org/packages/81/f5/461d2e5f307e5048289b1168d5c642ae3bb2504e88dff1a38b92ed990a21/hf_transfer-0.1.9-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e66acf91df4a8b72f60223059df3003062a5ae111757187ed1a06750a30e911b", size = 1393046, upload-time = "2025-01-07T10:04:51.003Z" }, + { url = "https://files.pythonhosted.org/packages/41/ba/8d9fd9f1083525edfcb389c93738c802f3559cb749324090d7109c8bf4c2/hf_transfer-0.1.9-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:8669dbcc7a3e2e8d61d42cd24da9c50d57770bd74b445c65123291ca842a7e7a", size = 1348126, upload-time = "2025-01-07T10:04:45.712Z" }, + { url = "https://files.pythonhosted.org/packages/8e/a2/cd7885bc9959421065a6fae0fe67b6c55becdeda4e69b873e52976f9a9f0/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fd0167c4407a3bc4cdd0307e65ada2294ec04f1813d8a69a5243e379b22e9d8", size = 3728604, upload-time = "2025-01-07T10:04:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/f6/2e/a072cf196edfeda3310c9a5ade0a0fdd785e6154b3ce24fc738c818da2a7/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee8b10afedcb75f71091bcc197c526a6ebf5c58bbbadb34fdeee6160f55f619f", size = 3064995, upload-time = "2025-01-07T10:04:18.663Z" }, + { url = "https://files.pythonhosted.org/packages/c2/84/aec9ef4c0fab93c1ea2b1badff38c78b4b2f86f0555b26d2051dbc920cde/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5828057e313de59300dd1abb489444bc452efe3f479d3c55b31a8f680936ba42", size = 3580908, upload-time = "2025-01-07T10:04:32.834Z" }, + { url = "https://files.pythonhosted.org/packages/29/63/b560d39651a56603d64f1a0212d0472a44cbd965db2fa62b99d99cb981bf/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc6bd19e1cc177c66bdef15ef8636ad3bde79d5a4f608c158021153b4573509d", size = 3400839, upload-time = "2025-01-07T10:04:26.122Z" }, + { url = "https://files.pythonhosted.org/packages/d6/d8/f87ea6f42456254b48915970ed98e993110521e9263472840174d32c880d/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdca9bfb89e6f8f281890cc61a8aff2d3cecaff7e1a4d275574d96ca70098557", size = 3552664, upload-time = "2025-01-07T10:04:40.123Z" }, + { url = "https://files.pythonhosted.org/packages/d6/56/1267c39b65fc8f4e2113b36297320f102718bf5799b544a6cbe22013aa1d/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:89a23f58b7b7effbc047b8ca286f131b17728c99a9f972723323003ffd1bb916", size = 4073732, upload-time = "2025-01-07T10:04:55.624Z" }, + { url = "https://files.pythonhosted.org/packages/82/1a/9c748befbe3decf7cb415e34f8a0c3789a0a9c55910dea73d581e48c0ce5/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:dc7fff1345980d6c0ebb92c811d24afa4b98b3e07ed070c8e38cc91fd80478c5", size = 3390096, upload-time = "2025-01-07T10:04:59.98Z" }, + { url = "https://files.pythonhosted.org/packages/72/85/4c03da147b6b4b7cb12e074d3d44eee28604a387ed0eaf7eaaead5069c57/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:1a6bd16c667ebe89a069ca163060127a794fa3a3525292c900b8c8cc47985b0d", size = 3664743, upload-time = "2025-01-07T10:05:05.416Z" }, + { url = "https://files.pythonhosted.org/packages/e7/6e/e597b04f753f1b09e6893075d53a82a30c13855cbaa791402695b01e369f/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d2fde99d502093ade3ab1b53f80da18480e9902aa960dab7f74fb1b9e5bc5746", size = 3695243, upload-time = "2025-01-07T10:05:11.411Z" }, + { url = "https://files.pythonhosted.org/packages/09/89/d4e234727a26b2546c8fb70a276cd924260d60135f2165bf8b9ed67bb9a4/hf_transfer-0.1.9-cp38-abi3-win32.whl", hash = "sha256:435cc3cdc8524ce57b074032b8fd76eed70a4224d2091232fa6a8cef8fd6803e", size = 1086605, upload-time = "2025-01-07T10:05:18.873Z" }, + { url = "https://files.pythonhosted.org/packages/a1/14/f1e15b851d1c2af5b0b1a82bf8eb10bda2da62d98180220ba6fd8879bb5b/hf_transfer-0.1.9-cp38-abi3-win_amd64.whl", hash = "sha256:16f208fc678911c37e11aa7b586bc66a37d02e636208f18b6bc53d29b5df40ad", size = 1160240, upload-time = "2025-01-07T10:05:14.324Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/92/ec9ad04d0b5728dca387a45af7bc98fbb0d73b2118759f5f6038b61a57e8/hf_xet-1.4.3.tar.gz", hash = "sha256:8ddedb73c8c08928c793df2f3401ec26f95be7f7e516a7bee2fbb546f6676113", size = 670477, upload-time = "2026-03-31T22:40:07.874Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/43/724d307b34e353da0abd476e02f72f735cdd2bc86082dee1b32ea0bfee1d/hf_xet-1.4.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:7551659ba4f1e1074e9623996f28c3873682530aee0a846b7f2f066239228144", size = 3800935, upload-time = "2026-03-31T22:39:49.618Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d2/8bee5996b699262edb87dbb54118d287c0e1b2fc78af7cdc41857ba5e3c4/hf_xet-1.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bee693ada985e7045997f05f081d0e12c4c08bd7626dc397f8a7c487e6c04f7f", size = 3558942, upload-time = "2026-03-31T22:39:47.938Z" }, + { url = "https://files.pythonhosted.org/packages/c3/a1/e993d09cbe251196fb60812b09a58901c468127b7259d2bf0f68bf6088eb/hf_xet-1.4.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21644b404bb0100fe3857892f752c4d09642586fd988e61501c95bbf44b393a3", size = 4207657, upload-time = "2026-03-31T22:39:39.69Z" }, + { url = "https://files.pythonhosted.org/packages/64/44/9eb6d21e5c34c63e5e399803a6932fa983cabdf47c0ecbcfe7ea97684b8c/hf_xet-1.4.3-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:987f09cfe418237812896a6736b81b1af02a3a6dcb4b4944425c4c4fca7a7cf8", size = 3986765, upload-time = "2026-03-31T22:39:37.936Z" }, + { url = "https://files.pythonhosted.org/packages/ea/7b/8ad6f16fdb82f5f7284a34b5ec48645bd575bdcd2f6f0d1644775909c486/hf_xet-1.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:60cf7fc43a99da0a853345cf86d23738c03983ee5249613a6305d3e57a5dca74", size = 4188162, upload-time = "2026-03-31T22:39:58.382Z" }, + { url = "https://files.pythonhosted.org/packages/1b/c4/39d6e136cbeea9ca5a23aad4b33024319222adbdc059ebcda5fc7d9d5ff4/hf_xet-1.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2815a49a7a59f3e2edf0cf113ae88e8cb2ca2a221bf353fb60c609584f4884d4", size = 4424525, upload-time = "2026-03-31T22:40:00.225Z" }, + { url = "https://files.pythonhosted.org/packages/46/f2/adc32dae6bdbc367853118b9878139ac869419a4ae7ba07185dc31251b76/hf_xet-1.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:42ee323265f1e6a81b0e11094564fb7f7e0ec75b5105ffd91ae63f403a11931b", size = 3671610, upload-time = "2026-03-31T22:40:10.42Z" }, + { url = "https://files.pythonhosted.org/packages/e2/19/25d897dcc3f81953e0c2cde9ec186c7a0fee413eb0c9a7a9130d87d94d3a/hf_xet-1.4.3-cp313-cp313t-win_arm64.whl", hash = "sha256:27c976ba60079fb8217f485b9c5c7fcd21c90b0367753805f87cb9f3cdc4418a", size = 3528529, upload-time = "2026-03-31T22:40:09.106Z" }, + { url = "https://files.pythonhosted.org/packages/ec/36/3e8f85ca9fe09b8de2b2e10c63b3b3353d7dda88a0b3d426dffbe7b8313b/hf_xet-1.4.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5251d5ece3a81815bae9abab41cf7ddb7bcb8f56411bce0827f4a3071c92fdc6", size = 3801019, upload-time = "2026-03-31T22:39:56.651Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9c/defb6cb1de28bccb7bd8d95f6e60f72a3d3fa4cb3d0329c26fb9a488bfe7/hf_xet-1.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1feb0f3abeacee143367c326a128a2e2b60868ec12a36c225afb1d6c5a05e6d2", size = 3558746, upload-time = "2026-03-31T22:39:54.766Z" }, + { url = "https://files.pythonhosted.org/packages/c1/bd/8d001191893178ff8e826e46ad5299446e62b93cd164e17b0ffea08832ec/hf_xet-1.4.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8b301fc150290ca90b4fccd079829b84bb4786747584ae08b94b4577d82fb791", size = 4207692, upload-time = "2026-03-31T22:39:46.246Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/6790b402803250e9936435613d3a78b9aaeee7973439f0918848dde58309/hf_xet-1.4.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:d972fbe95ddc0d3c0fc49b31a8a69f47db35c1e3699bf316421705741aab6653", size = 3986281, upload-time = "2026-03-31T22:39:44.648Z" }, + { url = "https://files.pythonhosted.org/packages/51/56/ea62552fe53db652a9099eda600b032d75554d0e86c12a73824bfedef88b/hf_xet-1.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c5b48db1ee344a805a1b9bd2cda9b6b65fe77ed3787bd6e87ad5521141d317cd", size = 4187414, upload-time = "2026-03-31T22:40:04.951Z" }, + { url = "https://files.pythonhosted.org/packages/7d/f5/bc1456d4638061bea997e6d2db60a1a613d7b200e0755965ec312dc1ef79/hf_xet-1.4.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:22bdc1f5fb8b15bf2831440b91d1c9bbceeb7e10c81a12e8d75889996a5c9da8", size = 4424368, upload-time = "2026-03-31T22:40:06.347Z" }, + { url = "https://files.pythonhosted.org/packages/e4/76/ab597bae87e1f06d18d3ecb8ed7f0d3c9a37037fc32ce76233d369273c64/hf_xet-1.4.3-cp314-cp314t-win_amd64.whl", hash = "sha256:0392c79b7cf48418cd61478c1a925246cf10639f4cd9d94368d8ca1e8df9ea07", size = 3672280, upload-time = "2026-03-31T22:40:16.401Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/2e462d34e23a09a74d73785dbed71cc5dbad82a72eee2ad60a72a554155d/hf_xet-1.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:681c92a07796325778a79d76c67011764ecc9042a8c3579332b61b63ae512075", size = 3528945, upload-time = "2026-03-31T22:40:14.995Z" }, + { url = "https://files.pythonhosted.org/packages/ac/9f/9c23e4a447b8f83120798f9279d0297a4d1360bdbf59ef49ebec78fe2545/hf_xet-1.4.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:d0da85329eaf196e03e90b84c2d0aca53bd4573d097a75f99609e80775f98025", size = 3805048, upload-time = "2026-03-31T22:39:53.105Z" }, + { url = "https://files.pythonhosted.org/packages/0b/f8/7aacb8e5f4a7899d39c787b5984e912e6c18b11be136ef13947d7a66d265/hf_xet-1.4.3-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:e23717ce4186b265f69afa66e6f0069fe7efbf331546f5c313d00e123dc84583", size = 3562178, upload-time = "2026-03-31T22:39:51.295Z" }, + { url = "https://files.pythonhosted.org/packages/df/9a/a24b26dc8a65f0ecc0fe5be981a19e61e7ca963b85e062c083f3a9100529/hf_xet-1.4.3-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc360b70c815bf340ed56c7b8c63aacf11762a4b099b2fe2c9bd6d6068668c08", size = 4212320, upload-time = "2026-03-31T22:39:42.922Z" }, + { url = "https://files.pythonhosted.org/packages/53/60/46d493db155d2ee2801b71fb1b0fd67696359047fdd8caee2c914cc50c79/hf_xet-1.4.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:39f2d2e9654cd9b4319885733993807aab6de9dfbd34c42f0b78338d6617421f", size = 3991546, upload-time = "2026-03-31T22:39:41.335Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f5/067363e1c96c6b17256910830d1b54099d06287e10f4ec6ec4e7e08371fc/hf_xet-1.4.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:49ad8a8cead2b56051aa84d7fce3e1335efe68df3cf6c058f22a65513885baac", size = 4193200, upload-time = "2026-03-31T22:40:01.936Z" }, + { url = "https://files.pythonhosted.org/packages/42/4b/53951592882d9c23080c7644542fda34a3813104e9e11fa1a7d82d419cb8/hf_xet-1.4.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7716d62015477a70ea272d2d68cd7cad140f61c52ee452e133e139abfe2c17ba", size = 4429392, upload-time = "2026-03-31T22:40:03.492Z" }, + { url = "https://files.pythonhosted.org/packages/8a/21/75a6c175b4e79662ad8e62f46a40ce341d8d6b206b06b4320d07d55b188c/hf_xet-1.4.3-cp37-abi3-win_amd64.whl", hash = "sha256:6b591fcad34e272a5b02607485e4f2a1334aebf1bc6d16ce8eb1eb8978ac2021", size = 3677359, upload-time = "2026-03-31T22:40:13.619Z" }, + { url = "https://files.pythonhosted.org/packages/8a/7c/44314ecd0e89f8b2b51c9d9e5e7a60a9c1c82024ac471d415860557d3cd8/hf_xet-1.4.3-cp37-abi3-win_arm64.whl", hash = "sha256:7c2c7e20bcfcc946dc67187c203463f5e932e395845d098cc2a93f5b67ca0b47", size = 3533664, upload-time = "2026-03-31T22:40:12.152Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httptools" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/46/120a669232c7bdedb9d52d4aeae7e6c7dfe151e99dc70802e2fc7a5e1993/httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9", size = 258961, upload-time = "2025-10-10T03:55:08.559Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/e5/c07e0bcf4ec8db8164e9f6738c048b2e66aabf30e7506f440c4cc6953f60/httptools-0.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:11d01b0ff1fe02c4c32d60af61a4d613b74fad069e47e06e9067758c01e9ac78", size = 204531, upload-time = "2025-10-10T03:54:20.887Z" }, + { url = "https://files.pythonhosted.org/packages/7e/4f/35e3a63f863a659f92ffd92bef131f3e81cf849af26e6435b49bd9f6f751/httptools-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d86c1e5afdc479a6fdabf570be0d3eb791df0ae727e8dbc0259ed1249998d4", size = 109408, upload-time = "2025-10-10T03:54:22.455Z" }, + { url = "https://files.pythonhosted.org/packages/f5/71/b0a9193641d9e2471ac541d3b1b869538a5fb6419d52fd2669fa9c79e4b8/httptools-0.7.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c8c751014e13d88d2be5f5f14fc8b89612fcfa92a9cc480f2bc1598357a23a05", size = 440889, upload-time = "2025-10-10T03:54:23.753Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d9/2e34811397b76718750fea44658cb0205b84566e895192115252e008b152/httptools-0.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:654968cb6b6c77e37b832a9be3d3ecabb243bbe7a0b8f65fbc5b6b04c8fcabed", size = 440460, upload-time = "2025-10-10T03:54:25.313Z" }, + { url = "https://files.pythonhosted.org/packages/01/3f/a04626ebeacc489866bb4d82362c0657b2262bef381d68310134be7f40bb/httptools-0.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b580968316348b474b020edf3988eecd5d6eec4634ee6561e72ae3a2a0e00a8a", size = 425267, upload-time = "2025-10-10T03:54:26.81Z" }, + { url = "https://files.pythonhosted.org/packages/a5/99/adcd4f66614db627b587627c8ad6f4c55f18881549bab10ecf180562e7b9/httptools-0.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d496e2f5245319da9d764296e86c5bb6fcf0cf7a8806d3d000717a889c8c0b7b", size = 424429, upload-time = "2025-10-10T03:54:28.174Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/ec8fc904a8fd30ba022dfa85f3bbc64c3c7cd75b669e24242c0658e22f3c/httptools-0.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cbf8317bfccf0fed3b5680c559d3459cccf1abe9039bfa159e62e391c7270568", size = 86173, upload-time = "2025-10-10T03:54:29.5Z" }, + { url = "https://files.pythonhosted.org/packages/9c/08/17e07e8d89ab8f343c134616d72eebfe03798835058e2ab579dcc8353c06/httptools-0.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:474d3b7ab469fefcca3697a10d11a32ee2b9573250206ba1e50d5980910da657", size = 206521, upload-time = "2025-10-10T03:54:31.002Z" }, + { url = "https://files.pythonhosted.org/packages/aa/06/c9c1b41ff52f16aee526fd10fbda99fa4787938aa776858ddc4a1ea825ec/httptools-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3c3b7366bb6c7b96bd72d0dbe7f7d5eead261361f013be5f6d9590465ea1c70", size = 110375, upload-time = "2025-10-10T03:54:31.941Z" }, + { url = "https://files.pythonhosted.org/packages/cc/cc/10935db22fda0ee34c76f047590ca0a8bd9de531406a3ccb10a90e12ea21/httptools-0.7.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:379b479408b8747f47f3b253326183d7c009a3936518cdb70db58cffd369d9df", size = 456621, upload-time = "2025-10-10T03:54:33.176Z" }, + { url = "https://files.pythonhosted.org/packages/0e/84/875382b10d271b0c11aa5d414b44f92f8dd53e9b658aec338a79164fa548/httptools-0.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cad6b591a682dcc6cf1397c3900527f9affef1e55a06c4547264796bbd17cf5e", size = 454954, upload-time = "2025-10-10T03:54:34.226Z" }, + { url = "https://files.pythonhosted.org/packages/30/e1/44f89b280f7e46c0b1b2ccee5737d46b3bb13136383958f20b580a821ca0/httptools-0.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb844698d11433d2139bbeeb56499102143beb582bd6c194e3ba69c22f25c274", size = 440175, upload-time = "2025-10-10T03:54:35.942Z" }, + { url = "https://files.pythonhosted.org/packages/6f/7e/b9287763159e700e335028bc1824359dc736fa9b829dacedace91a39b37e/httptools-0.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f65744d7a8bdb4bda5e1fa23e4ba16832860606fcc09d674d56e425e991539ec", size = 440310, upload-time = "2025-10-10T03:54:37.1Z" }, + { url = "https://files.pythonhosted.org/packages/b3/07/5b614f592868e07f5c94b1f301b5e14a21df4e8076215a3bccb830a687d8/httptools-0.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:135fbe974b3718eada677229312e97f3b31f8a9c8ffa3ae6f565bf808d5b6bcb", size = 86875, upload-time = "2025-10-10T03:54:38.421Z" }, + { url = "https://files.pythonhosted.org/packages/53/7f/403e5d787dc4942316e515e949b0c8a013d84078a915910e9f391ba9b3ed/httptools-0.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:38e0c83a2ea9746ebbd643bdfb521b9aa4a91703e2cd705c20443405d2fd16a5", size = 206280, upload-time = "2025-10-10T03:54:39.274Z" }, + { url = "https://files.pythonhosted.org/packages/2a/0d/7f3fd28e2ce311ccc998c388dd1c53b18120fda3b70ebb022b135dc9839b/httptools-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f25bbaf1235e27704f1a7b86cd3304eabc04f569c828101d94a0e605ef7205a5", size = 110004, upload-time = "2025-10-10T03:54:40.403Z" }, + { url = "https://files.pythonhosted.org/packages/84/a6/b3965e1e146ef5762870bbe76117876ceba51a201e18cc31f5703e454596/httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c15f37ef679ab9ecc06bfc4e6e8628c32a8e4b305459de7cf6785acd57e4d03", size = 517655, upload-time = "2025-10-10T03:54:41.347Z" }, + { url = "https://files.pythonhosted.org/packages/11/7d/71fee6f1844e6fa378f2eddde6c3e41ce3a1fb4b2d81118dd544e3441ec0/httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fe6e96090df46b36ccfaf746f03034e5ab723162bc51b0a4cf58305324036f2", size = 511440, upload-time = "2025-10-10T03:54:42.452Z" }, + { url = "https://files.pythonhosted.org/packages/22/a5/079d216712a4f3ffa24af4a0381b108aa9c45b7a5cc6eb141f81726b1823/httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f72fdbae2dbc6e68b8239defb48e6a5937b12218e6ffc2c7846cc37befa84362", size = 495186, upload-time = "2025-10-10T03:54:43.937Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9e/025ad7b65278745dee3bd0ebf9314934c4592560878308a6121f7f812084/httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e99c7b90a29fd82fea9ef57943d501a16f3404d7b9ee81799d41639bdaae412c", size = 499192, upload-time = "2025-10-10T03:54:45.003Z" }, + { url = "https://files.pythonhosted.org/packages/6d/de/40a8f202b987d43afc4d54689600ff03ce65680ede2f31df348d7f368b8f/httptools-0.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:3e14f530fefa7499334a79b0cf7e7cd2992870eb893526fb097d51b4f2d0f321", size = 86694, upload-time = "2025-10-10T03:54:45.923Z" }, + { url = "https://files.pythonhosted.org/packages/09/8f/c77b1fcbfd262d422f12da02feb0d218fa228d52485b77b953832105bb90/httptools-0.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6babce6cfa2a99545c60bfef8bee0cc0545413cb0018f617c8059a30ad985de3", size = 202889, upload-time = "2025-10-10T03:54:47.089Z" }, + { url = "https://files.pythonhosted.org/packages/0a/1a/22887f53602feaa066354867bc49a68fc295c2293433177ee90870a7d517/httptools-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:601b7628de7504077dd3dcb3791c6b8694bbd967148a6d1f01806509254fb1ca", size = 108180, upload-time = "2025-10-10T03:54:48.052Z" }, + { url = "https://files.pythonhosted.org/packages/32/6a/6aaa91937f0010d288d3d124ca2946d48d60c3a5ee7ca62afe870e3ea011/httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04c6c0e6c5fb0739c5b8a9eb046d298650a0ff38cf42537fc372b28dc7e4472c", size = 478596, upload-time = "2025-10-10T03:54:48.919Z" }, + { url = "https://files.pythonhosted.org/packages/6d/70/023d7ce117993107be88d2cbca566a7c1323ccbaf0af7eabf2064fe356f6/httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66", size = 473268, upload-time = "2025-10-10T03:54:49.993Z" }, + { url = "https://files.pythonhosted.org/packages/32/4d/9dd616c38da088e3f436e9a616e1d0cc66544b8cdac405cc4e81c8679fc7/httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44c8f4347d4b31269c8a9205d8a5ee2df5322b09bbbd30f8f862185bb6b05346", size = 455517, upload-time = "2025-10-10T03:54:51.066Z" }, + { url = "https://files.pythonhosted.org/packages/1d/3a/a6c595c310b7df958e739aae88724e24f9246a514d909547778d776799be/httptools-0.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:465275d76db4d554918aba40bf1cbebe324670f3dfc979eaffaa5d108e2ed650", size = 458337, upload-time = "2025-10-10T03:54:52.196Z" }, + { url = "https://files.pythonhosted.org/packages/fd/82/88e8d6d2c51edc1cc391b6e044c6c435b6aebe97b1abc33db1b0b24cd582/httptools-0.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:322d00c2068d125bd570f7bf78b2d367dad02b919d8581d7476d8b75b294e3e6", size = 85743, upload-time = "2025-10-10T03:54:53.448Z" }, + { url = "https://files.pythonhosted.org/packages/34/50/9d095fcbb6de2d523e027a2f304d4551855c2f46e0b82befd718b8b20056/httptools-0.7.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c08fe65728b8d70b6923ce31e3956f859d5e1e8548e6f22ec520a962c6757270", size = 203619, upload-time = "2025-10-10T03:54:54.321Z" }, + { url = "https://files.pythonhosted.org/packages/07/f0/89720dc5139ae54b03f861b5e2c55a37dba9a5da7d51e1e824a1f343627f/httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7aea2e3c3953521c3c51106ee11487a910d45586e351202474d45472db7d72d3", size = 108714, upload-time = "2025-10-10T03:54:55.163Z" }, + { url = "https://files.pythonhosted.org/packages/b3/cb/eea88506f191fb552c11787c23f9a405f4c7b0c5799bf73f2249cd4f5228/httptools-0.7.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0e68b8582f4ea9166be62926077a3334064d422cf08ab87d8b74664f8e9058e1", size = 472909, upload-time = "2025-10-10T03:54:56.056Z" }, + { url = "https://files.pythonhosted.org/packages/e0/4a/a548bdfae6369c0d078bab5769f7b66f17f1bfaa6fa28f81d6be6959066b/httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df091cf961a3be783d6aebae963cc9b71e00d57fa6f149025075217bc6a55a7b", size = 470831, upload-time = "2025-10-10T03:54:57.219Z" }, + { url = "https://files.pythonhosted.org/packages/4d/31/14df99e1c43bd132eec921c2e7e11cda7852f65619bc0fc5bdc2d0cb126c/httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60", size = 452631, upload-time = "2025-10-10T03:54:58.219Z" }, + { url = "https://files.pythonhosted.org/packages/22/d2/b7e131f7be8d854d48cb6d048113c30f9a46dca0c9a8b08fcb3fcd588cdc/httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca", size = 452910, upload-time = "2025-10-10T03:54:59.366Z" }, + { url = "https://files.pythonhosted.org/packages/53/cf/878f3b91e4e6e011eff6d1fa9ca39f7eb17d19c9d7971b04873734112f30/httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96", size = 88205, upload-time = "2025-10-10T03:55:00.389Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "httpx-sse" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/b7/8cb61d2eece5fb05a83271da168186721c450eb74e3c31f7ef3169fa475b/huggingface_hub-0.36.2.tar.gz", hash = "sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a", size = 649782, upload-time = "2026-02-06T09:24:13.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl", hash = "sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270", size = 566395, upload-time = "2026-02-06T09:24:11.133Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "ijson" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/57/60d1a6a512f2f0508d0bc8b4f1cc5616fd3196619b66bd6a01f9155a1292/ijson-3.5.0.tar.gz", hash = "sha256:94688760720e3f5212731b3cb8d30267f9a045fb38fb3870254e7b9504246f31", size = 68658, upload-time = "2026-02-24T03:58:30.974Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/32/21c1b47a1afb7319944d0b9685c0997a9d574a77b030c82f6a1ac2cef4eb/ijson-3.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ea8dcac10d86adaeead454bc25c97b68d0bda573d5fd6f86f5e21cf8f7906f88", size = 88935, upload-time = "2026-02-24T03:56:40.591Z" }, + { url = "https://files.pythonhosted.org/packages/86/f7/6ac7ebbb3cd767c87cdcbb950a6754afd1c0977756347bfe03eb8e5b866d/ijson-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:92b0495bbb2150bbf14fc5d98fb6d76bcd1c526605a172709e602e6fedc96495", size = 60567, upload-time = "2026-02-24T03:56:41.919Z" }, + { url = "https://files.pythonhosted.org/packages/c4/98/1140de9ae872468a8bc2e87c171228e25e58b1eb696b7fb430f7590fea44/ijson-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7af0c4c8943be8b09a4e57bdc1da6001dae7b36526d4154fe5c8224738d0921f", size = 60620, upload-time = "2026-02-24T03:56:42.764Z" }, + { url = "https://files.pythonhosted.org/packages/60/e1/67dfe0774e4c7ca6ec8702e280e8764d356f3db54358999818cda6df7679/ijson-3.5.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:45887d5e84ff0d2b138c926cebd9071830733968afe8d9d12080b3c178c7f918", size = 126558, upload-time = "2026-02-24T03:56:43.922Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ef/23d614fc773d428caeb6e197218b7e32adcc668ff5b98777039149571208/ijson-3.5.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a70b575be8e57a28c80e90ed349ad3a851c3478524c70e36e07d6092ecd12c9", size = 133091, upload-time = "2026-02-24T03:56:45.291Z" }, + { url = "https://files.pythonhosted.org/packages/b8/80/99727603cd8a1d32edafa4392f4056b2420bf48c15afd34481c68a2d4435/ijson-3.5.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2adeecd45830bfd5580ca79a584154713aabef0b9607e16249133df5d2859813", size = 130249, upload-time = "2026-02-24T03:56:46.333Z" }, + { url = "https://files.pythonhosted.org/packages/0b/94/3a3d623ca80768e834be8a834ef05960e3b9e79af1a911704ff10c9e8792/ijson-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d873e72889e7fc5962ab58909f1adff338d7c2f49e450e5b5fe844eff8155a14", size = 133501, upload-time = "2026-02-24T03:56:47.54Z" }, + { url = "https://files.pythonhosted.org/packages/cf/f6/df2c14ad340834eccee379046f155e4b66a16ddafd445429dee7b3323614/ijson-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9a88c559456a79708592234d697645d92b599718f4cbbeaa6515f83ac63ca0ae", size = 128438, upload-time = "2026-02-24T03:56:48.455Z" }, + { url = "https://files.pythonhosted.org/packages/0c/7e/9ff5b8b5fee113f5607bc4149b707382a898eeb545153189b075e5ec8d59/ijson-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cf83f58ad50dc0d39a2105cb26d4f359b38f42cef68b913170d4d47d97d97ba5", size = 131116, upload-time = "2026-02-24T03:56:49.737Z" }, + { url = "https://files.pythonhosted.org/packages/64/20/954ce0d440d7cf72a3d8361b14406f9cdbf624b1625c10f8488857c769d6/ijson-3.5.0-cp310-cp310-win32.whl", hash = "sha256:aec4580a7712a19b1f95cd41bed260fc6a31266d37ef941827772a4c199e8143", size = 52724, upload-time = "2026-02-24T03:56:50.932Z" }, + { url = "https://files.pythonhosted.org/packages/24/33/ece87d60502c6115642cbabeb8c122fa982212b392bc4f4ff5aab8e02dac/ijson-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a9c4c70501e23e8eb1675330686d1598eebfa14b6f0dbc8f00c2e081cc628fa", size = 55125, upload-time = "2026-02-24T03:56:51.942Z" }, + { url = "https://files.pythonhosted.org/packages/65/da/644343198abca5e0f6e2486063f8d8f3c443ca0ef5e5c890e51ef6032e33/ijson-3.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5616311404b858d32740b7ad8b9a799c62165f5ecb85d0a8ed16c21665a90533", size = 88964, upload-time = "2026-02-24T03:56:53.099Z" }, + { url = "https://files.pythonhosted.org/packages/5b/63/8621190aa2baf96156dfd4c632b6aa9f1464411e50b98750c09acc0505ea/ijson-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e9733f94029dd41702d573ef64752e2556e72aea14623d6dbb7a44ca1ccf30fd", size = 60582, upload-time = "2026-02-24T03:56:54.261Z" }, + { url = "https://files.pythonhosted.org/packages/20/31/6a3f041fdd17dacff33b7d7d3ba3df6dca48740108340c6042f974b2ad20/ijson-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db8398c6721b98412a4f618da8022550c8b9c5d9214040646071b5deb4d4a393", size = 60632, upload-time = "2026-02-24T03:56:55.159Z" }, + { url = "https://files.pythonhosted.org/packages/e4/68/474541998abbdecfd46a744536878335de89aceb9f085bff1aaf35575ceb/ijson-3.5.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c061314845c08163b1784b6076ea5f075372461a32e6916f4e5f211fd4130b64", size = 131988, upload-time = "2026-02-24T03:56:56.35Z" }, + { url = "https://files.pythonhosted.org/packages/cd/32/e05ff8b72a44fe9d192f41c5dcbc35cfa87efc280cdbfe539ffaf4a7535e/ijson-3.5.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1111a1c5ac79119c5d6e836f900c1a53844b50a18af38311baa6bb61e2645aca", size = 138669, upload-time = "2026-02-24T03:56:57.555Z" }, + { url = "https://files.pythonhosted.org/packages/49/b5/955a83b031102c7a602e2c06d03aff0a0e584212f09edb94ccc754d203ac/ijson-3.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e74aff8c681c24002b61b1822f9511d4c384f324f7dbc08c78538e01fdc9fcb", size = 135093, upload-time = "2026-02-24T03:56:59.267Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f2/30250cfcb4d2766669b31f6732689aab2bb91de426a15a3ebe482df7ee48/ijson-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:739a7229b1b0cc5f7e2785a6e7a5fc915e850d3fed9588d0e89a09f88a417253", size = 138715, upload-time = "2026-02-24T03:57:00.491Z" }, + { url = "https://files.pythonhosted.org/packages/a2/05/785a145d7e75e04e04480d59b6323cd4b1d9013a6cd8643fa635fbc93490/ijson-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ef88712160360cab3ca6471a4e5418243f8b267cf1fe1620879d1b5558babc71", size = 133194, upload-time = "2026-02-24T03:57:01.759Z" }, + { url = "https://files.pythonhosted.org/packages/14/eb/80d6f8a748dead4034cea0939494a67d10ccf88d6413bf6e860393139676/ijson-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ca0d1b6b5f8166a6248f4309497585fb8553b04bc8179a0260fad636cfdb798", size = 135588, upload-time = "2026-02-24T03:57:03.131Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a8/bbc21f9400ebdbca48fab272593e0d1f875691be1e927d264d90d48b8c47/ijson-3.5.0-cp311-cp311-win32.whl", hash = "sha256:966039cf9047c7967febf7b9a52ec6f38f5464a4c7fbb5565e0224b7376fefff", size = 52721, upload-time = "2026-02-24T03:57:04.365Z" }, + { url = "https://files.pythonhosted.org/packages/0d/2e/4e8c0208b8f920ee80c88c956f93e78318f2cfb646455353b182738b490c/ijson-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bad6a1634cb7c9f3f4c7e52325283b35b565f5b6cc27d42660c6912ce883422", size = 55121, upload-time = "2026-02-24T03:57:05.498Z" }, + { url = "https://files.pythonhosted.org/packages/aa/17/9c63c7688025f3a8c47ea717b8306649c8c7244e49e20a2be4e3515dc75c/ijson-3.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1ebefbe149a6106cc848a3eaf536af51a9b5ccc9082de801389f152dba6ab755", size = 88536, upload-time = "2026-02-24T03:57:06.809Z" }, + { url = "https://files.pythonhosted.org/packages/6f/dd/e15c2400244c117b06585452ebc63ae254f5a6964f712306afd1422daae0/ijson-3.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:19e30d9f00f82e64de689c0b8651b9cfed879c184b139d7e1ea5030cec401c21", size = 60499, upload-time = "2026-02-24T03:57:09.155Z" }, + { url = "https://files.pythonhosted.org/packages/77/a9/bf4fe3538a0c965f16b406f180a06105b875da83f0743e36246be64ef550/ijson-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a04a33ee78a6f27b9b8528c1ca3c207b1df3b8b867a4cf2fcc4109986f35c227", size = 60330, upload-time = "2026-02-24T03:57:10.574Z" }, + { url = "https://files.pythonhosted.org/packages/31/76/6f91bdb019dd978fce1bc5ea1cd620cfc096d258126c91db2c03a20a7f34/ijson-3.5.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7d48dc2984af02eb3c56edfb3f13b3f62f2f3e4fe36f058c8cfc75d93adf4fed", size = 138977, upload-time = "2026-02-24T03:57:11.932Z" }, + { url = "https://files.pythonhosted.org/packages/11/be/bbc983059e48a54b0121ee60042979faed7674490bbe7b2c41560db3f436/ijson-3.5.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1e73a44844d9adbca9cf2c4132cd875933e83f3d4b23881fcaf82be83644c7d", size = 149785, upload-time = "2026-02-24T03:57:13.255Z" }, + { url = "https://files.pythonhosted.org/packages/6d/81/2fee58f9024a3449aee83edfa7167fb5ccd7e1af2557300e28531bb68e16/ijson-3.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7389a56b8562a19948bdf1d7bae3a2edc8c7f86fb59834dcb1c4c722818e645a", size = 149729, upload-time = "2026-02-24T03:57:14.191Z" }, + { url = "https://files.pythonhosted.org/packages/c7/56/f1706761fcc096c9d414b3dcd000b1e6e5c24364c21cfba429837f98ee8d/ijson-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3176f23f8ebec83f374ed0c3b4e5a0c4db7ede54c005864efebbed46da123608", size = 150697, upload-time = "2026-02-24T03:57:15.855Z" }, + { url = "https://files.pythonhosted.org/packages/d9/6e/ee0d9c875a0193b632b3e9ccd1b22a50685fb510256ad57ba483b6529f77/ijson-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6babd88e508630c6ef86c9bebaaf13bb2fb8ec1d8f8868773a03c20253f599bc", size = 142873, upload-time = "2026-02-24T03:57:16.831Z" }, + { url = "https://files.pythonhosted.org/packages/d2/bf/f9d4399d0e6e3fd615035290a71e97c843f17f329b43638c0a01cf112d73/ijson-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dc1b3836b174b6db2fa8319f1926fb5445abd195dc963368092103f8579cb8ed", size = 151583, upload-time = "2026-02-24T03:57:17.757Z" }, + { url = "https://files.pythonhosted.org/packages/b2/71/a7254a065933c0e2ffd3586f46187d84830d3d7b6f41cfa5901820a4f87d/ijson-3.5.0-cp312-cp312-win32.whl", hash = "sha256:6673de9395fb9893c1c79a43becd8c8fbee0a250be6ea324bfd1487bb5e9ee4c", size = 53079, upload-time = "2026-02-24T03:57:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/8f/7b/2edca79b359fc9f95d774616867a03ecccdf333797baf5b3eea79733918c/ijson-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:f4f7fabd653459dcb004175235f310435959b1bb5dfa8878578391c6cc9ad944", size = 55500, upload-time = "2026-02-24T03:57:20.428Z" }, + { url = "https://files.pythonhosted.org/packages/a2/71/d67e764a712c3590627480643a3b51efcc3afa4ef3cb54ee4c989073c97e/ijson-3.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e9cedc10e40dd6023c351ed8bfc7dcfce58204f15c321c3c1546b9c7b12562a4", size = 88544, upload-time = "2026-02-24T03:57:21.293Z" }, + { url = "https://files.pythonhosted.org/packages/1a/39/f1c299371686153fa3cf5c0736b96247a87a1bee1b7145e6d21f359c505a/ijson-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3647649f782ee06c97490b43680371186651f3f69bebe64c6083ee7615d185e5", size = 60495, upload-time = "2026-02-24T03:57:22.501Z" }, + { url = "https://files.pythonhosted.org/packages/16/94/b1438e204d75e01541bebe3e668fe3e68612d210e9931ae1611062dd0a56/ijson-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:90e74be1dce05fce73451c62d1118671f78f47c9f6be3991c82b91063bf01fc9", size = 60325, upload-time = "2026-02-24T03:57:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/30/e2/4aa9c116fa86cc8b0f574f3c3a47409edc1cd4face05d0e589a5a176b05d/ijson-3.5.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:78e9ad73e7be2dd80627504bd5cbf512348c55ce2c06e362ed7683b5220e8568", size = 138774, upload-time = "2026-02-24T03:57:24.683Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d2/738b88752a70c3be1505faa4dcd7110668c2712e582a6a36488ed1e295d4/ijson-3.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9577449313cc94be89a4fe4b3e716c65f09cc19636d5a6b2861c4e80dddebd58", size = 149820, upload-time = "2026-02-24T03:57:26.062Z" }, + { url = "https://files.pythonhosted.org/packages/ed/df/0b3ab9f393ca8f72ea03bc896ba9fdc987e90ae08cdb51c32a4ee0c14d5e/ijson-3.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e4c1178fb50aff5f5701a30a5152ead82a14e189ce0f6102fa1b5f10b2f54ff", size = 149747, upload-time = "2026-02-24T03:57:27.308Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a3/b0037119f75131b78cb00acc2657b1a9d0435475f1f2c5f8f5a170b66b9c/ijson-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0eb402ab026ffb37a918d75af2b7260fe6cfbce13232cc83728a714dd30bd81d", size = 151027, upload-time = "2026-02-24T03:57:28.522Z" }, + { url = "https://files.pythonhosted.org/packages/22/a0/cb344de1862bf09d8f769c9d25c944078c87dd59a1b496feec5ad96309a4/ijson-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5b08ee08355f9f729612a8eb9bf69cc14f9310c3b2a487c6f1c3c65d85216ec4", size = 142996, upload-time = "2026-02-24T03:57:29.774Z" }, + { url = "https://files.pythonhosted.org/packages/ca/32/a8ffd67182e02ea61f70f62daf43ded4fa8a830a2520a851d2782460aba8/ijson-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bda62b6d48442903e7bf56152108afb7f0f1293c2b9bef2f2c369defea76ab18", size = 152068, upload-time = "2026-02-24T03:57:30.969Z" }, + { url = "https://files.pythonhosted.org/packages/3c/d1/3578df8e75d446aab0ae92e27f641341f586b85e1988536adebc65300cb4/ijson-3.5.0-cp313-cp313-win32.whl", hash = "sha256:8d073d9b13574cfa11083cc7267c238b7a6ed563c2661e79192da4a25f09c82c", size = 53065, upload-time = "2026-02-24T03:57:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/fb/a2/f7cdaf5896710da3e69e982e44f015a83d168aa0f3a89b6f074b5426779d/ijson-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:2419f9e32e0968a876b04d8f26aeac042abd16f582810b576936bbc4c6015069", size = 55499, upload-time = "2026-02-24T03:57:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/42/65/13e2492d17e19a2084523e18716dc2809159f2287fd2700c735f311e76c4/ijson-3.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4d4b0cd676b8c842f7648c1a783448fac5cd3b98289abd83711b3e275e143524", size = 93019, upload-time = "2026-02-24T03:57:33.976Z" }, + { url = "https://files.pythonhosted.org/packages/33/92/483fc97ece0c3f1cecabf48f6a7a36e89d19369eec462faaeaa34c788992/ijson-3.5.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:252dec3680a48bb82d475e36b4ae1b3a9d7eb690b951bb98a76c5fe519e30188", size = 62714, upload-time = "2026-02-24T03:57:34.819Z" }, + { url = "https://files.pythonhosted.org/packages/4b/88/793fe020a0fe9d9eed4c285cf4a5cfdb0a935708b3bde0d72f35c794b513/ijson-3.5.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:aa1b5dca97d323931fde2501172337384c958914d81a9dac7f00f0d4bfc76bc7", size = 62460, upload-time = "2026-02-24T03:57:35.874Z" }, + { url = "https://files.pythonhosted.org/packages/51/69/f1a2690aa8d4df1f4e262b385e65a933ffdc250b091531bac9a449c19e16/ijson-3.5.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7a5ec7fd86d606094bba6f6f8f87494897102fa4584ef653f3005c51a784c320", size = 199273, upload-time = "2026-02-24T03:57:37.07Z" }, + { url = "https://files.pythonhosted.org/packages/ea/a2/f1346d5299e79b988ab472dc773d5381ec2d57c23cb2f1af3ede4a810e62/ijson-3.5.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:009f41443e1521847701c6d87fa3923c0b1961be3c7e7de90947c8cb92ea7c44", size = 216884, upload-time = "2026-02-24T03:57:38.346Z" }, + { url = "https://files.pythonhosted.org/packages/28/3c/8b637e869be87799e6c2c3c275a30a546f086b1aed77e2b7f11512168c5a/ijson-3.5.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4c3651d1f9fe2839a93fdf8fd1d5ca3a54975349894249f3b1b572bcc4bd577", size = 207306, upload-time = "2026-02-24T03:57:39.718Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7c/18b1c1df6951ca056782d7580ec40cea4ff9a27a0947d92640d1cc8c4ae3/ijson-3.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:945b7abcfcfeae2cde17d8d900870f03536494245dda7ad4f8d056faa303256c", size = 211364, upload-time = "2026-02-24T03:57:40.953Z" }, + { url = "https://files.pythonhosted.org/packages/f3/55/e795812e82851574a9dba8a53fde045378f531ef14110c6fb55dbd23b443/ijson-3.5.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:0574b0a841ff97495c13e9d7260fbf3d85358b061f540c52a123db9dbbaa2ed6", size = 200608, upload-time = "2026-02-24T03:57:42.272Z" }, + { url = "https://files.pythonhosted.org/packages/5c/cd/013c85b4749b57a4cb4c2670014d1b32b8db4ab1a7be92ea7aeb5d7fe7b5/ijson-3.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f969ffb2b89c5cdf686652d7fb66252bc72126fa54d416317411497276056a18", size = 205127, upload-time = "2026-02-24T03:57:43.286Z" }, + { url = "https://files.pythonhosted.org/packages/0e/7c/faf643733e3ab677f180018f6a855c4ef70b7c46540987424c563c959e42/ijson-3.5.0-cp313-cp313t-win32.whl", hash = "sha256:59d3f9f46deed1332ad669518b8099920512a78bda64c1f021fcd2aff2b36693", size = 55282, upload-time = "2026-02-24T03:57:44.353Z" }, + { url = "https://files.pythonhosted.org/packages/69/22/94ddb47c24b491377aca06cd8fc9202cad6ab50619842457d2beefde21ea/ijson-3.5.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c2839fa233746d8aad3b8cd2354e441613f5df66d721d59da4a09394bd1db2b", size = 58016, upload-time = "2026-02-24T03:57:45.237Z" }, + { url = "https://files.pythonhosted.org/packages/7a/93/0868efe753dc1df80cc405cf0c1f2527a6991643607c741bff8dcb899b3b/ijson-3.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:25a5a6b2045c90bb83061df27cfa43572afa43ba9408611d7bfe237c20a731a9", size = 89094, upload-time = "2026-02-24T03:57:46.115Z" }, + { url = "https://files.pythonhosted.org/packages/24/94/fd5a832a0df52ef5e4e740f14ac8640725d61034a1b0c561e8b5fb424706/ijson-3.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:8976c54c0b864bc82b951bae06567566ac77ef63b90a773a69cd73aab47f4f4f", size = 60715, upload-time = "2026-02-24T03:57:47.552Z" }, + { url = "https://files.pythonhosted.org/packages/70/79/1b9a90af5732491f9eec751ee211b86b11011e1158c555c06576d52c3919/ijson-3.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:859eb2038f7f1b0664df4241957694cc35e6295992d71c98659b22c69b3cbc10", size = 60638, upload-time = "2026-02-24T03:57:48.428Z" }, + { url = "https://files.pythonhosted.org/packages/23/6f/2c551ea980fe56f68710a8d5389cfbd015fc45aaafd17c3c52c346db6aa1/ijson-3.5.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c911aa02991c7c0d3639b6619b93a93210ff1e7f58bf7225d613abea10adc78e", size = 140667, upload-time = "2026-02-24T03:57:49.314Z" }, + { url = "https://files.pythonhosted.org/packages/25/0e/27b887879ba6a5bc29766e3c5af4942638c952220fd63e1e442674f7883a/ijson-3.5.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:903cbdc350173605220edc19796fbea9b2203c8b3951fb7335abfa8ed37afda8", size = 149850, upload-time = "2026-02-24T03:57:50.329Z" }, + { url = "https://files.pythonhosted.org/packages/da/1e/23e10e1bc04bf31193b21e2960dce14b17dbd5d0c62204e8401c59d62c08/ijson-3.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4549d96ded5b8efa71639b2160235415f6bdb8c83367615e2dbabcb72755c33", size = 149206, upload-time = "2026-02-24T03:57:51.261Z" }, + { url = "https://files.pythonhosted.org/packages/8e/90/e552f6495063b235cf7fa2c592f6597c057077195e517b842a0374fd470c/ijson-3.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6b2dcf6349e6042d83f3f8c39ce84823cf7577eba25bac5aae5e39bbbbbe9c1c", size = 150438, upload-time = "2026-02-24T03:57:52.198Z" }, + { url = "https://files.pythonhosted.org/packages/5c/18/45bf8f297c41b42a1c231d261141097babd953d2c28a07be57ae4c3a1a02/ijson-3.5.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:e44af39e6f8a17e5627dcd89715d8279bf3474153ff99aae031a936e5c5572e5", size = 144369, upload-time = "2026-02-24T03:57:53.22Z" }, + { url = "https://files.pythonhosted.org/packages/9b/3a/deb9772bb2c0cead7ad64f00c3598eec9072bdf511818e70e2c512eeabbe/ijson-3.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9260332304b7e7828db56d43f08fc970a3ab741bf84ff10189361ea1b60c395b", size = 151352, upload-time = "2026-02-24T03:57:54.375Z" }, + { url = "https://files.pythonhosted.org/packages/e4/51/67f4d80cd58ad7eab0cd1af5fe28b961886338956b2f88c0979e21914346/ijson-3.5.0-cp314-cp314-win32.whl", hash = "sha256:63bc8121bb422f6969ced270173a3fa692c29d4ae30c860a2309941abd81012a", size = 53610, upload-time = "2026-02-24T03:57:55.655Z" }, + { url = "https://files.pythonhosted.org/packages/70/d3/263672ea22983ba3940f1534316dbc9200952c1c2a2332d7a664e4eaa7ae/ijson-3.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:01b6dad72b7b7df225ef970d334556dfad46c696a2c6767fb5d9ed8889728bca", size = 56301, upload-time = "2026-02-24T03:57:56.584Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d9/86f7fac35e0835faa188085ae0579e813493d5261ce056484015ad533445/ijson-3.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:2ea4b676ec98e374c1df400a47929859e4fa1239274339024df4716e802aa7e4", size = 93069, upload-time = "2026-02-24T03:57:57.849Z" }, + { url = "https://files.pythonhosted.org/packages/33/d2/e7366ed9c6e60228d35baf4404bac01a126e7775ea8ce57f560125ed190a/ijson-3.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:014586eec043e23c80be9a923c56c3a0920a0f1f7d17478ce7bc20ba443968ef", size = 62767, upload-time = "2026-02-24T03:57:58.758Z" }, + { url = "https://files.pythonhosted.org/packages/35/8b/3e703e8cc4b3ada79f13b28070b51d9550c578f76d1968657905857b2ddd/ijson-3.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5b8b886b0248652d437f66e7c5ac318bbdcb2c7137a7e5327a68ca00b286f5f", size = 62467, upload-time = "2026-02-24T03:58:00.261Z" }, + { url = "https://files.pythonhosted.org/packages/21/42/0c91af32c1ee8a957fdac2e051b5780756d05fd34e4b60d94a08d51bac1d/ijson-3.5.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:498fd46ae2349297e43acf97cdc421e711dbd7198418677259393d2acdc62d78", size = 200447, upload-time = "2026-02-24T03:58:01.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/80/796ea0e391b7e2d45c5b1b451734bba03f81c2984cf955ea5eaa6c4920ad/ijson-3.5.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22a51b4f9b81f12793731cf226266d1de2112c3c04ba4a04117ad4e466897e05", size = 217820, upload-time = "2026-02-24T03:58:02.598Z" }, + { url = "https://files.pythonhosted.org/packages/38/14/52b6613fdda4078c62eb5b4fe3efc724ddc55a4ad524c93de51830107aa3/ijson-3.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9636c710dc4ac4a281baa266a64f323b4cc165cec26836af702c44328b59a515", size = 208310, upload-time = "2026-02-24T03:58:04.759Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ad/8b3105a78774fd4a65e534a21d975ef3a77e189489fe3029ebcaeba5e243/ijson-3.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f7168a39e8211107666d71b25693fd1b2bac0b33735ef744114c403c6cac21e1", size = 211843, upload-time = "2026-02-24T03:58:05.836Z" }, + { url = "https://files.pythonhosted.org/packages/36/ab/a2739f6072d6e1160581bc3ed32da614c8cced023dcd519d9c5fa66e0425/ijson-3.5.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8696454245415bc617ab03b0dc3ae4c86987df5dc6a90bad378fe72c5409d89e", size = 200906, upload-time = "2026-02-24T03:58:07.788Z" }, + { url = "https://files.pythonhosted.org/packages/6d/5e/e06c2de3c3d4a9cfb655c1ad08a68fb72838d271072cdd3196576ac4431a/ijson-3.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c21bfb61f71f191565885bf1bc29e0a186292d866b4880637b833848360bdc1b", size = 205495, upload-time = "2026-02-24T03:58:09.163Z" }, + { url = "https://files.pythonhosted.org/packages/7c/11/778201eb2e202ddd76b36b0fb29bf3d8e3c167389d8aa883c62524e49f47/ijson-3.5.0-cp314-cp314t-win32.whl", hash = "sha256:a2619460d6795b70d0155e5bf016200ac8a63ab5397aa33588bb02b6c21759e6", size = 56280, upload-time = "2026-02-24T03:58:10.116Z" }, + { url = "https://files.pythonhosted.org/packages/23/28/96711503245339084c8086b892c47415895eba49782d6cc52d9f4ee50301/ijson-3.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:4f24b78d4ef028d17eb57ad1b16c0aed4a17bdd9badbf232dc5d9305b7e13854", size = 58965, upload-time = "2026-02-24T03:58:11.278Z" }, + { url = "https://files.pythonhosted.org/packages/d9/3b/d31ecfa63a218978617446159f3d77aab2417a5bd2885c425b176353ff78/ijson-3.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d64c624da0e9d692d6eb0ff63a79656b59d76bf80773a17c5b0f835e4e8ef627", size = 57715, upload-time = "2026-02-24T03:58:24.545Z" }, + { url = "https://files.pythonhosted.org/packages/30/51/b170e646d378e8cccf9637c05edb5419b00c2c4df64b0258c3af5355608e/ijson-3.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:876f7df73b7e0d6474f9caa729b9cdbfc8e76de9075a4887dfd689e29e85c4ca", size = 57205, upload-time = "2026-02-24T03:58:25.681Z" }, + { url = "https://files.pythonhosted.org/packages/ef/83/44dbd0231b0a8c6c14d27473d10c4e27dfbce7d5d9a833c79e3e6c33eb40/ijson-3.5.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e7dbff2c8d9027809b0cde663df44f3210da10ea377121d42896fb6ee405dd31", size = 71229, upload-time = "2026-02-24T03:58:27.103Z" }, + { url = "https://files.pythonhosted.org/packages/c8/98/cf84048b7c6cec888826e696a31f45bee7ebcac15e532b6be1fc4c2c9608/ijson-3.5.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4217a1edc278660679e1197c83a1a2a2d367792bfbb2a3279577f4b59b93730d", size = 71217, upload-time = "2026-02-24T03:58:28.021Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0a/e34c729a87ff67dc6540f6bcc896626158e691d433ab57db0086d73decd2/ijson-3.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04f0fc740311388ee745ba55a12292b722d6f52000b11acbb913982ba5fbdf87", size = 68618, upload-time = "2026-02-24T03:58:28.918Z" }, + { url = "https://files.pythonhosted.org/packages/c1/0f/e849d072f2e0afe49627de3995fc9dae54b4c804c70c0840f928d95c10e1/ijson-3.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fdeee6957f92e0c114f65c55cf8fe7eabb80cfacab64eea6864060913173f66d", size = 55369, upload-time = "2026-02-24T03:58:29.839Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "8.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", size = 55304, upload-time = "2024-09-11T14:56:08.937Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", size = 26514, upload-time = "2024-09-11T14:56:07.019Z" }, +] + +[[package]] +name = "importlib-resources" +version = "6.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "interegular" +version = "0.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/9d/8b6dde58a028a3962ce17e84d5fe73758df61378e00ef8ac3d85da34b0ff/interegular-0.3.3.tar.gz", hash = "sha256:d9b697b21b34884711399ba0f0376914b81899ce670032486d0d048344a76600", size = 24705, upload-time = "2024-01-06T23:01:22.372Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/01/72d6472f80651673716d1deda2a5bbb633e563ecf94f4479da5519d69d25/interegular-0.3.3-py37-none-any.whl", hash = "sha256:b0c07007d48c89d6d19f7204972d369b2a77222722e126b6aa63aa721dc3b19c", size = 23635, upload-time = "2024-01-06T23:01:20.829Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jiter" +version = "0.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/5e/4ec91646aee381d01cdb9974e30882c9cd3b8c5d1079d6b5ff4af522439a/jiter-0.13.0.tar.gz", hash = "sha256:f2839f9c2c7e2dffc1bc5929a510e14ce0a946be9365fd1219e7ef342dae14f4", size = 164847, upload-time = "2026-02-02T12:37:56.441Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/5a/41da76c5ea07bec1b0472b6b2fdb1b651074d504b19374d7e130e0cdfb25/jiter-0.13.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2ffc63785fd6c7977defe49b9824ae6ce2b2e2b77ce539bdaf006c26da06342e", size = 311164, upload-time = "2026-02-02T12:35:17.688Z" }, + { url = "https://files.pythonhosted.org/packages/40/cb/4a1bf994a3e869f0d39d10e11efb471b76d0ad70ecbfb591427a46c880c2/jiter-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4a638816427006c1e3f0013eb66d391d7a3acda99a7b0cf091eff4497ccea33a", size = 320296, upload-time = "2026-02-02T12:35:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/09/82/acd71ca9b50ecebadc3979c541cd717cce2fe2bc86236f4fa597565d8f1a/jiter-0.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19928b5d1ce0ff8c1ee1b9bdef3b5bfc19e8304f1b904e436caf30bc15dc6cf5", size = 352742, upload-time = "2026-02-02T12:35:21.258Z" }, + { url = "https://files.pythonhosted.org/packages/71/03/d1fc996f3aecfd42eb70922edecfb6dd26421c874503e241153ad41df94f/jiter-0.13.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:309549b778b949d731a2f0e1594a3f805716be704a73bf3ad9a807eed5eb5721", size = 363145, upload-time = "2026-02-02T12:35:24.653Z" }, + { url = "https://files.pythonhosted.org/packages/f1/61/a30492366378cc7a93088858f8991acd7d959759fe6138c12a4644e58e81/jiter-0.13.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcdabaea26cb04e25df3103ce47f97466627999260290349a88c8136ecae0060", size = 487683, upload-time = "2026-02-02T12:35:26.162Z" }, + { url = "https://files.pythonhosted.org/packages/20/4e/4223cffa9dbbbc96ed821c5aeb6bca510848c72c02086d1ed3f1da3d58a7/jiter-0.13.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a3a377af27b236abbf665a69b2bdd680e3b5a0bd2af825cd3b81245279a7606c", size = 373579, upload-time = "2026-02-02T12:35:27.582Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c9/b0489a01329ab07a83812d9ebcffe7820a38163c6d9e7da644f926ff877c/jiter-0.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe49d3ff6db74321f144dff9addd4a5874d3105ac5ba7c5b77fac099cfae31ae", size = 362904, upload-time = "2026-02-02T12:35:28.925Z" }, + { url = "https://files.pythonhosted.org/packages/05/af/53e561352a44afcba9a9bc67ee1d320b05a370aed8df54eafe714c4e454d/jiter-0.13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2113c17c9a67071b0f820733c0893ed1d467b5fcf4414068169e5c2cabddb1e2", size = 392380, upload-time = "2026-02-02T12:35:30.385Z" }, + { url = "https://files.pythonhosted.org/packages/76/2a/dd805c3afb8ed5b326c5ae49e725d1b1255b9754b1b77dbecdc621b20773/jiter-0.13.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ab1185ca5c8b9491b55ebf6c1e8866b8f68258612899693e24a92c5fdb9455d5", size = 517939, upload-time = "2026-02-02T12:35:31.865Z" }, + { url = "https://files.pythonhosted.org/packages/20/2a/7b67d76f55b8fe14c937e7640389612f05f9a4145fc28ae128aaa5e62257/jiter-0.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9621ca242547edc16400981ca3231e0c91c0c4c1ab8573a596cd9bb3575d5c2b", size = 551696, upload-time = "2026-02-02T12:35:33.306Z" }, + { url = "https://files.pythonhosted.org/packages/85/9c/57cdd64dac8f4c6ab8f994fe0eb04dc9fd1db102856a4458fcf8a99dfa62/jiter-0.13.0-cp310-cp310-win32.whl", hash = "sha256:a7637d92b1c9d7a771e8c56f445c7f84396d48f2e756e5978840ecba2fac0894", size = 204592, upload-time = "2026-02-02T12:35:34.58Z" }, + { url = "https://files.pythonhosted.org/packages/a7/38/f4f3ea5788b8a5bae7510a678cdc747eda0c45ffe534f9878ff37e7cf3b3/jiter-0.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c1b609e5cbd2f52bb74fb721515745b407df26d7b800458bd97cb3b972c29e7d", size = 206016, upload-time = "2026-02-02T12:35:36.435Z" }, + { url = "https://files.pythonhosted.org/packages/71/29/499f8c9eaa8a16751b1c0e45e6f5f1761d180da873d417996cc7bddc8eef/jiter-0.13.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ea026e70a9a28ebbdddcbcf0f1323128a8db66898a06eaad3a4e62d2f554d096", size = 311157, upload-time = "2026-02-02T12:35:37.758Z" }, + { url = "https://files.pythonhosted.org/packages/50/f6/566364c777d2ab450b92100bea11333c64c38d32caf8dc378b48e5b20c46/jiter-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66aa3e663840152d18cc8ff1e4faad3dd181373491b9cfdc6004b92198d67911", size = 319729, upload-time = "2026-02-02T12:35:39.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/dd/560f13ec5e4f116d8ad2658781646cca91b617ae3b8758d4a5076b278f70/jiter-0.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3524798e70655ff19aec58c7d05adb1f074fecff62da857ea9be2b908b6d701", size = 354766, upload-time = "2026-02-02T12:35:40.662Z" }, + { url = "https://files.pythonhosted.org/packages/7c/0d/061faffcfe94608cbc28a0d42a77a74222bdf5055ccdbe5fd2292b94f510/jiter-0.13.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec7e287d7fbd02cb6e22f9a00dd9c9cd504c40a61f2c61e7e1f9690a82726b4c", size = 362587, upload-time = "2026-02-02T12:35:42.025Z" }, + { url = "https://files.pythonhosted.org/packages/92/c9/c66a7864982fd38a9773ec6e932e0398d1262677b8c60faecd02ffb67bf3/jiter-0.13.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47455245307e4debf2ce6c6e65a717550a0244231240dcf3b8f7d64e4c2f22f4", size = 487537, upload-time = "2026-02-02T12:35:43.459Z" }, + { url = "https://files.pythonhosted.org/packages/6c/86/84eb4352cd3668f16d1a88929b5888a3fe0418ea8c1dfc2ad4e7bf6e069a/jiter-0.13.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ee9da221dca6e0429c2704c1b3655fe7b025204a71d4d9b73390c759d776d165", size = 373717, upload-time = "2026-02-02T12:35:44.928Z" }, + { url = "https://files.pythonhosted.org/packages/6e/09/9fe4c159358176f82d4390407a03f506a8659ed13ca3ac93a843402acecf/jiter-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24ab43126d5e05f3d53a36a8e11eb2f23304c6c1117844aaaf9a0aa5e40b5018", size = 362683, upload-time = "2026-02-02T12:35:46.636Z" }, + { url = "https://files.pythonhosted.org/packages/c9/5e/85f3ab9caca0c1d0897937d378b4a515cae9e119730563572361ea0c48ae/jiter-0.13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9da38b4fedde4fb528c740c2564628fbab737166a0e73d6d46cb4bb5463ff411", size = 392345, upload-time = "2026-02-02T12:35:48.088Z" }, + { url = "https://files.pythonhosted.org/packages/12/4c/05b8629ad546191939e6f0c2f17e29f542a398f4a52fb987bc70b6d1eb8b/jiter-0.13.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0b34c519e17658ed88d5047999a93547f8889f3c1824120c26ad6be5f27b6cf5", size = 517775, upload-time = "2026-02-02T12:35:49.482Z" }, + { url = "https://files.pythonhosted.org/packages/4d/88/367ea2eb6bc582c7052e4baf5ddf57ebe5ab924a88e0e09830dfb585c02d/jiter-0.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2a6394e6af690d462310a86b53c47ad75ac8c21dc79f120714ea449979cb1d3", size = 551325, upload-time = "2026-02-02T12:35:51.104Z" }, + { url = "https://files.pythonhosted.org/packages/f3/12/fa377ffb94a2f28c41afaed093e0d70cfe512035d5ecb0cad0ae4792d35e/jiter-0.13.0-cp311-cp311-win32.whl", hash = "sha256:0f0c065695f616a27c920a56ad0d4fc46415ef8b806bf8fc1cacf25002bd24e1", size = 204709, upload-time = "2026-02-02T12:35:52.467Z" }, + { url = "https://files.pythonhosted.org/packages/cb/16/8e8203ce92f844dfcd3d9d6a5a7322c77077248dbb12da52d23193a839cd/jiter-0.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:0733312953b909688ae3c2d58d043aa040f9f1a6a75693defed7bc2cc4bf2654", size = 204560, upload-time = "2026-02-02T12:35:53.925Z" }, + { url = "https://files.pythonhosted.org/packages/44/26/97cc40663deb17b9e13c3a5cf29251788c271b18ee4d262c8f94798b8336/jiter-0.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:5d9b34ad56761b3bf0fbe8f7e55468704107608512350962d3317ffd7a4382d5", size = 189608, upload-time = "2026-02-02T12:35:55.304Z" }, + { url = "https://files.pythonhosted.org/packages/2e/30/7687e4f87086829955013ca12a9233523349767f69653ebc27036313def9/jiter-0.13.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0a2bd69fc1d902e89925fc34d1da51b2128019423d7b339a45d9e99c894e0663", size = 307958, upload-time = "2026-02-02T12:35:57.165Z" }, + { url = "https://files.pythonhosted.org/packages/c3/27/e57f9a783246ed95481e6749cc5002a8a767a73177a83c63ea71f0528b90/jiter-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f917a04240ef31898182f76a332f508f2cc4b57d2b4d7ad2dbfebbfe167eb505", size = 318597, upload-time = "2026-02-02T12:35:58.591Z" }, + { url = "https://files.pythonhosted.org/packages/cf/52/e5719a60ac5d4d7c5995461a94ad5ef962a37c8bf5b088390e6fad59b2ff/jiter-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1e2b199f446d3e82246b4fd9236d7cb502dc2222b18698ba0d986d2fecc6152", size = 348821, upload-time = "2026-02-02T12:36:00.093Z" }, + { url = "https://files.pythonhosted.org/packages/61/db/c1efc32b8ba4c740ab3fc2d037d8753f67685f475e26b9d6536a4322bcdd/jiter-0.13.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04670992b576fa65bd056dbac0c39fe8bd67681c380cb2b48efa885711d9d726", size = 364163, upload-time = "2026-02-02T12:36:01.937Z" }, + { url = "https://files.pythonhosted.org/packages/55/8a/fb75556236047c8806995671a18e4a0ad646ed255276f51a20f32dceaeec/jiter-0.13.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a1aff1fbdb803a376d4d22a8f63f8e7ccbce0b4890c26cc7af9e501ab339ef0", size = 483709, upload-time = "2026-02-02T12:36:03.41Z" }, + { url = "https://files.pythonhosted.org/packages/7e/16/43512e6ee863875693a8e6f6d532e19d650779d6ba9a81593ae40a9088ff/jiter-0.13.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b3fb8c2053acaef8580809ac1d1f7481a0a0bdc012fd7f5d8b18fb696a5a089", size = 370480, upload-time = "2026-02-02T12:36:04.791Z" }, + { url = "https://files.pythonhosted.org/packages/f8/4c/09b93e30e984a187bc8aaa3510e1ec8dcbdcd71ca05d2f56aac0492453aa/jiter-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdaba7d87e66f26a2c45d8cbadcbfc4bf7884182317907baf39cfe9775bb4d93", size = 360735, upload-time = "2026-02-02T12:36:06.994Z" }, + { url = "https://files.pythonhosted.org/packages/1a/1b/46c5e349019874ec5dfa508c14c37e29864ea108d376ae26d90bee238cd7/jiter-0.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b88d649135aca526da172e48083da915ec086b54e8e73a425ba50999468cc08", size = 391814, upload-time = "2026-02-02T12:36:08.368Z" }, + { url = "https://files.pythonhosted.org/packages/15/9e/26184760e85baee7162ad37b7912797d2077718476bf91517641c92b3639/jiter-0.13.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e404ea551d35438013c64b4f357b0474c7abf9f781c06d44fcaf7a14c69ff9e2", size = 513990, upload-time = "2026-02-02T12:36:09.993Z" }, + { url = "https://files.pythonhosted.org/packages/e9/34/2c9355247d6debad57a0a15e76ab1566ab799388042743656e566b3b7de1/jiter-0.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f4748aad1b4a93c8bdd70f604d0f748cdc0e8744c5547798acfa52f10e79228", size = 548021, upload-time = "2026-02-02T12:36:11.376Z" }, + { url = "https://files.pythonhosted.org/packages/ac/4a/9f2c23255d04a834398b9c2e0e665382116911dc4d06b795710503cdad25/jiter-0.13.0-cp312-cp312-win32.whl", hash = "sha256:0bf670e3b1445fc4d31612199f1744f67f889ee1bbae703c4b54dc097e5dd394", size = 203024, upload-time = "2026-02-02T12:36:12.682Z" }, + { url = "https://files.pythonhosted.org/packages/09/ee/f0ae675a957ae5a8f160be3e87acea6b11dc7b89f6b7ab057e77b2d2b13a/jiter-0.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:15db60e121e11fe186c0b15236bd5d18381b9ddacdcf4e659feb96fc6c969c92", size = 205424, upload-time = "2026-02-02T12:36:13.93Z" }, + { url = "https://files.pythonhosted.org/packages/1b/02/ae611edf913d3cbf02c97cdb90374af2082c48d7190d74c1111dde08bcdd/jiter-0.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:41f92313d17989102f3cb5dd533a02787cdb99454d494344b0361355da52fcb9", size = 186818, upload-time = "2026-02-02T12:36:15.308Z" }, + { url = "https://files.pythonhosted.org/packages/91/9c/7ee5a6ff4b9991e1a45263bfc46731634c4a2bde27dfda6c8251df2d958c/jiter-0.13.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1f8a55b848cbabf97d861495cd65f1e5c590246fabca8b48e1747c4dfc8f85bf", size = 306897, upload-time = "2026-02-02T12:36:16.748Z" }, + { url = "https://files.pythonhosted.org/packages/7c/02/be5b870d1d2be5dd6a91bdfb90f248fbb7dcbd21338f092c6b89817c3dbf/jiter-0.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f556aa591c00f2c45eb1b89f68f52441a016034d18b65da60e2d2875bbbf344a", size = 317507, upload-time = "2026-02-02T12:36:18.351Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/b25d2ec333615f5f284f3a4024f7ce68cfa0604c322c6808b2344c7f5d2b/jiter-0.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7e1d61da332ec412350463891923f960c3073cf1aae93b538f0bb4c8cd46efb", size = 350560, upload-time = "2026-02-02T12:36:19.746Z" }, + { url = "https://files.pythonhosted.org/packages/be/ec/74dcb99fef0aca9fbe56b303bf79f6bd839010cb18ad41000bf6cc71eec0/jiter-0.13.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3097d665a27bc96fd9bbf7f86178037db139f319f785e4757ce7ccbf390db6c2", size = 363232, upload-time = "2026-02-02T12:36:21.243Z" }, + { url = "https://files.pythonhosted.org/packages/1b/37/f17375e0bb2f6a812d4dd92d7616e41917f740f3e71343627da9db2824ce/jiter-0.13.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d01ecc3a8cbdb6f25a37bd500510550b64ddf9f7d64a107d92f3ccb25035d0f", size = 483727, upload-time = "2026-02-02T12:36:22.688Z" }, + { url = "https://files.pythonhosted.org/packages/77/d2/a71160a5ae1a1e66c1395b37ef77da67513b0adba73b993a27fbe47eb048/jiter-0.13.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed9bbc30f5d60a3bdf63ae76beb3f9db280d7f195dfcfa61af792d6ce912d159", size = 370799, upload-time = "2026-02-02T12:36:24.106Z" }, + { url = "https://files.pythonhosted.org/packages/01/99/ed5e478ff0eb4e8aa5fd998f9d69603c9fd3f32de3bd16c2b1194f68361c/jiter-0.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98fbafb6e88256f4454de33c1f40203d09fc33ed19162a68b3b257b29ca7f663", size = 359120, upload-time = "2026-02-02T12:36:25.519Z" }, + { url = "https://files.pythonhosted.org/packages/16/be/7ffd08203277a813f732ba897352797fa9493faf8dc7995b31f3d9cb9488/jiter-0.13.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5467696f6b827f1116556cb0db620440380434591e93ecee7fd14d1a491b6daa", size = 390664, upload-time = "2026-02-02T12:36:26.866Z" }, + { url = "https://files.pythonhosted.org/packages/d1/84/e0787856196d6d346264d6dcccb01f741e5f0bd014c1d9a2ebe149caf4f3/jiter-0.13.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2d08c9475d48b92892583df9da592a0e2ac49bcd41fae1fec4f39ba6cf107820", size = 513543, upload-time = "2026-02-02T12:36:28.217Z" }, + { url = "https://files.pythonhosted.org/packages/65/50/ecbd258181c4313cf79bca6c88fb63207d04d5bf5e4f65174114d072aa55/jiter-0.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:aed40e099404721d7fcaf5b89bd3b4568a4666358bcac7b6b15c09fb6252ab68", size = 547262, upload-time = "2026-02-02T12:36:29.678Z" }, + { url = "https://files.pythonhosted.org/packages/27/da/68f38d12e7111d2016cd198161b36e1f042bd115c169255bcb7ec823a3bf/jiter-0.13.0-cp313-cp313-win32.whl", hash = "sha256:36ebfbcffafb146d0e6ffb3e74d51e03d9c35ce7c625c8066cdbfc7b953bdc72", size = 200630, upload-time = "2026-02-02T12:36:31.808Z" }, + { url = "https://files.pythonhosted.org/packages/25/65/3bd1a972c9a08ecd22eb3b08a95d1941ebe6938aea620c246cf426ae09c2/jiter-0.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:8d76029f077379374cf0dbc78dbe45b38dec4a2eb78b08b5194ce836b2517afc", size = 202602, upload-time = "2026-02-02T12:36:33.679Z" }, + { url = "https://files.pythonhosted.org/packages/15/fe/13bd3678a311aa67686bb303654792c48206a112068f8b0b21426eb6851e/jiter-0.13.0-cp313-cp313-win_arm64.whl", hash = "sha256:bb7613e1a427cfcb6ea4544f9ac566b93d5bf67e0d48c787eca673ff9c9dff2b", size = 185939, upload-time = "2026-02-02T12:36:35.065Z" }, + { url = "https://files.pythonhosted.org/packages/49/19/a929ec002ad3228bc97ca01dbb14f7632fffdc84a95ec92ceaf4145688ae/jiter-0.13.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fa476ab5dd49f3bf3a168e05f89358c75a17608dbabb080ef65f96b27c19ab10", size = 316616, upload-time = "2026-02-02T12:36:36.579Z" }, + { url = "https://files.pythonhosted.org/packages/52/56/d19a9a194afa37c1728831e5fb81b7722c3de18a3109e8f282bfc23e587a/jiter-0.13.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade8cb6ff5632a62b7dbd4757d8c5573f7a2e9ae285d6b5b841707d8363205ef", size = 346850, upload-time = "2026-02-02T12:36:38.058Z" }, + { url = "https://files.pythonhosted.org/packages/36/4a/94e831c6bf287754a8a019cb966ed39ff8be6ab78cadecf08df3bb02d505/jiter-0.13.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9950290340acc1adaded363edd94baebcee7dabdfa8bee4790794cd5cfad2af6", size = 358551, upload-time = "2026-02-02T12:36:39.417Z" }, + { url = "https://files.pythonhosted.org/packages/a2/ec/a4c72c822695fa80e55d2b4142b73f0012035d9fcf90eccc56bc060db37c/jiter-0.13.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2b4972c6df33731aac0742b64fd0d18e0a69bc7d6e03108ce7d40c85fd9e3e6d", size = 201950, upload-time = "2026-02-02T12:36:40.791Z" }, + { url = "https://files.pythonhosted.org/packages/b6/00/393553ec27b824fbc29047e9c7cd4a3951d7fbe4a76743f17e44034fa4e4/jiter-0.13.0-cp313-cp313t-win_arm64.whl", hash = "sha256:701a1e77d1e593c1b435315ff625fd071f0998c5f02792038a5ca98899261b7d", size = 185852, upload-time = "2026-02-02T12:36:42.077Z" }, + { url = "https://files.pythonhosted.org/packages/6e/f5/f1997e987211f6f9bd71b8083047b316208b4aca0b529bb5f8c96c89ef3e/jiter-0.13.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:cc5223ab19fe25e2f0bf2643204ad7318896fe3729bf12fde41b77bfc4fafff0", size = 308804, upload-time = "2026-02-02T12:36:43.496Z" }, + { url = "https://files.pythonhosted.org/packages/cd/8f/5482a7677731fd44881f0204981ce2d7175db271f82cba2085dd2212e095/jiter-0.13.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9776ebe51713acf438fd9b4405fcd86893ae5d03487546dae7f34993217f8a91", size = 318787, upload-time = "2026-02-02T12:36:45.071Z" }, + { url = "https://files.pythonhosted.org/packages/f3/b9/7257ac59778f1cd025b26a23c5520a36a424f7f1b068f2442a5b499b7464/jiter-0.13.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879e768938e7b49b5e90b7e3fecc0dbec01b8cb89595861fb39a8967c5220d09", size = 353880, upload-time = "2026-02-02T12:36:47.365Z" }, + { url = "https://files.pythonhosted.org/packages/c3/87/719eec4a3f0841dad99e3d3604ee4cba36af4419a76f3cb0b8e2e691ad67/jiter-0.13.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:682161a67adea11e3aae9038c06c8b4a9a71023228767477d683f69903ebc607", size = 366702, upload-time = "2026-02-02T12:36:48.871Z" }, + { url = "https://files.pythonhosted.org/packages/d2/65/415f0a75cf6921e43365a1bc227c565cb949caca8b7532776e430cbaa530/jiter-0.13.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a13b68cd1cd8cc9de8f244ebae18ccb3e4067ad205220ef324c39181e23bbf66", size = 486319, upload-time = "2026-02-02T12:36:53.006Z" }, + { url = "https://files.pythonhosted.org/packages/54/a2/9e12b48e82c6bbc6081fd81abf915e1443add1b13d8fc586e1d90bb02bb8/jiter-0.13.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87ce0f14c6c08892b610686ae8be350bf368467b6acd5085a5b65441e2bf36d2", size = 372289, upload-time = "2026-02-02T12:36:54.593Z" }, + { url = "https://files.pythonhosted.org/packages/4e/c1/e4693f107a1789a239c759a432e9afc592366f04e901470c2af89cfd28e1/jiter-0.13.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c365005b05505a90d1c47856420980d0237adf82f70c4aff7aebd3c1cc143ad", size = 360165, upload-time = "2026-02-02T12:36:56.112Z" }, + { url = "https://files.pythonhosted.org/packages/17/08/91b9ea976c1c758240614bd88442681a87672eebc3d9a6dde476874e706b/jiter-0.13.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1317fdffd16f5873e46ce27d0e0f7f4f90f0cdf1d86bf6abeaea9f63ca2c401d", size = 389634, upload-time = "2026-02-02T12:36:57.495Z" }, + { url = "https://files.pythonhosted.org/packages/18/23/58325ef99390d6d40427ed6005bf1ad54f2577866594bcf13ce55675f87d/jiter-0.13.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:c05b450d37ba0c9e21c77fef1f205f56bcee2330bddca68d344baebfc55ae0df", size = 514933, upload-time = "2026-02-02T12:36:58.909Z" }, + { url = "https://files.pythonhosted.org/packages/5b/25/69f1120c7c395fd276c3996bb8adefa9c6b84c12bb7111e5c6ccdcd8526d/jiter-0.13.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:775e10de3849d0631a97c603f996f518159272db00fdda0a780f81752255ee9d", size = 548842, upload-time = "2026-02-02T12:37:00.433Z" }, + { url = "https://files.pythonhosted.org/packages/18/05/981c9669d86850c5fbb0d9e62bba144787f9fba84546ba43d624ee27ef29/jiter-0.13.0-cp314-cp314-win32.whl", hash = "sha256:632bf7c1d28421c00dd8bbb8a3bac5663e1f57d5cd5ed962bce3c73bf62608e6", size = 202108, upload-time = "2026-02-02T12:37:01.718Z" }, + { url = "https://files.pythonhosted.org/packages/8d/96/cdcf54dd0b0341db7d25413229888a346c7130bd20820530905fdb65727b/jiter-0.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:f22ef501c3f87ede88f23f9b11e608581c14f04db59b6a801f354397ae13739f", size = 204027, upload-time = "2026-02-02T12:37:03.075Z" }, + { url = "https://files.pythonhosted.org/packages/fb/f9/724bcaaab7a3cd727031fe4f6995cb86c4bd344909177c186699c8dec51a/jiter-0.13.0-cp314-cp314-win_arm64.whl", hash = "sha256:07b75fe09a4ee8e0c606200622e571e44943f47254f95e2436c8bdcaceb36d7d", size = 187199, upload-time = "2026-02-02T12:37:04.414Z" }, + { url = "https://files.pythonhosted.org/packages/62/92/1661d8b9fd6a3d7a2d89831db26fe3c1509a287d83ad7838831c7b7a5c7e/jiter-0.13.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:964538479359059a35fb400e769295d4b315ae61e4105396d355a12f7fef09f0", size = 318423, upload-time = "2026-02-02T12:37:05.806Z" }, + { url = "https://files.pythonhosted.org/packages/4f/3b/f77d342a54d4ebcd128e520fc58ec2f5b30a423b0fd26acdfc0c6fef8e26/jiter-0.13.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e104da1db1c0991b3eaed391ccd650ae8d947eab1480c733e5a3fb28d4313e40", size = 351438, upload-time = "2026-02-02T12:37:07.189Z" }, + { url = "https://files.pythonhosted.org/packages/76/b3/ba9a69f0e4209bd3331470c723c2f5509e6f0482e416b612431a5061ed71/jiter-0.13.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e3a5f0cde8ff433b8e88e41aa40131455420fb3649a3c7abdda6145f8cb7202", size = 364774, upload-time = "2026-02-02T12:37:08.579Z" }, + { url = "https://files.pythonhosted.org/packages/b3/16/6cdb31fa342932602458dbb631bfbd47f601e03d2e4950740e0b2100b570/jiter-0.13.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57aab48f40be1db920a582b30b116fe2435d184f77f0e4226f546794cedd9cf0", size = 487238, upload-time = "2026-02-02T12:37:10.066Z" }, + { url = "https://files.pythonhosted.org/packages/ed/b1/956cc7abaca8d95c13aa8d6c9b3f3797241c246cd6e792934cc4c8b250d2/jiter-0.13.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7772115877c53f62beeb8fd853cab692dbc04374ef623b30f997959a4c0e7e95", size = 372892, upload-time = "2026-02-02T12:37:11.656Z" }, + { url = "https://files.pythonhosted.org/packages/26/c4/97ecde8b1e74f67b8598c57c6fccf6df86ea7861ed29da84629cdbba76c4/jiter-0.13.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1211427574b17b633cfceba5040de8081e5abf114f7a7602f73d2e16f9fdaa59", size = 360309, upload-time = "2026-02-02T12:37:13.244Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d7/eabe3cf46715854ccc80be2cd78dd4c36aedeb30751dbf85a1d08c14373c/jiter-0.13.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7beae3a3d3b5212d3a55d2961db3c292e02e302feb43fce6a3f7a31b90ea6dfe", size = 389607, upload-time = "2026-02-02T12:37:14.881Z" }, + { url = "https://files.pythonhosted.org/packages/df/2d/03963fc0804e6109b82decfb9974eb92df3797fe7222428cae12f8ccaa0c/jiter-0.13.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:e5562a0f0e90a6223b704163ea28e831bd3a9faa3512a711f031611e6b06c939", size = 514986, upload-time = "2026-02-02T12:37:16.326Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6c/8c83b45eb3eb1c1e18d841fe30b4b5bc5619d781267ca9bc03e005d8fd0a/jiter-0.13.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:6c26a424569a59140fb51160a56df13f438a2b0967365e987889186d5fc2f6f9", size = 548756, upload-time = "2026-02-02T12:37:17.736Z" }, + { url = "https://files.pythonhosted.org/packages/47/66/eea81dfff765ed66c68fd2ed8c96245109e13c896c2a5015c7839c92367e/jiter-0.13.0-cp314-cp314t-win32.whl", hash = "sha256:24dc96eca9f84da4131cdf87a95e6ce36765c3b156fc9ae33280873b1c32d5f6", size = 201196, upload-time = "2026-02-02T12:37:19.101Z" }, + { url = "https://files.pythonhosted.org/packages/ff/32/4ac9c7a76402f8f00d00842a7f6b83b284d0cf7c1e9d4227bc95aa6d17fa/jiter-0.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0a8d76c7524087272c8ae913f5d9d608bd839154b62c4322ef65723d2e5bb0b8", size = 204215, upload-time = "2026-02-02T12:37:20.495Z" }, + { url = "https://files.pythonhosted.org/packages/f9/8e/7def204fea9f9be8b3c21a6f2dd6c020cf56c7d5ff753e0e23ed7f9ea57e/jiter-0.13.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2c26cf47e2cad140fa23b6d58d435a7c0161f5c514284802f25e87fddfe11024", size = 187152, upload-time = "2026-02-02T12:37:22.124Z" }, + { url = "https://files.pythonhosted.org/packages/79/b3/3c29819a27178d0e461a8571fb63c6ae38be6dc36b78b3ec2876bbd6a910/jiter-0.13.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b1cbfa133241d0e6bdab48dcdc2604e8ba81512f6bbd68ec3e8e1357dd3c316c", size = 307016, upload-time = "2026-02-02T12:37:42.755Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ae/60993e4b07b1ac5ebe46da7aa99fdbb802eb986c38d26e3883ac0125c4e0/jiter-0.13.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:db367d8be9fad6e8ebbac4a7578b7af562e506211036cba2c06c3b998603c3d2", size = 305024, upload-time = "2026-02-02T12:37:44.774Z" }, + { url = "https://files.pythonhosted.org/packages/77/fa/2227e590e9cf98803db2811f172b2d6460a21539ab73006f251c66f44b14/jiter-0.13.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45f6f8efb2f3b0603092401dc2df79fa89ccbc027aaba4174d2d4133ed661434", size = 339337, upload-time = "2026-02-02T12:37:46.668Z" }, + { url = "https://files.pythonhosted.org/packages/2d/92/015173281f7eb96c0ef580c997da8ef50870d4f7f4c9e03c845a1d62ae04/jiter-0.13.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:597245258e6ad085d064780abfb23a284d418d3e61c57362d9449c6c7317ee2d", size = 346395, upload-time = "2026-02-02T12:37:48.09Z" }, + { url = "https://files.pythonhosted.org/packages/80/60/e50fa45dd7e2eae049f0ce964663849e897300433921198aef94b6ffa23a/jiter-0.13.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:3d744a6061afba08dd7ae375dcde870cffb14429b7477e10f67e9e6d68772a0a", size = 305169, upload-time = "2026-02-02T12:37:50.376Z" }, + { url = "https://files.pythonhosted.org/packages/d2/73/a009f41c5eed71c49bec53036c4b33555afcdee70682a18c6f66e396c039/jiter-0.13.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:ff732bd0a0e778f43d5009840f20b935e79087b4dc65bd36f1cd0f9b04b8ff7f", size = 303808, upload-time = "2026-02-02T12:37:52.092Z" }, + { url = "https://files.pythonhosted.org/packages/c4/10/528b439290763bff3d939268085d03382471b442f212dca4ff5f12802d43/jiter-0.13.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab44b178f7981fcaea7e0a5df20e773c663d06ffda0198f1a524e91b2fde7e59", size = 337384, upload-time = "2026-02-02T12:37:53.582Z" }, + { url = "https://files.pythonhosted.org/packages/67/8a/a342b2f0251f3dac4ca17618265d93bf244a2a4d089126e81e4c1056ac50/jiter-0.13.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bb00b6d26db67a05fe3e12c76edc75f32077fb51deed13822dc648fa373bc19", size = 343768, upload-time = "2026-02-02T12:37:55.055Z" }, +] + +[[package]] +name = "jmespath" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, +] + +[[package]] +name = "joblib" +version = "1.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603, upload-time = "2025-12-15T08:41:46.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, +] + +[[package]] +name = "json-repair" +version = "0.58.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/68/119efc8f5f9fc8cf4f35bbfe28c5b84a14e237be4647a53cb29390e06102/json_repair-0.58.7.tar.gz", hash = "sha256:2ea5c841cc1d91dbbe79e9ed4b2b77a5cc04d20892d62a15261b70ce999ec758", size = 46312, upload-time = "2026-03-26T19:12:13.654Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/70/1c3d2304b7972a3e9430f1672b4fe20061c0ffc56662ad7c63d0e77a7d1a/json_repair-0.58.7-py3-none-any.whl", hash = "sha256:af0c7ff6a2ddd80bb1e7e6121c1a86d8bb57a539aa211acbfb25c64087b7116f", size = 44545, upload-time = "2026-03-26T19:12:12.445Z" }, +] + +[[package]] +name = "jsonpath-ng" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/32/58/250751940d75c8019659e15482d548a4aa3b6ce122c515102a4bfdac50e3/jsonpath_ng-1.8.0.tar.gz", hash = "sha256:54252968134b5e549ea5b872f1df1168bd7defe1a52fed5a358c194e1943ddc3", size = 74513, upload-time = "2026-02-24T14:42:06.182Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/99/33c7d78a3fb70d545fd5411ac67a651c81602cc09c9cf0df383733f068c5/jsonpath_ng-1.8.0-py3-none-any.whl", hash = "sha256:b8dde192f8af58d646fc031fac9c99fe4d00326afc4148f1f043c601a8cfe138", size = 67844, upload-time = "2026-02-28T00:53:19.637Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778, upload-time = "2024-07-08T18:40:05.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462, upload-time = "2024-07-08T18:40:00.165Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "kubernetes" +version = "35.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "durationpy" }, + { name = "python-dateutil" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "requests-oauthlib" }, + { name = "six" }, + { name = "urllib3" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2c/8f/85bf51ad4150f64e8c665daf0d9dfe9787ae92005efb9a4d1cba592bd79d/kubernetes-35.0.0.tar.gz", hash = "sha256:3d00d344944239821458b9efd484d6df9f011da367ecb155dadf9513f05f09ee", size = 1094642, upload-time = "2026-01-16T01:05:27.76Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/70/05b685ea2dffcb2adbf3cdcea5d8865b7bc66f67249084cf845012a0ff13/kubernetes-35.0.0-py2.py3-none-any.whl", hash = "sha256:39e2b33b46e5834ef6c3985ebfe2047ab39135d41de51ce7641a7ca5b372a13d", size = 2017602, upload-time = "2026-01-16T01:05:25.991Z" }, +] + +[[package]] +name = "lark" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, +] + +[[package]] +name = "litellm" +version = "1.83.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "click" }, + { name = "fastuuid" }, + { name = "httpx" }, + { name = "importlib-metadata" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "openai" }, + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "tiktoken" }, + { name = "tokenizers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/03/c4/30469c06ae7437a4406bc11e3c433cfd380a6771068cca15ea918dcd158f/litellm-1.83.4.tar.gz", hash = "sha256:6458d2030a41229460b321adee00517a91dbd8e63213cc953d355cb41d16f2d4", size = 17733899, upload-time = "2026-04-07T04:33:47.445Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/bd/df19d3f8f6654535ee343a341fd921f81c411abf601a53e3eaef58129b02/litellm-1.83.4-py3-none-any.whl", hash = "sha256:17d7b4d48d47aca988ea4f762ddda5e7bd72cda3270192b22813d0330869d7b4", size = 16015555, upload-time = "2026-04-07T04:33:44.268Z" }, +] + +[[package]] +name = "llguidance" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/48/3f7a9d3ff1b36bba92b5107a3a21286821227afe9ea464736133994d61fb/llguidance-1.3.0.tar.gz", hash = "sha256:861249afd51dc325646834462ea827e57a5c2b2042e108e6aae7059fdad9104d", size = 1070460, upload-time = "2025-10-20T19:58:44.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/33/be5acb85cd8cdc4afde33d9c234eece9f318e087920255af3c05864cd3e7/llguidance-1.3.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f7685222660a762e481ac633d49cc559c64980fe2ee59c8f932a5bb5cbc0c2c2", size = 3220647, upload-time = "2025-10-20T19:58:42.542Z" }, + { url = "https://files.pythonhosted.org/packages/82/e6/b48bda5b15efeaeb62bd0dba8fc6a01d4ae5457a85dbb5d18632385fe15c/llguidance-1.3.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:098030ff0687261a3f1bd54cf21fe951fc861d56d37a0671250dd36677eaf224", size = 3099830, upload-time = "2025-10-20T19:58:40.826Z" }, + { url = "https://files.pythonhosted.org/packages/aa/11/44389d3d1526d7a5c38ffd587a5ebc61d7bee443ac1dea95f2089ad58f5f/llguidance-1.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f6caca5d78db7f76e1fbb0fff8607b861c32d47fa3d5dee2fc49de27ee269df", size = 2835242, upload-time = "2025-10-20T19:58:34.518Z" }, + { url = "https://files.pythonhosted.org/packages/83/a8/1ff2bedb8f9acb46a2d2d603415d272bb622c142ea86f5b95445cc6e366c/llguidance-1.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc17e9dd602c3879bf91664a64bf72f54c74dbfbeb24ccfab6a5fe435b12f7aa", size = 3033133, upload-time = "2025-10-20T19:58:38.721Z" }, + { url = "https://files.pythonhosted.org/packages/5a/7e/809349638231f469b9056c0e1bfd924d5ef5558b3b3ec72d093b6fad33b1/llguidance-1.3.0-cp39-abi3-win_amd64.whl", hash = "sha256:1d1cd1c8618d1a13605d3e057c978651e551c8c469b481ee4041f1d6c436002d", size = 2789946, upload-time = "2025-10-20T19:58:45.958Z" }, +] + +[[package]] +name = "llvmlite" +version = "0.44.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293d5dbbb2a76480d5d4eeba641557b69fe90af6c5b84e/llvmlite-0.44.0.tar.gz", hash = "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4", size = 171880, upload-time = "2025-01-20T11:14:41.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/75/d4863ddfd8ab5f6e70f4504cf8cc37f4e986ec6910f4ef8502bb7d3c1c71/llvmlite-0.44.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9fbadbfba8422123bab5535b293da1cf72f9f478a65645ecd73e781f962ca614", size = 28132306, upload-time = "2025-01-20T11:12:18.634Z" }, + { url = "https://files.pythonhosted.org/packages/37/d9/6e8943e1515d2f1003e8278819ec03e4e653e2eeb71e4d00de6cfe59424e/llvmlite-0.44.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cccf8eb28f24840f2689fb1a45f9c0f7e582dd24e088dcf96e424834af11f791", size = 26201096, upload-time = "2025-01-20T11:12:24.544Z" }, + { url = "https://files.pythonhosted.org/packages/aa/46/8ffbc114def88cc698906bf5acab54ca9fdf9214fe04aed0e71731fb3688/llvmlite-0.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7202b678cdf904823c764ee0fe2dfe38a76981f4c1e51715b4cb5abb6cf1d9e8", size = 42361859, upload-time = "2025-01-20T11:12:31.839Z" }, + { url = "https://files.pythonhosted.org/packages/30/1c/9366b29ab050a726af13ebaae8d0dff00c3c58562261c79c635ad4f5eb71/llvmlite-0.44.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40526fb5e313d7b96bda4cbb2c85cd5374e04d80732dd36a282d72a560bb6408", size = 41184199, upload-time = "2025-01-20T11:12:40.049Z" }, + { url = "https://files.pythonhosted.org/packages/69/07/35e7c594b021ecb1938540f5bce543ddd8713cff97f71d81f021221edc1b/llvmlite-0.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:41e3839150db4330e1b2716c0be3b5c4672525b4c9005e17c7597f835f351ce2", size = 30332381, upload-time = "2025-01-20T11:12:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e2/86b245397052386595ad726f9742e5223d7aea999b18c518a50e96c3aca4/llvmlite-0.44.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:eed7d5f29136bda63b6d7804c279e2b72e08c952b7c5df61f45db408e0ee52f3", size = 28132305, upload-time = "2025-01-20T11:12:53.936Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ec/506902dc6870249fbe2466d9cf66d531265d0f3a1157213c8f986250c033/llvmlite-0.44.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ace564d9fa44bb91eb6e6d8e7754977783c68e90a471ea7ce913bff30bd62427", size = 26201090, upload-time = "2025-01-20T11:12:59.847Z" }, + { url = "https://files.pythonhosted.org/packages/99/fe/d030f1849ebb1f394bb3f7adad5e729b634fb100515594aca25c354ffc62/llvmlite-0.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5d22c3bfc842668168a786af4205ec8e3ad29fb1bc03fd11fd48460d0df64c1", size = 42361858, upload-time = "2025-01-20T11:13:07.623Z" }, + { url = "https://files.pythonhosted.org/packages/d7/7a/ce6174664b9077fc673d172e4c888cb0b128e707e306bc33fff8c2035f0d/llvmlite-0.44.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f01a394e9c9b7b1d4e63c327b096d10f6f0ed149ef53d38a09b3749dcf8c9610", size = 41184200, upload-time = "2025-01-20T11:13:20.058Z" }, + { url = "https://files.pythonhosted.org/packages/5f/c6/258801143975a6d09a373f2641237992496e15567b907a4d401839d671b8/llvmlite-0.44.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8489634d43c20cd0ad71330dde1d5bc7b9966937a263ff1ec1cebb90dc50955", size = 30331193, upload-time = "2025-01-20T11:13:26.976Z" }, + { url = "https://files.pythonhosted.org/packages/15/86/e3c3195b92e6e492458f16d233e58a1a812aa2bfbef9bdd0fbafcec85c60/llvmlite-0.44.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:1d671a56acf725bf1b531d5ef76b86660a5ab8ef19bb6a46064a705c6ca80aad", size = 28132297, upload-time = "2025-01-20T11:13:32.57Z" }, + { url = "https://files.pythonhosted.org/packages/d6/53/373b6b8be67b9221d12b24125fd0ec56b1078b660eeae266ec388a6ac9a0/llvmlite-0.44.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f79a728e0435493611c9f405168682bb75ffd1fbe6fc360733b850c80a026db", size = 26201105, upload-time = "2025-01-20T11:13:38.744Z" }, + { url = "https://files.pythonhosted.org/packages/cb/da/8341fd3056419441286c8e26bf436923021005ece0bff5f41906476ae514/llvmlite-0.44.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0143a5ef336da14deaa8ec26c5449ad5b6a2b564df82fcef4be040b9cacfea9", size = 42361901, upload-time = "2025-01-20T11:13:46.711Z" }, + { url = "https://files.pythonhosted.org/packages/53/ad/d79349dc07b8a395a99153d7ce8b01d6fcdc9f8231355a5df55ded649b61/llvmlite-0.44.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d752f89e31b66db6f8da06df8b39f9b91e78c5feea1bf9e8c1fba1d1c24c065d", size = 41184247, upload-time = "2025-01-20T11:13:56.159Z" }, + { url = "https://files.pythonhosted.org/packages/e2/3b/a9a17366af80127bd09decbe2a54d8974b6d8b274b39bf47fbaedeec6307/llvmlite-0.44.0-cp312-cp312-win_amd64.whl", hash = "sha256:eae7e2d4ca8f88f89d315b48c6b741dcb925d6a1042da694aa16ab3dd4cbd3a1", size = 30332380, upload-time = "2025-01-20T11:14:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/89/24/4c0ca705a717514c2092b18476e7a12c74d34d875e05e4d742618ebbf449/llvmlite-0.44.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:319bddd44e5f71ae2689859b7203080716448a3cd1128fb144fe5c055219d516", size = 28132306, upload-time = "2025-01-20T11:14:09.035Z" }, + { url = "https://files.pythonhosted.org/packages/01/cf/1dd5a60ba6aee7122ab9243fd614abcf22f36b0437cbbe1ccf1e3391461c/llvmlite-0.44.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c58867118bad04a0bb22a2e0068c693719658105e40009ffe95c7000fcde88e", size = 26201090, upload-time = "2025-01-20T11:14:15.401Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1b/656f5a357de7135a3777bd735cc7c9b8f23b4d37465505bd0eaf4be9befe/llvmlite-0.44.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46224058b13c96af1365290bdfebe9a6264ae62fb79b2b55693deed11657a8bf", size = 42361904, upload-time = "2025-01-20T11:14:22.949Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e1/12c5f20cb9168fb3464a34310411d5ad86e4163c8ff2d14a2b57e5cc6bac/llvmlite-0.44.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0097052c32bf721a4efc03bd109d335dfa57d9bffb3d4c24cc680711b8b4fc", size = 41184245, upload-time = "2025-01-20T11:14:31.731Z" }, + { url = "https://files.pythonhosted.org/packages/d0/81/e66fc86539293282fd9cb7c9417438e897f369e79ffb62e1ae5e5154d4dd/llvmlite-0.44.0-cp313-cp313-win_amd64.whl", hash = "sha256:2fb7c4f2fb86cbae6dca3db9ab203eeea0e22d73b99bc2341cdf9de93612e930", size = 30331193, upload-time = "2025-01-20T11:14:38.578Z" }, +] + +[[package]] +name = "lm-format-enforcer" +version = "0.11.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "interegular" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/84/d5/41cd417ba7dfdbbcfe46cebf81fb3dfd7c591b89897560ad05bb410a465d/lm_format_enforcer-0.11.3.tar.gz", hash = "sha256:e68081c108719cce284a9bcc889709b26ffb085a1945b5eba3a12cfa96d528da", size = 40258, upload-time = "2025-08-24T19:37:47.527Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/ef/11292bb0b85cf4c93447cab5a29f64576ed14d3ab4280e35ddd23486594a/lm_format_enforcer-0.11.3-py3-none-any.whl", hash = "sha256:cf586350875def1ae7a8fba84fcbbfc8371424b6c9d05c1fcba70aa233fbf06f", size = 45418, upload-time = "2025-08-24T19:37:46.325Z" }, +] + +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, +] + +[[package]] +name = "mako" +version = "1.3.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/38/bd5b78a920a64d708fe6bc8e0a2c075e1389d53bef8413725c63ba041535/mako-1.3.10.tar.gz", hash = "sha256:99579a6f39583fa7e5630a28c3c1f440e4e97a414b80372649c0ce338da2ea28", size = 392474, upload-time = "2025-04-10T12:44:31.16Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl", hash = "sha256:baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59", size = 78509, upload-time = "2025-04-10T12:50:53.297Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "mcp" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "python-multipart" }, + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/eb/c0cfc62075dc6e1ec1c64d352ae09ac051d9334311ed226f1f425312848a/mcp-1.27.0.tar.gz", hash = "sha256:d3dc35a7eec0d458c1da4976a48f982097ddaab87e278c5511d5a4a56e852b83", size = 607509, upload-time = "2026-04-02T14:48:08.88Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/46/f6b4ad632c67ef35209a66127e4bddc95759649dd595f71f13fba11bdf9a/mcp-1.27.0-py3-none-any.whl", hash = "sha256:5ce1fa81614958e267b21fb2aa34e0aea8e2c6ede60d52aba45fd47246b4d741", size = 215967, upload-time = "2026-04-02T14:48:07.24Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mistral-common" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema" }, + { name = "numpy" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pydantic-extra-types", extra = ["pycountry"] }, + { name = "requests" }, + { name = "tiktoken" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/97/753c85b5c0a19f4331ac99e0300ac8da06d4b29b629c9cb03064b38561bd/mistral_common-1.11.0.tar.gz", hash = "sha256:439b7fa38f9c3f020154af51bdf30eb81def507643017d8ce9f798384ec47ec3", size = 6355512, upload-time = "2026-04-01T13:54:12.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e4/73ad3c27e3fb613c3ce0953c928202c46cddebac3989b87be1b6f305a9f6/mistral_common-1.11.0-py3-none-any.whl", hash = "sha256:1d3ecaf7c3aa7338cb37b596fd0fb294485753958ee8e7254a6cc23eb30b249b", size = 6531513, upload-time = "2026-04-01T13:54:16.536Z" }, +] + +[package.optional-dependencies] +image = [ + { name = "opencv-python-headless" }, +] + +[[package]] +name = "mmh3" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/1a/edb23803a168f070ded7a3014c6d706f63b90c84ccc024f89d794a3b7a6d/mmh3-5.2.1.tar.gz", hash = "sha256:bbea5b775f0ac84945191fb83f845a6fd9a21a03ea7f2e187defac7e401616ad", size = 33775, upload-time = "2026-03-05T15:55:57.716Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/bb/88ee54afa5644b0f35ab5b435f208394feb963e5bb47c4e404deb625ffa4/mmh3-5.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5d87a3584093e1a89987e3d36d82c98d9621b2cb944e22a420aa1401e096758f", size = 56080, upload-time = "2026-03-05T15:53:40.452Z" }, + { url = "https://files.pythonhosted.org/packages/cc/bf/5404c2fd6ac84819e8ff1b7e34437b37cf55a2b11318894909e7bb88de3f/mmh3-5.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30e4d2084df019880d55f6f7bea35328d9b464ebee090baa372c096dc77556fb", size = 40462, upload-time = "2026-03-05T15:53:41.751Z" }, + { url = "https://files.pythonhosted.org/packages/de/0b/52bffad0b52ae4ea53e222b594bd38c08ecac1fc410323220a7202e43da5/mmh3-5.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0bbc17250b10d3466875a40a52520a6bac3c02334ca709207648abd3c223ed5c", size = 40077, upload-time = "2026-03-05T15:53:42.753Z" }, + { url = "https://files.pythonhosted.org/packages/a0/9e/326c93d425b9fa4cbcdc71bc32aaba520db37577d632a24d25d927594eca/mmh3-5.2.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:76219cd1eefb9bf4af7856e3ae563d15158efa145c0aab01e9933051a1954045", size = 95302, upload-time = "2026-03-05T15:53:43.867Z" }, + { url = "https://files.pythonhosted.org/packages/c6/b1/e20d5f0d19c4c0f3df213fa7dcfa0942c4fb127d38e11f398ae8ddf6cccc/mmh3-5.2.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb9d44c25244e11c8be3f12c938ca8ba8404620ef8092245d2093c6ab3df260f", size = 101174, upload-time = "2026-03-05T15:53:45.194Z" }, + { url = "https://files.pythonhosted.org/packages/7f/4a/1a9bb3e33c18b1e1cee2c249a3053c4d4d9c93ecb30738f39a62249a7e86/mmh3-5.2.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d5d542bf2abd0fd0361e8017d03f7cb5786214ceb4a40eef1539d6585d93386", size = 103979, upload-time = "2026-03-05T15:53:46.334Z" }, + { url = "https://files.pythonhosted.org/packages/ff/8d/dab9ee7545429e7acdd38d23d0104471d31de09a0c695f1b751e0ff34532/mmh3-5.2.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:08043f7cb1fb9467c3fbbbaea7896986e7fbc81f4d3fd9289a73d9110ab6207a", size = 110898, upload-time = "2026-03-05T15:53:47.443Z" }, + { url = "https://files.pythonhosted.org/packages/72/08/408f11af7fe9e76b883142bb06536007cc7f237be2a5e9ad4e837716e627/mmh3-5.2.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:add7ac388d1e0bf57259afbcf9ed05621a3bf11ce5ee337e7536f1e1aaf056b0", size = 118308, upload-time = "2026-03-05T15:53:49.1Z" }, + { url = "https://files.pythonhosted.org/packages/86/2d/0551be7fe0000736d9ad12ffa1f130d7a0c17b49193d6dc41c82bd9404c6/mmh3-5.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41105377f6282e8297f182e393a79cfffd521dde37ace52b106373bdcd9ca5cb", size = 101671, upload-time = "2026-03-05T15:53:50.317Z" }, + { url = "https://files.pythonhosted.org/packages/44/17/6e4f80c4e6ad590139fa2017c3aeca54e7cc9ef68e08aa142a0c90f40a97/mmh3-5.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3cb61db880ec11e984348227b333259994c2c85caa775eb7875decb3768db890", size = 96682, upload-time = "2026-03-05T15:53:51.48Z" }, + { url = "https://files.pythonhosted.org/packages/ad/a7/b82fccd38c1fa815de72e94ebe9874562964a10e21e6c1bc3b01d3f15a0e/mmh3-5.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e8b5378de2b139c3a830f0209c1e91f7705919a4b3e563a10955104f5097a70a", size = 110287, upload-time = "2026-03-05T15:53:52.68Z" }, + { url = "https://files.pythonhosted.org/packages/a8/a1/2644069031c8cec0be46f0346f568a53f42fddd843f03cc890306699c1e2/mmh3-5.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e904f2417f0d6f6d514f3f8b836416c360f306ddaee1f84de8eef1e722d212e5", size = 111899, upload-time = "2026-03-05T15:53:53.791Z" }, + { url = "https://files.pythonhosted.org/packages/51/7b/6614f3eb8fb33f931fa7616c6d477247e48ec6c5082b02eeeee998cffa94/mmh3-5.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f1fbb0a99125b1287c6d9747f937dc66621426836d1a2d50d05aecfc81911b57", size = 100078, upload-time = "2026-03-05T15:53:55.234Z" }, + { url = "https://files.pythonhosted.org/packages/27/9a/dd4d5a5fb893e64f71b42b69ecae97dd78db35075412488b24036bc5599c/mmh3-5.2.1-cp310-cp310-win32.whl", hash = "sha256:b4cce60d0223074803c9dbe0721ad3fa51dafe7d462fee4b656a1aa01ee07518", size = 40756, upload-time = "2026-03-05T15:53:56.319Z" }, + { url = "https://files.pythonhosted.org/packages/c9/34/0b25889450f8aeffcec840aa73251e853f059c1b72ed1d1c027b956f95f5/mmh3-5.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:6f01f044112d43a20be2f13a11683666d87151542ad627fe41a18b9791d2802f", size = 41519, upload-time = "2026-03-05T15:53:57.41Z" }, + { url = "https://files.pythonhosted.org/packages/fd/31/8fd42e3c526d0bcb1db7f569c0de6729e180860a0495e387a53af33c2043/mmh3-5.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:7501e9be34cb21e72fcfe672aafd0eee65c16ba2afa9dcb5500a587d3a0580f0", size = 39285, upload-time = "2026-03-05T15:53:58.697Z" }, + { url = "https://files.pythonhosted.org/packages/65/d7/3312a59df3c1cdd783f4cf0c4ee8e9decff9c5466937182e4cc7dbbfe6c5/mmh3-5.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dae0f0bd7d30c0ad61b9a504e8e272cb8391eed3f1587edf933f4f6b33437450", size = 56082, upload-time = "2026-03-05T15:53:59.702Z" }, + { url = "https://files.pythonhosted.org/packages/61/96/6f617baa098ca0d2989bfec6d28b5719532cd8d8848782662f5b755f657f/mmh3-5.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9aeaf53eaa075dd63e81512522fd180097312fb2c9f476333309184285c49ce0", size = 40458, upload-time = "2026-03-05T15:54:01.548Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b4/9cd284bd6062d711e13d26c04d4778ab3f690c1c38a4563e3c767ec8802e/mmh3-5.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0634581290e6714c068f4aa24020acf7880927d1f0084fa753d9799ae9610082", size = 40079, upload-time = "2026-03-05T15:54:02.743Z" }, + { url = "https://files.pythonhosted.org/packages/f6/09/a806334ce1d3d50bf782b95fcee8b3648e1e170327d4bb7b4bad2ad7d956/mmh3-5.2.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e080c0637aea036f35507e803a4778f119a9b436617694ae1c5c366805f1e997", size = 97242, upload-time = "2026-03-05T15:54:04.536Z" }, + { url = "https://files.pythonhosted.org/packages/ee/93/723e317dd9e041c4dc4566a2eb53b01ad94de31750e0b834f1643905e97c/mmh3-5.2.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:db0562c5f71d18596dcd45e854cf2eeba27d7543e1a3acdafb7eef728f7fe85d", size = 103082, upload-time = "2026-03-05T15:54:06.387Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/f96121e69cc48696075071531cf574f112e1ffd08059f4bffb41210e6fc5/mmh3-5.2.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d9f9a3ce559a5267014b04b82956993270f63ec91765e13e9fd73daf2d2738e", size = 106054, upload-time = "2026-03-05T15:54:07.506Z" }, + { url = "https://files.pythonhosted.org/packages/82/49/192b987ec48d0b2aecf8ac285a9b11fbc00030f6b9c694664ae923458dde/mmh3-5.2.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:960b1b3efa39872ac8b6cc3a556edd6fb90ed74f08c9c45e028f1005b26aa55d", size = 112910, upload-time = "2026-03-05T15:54:09.403Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a1/03e91fd334ed0144b83343a76eb11f17434cd08f746401488cfeafb2d241/mmh3-5.2.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d30b650595fdbe32366b94cb14f30bb2b625e512bd4e1df00611f99dc5c27fd4", size = 120551, upload-time = "2026-03-05T15:54:10.587Z" }, + { url = "https://files.pythonhosted.org/packages/93/b9/b89a71d2ff35c3a764d1c066c7313fc62c7cc48fa48a4b3b0304a4a0146f/mmh3-5.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:82f3802bfc4751f420d591c5c864de538b71cea117fce67e4595c2afede08a15", size = 99096, upload-time = "2026-03-05T15:54:11.76Z" }, + { url = "https://files.pythonhosted.org/packages/36/b5/613772c1c6ed5f7b63df55eb131e887cc43720fec392777b95a79d34e640/mmh3-5.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:915e7a2418f10bd1151b1953df06d896db9783c9cfdb9a8ee1f9b3a4331ab503", size = 98524, upload-time = "2026-03-05T15:54:13.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0e/1524566fe8eaf871e4f7bc44095929fcd2620488f402822d848df19d679c/mmh3-5.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:fc78739b5ec6e4fb02301984a3d442a91406e7700efbe305071e7fd1c78278f2", size = 106239, upload-time = "2026-03-05T15:54:14.601Z" }, + { url = "https://files.pythonhosted.org/packages/04/94/21adfa7d90a7a697137ad6de33eeff6445420ca55e433a5d4919c79bc3b5/mmh3-5.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:41aac7002a749f08727cb91babff1daf8deac317c0b1f317adc69be0e6c375d1", size = 109797, upload-time = "2026-03-05T15:54:15.819Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e6/1aacc3a219e1aa62fa65669995d4a3562b35be5200ec03680c7e4bec9676/mmh3-5.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9d8089d853c7963a8ce87fff93e2a67075c0bc08684a08ea6ad13577c38ffc38", size = 97228, upload-time = "2026-03-05T15:54:16.992Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b9/5e4cca8dcccf298add0a27f3c357bc8cf8baf821d35cdc6165e4bd5a48b0/mmh3-5.2.1-cp311-cp311-win32.whl", hash = "sha256:baeb47635cb33375dee4924cd93d7f5dcaa786c740b08423b0209b824a1ee728", size = 40751, upload-time = "2026-03-05T15:54:18.714Z" }, + { url = "https://files.pythonhosted.org/packages/72/fc/5b11d49247f499bcda591171e9cf3b6ee422b19e70aa2cef2e0ae65ca3b9/mmh3-5.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:1e4ecee40ba19e6975e1120829796770325841c2f153c0e9aecca927194c6a2a", size = 41517, upload-time = "2026-03-05T15:54:19.764Z" }, + { url = "https://files.pythonhosted.org/packages/8a/5f/2a511ee8a1c2a527c77726d5231685b72312c5a1a1b7639ad66a9652aa84/mmh3-5.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:c302245fd6c33d96bd169c7ccf2513c20f4c1e417c07ce9dce107c8bc3f8411f", size = 39287, upload-time = "2026-03-05T15:54:20.904Z" }, + { url = "https://files.pythonhosted.org/packages/92/94/bc5c3b573b40a328c4d141c20e399039ada95e5e2a661df3425c5165fd84/mmh3-5.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0cc21533878e5586b80d74c281d7f8da7932bc8ace50b8d5f6dbf7e3935f63f1", size = 56087, upload-time = "2026-03-05T15:54:21.92Z" }, + { url = "https://files.pythonhosted.org/packages/f6/80/64a02cc3e95c3af0aaa2590849d9ed24a9f14bb93537addde688e039b7c3/mmh3-5.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4eda76074cfca2787c8cf1bec603eaebdddd8b061ad5502f85cddae998d54f00", size = 40500, upload-time = "2026-03-05T15:54:22.953Z" }, + { url = "https://files.pythonhosted.org/packages/8b/72/e6d6602ce18adf4ddcd0e48f2e13590cc92a536199e52109f46f259d3c46/mmh3-5.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:eee884572b06bbe8a2b54f424dbd996139442cf83c76478e1ec162512e0dd2c7", size = 40034, upload-time = "2026-03-05T15:54:23.943Z" }, + { url = "https://files.pythonhosted.org/packages/59/c2/bf4537a8e58e21886ef16477041238cab5095c836496e19fafc34b7445d2/mmh3-5.2.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0d0b7e803191db5f714d264044e06189c8ccd3219e936cc184f07106bd17fd7b", size = 97292, upload-time = "2026-03-05T15:54:25.335Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e2/51ed62063b44d10b06d975ac87af287729eeb5e3ed9772f7584a17983e90/mmh3-5.2.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e6c219e375f6341d0959af814296372d265a8ca1af63825f65e2e87c618f006", size = 103274, upload-time = "2026-03-05T15:54:26.44Z" }, + { url = "https://files.pythonhosted.org/packages/75/ce/12a7524dca59eec92e5b31fdb13ede1e98eda277cf2b786cf73bfbc24e81/mmh3-5.2.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:26fb5b9c3946bf7f1daed7b37e0c03898a6f062149127570f8ede346390a0825", size = 106158, upload-time = "2026-03-05T15:54:28.578Z" }, + { url = "https://files.pythonhosted.org/packages/86/1f/d3ba6dd322d01ab5d44c46c8f0c38ab6bbbf9b5e20e666dfc05bf4a23604/mmh3-5.2.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3c38d142c706201db5b2345166eeef1e7740e3e2422b470b8ba5c8727a9b4c7a", size = 113005, upload-time = "2026-03-05T15:54:29.767Z" }, + { url = "https://files.pythonhosted.org/packages/b6/a9/15d6b6f913294ea41b44d901741298e3718e1cb89ee626b3694625826a43/mmh3-5.2.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50885073e2909251d4718634a191c49ae5f527e5e1736d738e365c3e8be8f22b", size = 120744, upload-time = "2026-03-05T15:54:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/76/b3/70b73923fd0284c439860ff5c871b20210dfdbe9a6b9dd0ee6496d77f174/mmh3-5.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b3f99e1756fc48ad507b95e5d86f2fb21b3d495012ff13e6592ebac14033f166", size = 99111, upload-time = "2026-03-05T15:54:32.353Z" }, + { url = "https://files.pythonhosted.org/packages/dd/38/99f7f75cd27d10d8b899a1caafb9d531f3903e4d54d572220e3d8ac35e89/mmh3-5.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62815d2c67f2dd1be76a253d88af4e1da19aeaa1820146dec52cf8bee2958b16", size = 98623, upload-time = "2026-03-05T15:54:33.801Z" }, + { url = "https://files.pythonhosted.org/packages/fd/68/6e292c0853e204c44d2f03ea5f090be3317a0e2d9417ecb62c9eb27687df/mmh3-5.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8f767ba0911602ddef289404e33835a61168314ebd3c729833db2ed685824211", size = 106437, upload-time = "2026-03-05T15:54:35.177Z" }, + { url = "https://files.pythonhosted.org/packages/dd/c6/fedd7284c459cfb58721d461fcf5607a4c1f5d9ab195d113d51d10164d16/mmh3-5.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:67e41a497bac88cc1de96eeba56eeb933c39d54bc227352f8455aa87c4ca4000", size = 110002, upload-time = "2026-03-05T15:54:36.673Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ac/ca8e0c19a34f5b71390171d2ff0b9f7f187550d66801a731bb68925126a4/mmh3-5.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d74a03fb57757ece25aa4b3c1c60157a1cece37a020542785f942e2f827eed5", size = 97507, upload-time = "2026-03-05T15:54:37.804Z" }, + { url = "https://files.pythonhosted.org/packages/df/94/6ebb9094cfc7ac5e7950776b9d13a66bb4a34f83814f32ba2abc9494fc68/mmh3-5.2.1-cp312-cp312-win32.whl", hash = "sha256:7374d6e3ef72afe49697ecd683f3da12f4fc06af2d75433d0580c6746d2fa025", size = 40773, upload-time = "2026-03-05T15:54:40.077Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/cd3527198cf159495966551c84a5f36805a10ac17b294f41f67b83f6a4d6/mmh3-5.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:3a9fed49c6ce4ed7e73f13182760c65c816da006debe67f37635580dfb0fae00", size = 41560, upload-time = "2026-03-05T15:54:41.148Z" }, + { url = "https://files.pythonhosted.org/packages/15/96/6fe5ebd0f970a076e3ed5512871ce7569447b962e96c125528a2f9724470/mmh3-5.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:bbfcb95d9a744e6e2827dfc66ad10e1020e0cac255eb7f85652832d5a264c2fc", size = 39313, upload-time = "2026-03-05T15:54:42.171Z" }, + { url = "https://files.pythonhosted.org/packages/25/a5/9daa0508a1569a54130f6198d5462a92deda870043624aa3ea72721aa765/mmh3-5.2.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:723b2681ed4cc07d3401bbea9c201ad4f2a4ca6ba8cddaff6789f715dd2b391e", size = 40832, upload-time = "2026-03-05T15:54:43.212Z" }, + { url = "https://files.pythonhosted.org/packages/0a/6b/3230c6d80c1f4b766dedf280a92c2241e99f87c1504ff74205ec8cebe451/mmh3-5.2.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:3619473a0e0d329fd4aec8075628f8f616be2da41605300696206d6f36920c3d", size = 41964, upload-time = "2026-03-05T15:54:44.204Z" }, + { url = "https://files.pythonhosted.org/packages/62/fb/648bfddb74a872004b6ee751551bfdda783fe6d70d2e9723bad84dbe5311/mmh3-5.2.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:e48d4dbe0f88e53081da605ae68644e5182752803bbc2beb228cca7f1c4454d6", size = 39114, upload-time = "2026-03-05T15:54:45.205Z" }, + { url = "https://files.pythonhosted.org/packages/95/c2/ab7901f87af438468b496728d11264cb397b3574d41506e71b92128e0373/mmh3-5.2.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a482ac121de6973897c92c2f31defc6bafb11c83825109275cffce54bb64933f", size = 39819, upload-time = "2026-03-05T15:54:46.509Z" }, + { url = "https://files.pythonhosted.org/packages/2f/ed/6f88dda0df67de1612f2e130ffea34cf84aaee5bff5b0aff4dbff2babe34/mmh3-5.2.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:17fbb47f0885ace8327ce1235d0416dc86a211dcd8cc1e703f41523be32cfec8", size = 40330, upload-time = "2026-03-05T15:54:47.864Z" }, + { url = "https://files.pythonhosted.org/packages/3d/66/7516d23f53cdf90f43fce24ab80c28f45e6851d78b46bef8c02084edf583/mmh3-5.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d51fde50a77f81330523562e3c2734ffdca9c4c9e9d355478117905e1cfe16c6", size = 56078, upload-time = "2026-03-05T15:54:48.9Z" }, + { url = "https://files.pythonhosted.org/packages/bc/34/4d152fdf4a91a132cb226b671f11c6b796eada9ab78080fb5ce1e95adaab/mmh3-5.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:19bbd3b841174ae6ed588536ab5e1b1fe83d046e668602c20266547298d939a9", size = 40498, upload-time = "2026-03-05T15:54:49.942Z" }, + { url = "https://files.pythonhosted.org/packages/d4/4c/8e3af1b6d85a299767ec97bd923f12b06267089c1472c27c1696870d1175/mmh3-5.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be77c402d5e882b6fbacfd90823f13da8e0a69658405a39a569c6b58fdb17b03", size = 40033, upload-time = "2026-03-05T15:54:50.994Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/966ea560e32578d453c9e9db53d602cbb1d0da27317e232afa7c38ceba11/mmh3-5.2.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fd96476f04db5ceba1cfa0f21228f67c1f7402296f0e73fee3513aa680ad237b", size = 97320, upload-time = "2026-03-05T15:54:52.072Z" }, + { url = "https://files.pythonhosted.org/packages/bb/0d/2c5f9893b38aeb6b034d1a44ecd55a010148054f6a516abe53b5e4057297/mmh3-5.2.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:707151644085dd0f20fe4f4b573d28e5130c4aaa5f587e95b60989c5926653b5", size = 103299, upload-time = "2026-03-05T15:54:53.569Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fc/2ebaef4a4d4376f89761274dc274035ffd96006ab496b4ee5af9b08f21a9/mmh3-5.2.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3737303ca9ea0f7cb83028781148fcda4f1dac7821db0c47672971dabcf63593", size = 106222, upload-time = "2026-03-05T15:54:55.092Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/ea7ffe126d0ba0406622602a2d05e1e1a6841cc92fc322eb576c95b27fad/mmh3-5.2.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2778fed822d7db23ac5008b181441af0c869455b2e7d001f4019636ac31b6fe4", size = 113048, upload-time = "2026-03-05T15:54:56.305Z" }, + { url = "https://files.pythonhosted.org/packages/85/57/9447032edf93a64aa9bef4d9aa596400b1756f40411890f77a284f6293ca/mmh3-5.2.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d57dea657357230cc780e13920d7fa7db059d58fe721c80020f94476da4ca0a1", size = 120742, upload-time = "2026-03-05T15:54:57.453Z" }, + { url = "https://files.pythonhosted.org/packages/53/82/a86cc87cc88c92e9e1a598fee509f0409435b57879a6129bf3b3e40513c7/mmh3-5.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:169e0d178cb59314456ab30772429a802b25d13227088085b0d49b9fe1533104", size = 99132, upload-time = "2026-03-05T15:54:58.583Z" }, + { url = "https://files.pythonhosted.org/packages/54/f7/6b16eb1b40ee89bb740698735574536bc20d6cdafc65ae702ea235578e05/mmh3-5.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7e4e1f580033335c6f76d1e0d6b56baf009d1a64d6a4816347e4271ba951f46d", size = 98686, upload-time = "2026-03-05T15:55:00.078Z" }, + { url = "https://files.pythonhosted.org/packages/e8/88/a601e9f32ad1410f438a6d0544298ea621f989bd34a0731a7190f7dec799/mmh3-5.2.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2bd9f19f7f1fcebd74e830f4af0f28adad4975d40d80620be19ffb2b2af56c9f", size = 106479, upload-time = "2026-03-05T15:55:01.532Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/ce29ae3dfc4feec4007a437a1b7435fb9507532a25147602cd5b52be86db/mmh3-5.2.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c88653877aeb514c089d1b3d473451677b8b9a6d1497dbddf1ae7934518b06d2", size = 110030, upload-time = "2026-03-05T15:55:02.934Z" }, + { url = "https://files.pythonhosted.org/packages/13/30/ae444ef2ff87c805d525da4fa63d27cda4fe8a48e77003a036b8461cfd5c/mmh3-5.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fceef7fe67c81e1585198215e42ad3fdba3a25644beda8fbdaf85f4d7b93175a", size = 97536, upload-time = "2026-03-05T15:55:04.135Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f9/dc3787ee5c813cc27fe79f45ad4500d9b5437f23a7402435cc34e07c7718/mmh3-5.2.1-cp313-cp313-win32.whl", hash = "sha256:54b64fb2433bc71488e7a449603bf8bd31fbcf9cb56fbe1eb6d459e90b86c37b", size = 40769, upload-time = "2026-03-05T15:55:05.277Z" }, + { url = "https://files.pythonhosted.org/packages/43/67/850e0b5a1e97799822ebfc4ca0e8c6ece3ed8baf7dcdf64de817dfdda2ca/mmh3-5.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:cae6383181f1e345317742d2ddd88f9e7d2682fa4c9432e3a74e47d92dce0229", size = 41563, upload-time = "2026-03-05T15:55:06.283Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cc/98c90b28e1da5458e19fbfaf4adb5289208d3bfccd45dd14eab216a2f0bb/mmh3-5.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:022aa1a528604e6c83d0a7705fdef0b5355d897a9e0fa3a8d26709ceaa06965d", size = 39310, upload-time = "2026-03-05T15:55:07.323Z" }, + { url = "https://files.pythonhosted.org/packages/63/b4/65bc1fb2bb7f83e91c30865023b1847cf89a5f237165575e8c83aa536584/mmh3-5.2.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:d771f085fcdf4035786adfb1d8db026df1eb4b41dac1c3d070d1e49512843227", size = 40794, upload-time = "2026-03-05T15:55:09.773Z" }, + { url = "https://files.pythonhosted.org/packages/c4/86/7168b3d83be8eb553897b1fac9da8bbb06568e5cfe555ffc329ebb46f59d/mmh3-5.2.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:7f196cd7910d71e9d9860da0ff7a77f64d22c1ad931f1dd18559a06e03109fc0", size = 41923, upload-time = "2026-03-05T15:55:10.924Z" }, + { url = "https://files.pythonhosted.org/packages/bf/9b/b653ab611c9060ce8ff0ba25c0226757755725e789292f3ca138a58082cd/mmh3-5.2.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b1f12bd684887a0a5d55e6363ca87056f361e45451105012d329b86ec19dbe0b", size = 39131, upload-time = "2026-03-05T15:55:11.961Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b4/5a2e0d34ab4d33543f01121e832395ea510132ea8e52cdf63926d9d81754/mmh3-5.2.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d106493a60dcb4aef35a0fac85105e150a11cf8bc2b0d388f5a33272d756c966", size = 39825, upload-time = "2026-03-05T15:55:13.013Z" }, + { url = "https://files.pythonhosted.org/packages/bd/69/81699a8f39a3f8d368bec6443435c0c392df0d200ad915bf0d222b588e03/mmh3-5.2.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:44983e45310ee5b9f73397350251cdf6e63a466406a105f1d16cb5baa659270b", size = 40344, upload-time = "2026-03-05T15:55:14.026Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b3/71c8c775807606e8fd8acc5c69016e1caf3200d50b50b6dd4b40ce10b76c/mmh3-5.2.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:368625fb01666655985391dbad3860dc0ba7c0d6b9125819f3121ee7292b4ac8", size = 56291, upload-time = "2026-03-05T15:55:15.137Z" }, + { url = "https://files.pythonhosted.org/packages/6f/75/2c24517d4b2ce9e4917362d24f274d3d541346af764430249ddcc4cb3a08/mmh3-5.2.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:72d1cc63bcc91e14933f77d51b3df899d6a07d184ec515ea7f56bff659e124d7", size = 40575, upload-time = "2026-03-05T15:55:16.518Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b9/e4a360164365ac9f07a25f0f7928e3a66eb9ecc989384060747aa170e6aa/mmh3-5.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e8b4b5580280b9265af3e0409974fb79c64cf7523632d03fbf11df18f8b0181e", size = 40052, upload-time = "2026-03-05T15:55:17.735Z" }, + { url = "https://files.pythonhosted.org/packages/97/ca/120d92223a7546131bbbc31c9174168ee7a73b1366f5463ffe69d9e691fe/mmh3-5.2.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4cbbde66f1183db040daede83dd86c06d663c5bb2af6de1142b7c8c37923dd74", size = 97311, upload-time = "2026-03-05T15:55:18.959Z" }, + { url = "https://files.pythonhosted.org/packages/b6/71/c1a60c1652b8813ef9de6d289784847355417ee0f2980bca002fe87f4ae5/mmh3-5.2.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8ff038d52ef6aa0f309feeba00c5095c9118d0abf787e8e8454d6048db2037fc", size = 103279, upload-time = "2026-03-05T15:55:20.448Z" }, + { url = "https://files.pythonhosted.org/packages/48/29/ad97f4be1509cdcb28ae32c15593ce7c415db47ace37f8fad35b493faa9a/mmh3-5.2.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4130d0b9ce5fad6af07421b1aecc7e079519f70d6c05729ab871794eded8617", size = 106290, upload-time = "2026-03-05T15:55:21.6Z" }, + { url = "https://files.pythonhosted.org/packages/77/29/1f86d22e281bd8827ba373600a4a8b0c0eae5ca6aa55b9a8c26d2a34decc/mmh3-5.2.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e0bfe77d238308839699944164b96a2eeccaf55f2af400f54dc20669d8d5f2", size = 113116, upload-time = "2026-03-05T15:55:22.826Z" }, + { url = "https://files.pythonhosted.org/packages/a7/7c/339971ea7ed4c12d98f421f13db3ea576a9114082ccb59d2d1a0f00ccac1/mmh3-5.2.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f963eafc0a77a6c0562397da004f5876a9bcf7265a7bcc3205e29636bc4a1312", size = 120740, upload-time = "2026-03-05T15:55:24.3Z" }, + { url = "https://files.pythonhosted.org/packages/e4/92/3c7c4bdb8e926bb3c972d1e2907d77960c1c4b250b41e8366cf20c6e4373/mmh3-5.2.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:92883836caf50d5255be03d988d75bc93e3f86ba247b7ca137347c323f731deb", size = 99143, upload-time = "2026-03-05T15:55:25.456Z" }, + { url = "https://files.pythonhosted.org/packages/df/0a/33dd8706e732458c8375eae63c981292de07a406bad4ec03e5269654aa2c/mmh3-5.2.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:57b52603e89355ff318025dd55158f6e71396c0f1f609d548e9ea9c94cc6ce0a", size = 98703, upload-time = "2026-03-05T15:55:26.723Z" }, + { url = "https://files.pythonhosted.org/packages/51/04/76bbce05df76cbc3d396f13b2ea5b1578ef02b6a5187e132c6c33f99d596/mmh3-5.2.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f40a95186a72fa0b67d15fef0f157bfcda00b4f59c8a07cbe5530d41ac35d105", size = 106484, upload-time = "2026-03-05T15:55:28.214Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8f/c6e204a2c70b719c1f62ffd9da27aef2dddcba875ea9c31ca0e87b975a46/mmh3-5.2.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:58370d05d033ee97224c81263af123dea3d931025030fd34b61227a768a8858a", size = 110012, upload-time = "2026-03-05T15:55:29.532Z" }, + { url = "https://files.pythonhosted.org/packages/e3/37/7181efd8e39db386c1ebc3e6b7d1f702a09d7c1197a6f2742ed6b5c16597/mmh3-5.2.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7be6dfb49e48fd0a7d91ff758a2b51336f1cd21f9d44b20f6801f072bd080cdd", size = 97508, upload-time = "2026-03-05T15:55:31.01Z" }, + { url = "https://files.pythonhosted.org/packages/42/0f/afa7ca2615fd85e1469474bb860e381443d0b868c083b62b41cb1d7ca32f/mmh3-5.2.1-cp314-cp314-win32.whl", hash = "sha256:54fe8518abe06a4c3852754bfd498b30cc58e667f376c513eac89a244ce781a4", size = 41387, upload-time = "2026-03-05T15:55:32.403Z" }, + { url = "https://files.pythonhosted.org/packages/71/0d/46d42a260ee1357db3d486e6c7a692e303c017968e14865e00efa10d09fc/mmh3-5.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:3f796b535008708846044c43302719c6956f39ca2d93f2edda5319e79a29efbb", size = 42101, upload-time = "2026-03-05T15:55:33.646Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7b/848a8378059d96501a41159fca90d6a99e89736b0afbe8e8edffeac8c74b/mmh3-5.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:cd471ede0d802dd936b6fab28188302b2d497f68436025857ca72cd3810423fe", size = 39836, upload-time = "2026-03-05T15:55:35.026Z" }, + { url = "https://files.pythonhosted.org/packages/27/61/1dabea76c011ba8547c25d30c91c0ec22544487a8750997a27a0c9e1180b/mmh3-5.2.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:5174a697ce042fa77c407e05efe41e03aa56dae9ec67388055820fb48cf4c3ba", size = 57727, upload-time = "2026-03-05T15:55:36.162Z" }, + { url = "https://files.pythonhosted.org/packages/b7/32/731185950d1cf2d5e28979cc8593016ba1619a295faba10dda664a4931b5/mmh3-5.2.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0a3984146e414684a6be2862d84fcb1035f4984851cb81b26d933bab6119bf00", size = 41308, upload-time = "2026-03-05T15:55:37.254Z" }, + { url = "https://files.pythonhosted.org/packages/76/aa/66c76801c24b8c9418b4edde9b5e57c75e72c94e29c48f707e3962534f18/mmh3-5.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bd6e7d363aa93bd3421b30b6af97064daf47bc96005bddba67c5ffbc6df426b8", size = 40758, upload-time = "2026-03-05T15:55:38.61Z" }, + { url = "https://files.pythonhosted.org/packages/9e/bb/79a1f638a02f0ae389f706d13891e2fbf7d8c0a22ecde67ba828951bb60a/mmh3-5.2.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:113f78e7463a36dbbcea05bfe688efd7fa759d0f0c56e73c974d60dcfec3dfcc", size = 109670, upload-time = "2026-03-05T15:55:40.13Z" }, + { url = "https://files.pythonhosted.org/packages/26/94/8cd0e187a288985bcfc79bf5144d1d712df9dee74365f59d26e3a1865be6/mmh3-5.2.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7e8ec5f606e0809426d2440e0683509fb605a8820a21ebd120dcdba61b74ef7f", size = 117399, upload-time = "2026-03-05T15:55:42.076Z" }, + { url = "https://files.pythonhosted.org/packages/42/94/dfea6059bd5c5beda565f58a4096e43f4858fb6d2862806b8bbd12cbb284/mmh3-5.2.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22b0f9971ec4e07e8223f2beebe96a6cfc779d940b6f27d26604040dd74d3a44", size = 120386, upload-time = "2026-03-05T15:55:43.481Z" }, + { url = "https://files.pythonhosted.org/packages/47/cb/f9c45e62aaa67220179f487772461d891bb582bb2f9783c944832c60efd9/mmh3-5.2.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85ffc9920ffc39c5eee1e3ac9100c913a0973996fbad5111f939bbda49204bb7", size = 125924, upload-time = "2026-03-05T15:55:44.638Z" }, + { url = "https://files.pythonhosted.org/packages/a5/83/fe54a4a7c11bc9f623dfc1707decd034245602b076dfc1dcc771a4163170/mmh3-5.2.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7aec798c2b01aaa65a55f1124f3405804184373abb318a3091325aece235f67c", size = 135280, upload-time = "2026-03-05T15:55:45.866Z" }, + { url = "https://files.pythonhosted.org/packages/97/67/fe7e9e9c143daddd210cd22aef89cbc425d58ecf238d2b7d9eb0da974105/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:55dbbd8ffbc40d1697d5e2d0375b08599dae8746b0b08dea05eee4ce81648fac", size = 110050, upload-time = "2026-03-05T15:55:47.074Z" }, + { url = "https://files.pythonhosted.org/packages/43/c4/6d4b09fcbef80794de447c9378e39eefc047156b290fa3dd2d5257ca8227/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:6c85c38a279ca9295a69b9b088a2e48aa49737bb1b34e6a9dc6297c110e8d912", size = 111158, upload-time = "2026-03-05T15:55:48.239Z" }, + { url = "https://files.pythonhosted.org/packages/81/a6/ca51c864bdb30524beb055a6d8826db3906af0834ec8c41d097a6e8573d5/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:6290289fa5fb4c70fd7f72016e03633d60388185483ff3b162912c81205ae2cf", size = 116890, upload-time = "2026-03-05T15:55:49.405Z" }, + { url = "https://files.pythonhosted.org/packages/cc/04/5a1fe2e2ad843d03e89af25238cbc4f6840a8bb6c4329a98ab694c71deda/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:4fc6cd65dc4d2fdb2625e288939a3566e36127a84811a4913f02f3d5931da52d", size = 123121, upload-time = "2026-03-05T15:55:50.61Z" }, + { url = "https://files.pythonhosted.org/packages/af/4d/3c820c6f4897afd25905270a9f2330a23f77a207ea7356f7aadace7273c0/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:623f938f6a039536cc02b7582a07a080f13fdfd48f87e63201d92d7e34d09a18", size = 110187, upload-time = "2026-03-05T15:55:52.143Z" }, + { url = "https://files.pythonhosted.org/packages/21/54/1d71cd143752361c0aebef16ad3f55926a6faf7b112d355745c1f8a25f7f/mmh3-5.2.1-cp314-cp314t-win32.whl", hash = "sha256:29bc3973676ae334412efdd367fcd11d036b7be3efc1ce2407ef8676dabfeb82", size = 41934, upload-time = "2026-03-05T15:55:53.564Z" }, + { url = "https://files.pythonhosted.org/packages/9d/e4/63a2a88f31d93dea03947cccc2a076946857e799ea4f7acdecbf43b324aa/mmh3-5.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:28cfab66577000b9505a0d068c731aee7ca85cd26d4d63881fab17857e0fe1fb", size = 43036, upload-time = "2026-03-05T15:55:55.252Z" }, + { url = "https://files.pythonhosted.org/packages/a0/0f/59204bf136d1201f8d7884cfbaf7498c5b4674e87a4c693f9bde63741ce1/mmh3-5.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:dfd51b4c56b673dfbc43d7d27ef857dd91124801e2806c69bb45585ce0fa019b", size = 40391, upload-time = "2026-03-05T15:55:56.697Z" }, +] + +[[package]] +name = "model-hosting-container-standards" +version = "0.1.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastapi" }, + { name = "httpx" }, + { name = "jmespath" }, + { name = "pydantic" }, + { name = "setuptools", version = "80.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "setuptools", version = "82.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "starlette" }, + { name = "supervisor" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/3d/cf5c6029648cb0a116f7b5c2f74aa155ab0c6dd723a1f204a6d7ff354526/model_hosting_container_standards-0.1.14.tar.gz", hash = "sha256:b6cf4c46d88ce6acd6e543a578bb88ffd55d1179a7c09c22e61ae1d8a567c564", size = 90386, upload-time = "2026-03-18T21:25:14.513Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/94/052452842d39c562237a70345c57ec213a9db22bd25bba998fd2b32d70a7/model_hosting_container_standards-0.1.14-py3-none-any.whl", hash = "sha256:d678be6745899b8ba1e8246c96b101e7802a6a4ea3fb5d90ae8d6eb4204e84c6", size = 121406, upload-time = "2026-03-18T21:25:12.932Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "msgspec" +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/ae/d8fab0915716e70910012c0410d16b5eedf542493d19aa80c155215208bf/msgspec-0.21.0.tar.gz", hash = "sha256:9a37c1fb022f895bb24dfac597e449e19eb0cbe62447a832601cb19bb480b51d", size = 318712, upload-time = "2026-04-08T19:57:50.919Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/9c/c3187ff89776871691311a0662d4c9427b9a06ab6a252d78f73b0ec696d3/msgspec-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0384bb318fa101459cf40a7d67250d5ac68ad2b1c370ecd5e55568f5dde2ed74", size = 194943, upload-time = "2026-04-08T19:56:43.53Z" }, + { url = "https://files.pythonhosted.org/packages/64/a5/18e0204ee6a26a2b2a42d12b82b697c75126f34e7d5896370b8bacbc28a8/msgspec-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b931ce7657a5e00a9053cc2ce37c24ce4daaec684706f278b29a0cdfd870d188", size = 188096, upload-time = "2026-04-08T19:56:45.13Z" }, + { url = "https://files.pythonhosted.org/packages/23/13/aaedca729b3d9b60802b627a21cdf541eba455a90241b5545481db3df3db/msgspec-0.21.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d52f848fed3841c75d902ab975ebb8abf5fed4f37bdef9b8dfc9c4d35c704cae", size = 216349, upload-time = "2026-04-08T19:56:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/db/23/fd0178c083e1876530f0b6aef2dedec893cfc2d3d54cce1996c4d0883514/msgspec-0.21.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f920711fdcfe4d2aba3e1b4b6b0f67f0eb07beca22881d5bd234e7c8d9407a3a", size = 222422, upload-time = "2026-04-08T19:56:47.751Z" }, + { url = "https://files.pythonhosted.org/packages/e7/50/2086b5ac8e4f59ef05b213112cbed31369fa3cb7bf3471f00e79912740d9/msgspec-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5b0c658073659562abb6414ed21c0b160b6201018def0d933d961d05bc4cf212", size = 222079, upload-time = "2026-04-08T19:56:49.016Z" }, + { url = "https://files.pythonhosted.org/packages/27/7e/05149e0b19b3fa3fdcafffcaeaae13fadeeb4d874557161f14421dbfdddf/msgspec-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d5b575124b8c4381baecfa26eacaaae119685763d3e399ab7abc2f1af88a2e53", size = 225331, upload-time = "2026-04-08T19:56:50.162Z" }, + { url = "https://files.pythonhosted.org/packages/77/9e/b5ec50a1051e74da5785aea618f7fa4819a09ce09df24c9f6348d9afdfb6/msgspec-0.21.0-cp310-cp310-win_amd64.whl", hash = "sha256:a4c84fac795cc8a2e35a70de63608b502fda2c3864eacae032e650c65b0a46f9", size = 188139, upload-time = "2026-04-08T19:56:51.498Z" }, + { url = "https://files.pythonhosted.org/packages/99/ca/5ef87156ebe095516e1e467abaea9b6c50a7f9c51168583f7cc49779c0ef/msgspec-0.21.0-cp310-cp310-win_arm64.whl", hash = "sha256:9b676a2448461e167d8b5fc79ddd4f9bbe806322b2fd7e88c631e99f32a16842", size = 173931, upload-time = "2026-04-08T19:56:53.572Z" }, + { url = "https://files.pythonhosted.org/packages/b2/34/a66dea16444967e3fc0991aff57ef473e2214e5bbdbe3c2b3139d2ccec7b/msgspec-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0634e676eb334fde291310f1d0f23bf48332977c2d0ebdaf98dfcd9437091782", size = 192890, upload-time = "2026-04-08T19:56:54.892Z" }, + { url = "https://files.pythonhosted.org/packages/bc/16/418ba970f74707e2590954f7fda0b44c1d2242d3835aecf914f1dd3080e6/msgspec-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:47220291d6cbc7980098d0e7593e77d86158ff08b9e61d64b2559928e5457828", size = 186383, upload-time = "2026-04-08T19:56:56.424Z" }, + { url = "https://files.pythonhosted.org/packages/4c/68/a745bfbaf6cf88db27294e242aa02cb392bb9b8efeb076c0e2abdeaa51b8/msgspec-0.21.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79a582748a2461204347d89adb5e500a0064d6d81c62e19342b5755bfcce23d2", size = 214968, upload-time = "2026-04-08T19:56:57.814Z" }, + { url = "https://files.pythonhosted.org/packages/68/da/fda01c754dc85aed67ac0b7d3b213ab50b5b39f15f5eb072b2baf0edb689/msgspec-0.21.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2a80db664c75f336cff5e17df7861c23fa47bec6f96c2c3f94be773cc675821", size = 219652, upload-time = "2026-04-08T19:56:59.118Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ff/8edf835d8e54b6d7431950cfce3c9f66c5bad3eb0651c4792989c0769845/msgspec-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:74de7d8831e4cb6e39ccc92d100fe50cecd2b2a8729089505437633e4fa52ffa", size = 220085, upload-time = "2026-04-08T19:57:00.518Z" }, + { url = "https://files.pythonhosted.org/packages/e9/4e/c21b1f7927cd00f56eaf0c8f182b96cd81707f153dce872876ed8b97bbca/msgspec-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e67b0bbc71b8146c159682747e625411349bd051905a474ca832dc828174dfb8", size = 223025, upload-time = "2026-04-08T19:57:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/ee/06/924ab2c12b55b479e41039345e988bf935aabea92fbe90b7faf93166740c/msgspec-0.21.0-cp311-cp311-win_amd64.whl", hash = "sha256:03c472124cbbbcfbf0d2f429f62a8fb2d12b6633448a884dd1a875ab32aa59b4", size = 188362, upload-time = "2026-04-08T19:57:03.362Z" }, + { url = "https://files.pythonhosted.org/packages/46/10/4e85bba53b8f4514608578afcf82ae13cae1a043f87ad639c619aef955cf/msgspec-0.21.0-cp311-cp311-win_arm64.whl", hash = "sha256:b84ee1e334953e02aefce8bcde73e2a89e03e193aa9851e2e49810e00a9fd088", size = 174268, upload-time = "2026-04-08T19:57:04.855Z" }, + { url = "https://files.pythonhosted.org/packages/66/57/93fb97be49db1ff62aeda477e1fef6eab739df17a05234e476b644234fdc/msgspec-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:797d8f563c29ccc2047e699099cf8ab72dc41858c5bdd100d4689a0310072bff", size = 195880, upload-time = "2026-04-08T19:57:06.419Z" }, + { url = "https://files.pythonhosted.org/packages/7f/d1/3af0f8b31768552068a890e406488b1ce91ef935eb8ff001f1f130a0a3f3/msgspec-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7c978ea4d2afa8f06fec2fab47f478f187e5523569c4613d135f4d9db4831de7", size = 188262, upload-time = "2026-04-08T19:57:07.648Z" }, + { url = "https://files.pythonhosted.org/packages/a4/69/a978335a9724a69ac4428e06be1cb8ce7e737453857575028159bd264ded/msgspec-0.21.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46e5e9b23bfa453572d8290541327d84cac1f74bbf45b88053dfea3b92d2608b", size = 218640, upload-time = "2026-04-08T19:57:09.203Z" }, + { url = "https://files.pythonhosted.org/packages/7b/34/3cb2b8a506850b8667c1167eb817a0b6605ebdf0027d301815ca2404f72b/msgspec-0.21.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ff68f1f12aa3fa1335b79a5bb8b9158cfea2944b4cf8253d05fe28ab6d3510f", size = 224786, upload-time = "2026-04-08T19:57:10.679Z" }, + { url = "https://files.pythonhosted.org/packages/ff/4e/690f1487f72f37ca4482d4c63dceaf48d2b68db76d374108d7f0a15cc72c/msgspec-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6067127b5e44430a59fddff8d934a7a37ce96862cb25994415b68db7d4457bd5", size = 222514, upload-time = "2026-04-08T19:57:11.974Z" }, + { url = "https://files.pythonhosted.org/packages/83/95/4199f819d2b82db9c7d6de235591c02eebe4796672184eccad7f2b67d4e1/msgspec-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:11043d534a1bfcd08f1d4d5b50ba60015527b4c8517ec12c2213899e81913584", size = 227101, upload-time = "2026-04-08T19:57:13.278Z" }, + { url = "https://files.pythonhosted.org/packages/98/f5/56aaed6427a671d011030835f35fe2d4ed46ead4d2b03ffc6c356fd15e4b/msgspec-0.21.0-cp312-cp312-win_amd64.whl", hash = "sha256:c010790508a9fbe1b9328240ca8840130629b0055c52f58838d22d57ece10667", size = 189713, upload-time = "2026-04-08T19:57:15.055Z" }, + { url = "https://files.pythonhosted.org/packages/0c/fa/679f36fd5c98a676c6e2dcd25946d77ff7c28465ae9aba203a93d71774fd/msgspec-0.21.0-cp312-cp312-win_arm64.whl", hash = "sha256:19646187cdf5b94534c8697035c6f86b41b765260074203b40553c2fc51ac00b", size = 175137, upload-time = "2026-04-08T19:57:16.54Z" }, + { url = "https://files.pythonhosted.org/packages/03/bc/41bc2f0d9374117287a561cf8ec722bfe103ba35423580af572f74c73e99/msgspec-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8843a8953109ccb56d484d238aaa93fd64bd892bacaa73f15891d12a03c75220", size = 195915, upload-time = "2026-04-08T19:57:17.688Z" }, + { url = "https://files.pythonhosted.org/packages/5c/85/a40a8202c718bc7d87bce4f5fe0189252fbcef8021936e34189ed4453ffb/msgspec-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ec3fc07f61c915d3001a4733a6bebcbfb35298601495e939fb38d645e3c8ffce", size = 188286, upload-time = "2026-04-08T19:57:18.959Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e5/c775da2cc45758c0c001db89d49ad95978a971de7ed82efecb72e7f0c5d0/msgspec-0.21.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef540261ad9cbe1662ba1e6ebc64230532cf23d0c6c01ea7a7fcb383ec4c8008", size = 218639, upload-time = "2026-04-08T19:57:20.232Z" }, + { url = "https://files.pythonhosted.org/packages/75/de/f6ea46e9ba3edd5f69bc0298aa59611ad59bd32fab69a13c163fce47c2f9/msgspec-0.21.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f851f5d4356934086657dfae231115cbcfc5796e9aac604441d2a506f5c78d33", size = 224825, upload-time = "2026-04-08T19:57:21.429Z" }, + { url = "https://files.pythonhosted.org/packages/71/71/d188c26842138c3172d680020cfde078c3ef6b5b0fba9d16230333489a42/msgspec-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dad302178de0868b2ffa4de3a0072e51843106059dab5492c75743197c444736", size = 222517, upload-time = "2026-04-08T19:57:22.755Z" }, + { url = "https://files.pythonhosted.org/packages/03/ce/a7186a8024490fd41a190d139d423bd887821e79a82f97dab4283604ec35/msgspec-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0ceb9ef0b6ba4fef4c9da09595f9105cc02e8eb262df0d6220f22370ffdc2ec0", size = 227079, upload-time = "2026-04-08T19:57:24.08Z" }, + { url = "https://files.pythonhosted.org/packages/af/a7/bcf3562090f4759414cae67a92db937e163083e4b2aed4eb1a021aa9188b/msgspec-0.21.0-cp313-cp313-win_amd64.whl", hash = "sha256:57af1488174eb944b626b2f25838f214966284462458a2bfce44b9adfad725bf", size = 189627, upload-time = "2026-04-08T19:57:25.714Z" }, + { url = "https://files.pythonhosted.org/packages/2a/bb/2c7bda6c8d0378c17e5523a6cd0f1ce22ab43f6934ab5a7eec748a7e0cc0/msgspec-0.21.0-cp313-cp313-win_arm64.whl", hash = "sha256:b0088fbd0d2eec986df7cf4f17eec97c8a1aaccf9dd4e0b72f4794522fa83f65", size = 175167, upload-time = "2026-04-08T19:57:26.919Z" }, + { url = "https://files.pythonhosted.org/packages/f6/bc/2a705dcf966c604240c271c03480e8f36090c0b7c5dd4701d77d493a07f9/msgspec-0.21.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:21b4b4bbd6d6fe49628a9ad115b50b1546e706dec7aaf747afd32b9a75a6e0aa", size = 196007, upload-time = "2026-04-08T19:57:28.286Z" }, + { url = "https://files.pythonhosted.org/packages/35/12/8950cb18dd53c0c83fdd942e0196fe0b3f4cc38d7dbe199c01ee57d81c3e/msgspec-0.21.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5e139825a8ca0c33496fd0f050d2ba89c93f0548e4ab877a0329ac45317451fb", size = 188544, upload-time = "2026-04-08T19:57:30.165Z" }, + { url = "https://files.pythonhosted.org/packages/41/14/862ed7c69ee77e1c9774988e6d57f6b0f782c95e91ec313d93785c61168d/msgspec-0.21.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a9126c287092a7225115f3372f91b2d38a36148a05cb8da3e827eaf61329ddc", size = 219612, upload-time = "2026-04-08T19:57:31.502Z" }, + { url = "https://files.pythonhosted.org/packages/00/d1/a516be3fb9c61dfea98fd262ce1aceaae2f7e665e750a1a8eaf96d5af5aa/msgspec-0.21.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b32866fc3faebe7e09b2fa151fb9858c36e9f133b4ee8132c0f6beea5f2b6c0", size = 224722, upload-time = "2026-04-08T19:57:32.874Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b8/b67dce3cac2604d199c3d3aac1df780b92856861482cbc8ca5f53dcde691/msgspec-0.21.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:98f5c4350979da05340782b267b9bea22bfddca10276f45fa374e0765c058303", size = 223319, upload-time = "2026-04-08T19:57:34.029Z" }, + { url = "https://files.pythonhosted.org/packages/78/7d/9a9bea17363025390bd0288f72298cf5323f9d39ddf3fcc1ebc6a4b7ef64/msgspec-0.21.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ec4542f7a2c354c8929aa2e2986b184ff84071d19a55d5e6a3b43c3b3a38b128", size = 226969, upload-time = "2026-04-08T19:57:35.304Z" }, + { url = "https://files.pythonhosted.org/packages/f3/66/3d57029a4329c67ac8dd00374279b823873b46c4fa797b8e6096e3a749b7/msgspec-0.21.0-cp314-cp314-win_amd64.whl", hash = "sha256:1ddc2de6af2adcd07b6d6f6745949eb58963e0f658a987313814954bb5489b26", size = 193594, upload-time = "2026-04-08T19:57:37.014Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e5/746a018d8da7f0d1b26cb6cc8662420fad578917bf4d73482c9cb0c25eca/msgspec-0.21.0-cp314-cp314-win_arm64.whl", hash = "sha256:0e032189438ee162fc66a528e0e26d578c8e5c30b0a8e1f1a78aa96cc27a36d1", size = 178893, upload-time = "2026-04-08T19:57:38.394Z" }, + { url = "https://files.pythonhosted.org/packages/91/eb/2c999c30b205da592ccaf650e5be56e22aefb65008b25e654eb428299f72/msgspec-0.21.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:549dc09f6796da9f0ac3c34c2bb9c10db85de723eb075dcf837f83968ecedc97", size = 199939, upload-time = "2026-04-08T19:57:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/88/31/8b94b749a69514357c54d7a5027b5280898ed28c39b3ede78427c3aa7bed/msgspec-0.21.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e14c3a27a97ca9bb03eb9d5612609b141068d98eeb210c08e5fbf2556d601e99", size = 192586, upload-time = "2026-04-08T19:57:41.101Z" }, + { url = "https://files.pythonhosted.org/packages/1c/8a/ab4d49c9ccbc4e12072d76323bb9ddf670b6c7634a508b8b3bbd31434954/msgspec-0.21.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d00088bd8bf00c3ed3e2f3fef78cad2ce871c5599df0624928c6762fc7671f6", size = 226075, upload-time = "2026-04-08T19:57:42.415Z" }, + { url = "https://files.pythonhosted.org/packages/57/34/2a2642df1cf93ba7a73912aedadd7fe8372f558ce41d3e9db5c3634352ec/msgspec-0.21.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c3d7545089ae92d0d6f2dd5dd96814446c58eff360af050f734fafed7f72c8f5", size = 229528, upload-time = "2026-04-08T19:57:43.721Z" }, + { url = "https://files.pythonhosted.org/packages/12/1f/a1faffbbb81e01c2d388aa8589b8d0efa54a1813c9234858978e1bc5fdb5/msgspec-0.21.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bceae6627c37eaac2379cabf9fa612ffe5fa64f23c90912019820423b0df7009", size = 230258, upload-time = "2026-04-08T19:57:45.064Z" }, + { url = "https://files.pythonhosted.org/packages/aa/f5/63bc93a66228853f0aa6c02d0dcec276be383ba0ab61b71a5915432affd0/msgspec-0.21.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5298b4a4ac55ed78234b8c206e6ab5aa5c5bf2573664c76205e89c54282df1e6", size = 231624, upload-time = "2026-04-08T19:57:46.687Z" }, + { url = "https://files.pythonhosted.org/packages/c1/32/a6415442eb243ee93e63adf85756630c64c4377e207f5f907de4e1d5b283/msgspec-0.21.0-cp314-cp314t-win_amd64.whl", hash = "sha256:640e15c6ef5003575f0c16c96bbd25f92b42c5f02e27d4d0c08de9551c288cbb", size = 206397, upload-time = "2026-04-08T19:57:47.967Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a4/7e7e36cf57a4870b5b223d2ea19c4b78c32e6e6dcd2612588ddf69a97c17/msgspec-0.21.0-cp314-cp314t-win_arm64.whl", hash = "sha256:91af695ec681bf6a114d7422b76c5b8b51ce698e89152a0fafaca6fad50478b0", size = 182950, upload-time = "2026-04-08T19:57:49.286Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/0b/19348d4c98980c4851d2f943f8ebafdece2ae7ef737adcfa5994ce8e5f10/multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5", size = 77176, upload-time = "2026-01-26T02:42:59.784Z" }, + { url = "https://files.pythonhosted.org/packages/ef/04/9de3f8077852e3d438215c81e9b691244532d2e05b4270e89ce67b7d103c/multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8", size = 44996, upload-time = "2026-01-26T02:43:01.674Z" }, + { url = "https://files.pythonhosted.org/packages/31/5c/08c7f7fe311f32e83f7621cd3f99d805f45519cd06fafb247628b861da7d/multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872", size = 44631, upload-time = "2026-01-26T02:43:03.169Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7f/0e3b1390ae772f27501199996b94b52ceeb64fe6f9120a32c6c3f6b781be/multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991", size = 242561, upload-time = "2026-01-26T02:43:04.733Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f4/8719f4f167586af317b69dd3e90f913416c91ca610cac79a45c53f590312/multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03", size = 242223, upload-time = "2026-01-26T02:43:06.695Z" }, + { url = "https://files.pythonhosted.org/packages/47/ab/7c36164cce64a6ad19c6d9a85377b7178ecf3b89f8fd589c73381a5eedfd/multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981", size = 222322, upload-time = "2026-01-26T02:43:08.472Z" }, + { url = "https://files.pythonhosted.org/packages/f5/79/a25add6fb38035b5337bc5734f296d9afc99163403bbcf56d4170f97eb62/multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6", size = 254005, upload-time = "2026-01-26T02:43:10.127Z" }, + { url = "https://files.pythonhosted.org/packages/4a/7b/64a87cf98e12f756fc8bd444b001232ffff2be37288f018ad0d3f0aae931/multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190", size = 251173, upload-time = "2026-01-26T02:43:11.731Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ac/b605473de2bb404e742f2cc3583d12aedb2352a70e49ae8fce455b50c5aa/multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92", size = 243273, upload-time = "2026-01-26T02:43:13.063Z" }, + { url = "https://files.pythonhosted.org/packages/03/65/11492d6a0e259783720f3bc1d9ea55579a76f1407e31ed44045c99542004/multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee", size = 238956, upload-time = "2026-01-26T02:43:14.843Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a7/7ee591302af64e7c196fb63fe856c788993c1372df765102bd0448e7e165/multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2", size = 233477, upload-time = "2026-01-26T02:43:16.025Z" }, + { url = "https://files.pythonhosted.org/packages/9c/99/c109962d58756c35fd9992fed7f2355303846ea2ff054bb5f5e9d6b888de/multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568", size = 243615, upload-time = "2026-01-26T02:43:17.84Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5f/1973e7c771c86e93dcfe1c9cc55a5481b610f6614acfc28c0d326fe6bfad/multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40", size = 249930, upload-time = "2026-01-26T02:43:19.06Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a5/f170fc2268c3243853580203378cd522446b2df632061e0a5409817854c7/multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962", size = 243807, upload-time = "2026-01-26T02:43:20.286Z" }, + { url = "https://files.pythonhosted.org/packages/de/01/73856fab6d125e5bc652c3986b90e8699a95e84b48d72f39ade6c0e74a8c/multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505", size = 239103, upload-time = "2026-01-26T02:43:21.508Z" }, + { url = "https://files.pythonhosted.org/packages/e7/46/f1220bd9944d8aa40d8ccff100eeeee19b505b857b6f603d6078cb5315b0/multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122", size = 41416, upload-time = "2026-01-26T02:43:22.703Z" }, + { url = "https://files.pythonhosted.org/packages/68/00/9b38e272a770303692fc406c36e1a4c740f401522d5787691eb38a8925a8/multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df", size = 46022, upload-time = "2026-01-26T02:43:23.77Z" }, + { url = "https://files.pythonhosted.org/packages/64/65/d8d42490c02ee07b6bbe00f7190d70bb4738b3cce7629aaf9f213ef730dd/multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db", size = 43238, upload-time = "2026-01-26T02:43:24.882Z" }, + { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, + { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, + { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, + { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/13/bf/9676c0392309b5fdae322333d22a829715b570edb9baa8016a517b55b558/multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a", size = 41302, upload-time = "2026-01-26T02:43:48.753Z" }, + { url = "https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b", size = 45981, upload-time = "2026-01-26T02:43:49.921Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/9dd5305253fa00cd3c7555dbef69d5bf4133debc53b87ab8d6a44d411665/multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6", size = 43159, upload-time = "2026-01-26T02:43:51.635Z" }, + { url = "https://files.pythonhosted.org/packages/8d/9c/f20e0e2cf80e4b2e4b1c365bf5fe104ee633c751a724246262db8f1a0b13/multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172", size = 76893, upload-time = "2026-01-26T02:43:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd", size = 45456, upload-time = "2026-01-26T02:43:53.893Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7", size = 43872, upload-time = "2026-01-26T02:43:55.041Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3b/d6bd75dc4f3ff7c73766e04e705b00ed6dbbaccf670d9e05a12b006f5a21/multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53", size = 251018, upload-time = "2026-01-26T02:43:56.198Z" }, + { url = "https://files.pythonhosted.org/packages/fd/80/c959c5933adedb9ac15152e4067c702a808ea183a8b64cf8f31af8ad3155/multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75", size = 258883, upload-time = "2026-01-26T02:43:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/86/85/7ed40adafea3d4f1c8b916e3b5cc3a8e07dfcdcb9cd72800f4ed3ca1b387/multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b", size = 242413, upload-time = "2026-01-26T02:43:58.755Z" }, + { url = "https://files.pythonhosted.org/packages/d2/57/b8565ff533e48595503c785f8361ff9a4fde4d67de25c207cd0ba3befd03/multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733", size = 268404, upload-time = "2026-01-26T02:44:00.216Z" }, + { url = "https://files.pythonhosted.org/packages/e0/50/9810c5c29350f7258180dfdcb2e52783a0632862eb334c4896ac717cebcb/multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a", size = 269456, upload-time = "2026-01-26T02:44:02.202Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961", size = 256322, upload-time = "2026-01-26T02:44:03.56Z" }, + { url = "https://files.pythonhosted.org/packages/31/6e/d8a26d81ac166a5592782d208dd90dfdc0a7a218adaa52b45a672b46c122/multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582", size = 253955, upload-time = "2026-01-26T02:44:04.845Z" }, + { url = "https://files.pythonhosted.org/packages/59/4c/7c672c8aad41534ba619bcd4ade7a0dc87ed6b8b5c06149b85d3dd03f0cd/multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e", size = 251254, upload-time = "2026-01-26T02:44:06.133Z" }, + { url = "https://files.pythonhosted.org/packages/7b/bd/84c24de512cbafbdbc39439f74e967f19570ce7924e3007174a29c348916/multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3", size = 252059, upload-time = "2026-01-26T02:44:07.518Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ba/f5449385510825b73d01c2d4087bf6d2fccc20a2d42ac34df93191d3dd03/multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6", size = 263588, upload-time = "2026-01-26T02:44:09.382Z" }, + { url = "https://files.pythonhosted.org/packages/d7/11/afc7c677f68f75c84a69fe37184f0f82fce13ce4b92f49f3db280b7e92b3/multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a", size = 259642, upload-time = "2026-01-26T02:44:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/2b/17/ebb9644da78c4ab36403739e0e6e0e30ebb135b9caf3440825001a0bddcb/multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba", size = 251377, upload-time = "2026-01-26T02:44:12.042Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a4/840f5b97339e27846c46307f2530a2805d9d537d8b8bd416af031cad7fa0/multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511", size = 41887, upload-time = "2026-01-26T02:44:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19", size = 46053, upload-time = "2026-01-26T02:44:15.371Z" }, + { url = "https://files.pythonhosted.org/packages/0c/5b/aba28e4ee4006ae4c7df8d327d31025d760ffa992ea23812a601d226e682/multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf", size = 43307, upload-time = "2026-01-26T02:44:16.852Z" }, + { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" }, + { url = "https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2", size = 45116, upload-time = "2026-01-26T02:44:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3c/414842ef8d5a1628d68edee29ba0e5bcf235dbfb3ccd3ea303a7fe8c72ff/multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177", size = 249368, upload-time = "2026-01-26T02:44:22.803Z" }, + { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/c878a44ba877f366630c860fdf74bfb203c33778f12b6ac274936853c451/multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060", size = 240317, upload-time = "2026-01-26T02:44:25.772Z" }, + { url = "https://files.pythonhosted.org/packages/68/49/57421b4d7ad2e9e60e25922b08ceb37e077b90444bde6ead629095327a6f/multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d", size = 267132, upload-time = "2026-01-26T02:44:27.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/fe/ec0edd52ddbcea2a2e89e174f0206444a61440b40f39704e64dc807a70bd/multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed", size = 268140, upload-time = "2026-01-26T02:44:29.588Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, + { url = "https://files.pythonhosted.org/packages/5a/96/51d4e4e06bcce92577fcd488e22600bd38e4fd59c20cb49434d054903bd2/multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9", size = 250156, upload-time = "2026-01-26T02:44:33.734Z" }, + { url = "https://files.pythonhosted.org/packages/db/6b/420e173eec5fba721a50e2a9f89eda89d9c98fded1124f8d5c675f7a0c0f/multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c", size = 249742, upload-time = "2026-01-26T02:44:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/44/a3/ec5b5bd98f306bc2aa297b8c6f11a46714a56b1e6ef5ebda50a4f5d7c5fb/multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84", size = 262221, upload-time = "2026-01-26T02:44:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f7/e8c0d0da0cd1e28d10e624604e1a36bcc3353aaebdfdc3a43c72bc683a12/multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d", size = 258664, upload-time = "2026-01-26T02:44:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/87/af/a3b86bf9630b732897f6fc3f4c4714b90aa4361983ccbdcd6c0339b21b0c/multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3", size = 41695, upload-time = "2026-01-26T02:44:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5", size = 45884, upload-time = "2026-01-26T02:44:42.488Z" }, + { url = "https://files.pythonhosted.org/packages/ca/61/42d3e5dbf661242a69c97ea363f2d7b46c567da8eadef8890022be6e2ab0/multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df", size = 43122, upload-time = "2026-01-26T02:44:43.664Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/23ecd2abfe0957b234f6c960f4ade497f55f2c16aeb684d4ecdbf1c95791/multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963", size = 48460, upload-time = "2026-01-26T02:44:46.106Z" }, + { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/66/02ec7ace29162e447f6382c495dc95826bf931d3818799bbef11e8f7df1a/multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65", size = 242582, upload-time = "2026-01-26T02:44:48.604Z" }, + { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ed/e192291dbbe51a8290c5686f482084d31bcd9d09af24f63358c3d42fd284/multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43", size = 228596, upload-time = "2026-01-26T02:44:51.951Z" }, + { url = "https://files.pythonhosted.org/packages/1e/7e/3562a15a60cf747397e7f2180b0a11dc0c38d9175a650e75fa1b4d325e15/multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca", size = 257492, upload-time = "2026-01-26T02:44:53.902Z" }, + { url = "https://files.pythonhosted.org/packages/24/02/7d0f9eae92b5249bb50ac1595b295f10e263dd0078ebb55115c31e0eaccd/multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd", size = 255899, upload-time = "2026-01-26T02:44:55.316Z" }, + { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" }, + { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/b2/2f/d743a3045a97c895d401e9bd29aaa09b94f5cbdf1bd561609e5a6c431c70/multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4", size = 235888, upload-time = "2026-01-26T02:44:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/38/83/5a325cac191ab28b63c52f14f1131f3b0a55ba3b9aa65a6d0bf2a9b921a0/multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8", size = 243554, upload-time = "2026-01-26T02:45:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/20/1f/9d2327086bd15da2725ef6aae624208e2ef828ed99892b17f60c344e57ed/multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c", size = 252341, upload-time = "2026-01-26T02:45:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2c/2a1aa0280cf579d0f6eed8ee5211c4f1730bd7e06c636ba2ee6aafda302e/multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52", size = 246391, upload-time = "2026-01-26T02:45:03.862Z" }, + { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" }, + { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, + { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" }, + { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" }, + { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" }, + { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" }, + { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" }, + { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, + { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" }, + { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" }, + { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + +[[package]] +name = "multiprocess" +version = "0.70.16" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/ae/04f39c5d0d0def03247c2893d6f2b83c136bf3320a2154d7b8858f2ba72d/multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1", size = 1772603, upload-time = "2024-01-28T18:52:34.85Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/76/6e712a2623d146d314f17598df5de7224c85c0060ef63fd95cc15a25b3fa/multiprocess-0.70.16-pp310-pypy310_pp73-macosx_10_13_x86_64.whl", hash = "sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee", size = 134980, upload-time = "2024-01-28T18:52:15.731Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ab/1e6e8009e380e22254ff539ebe117861e5bdb3bff1fc977920972237c6c7/multiprocess-0.70.16-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec", size = 134982, upload-time = "2024-01-28T18:52:17.783Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f7/7ec7fddc92e50714ea3745631f79bd9c96424cb2702632521028e57d3a36/multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02", size = 134824, upload-time = "2024-01-28T18:52:26.062Z" }, + { url = "https://files.pythonhosted.org/packages/50/15/b56e50e8debaf439f44befec5b2af11db85f6e0f344c3113ae0be0593a91/multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a", size = 143519, upload-time = "2024-01-28T18:52:28.115Z" }, + { url = "https://files.pythonhosted.org/packages/0a/7d/a988f258104dcd2ccf1ed40fdc97e26c4ac351eeaf81d76e266c52d84e2f/multiprocess-0.70.16-py312-none-any.whl", hash = "sha256:fc0544c531920dde3b00c29863377f87e1632601092ea2daca74e4beb40faa2e", size = 146741, upload-time = "2024-01-28T18:52:29.395Z" }, + { url = "https://files.pythonhosted.org/packages/ea/89/38df130f2c799090c978b366cfdf5b96d08de5b29a4a293df7f7429fa50b/multiprocess-0.70.16-py38-none-any.whl", hash = "sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435", size = 132628, upload-time = "2024-01-28T18:52:30.853Z" }, + { url = "https://files.pythonhosted.org/packages/da/d9/f7f9379981e39b8c2511c9e0326d212accacb82f12fbfdc1aa2ce2a7b2b6/multiprocess-0.70.16-py39-none-any.whl", hash = "sha256:a0bafd3ae1b732eac64be2e72038231c1ba97724b60b09400d68f229fcc2fbf3", size = 133351, upload-time = "2024-01-28T18:52:31.981Z" }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + +[[package]] +name = "ninja" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/74/d02409ed2aa865e051b7edda22ad416a39d81a84980f544f8de717cab133/ninja-1.13.0-py3-none-macosx_10_9_universal2.whl", hash = "sha256:fa2a8bfc62e31b08f83127d1613d10821775a0eb334197154c4d6067b7068ff1", size = 310125, upload-time = "2025-08-11T15:09:50.971Z" }, + { url = "https://files.pythonhosted.org/packages/8e/de/6e1cd6b84b412ac1ef327b76f0641aeb5dcc01e9d3f9eee0286d0c34fd93/ninja-1.13.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630", size = 177467, upload-time = "2025-08-11T15:09:52.767Z" }, + { url = "https://files.pythonhosted.org/packages/c8/83/49320fb6e58ae3c079381e333575fdbcf1cca3506ee160a2dcce775046fa/ninja-1.13.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:be7f478ff9f96a128b599a964fc60a6a87b9fa332ee1bd44fa243ac88d50291c", size = 187834, upload-time = "2025-08-11T15:09:54.115Z" }, + { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, + { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, + { url = "https://files.pythonhosted.org/packages/31/bf/0d7808af695ceddc763cf251b84a9892cd7f51622dc8b4c89d5012779f06/ninja-1.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f", size = 552388, upload-time = "2025-08-11T15:10:03.349Z" }, + { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, + { url = "https://files.pythonhosted.org/packages/9f/43/c217b1153f0e499652f5e0766da8523ce3480f0a951039c7af115e224d55/ninja-1.13.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f8e1e8a1a30835eeb51db05cf5a67151ad37542f5a4af2a438e9490915e5b72", size = 638280, upload-time = "2025-08-11T15:10:06.512Z" }, + { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, + { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, + { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, + { url = "https://files.pythonhosted.org/packages/95/97/51359c77527d45943fe7a94d00a3843b81162e6c4244b3579fe8fc54cb9c/ninja-1.13.0-py3-none-win32.whl", hash = "sha256:8cfbb80b4a53456ae8a39f90ae3d7a2129f45ea164f43fadfa15dc38c4aef1c9", size = 267201, upload-time = "2025-08-11T15:10:15.158Z" }, + { url = "https://files.pythonhosted.org/packages/29/45/c0adfbfb0b5895aa18cec400c535b4f7ff3e52536e0403602fc1a23f7de9/ninja-1.13.0-py3-none-win_amd64.whl", hash = "sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e", size = 309975, upload-time = "2025-08-11T15:10:16.697Z" }, + { url = "https://files.pythonhosted.org/packages/df/93/a7b983643d1253bb223234b5b226e69de6cda02b76cdca7770f684b795f5/ninja-1.13.0-py3-none-win_arm64.whl", hash = "sha256:3c0b40b1f0bba764644385319028650087b4c1b18cdfa6f45cb39a3669b81aa9", size = 290806, upload-time = "2025-08-11T15:10:18.018Z" }, +] + +[[package]] +name = "numba" +version = "0.61.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llvmlite" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03ebb8e098429222722ad99176a4f979d34af1d1ee80da/numba-0.61.2.tar.gz", hash = "sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d", size = 2820615, upload-time = "2025-04-09T02:58:07.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/ca/f470be59552ccbf9531d2d383b67ae0b9b524d435fb4a0d229fef135116e/numba-0.61.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:cf9f9fc00d6eca0c23fc840817ce9f439b9f03c8f03d6246c0e7f0cb15b7162a", size = 2775663, upload-time = "2025-04-09T02:57:34.143Z" }, + { url = "https://files.pythonhosted.org/packages/f5/13/3bdf52609c80d460a3b4acfb9fdb3817e392875c0d6270cf3fd9546f138b/numba-0.61.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ea0247617edcb5dd61f6106a56255baab031acc4257bddaeddb3a1003b4ca3fd", size = 2778344, upload-time = "2025-04-09T02:57:36.609Z" }, + { url = "https://files.pythonhosted.org/packages/e2/7d/bfb2805bcfbd479f04f835241ecf28519f6e3609912e3a985aed45e21370/numba-0.61.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ae8c7a522c26215d5f62ebec436e3d341f7f590079245a2f1008dfd498cc1642", size = 3824054, upload-time = "2025-04-09T02:57:38.162Z" }, + { url = "https://files.pythonhosted.org/packages/e3/27/797b2004745c92955470c73c82f0e300cf033c791f45bdecb4b33b12bdea/numba-0.61.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd1e74609855aa43661edffca37346e4e8462f6903889917e9f41db40907daa2", size = 3518531, upload-time = "2025-04-09T02:57:39.709Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c6/c2fb11e50482cb310afae87a997707f6c7d8a48967b9696271347441f650/numba-0.61.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae45830b129c6137294093b269ef0a22998ccc27bf7cf096ab8dcf7bca8946f9", size = 2831612, upload-time = "2025-04-09T02:57:41.559Z" }, + { url = "https://files.pythonhosted.org/packages/3f/97/c99d1056aed767503c228f7099dc11c402906b42a4757fec2819329abb98/numba-0.61.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:efd3db391df53aaa5cfbee189b6c910a5b471488749fd6606c3f33fc984c2ae2", size = 2775825, upload-time = "2025-04-09T02:57:43.442Z" }, + { url = "https://files.pythonhosted.org/packages/95/9e/63c549f37136e892f006260c3e2613d09d5120672378191f2dc387ba65a2/numba-0.61.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:49c980e4171948ffebf6b9a2520ea81feed113c1f4890747ba7f59e74be84b1b", size = 2778695, upload-time = "2025-04-09T02:57:44.968Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/8740616c8436c86c1b9a62e72cb891177d2c34c2d24ddcde4c390371bf4c/numba-0.61.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3945615cd73c2c7eba2a85ccc9c1730c21cd3958bfcf5a44302abae0fb07bb60", size = 3829227, upload-time = "2025-04-09T02:57:46.63Z" }, + { url = "https://files.pythonhosted.org/packages/fc/06/66e99ae06507c31d15ff3ecd1f108f2f59e18b6e08662cd5f8a5853fbd18/numba-0.61.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbfdf4eca202cebade0b7d43896978e146f39398909a42941c9303f82f403a18", size = 3523422, upload-time = "2025-04-09T02:57:48.222Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a4/2b309a6a9f6d4d8cfba583401c7c2f9ff887adb5d54d8e2e130274c0973f/numba-0.61.2-cp311-cp311-win_amd64.whl", hash = "sha256:76bcec9f46259cedf888041b9886e257ae101c6268261b19fda8cfbc52bec9d1", size = 2831505, upload-time = "2025-04-09T02:57:50.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a0/c6b7b9c615cfa3b98c4c63f4316e3f6b3bbe2387740277006551784218cd/numba-0.61.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:34fba9406078bac7ab052efbf0d13939426c753ad72946baaa5bf9ae0ebb8dd2", size = 2776626, upload-time = "2025-04-09T02:57:51.857Z" }, + { url = "https://files.pythonhosted.org/packages/92/4a/fe4e3c2ecad72d88f5f8cd04e7f7cff49e718398a2fac02d2947480a00ca/numba-0.61.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ddce10009bc097b080fc96876d14c051cc0c7679e99de3e0af59014dab7dfe8", size = 2779287, upload-time = "2025-04-09T02:57:53.658Z" }, + { url = "https://files.pythonhosted.org/packages/9a/2d/e518df036feab381c23a624dac47f8445ac55686ec7f11083655eb707da3/numba-0.61.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b1bb509d01f23d70325d3a5a0e237cbc9544dd50e50588bc581ba860c213546", size = 3885928, upload-time = "2025-04-09T02:57:55.206Z" }, + { url = "https://files.pythonhosted.org/packages/10/0f/23cced68ead67b75d77cfcca3df4991d1855c897ee0ff3fe25a56ed82108/numba-0.61.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48a53a3de8f8793526cbe330f2a39fe9a6638efcbf11bd63f3d2f9757ae345cd", size = 3577115, upload-time = "2025-04-09T02:57:56.818Z" }, + { url = "https://files.pythonhosted.org/packages/68/1d/ddb3e704c5a8fb90142bf9dc195c27db02a08a99f037395503bfbc1d14b3/numba-0.61.2-cp312-cp312-win_amd64.whl", hash = "sha256:97cf4f12c728cf77c9c1d7c23707e4d8fb4632b46275f8f3397de33e5877af18", size = 2831929, upload-time = "2025-04-09T02:57:58.45Z" }, + { url = "https://files.pythonhosted.org/packages/0b/f3/0fe4c1b1f2569e8a18ad90c159298d862f96c3964392a20d74fc628aee44/numba-0.61.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:3a10a8fc9afac40b1eac55717cece1b8b1ac0b946f5065c89e00bde646b5b154", size = 2771785, upload-time = "2025-04-09T02:57:59.96Z" }, + { url = "https://files.pythonhosted.org/packages/e9/71/91b277d712e46bd5059f8a5866862ed1116091a7cb03bd2704ba8ebe015f/numba-0.61.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d3bcada3c9afba3bed413fba45845f2fb9cd0d2b27dd58a1be90257e293d140", size = 2773289, upload-time = "2025-04-09T02:58:01.435Z" }, + { url = "https://files.pythonhosted.org/packages/0d/e0/5ea04e7ad2c39288c0f0f9e8d47638ad70f28e275d092733b5817cf243c9/numba-0.61.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bdbca73ad81fa196bd53dc12e3aaf1564ae036e0c125f237c7644fe64a4928ab", size = 3893918, upload-time = "2025-04-09T02:58:02.933Z" }, + { url = "https://files.pythonhosted.org/packages/17/58/064f4dcb7d7e9412f16ecf80ed753f92297e39f399c905389688cf950b81/numba-0.61.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f154aaea625fb32cfbe3b80c5456d514d416fcdf79733dd69c0df3a11348e9e", size = 3584056, upload-time = "2025-04-09T02:58:04.538Z" }, + { url = "https://files.pythonhosted.org/packages/af/a4/6d3a0f2d3989e62a18749e1e9913d5fa4910bbb3e3311a035baea6caf26d/numba-0.61.2-cp313-cp313-win_amd64.whl", hash = "sha256:59321215e2e0ac5fa928a8020ab00b8e57cda8a97384963ac0dfa4d4e6aa54e7", size = 2831846, upload-time = "2025-04-09T02:58:06.125Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +] + +[[package]] +name = "nvidia-cublas-cu12" +version = "12.8.4.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/61/e24b560ab2e2eaeb3c839129175fb330dfcfc29e5203196e5541a4c44682/nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8ac4e771d5a348c551b2a426eda6193c19aa630236b418086020df5ba9667142", size = 594346921, upload-time = "2025-03-07T01:44:31.254Z" }, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/02/2adcaa145158bf1a8295d83591d22e4103dbfd821bcaf6f3f53151ca4ffa/nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea0cb07ebda26bb9b29ba82cda34849e73c166c18162d3913575b0c9db9a6182", size = 10248621, upload-time = "2025-03-07T01:40:21.213Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.8.93" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/6b/32f747947df2da6994e999492ab306a903659555dddc0fbdeb9d71f75e52/nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a7756528852ef889772a84c6cd89d41dfa74667e24cca16bb31f8f061e3e9994", size = 88040029, upload-time = "2025-03-07T01:42:13.562Z" }, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/9b/a997b638fcd068ad6e4d53b8551a7d30fe8b404d6f1804abf1df69838932/nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adade8dcbd0edf427b7204d480d6066d33902cab2a4707dcfc48a2d0fd44ab90", size = 954765, upload-time = "2025-03-07T01:40:01.615Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.10.2.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" }, +] + +[[package]] +name = "nvidia-cudnn-frontend" +version = "1.18.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/be/f5a1e633c524c13c0182213ab27dab42dca29a3c785be5ff74d2d185aed1/nvidia_cudnn_frontend-1.18.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:baa6fbc8e7c55f1c78c0374ed9a890e1cf81acaca0c92d6135d18a8e3c985244", size = 2023500, upload-time = "2026-01-27T23:31:34.747Z" }, + { url = "https://files.pythonhosted.org/packages/82/a7/765a17c6a9496196c34f269d17dfb902b6c618c0261c0962511e95302e81/nvidia_cudnn_frontend-1.18.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4bcca42259e358002c8867e3624a558f66cd5dff2cc6c3aafd860ef2f41730", size = 2154278, upload-time = "2026-01-27T23:06:55.784Z" }, + { url = "https://files.pythonhosted.org/packages/19/a1/7caae2243540bc60e47eae95f0fd913c9baa05cf94df0471914f70d45158/nvidia_cudnn_frontend-1.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:06252021ef1e5a7256f1e70429a426b01792636c05cc547fe8e64c6885a9652e", size = 1590158, upload-time = "2026-01-27T23:08:26.703Z" }, + { url = "https://files.pythonhosted.org/packages/e2/9a/83d3d080118de4a7810fa019349edec634b8b37b9cafaacd05719de62dd6/nvidia_cudnn_frontend-1.18.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6d4d0b88d617b233a503c84980b54d840b60b2734497d1a7a071ec5293daec2", size = 2023709, upload-time = "2026-01-27T23:32:10.912Z" }, + { url = "https://files.pythonhosted.org/packages/13/c7/c3624b3ed77b102618f26295e816b27f1c3ebb1143730237a9f51d403c3f/nvidia_cudnn_frontend-1.18.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:382ea063b92cbfd5b442cb75ff8422932d78276aecf139e46713ed1ad3d07af4", size = 2155568, upload-time = "2026-01-27T23:07:13.277Z" }, + { url = "https://files.pythonhosted.org/packages/52/dd/8613dfd029d076b86a8a87efe3f4bb4ab73cec15fa8fc27e665098f4d167/nvidia_cudnn_frontend-1.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:baa509effc4d299d3f04e549d4188f88bca8a8b527f483cbd2f66bc18f13a8b1", size = 1591244, upload-time = "2026-01-27T23:08:44.691Z" }, + { url = "https://files.pythonhosted.org/packages/e3/b4/604e230378680ee117849a4e1045baca092f93161a829291a84d5acce70c/nvidia_cudnn_frontend-1.18.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:310b417f2848a83d1437203fcaeea320a74fb7f28af20bf42bf5afc9c01f1c12", size = 2027408, upload-time = "2026-01-27T23:32:46.576Z" }, + { url = "https://files.pythonhosted.org/packages/c6/52/08f98262e77b1cbcc834cc1a5db494d0661ea1dbdea58c2e2d51a57fdaca/nvidia_cudnn_frontend-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c023539ca6de99234cf5102c3ec0d6af817f5396fc93028a22ba5b834a35b8a", size = 2159245, upload-time = "2026-01-27T23:07:32.664Z" }, + { url = "https://files.pythonhosted.org/packages/aa/1f/751a5a8cfdc95fb4dc556192d37369ae488c30c473fe9a3ec720b23d07ea/nvidia_cudnn_frontend-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:e13f7dd46cdb4762dde87f181f06d1c5e15e9478bbdd547bfa74d9b11f415aae", size = 1591041, upload-time = "2026-01-27T23:09:04.118Z" }, + { url = "https://files.pythonhosted.org/packages/e8/bd/db791a26ebb6a6e1268f518e18c82d8ad18546f7008f4b0d5bde15f927de/nvidia_cudnn_frontend-1.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a6e2b7bd43705ffa4af3b187374fdd5e7d09fc228a4d65fc8b4b0a537a8e605", size = 2027249, upload-time = "2026-01-27T23:33:22.46Z" }, + { url = "https://files.pythonhosted.org/packages/19/74/3038cf496d5de7cfdff730f5202e438c17d9123de507059340e02ddff9d7/nvidia_cudnn_frontend-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c0544206b02cae9da4f044ca3fe7416b99e0c8a8052285dd3e5a8fc445d34f9c", size = 2160001, upload-time = "2026-01-27T23:07:50.248Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5e/148cc6609dba326e620e4d949246020dfba05ca07d0387442e62b71d19b6/nvidia_cudnn_frontend-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:7eefa5f10cc003df5f3593f82f1ee6c001fc3412bdc78430c751914dfceefd7f", size = 1591270, upload-time = "2026-01-27T23:09:21.435Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0a/515209dd2afc6027bf1112bf415f575bfe9628d18877abe7424cb597dd7b/nvidia_cudnn_frontend-1.18.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b489da1b30f1d7da822b37b89cc4f68afd80e020eb57e4ab24921f8b57f6e946", size = 2028689, upload-time = "2026-02-11T21:32:04.235Z" }, + { url = "https://files.pythonhosted.org/packages/ab/57/52d18e1f50979eeabfafb408ec73068afc5a1e1ccd21636240317cd456d4/nvidia_cudnn_frontend-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37688c81a34ac590aff9de4c34d2968bab949411af707baa327616ebd4b34ae1", size = 2160182, upload-time = "2026-02-11T21:25:18.437Z" }, + { url = "https://files.pythonhosted.org/packages/67/53/df2810b56d259ef96fa6beaa1381bd14c29fbe82836b409516e864c5e177/nvidia_cudnn_frontend-1.18.0-cp314-cp314-win_amd64.whl", hash = "sha256:5053b473fa74168b5fbf35934cd6187f88aa03b8447b9f2cd417332d5e5c9569", size = 1592759, upload-time = "2026-02-11T21:32:33.87Z" }, +] + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.3.3.83" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" }, +] + +[[package]] +name = "nvidia-cufile-cu12" +version = "1.13.1.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/fe/1bcba1dfbfb8d01be8d93f07bfc502c93fa23afa6fd5ab3fc7c1df71038a/nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d069003be650e131b21c932ec3d8969c1715379251f8d23a1860554b1cb24fc", size = 1197834, upload-time = "2025-03-07T01:45:50.723Z" }, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.9.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/aa/6584b56dc84ebe9cf93226a5cde4d99080c8e90ab40f0c27bda7a0f29aa1/nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:b32331d4f4df5d6eefa0554c565b626c7216f87a06a4f56fab27c3b68a830ec9", size = 63619976, upload-time = "2025-03-07T01:46:23.323Z" }, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.7.3.90" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "nvidia-cusparse-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" }, +] + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.5.8.93" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" }, +] + +[[package]] +name = "nvidia-cusparselt-cu12" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/79/12978b96bd44274fe38b5dde5cfb660b1d114f70a65ef962bcbbed99b549/nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f1bb701d6b930d5a7cea44c19ceb973311500847f81b634d802b7b539dc55623", size = 287193691, upload-time = "2025-02-26T00:15:44.104Z" }, +] + +[[package]] +name = "nvidia-cutlass-dsl" +version = "4.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cutlass-dsl-libs-base" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/03/678dab0383db1ddfc449da216220f40404189eb36eeed9d87a4fa4bdb0e6/nvidia_cutlass_dsl-4.4.2-py3-none-any.whl", hash = "sha256:7cfb9ef19062b055b9372c7a627004724e2755e4c8b16c3cc88807d64501a4ae", size = 10167, upload-time = "2026-03-16T02:18:59.043Z" }, +] + +[[package]] +name = "nvidia-cutlass-dsl-libs-base" +version = "4.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-python", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "cuda-python", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numpy" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/07/af1b456b5b6dd4a49e71a952a182a99fc863f70b9f78725324f89e0384e5/nvidia_cutlass_dsl_libs_base-4.4.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:06acb3acff3dcf4bf6630476efac7de94de30b988ded4fa00b647bbcec4224ff", size = 75471025, upload-time = "2026-03-16T02:23:49.61Z" }, + { url = "https://files.pythonhosted.org/packages/b1/12/f0770811d2874af7e04623d3baa83c445c49f38c00c4e5d20e1daae54b5d/nvidia_cutlass_dsl_libs_base-4.4.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:916bf612fba5fbc5162e300fe18196e960dac2328c1c1360c0939d3be05c7c71", size = 74355272, upload-time = "2026-03-16T02:24:44.22Z" }, + { url = "https://files.pythonhosted.org/packages/60/bf/b9d0fd1ba281b111c941d9616dd9f98a509d84bf35076e60fef27ec7abd6/nvidia_cutlass_dsl_libs_base-4.4.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:261832dafe7579dc83cd3816ab9ea845e3de3737d876c215f01fb4edff1f4473", size = 75476977, upload-time = "2026-03-16T02:26:40.932Z" }, + { url = "https://files.pythonhosted.org/packages/a5/23/86dda6d69a3fc29d0cde2a8b54c056ad69b73a6e5e230e18d906d2ec3b7c/nvidia_cutlass_dsl_libs_base-4.4.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:40c2352b2fcc80789a216cbeb9b2ee10c85c15de839cda8f5c1d18166b8249df", size = 74356100, upload-time = "2026-03-16T02:26:12.778Z" }, + { url = "https://files.pythonhosted.org/packages/8e/7d/0df5e38d11e52cc72095a14d6448bc1c5d0d4b00b069a1189ca417fb225b/nvidia_cutlass_dsl_libs_base-4.4.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:2ec8812eeadcbb6fe20bda2e295ed9c00653f8253b78e33cf0ab65a47b829e73", size = 75473821, upload-time = "2026-03-16T02:27:08.371Z" }, + { url = "https://files.pythonhosted.org/packages/56/98/e264964741d9cc9816625d9600d17a5249fd5cbd8c2d166fb0d0c34dfe5a/nvidia_cutlass_dsl_libs_base-4.4.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:22e37b58f7a6f2f43bba533c4df8a088012122e0b4e9a632eca23937adeafb39", size = 74355593, upload-time = "2026-03-16T02:25:11.762Z" }, + { url = "https://files.pythonhosted.org/packages/1b/c9/2f17950ee2deb4b5f6b82f8155515a21792fe296e81bb638f164d8e2ca9b/nvidia_cutlass_dsl_libs_base-4.4.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b59a052cbfb9a25747d1b6d413615456bea38d1f377da085af07c0d86a4c8b39", size = 75477304, upload-time = "2026-03-16T02:27:35.645Z" }, + { url = "https://files.pythonhosted.org/packages/e1/68/27380038ebd9c8eab4be364e833fea144aef597704f44948921668f7adf4/nvidia_cutlass_dsl_libs_base-4.4.2-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8e3324a33afa7424e93beae7e54a311e80db82b9e4ed4bba2aeeda1d6c888cd9", size = 74355765, upload-time = "2026-03-16T02:24:16.778Z" }, + { url = "https://files.pythonhosted.org/packages/12/44/0dc7f2e5b5c65106a5bb05e60654f1a79abe92e27e9b00588a73cd26ca1f/nvidia_cutlass_dsl_libs_base-4.4.2-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:af96c1170569138b3cb965202907fbf5ab95d7c1dcc210952d00cdf9ab7b859a", size = 75472171, upload-time = "2026-03-16T02:28:03.136Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ae/0998f328b28b956d7eb399d16f4ee681ca318b306007264444a623e86c64/nvidia_cutlass_dsl_libs_base-4.4.2-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:95db0c8d1d56992e2f5c2dcd5b3baab0297bedc0cbcefc1e70b57acd934e7b23", size = 74356280, upload-time = "2026-03-16T02:25:43.789Z" }, +] + +[[package]] +name = "nvidia-ml-py" +version = "13.595.45" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/49/c29f6e30d8662d2e94fef17739ea7309cc76aba269922ae999e4cc07f268/nvidia_ml_py-13.595.45.tar.gz", hash = "sha256:c9f34897fe0441ff35bc8f35baf80f830a20b0f4e6ce71e0a325bc0e66acf079", size = 50780, upload-time = "2026-03-19T16:59:44.956Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/24/fc256107d23597fa33d319505ce77160fa1a2349c096d01901ffc7cb7fc4/nvidia_ml_py-13.595.45-py3-none-any.whl", hash = "sha256:b65a7977f503d56154b14d683710125ef93594adb63fbf7e559336e3318f1376", size = 51776, upload-time = "2026-03-19T16:59:43.603Z" }, +] + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.27.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/89/f7a07dc961b60645dbbf42e80f2bc85ade7feb9a491b11a1e973aa00071f/nvidia_nccl_cu12-2.27.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ad730cf15cb5d25fe849c6e6ca9eb5b76db16a80f13f425ac68d8e2e55624457", size = 322348229, upload-time = "2025-06-26T04:11:28.385Z" }, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.8.93" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/74/86a07f1d0f42998ca31312f998bd3b9a7eff7f52378f4f270c8679c77fb9/nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:81ff63371a7ebd6e6451970684f916be2eab07321b73c9d244dc2b4da7f73b88", size = 39254836, upload-time = "2025-03-07T01:49:55.661Z" }, +] + +[[package]] +name = "nvidia-nvshmem-cu12" +version = "3.4.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/09/6ea3ea725f82e1e76684f0708bbedd871fc96da89945adeba65c3835a64c/nvidia_nvshmem_cu12-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:042f2500f24c021db8a06c5eec2539027d57460e1c1a762055a6554f72c369bd", size = 139103095, upload-time = "2025-09-06T00:32:31.266Z" }, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/eb/86626c1bbc2edb86323022371c39aa48df6fd8b0a1647bc274577f72e90b/nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b17e2001cc0d751a5bc2c6ec6d26ad95913324a4adb86788c944f8ce9ba441f", size = 89954, upload-time = "2025-03-07T01:42:44.131Z" }, +] + +[[package]] +name = "oauthlib" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, +] + +[[package]] +name = "onnxruntime" +version = "1.24.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "flatbuffers", marker = "python_full_version < '3.11'" }, + { name = "numpy", marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "protobuf", marker = "python_full_version < '3.11'" }, + { name = "sympy", marker = "python_full_version < '3.11'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/41/3253db975a90c3ce1d475e2a230773a21cd7998537f0657947df6fb79861/onnxruntime-1.24.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3e6456801c66b095c5cd68e690ca25db970ea5202bd0c5b84a2c3ef7731c5a3c", size = 17332766, upload-time = "2026-03-05T17:18:59.714Z" }, + { url = "https://files.pythonhosted.org/packages/7e/c5/3af6b325f1492d691b23844d88ed26844c1164620860c5efe95c0e22782d/onnxruntime-1.24.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b2ebc54c6d8281dccff78d4b06e47d4cf07535937584ab759448390a70f4978", size = 15130330, upload-time = "2026-03-05T16:34:53.831Z" }, + { url = "https://files.pythonhosted.org/packages/03/4b/f96b46c1866a293ed23ca2cf5e5a63d413ad3a951da60dd877e3c56cbbca/onnxruntime-1.24.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb56575d7794bf0781156955610c9e651c9504c64d42ec880784b6106244882d", size = 17213247, upload-time = "2026-03-05T17:17:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/36/13/27cf4d8df2578747584e8758aeb0b673b60274048510257f1f084b15e80e/onnxruntime-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:c958222ef9eff54018332beecd32d5d94a3ab079d8821937b333811bf4da0d39", size = 12595530, upload-time = "2026-03-05T17:18:49.356Z" }, + { url = "https://files.pythonhosted.org/packages/19/8c/6d9f31e6bae72a8079be12ed8ba36c4126a571fad38ded0a1b96f60f6896/onnxruntime-1.24.3-cp311-cp311-win_arm64.whl", hash = "sha256:a8f761857ebaf58a85b9e42422d03207f1d39e6bb8fecfdbf613bac5b9710723", size = 12261715, upload-time = "2026-03-05T17:18:39.699Z" }, + { url = "https://files.pythonhosted.org/packages/d0/7f/dfdc4e52600fde4c02d59bfe98c4b057931c1114b701e175aee311a9bc11/onnxruntime-1.24.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:0d244227dc5e00a9ae15a7ac1eba4c4460d7876dfecafe73fb00db9f1d914d91", size = 17342578, upload-time = "2026-03-05T17:19:02.403Z" }, + { url = "https://files.pythonhosted.org/packages/1c/dc/1f5489f7b21817d4ad352bf7a92a252bd5b438bcbaa7ad20ea50814edc79/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a9847b870b6cb462652b547bc98c49e0efb67553410a082fde1918a38707452", size = 15150105, upload-time = "2026-03-05T16:34:56.897Z" }, + { url = "https://files.pythonhosted.org/packages/28/7c/fd253da53594ab8efbefdc85b3638620ab1a6aab6eb7028a513c853559ce/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b354afce3333f2859c7e8706d84b6c552beac39233bcd3141ce7ab77b4cabb5d", size = 17237101, upload-time = "2026-03-05T17:18:02.561Z" }, + { url = "https://files.pythonhosted.org/packages/71/5f/eaabc5699eeed6a9188c5c055ac1948ae50138697a0428d562ac970d7db5/onnxruntime-1.24.3-cp312-cp312-win_amd64.whl", hash = "sha256:44ea708c34965439170d811267c51281d3897ecfc4aa0087fa25d4a4c3eb2e4a", size = 12597638, upload-time = "2026-03-05T17:18:52.141Z" }, + { url = "https://files.pythonhosted.org/packages/cc/5c/d8066c320b90610dbeb489a483b132c3b3879b2f93f949fb5d30cfa9b119/onnxruntime-1.24.3-cp312-cp312-win_arm64.whl", hash = "sha256:48d1092b44ca2ba6f9543892e7c422c15a568481403c10440945685faf27a8d8", size = 12270943, upload-time = "2026-03-05T17:18:42.006Z" }, + { url = "https://files.pythonhosted.org/packages/51/8d/487ece554119e2991242d4de55de7019ac6e47ee8dfafa69fcf41d37f8ed/onnxruntime-1.24.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:34a0ea5ff191d8420d9c1332355644148b1bf1a0d10c411af890a63a9f662aa7", size = 17342706, upload-time = "2026-03-05T16:35:10.813Z" }, + { url = "https://files.pythonhosted.org/packages/dd/25/8b444f463c1ac6106b889f6235c84f01eec001eaf689c3eff8c69cf48fae/onnxruntime-1.24.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fd2ec7bb0fabe42f55e8337cfc9b1969d0d14622711aac73d69b4bd5abb5ed7", size = 15149956, upload-time = "2026-03-05T16:34:59.264Z" }, + { url = "https://files.pythonhosted.org/packages/34/fc/c9182a3e1ab46940dd4f30e61071f59eee8804c1f641f37ce6e173633fb6/onnxruntime-1.24.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df8e70e732fe26346faaeec9147fa38bef35d232d2495d27e93dd221a2d473a9", size = 17237370, upload-time = "2026-03-05T17:18:05.258Z" }, + { url = "https://files.pythonhosted.org/packages/05/7e/3b549e1f4538514118bff98a1bcd6481dd9a17067f8c9af77151621c9a5c/onnxruntime-1.24.3-cp313-cp313-win_amd64.whl", hash = "sha256:2d3706719be6ad41d38a2250998b1d87758a20f6ea4546962e21dc79f1f1fd2b", size = 12597939, upload-time = "2026-03-05T17:18:54.772Z" }, + { url = "https://files.pythonhosted.org/packages/80/41/9696a5c4631a0caa75cc8bc4efd30938fd483694aa614898d087c3ee6d29/onnxruntime-1.24.3-cp313-cp313-win_arm64.whl", hash = "sha256:b082f3ba9519f0a1a1e754556bc7e635c7526ef81b98b3f78da4455d25f0437b", size = 12270705, upload-time = "2026-03-05T17:18:44.774Z" }, + { url = "https://files.pythonhosted.org/packages/b7/65/a26c5e59e3b210852ee04248cf8843c81fe7d40d94cf95343b66efe7eec9/onnxruntime-1.24.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72f956634bc2e4bd2e8b006bef111849bd42c42dea37bd0a4c728404fdaf4d34", size = 15161796, upload-time = "2026-03-05T16:35:02.871Z" }, + { url = "https://files.pythonhosted.org/packages/f3/25/2035b4aa2ccb5be6acf139397731ec507c5f09e199ab39d3262b22ffa1ac/onnxruntime-1.24.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78d1f25eed4ab9959db70a626ed50ee24cf497e60774f59f1207ac8556399c4d", size = 17240936, upload-time = "2026-03-05T17:18:09.534Z" }, + { url = "https://files.pythonhosted.org/packages/f9/a4/b3240ea84b92a3efb83d49cc16c04a17ade1ab47a6a95c4866d15bf0ac35/onnxruntime-1.24.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:a6b4bce87d96f78f0a9bf5cefab3303ae95d558c5bfea53d0bf7f9ea207880a8", size = 17344149, upload-time = "2026-03-05T16:35:13.382Z" }, + { url = "https://files.pythonhosted.org/packages/bb/4a/4b56757e51a56265e8c56764d9c36d7b435045e05e3b8a38bedfc5aedba3/onnxruntime-1.24.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d48f36c87b25ab3b2b4c88826c96cf1399a5631e3c2c03cc27d6a1e5d6b18eb4", size = 15151571, upload-time = "2026-03-05T16:35:05.679Z" }, + { url = "https://files.pythonhosted.org/packages/cf/14/c6fb84980cec8f682a523fcac7c2bdd6b311e7f342c61ce48d3a9cb87fc6/onnxruntime-1.24.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e104d33a409bf6e3f30f0e8198ec2aaf8d445b8395490a80f6e6ad56da98e400", size = 17238951, upload-time = "2026-03-05T17:18:12.394Z" }, + { url = "https://files.pythonhosted.org/packages/57/14/447e1400165aca8caf35dabd46540eb943c92f3065927bb4d9bcbc91e221/onnxruntime-1.24.3-cp314-cp314-win_amd64.whl", hash = "sha256:e785d73fbd17421c2513b0bb09eb25d88fa22c8c10c3f5d6060589efa5537c5b", size = 12903820, upload-time = "2026-03-05T17:18:57.123Z" }, + { url = "https://files.pythonhosted.org/packages/1d/ec/6b2fa5702e4bbba7339ca5787a9d056fc564a16079f8833cc6ba4798da1c/onnxruntime-1.24.3-cp314-cp314-win_arm64.whl", hash = "sha256:951e897a275f897a05ffbcaa615d98777882decaeb80c9216c68cdc62f849f53", size = 12594089, upload-time = "2026-03-05T17:18:47.169Z" }, + { url = "https://files.pythonhosted.org/packages/12/dc/cd06cba3ddad92ceb17b914a8e8d49836c79e38936e26bde6e368b62c1fe/onnxruntime-1.24.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d4e70ce578aa214c74c7a7a9226bc8e229814db4a5b2d097333b81279ecde36", size = 15162789, upload-time = "2026-03-05T16:35:08.282Z" }, + { url = "https://files.pythonhosted.org/packages/a6/d6/413e98ab666c6fb9e8be7d1c6eb3bd403b0bea1b8d42db066dab98c7df07/onnxruntime-1.24.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02aaf6ddfa784523b6873b4176a79d508e599efe12ab0ea1a3a6e7314408b7aa", size = 17240738, upload-time = "2026-03-05T17:18:15.203Z" }, +] + +[[package]] +name = "onnxruntime" +version = "1.24.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "flatbuffers", marker = "python_full_version >= '3.11'" }, + { name = "numpy", marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "protobuf", marker = "python_full_version >= '3.11'" }, + { name = "sympy", marker = "python_full_version >= '3.11'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/69/6c40720201012c6af9aa7d4ecdd620e521bd806dc6269d636fdd5c5aeebe/onnxruntime-1.24.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0bdfce8e9a6497cec584aab407b71bf697dac5e1b7b7974adc50bf7533bdb3a2", size = 17332131, upload-time = "2026-03-17T22:05:49.005Z" }, + { url = "https://files.pythonhosted.org/packages/38/e9/8c901c150ce0c368da38638f44152fb411059c0c7364b497c9e5c957321a/onnxruntime-1.24.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:046ff290045a387676941a02a8ae5c3ebec6b4f551ae228711968c4a69d8f6b7", size = 15152472, upload-time = "2026-03-17T22:03:26.176Z" }, + { url = "https://files.pythonhosted.org/packages/d5/b6/7a4df417cdd01e8f067a509e123ac8b31af450a719fa7ed81787dd6057ec/onnxruntime-1.24.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e54ad52e61d2d4618dcff8fa1480ac66b24ee2eab73331322db1049f11ccf330", size = 17222993, upload-time = "2026-03-17T22:04:34.485Z" }, + { url = "https://files.pythonhosted.org/packages/dd/59/8febe015f391aa1757fa5ba82c759ea4b6c14ef970132efb5e316665ba61/onnxruntime-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b43b63eb24a2bc8fc77a09be67587a570967a412cccb837b6245ccb546691153", size = 12594863, upload-time = "2026-03-17T22:05:38.749Z" }, + { url = "https://files.pythonhosted.org/packages/32/84/4155fcd362e8873eb6ce305acfeeadacd9e0e59415adac474bea3d9281bb/onnxruntime-1.24.4-cp311-cp311-win_arm64.whl", hash = "sha256:e26478356dba25631fb3f20112e345f8e8bf62c499bb497e8a559f7d69cf7e7b", size = 12259895, upload-time = "2026-03-17T22:05:28.812Z" }, + { url = "https://files.pythonhosted.org/packages/d7/38/31db1b232b4ba960065a90c1506ad7a56995cd8482033184e97fadca17cc/onnxruntime-1.24.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cad1c2b3f455c55678ab2a8caa51fb420c25e6e3cf10f4c23653cdabedc8de78", size = 17341875, upload-time = "2026-03-17T22:05:51.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/60/c4d1c8043eb42f8a9aa9e931c8c293d289c48ff463267130eca97d13357f/onnxruntime-1.24.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1a5c5a544b22f90859c88617ecb30e161ee3349fcc73878854f43d77f00558b5", size = 15172485, upload-time = "2026-03-17T22:03:32.182Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ab/5b68110e0460d73fad814d5bd11c7b1ddcce5c37b10177eb264d6a36e331/onnxruntime-1.24.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d640eb9f3782689b55cfa715094474cd5662f2f137be6a6f847a594b6e9705c", size = 17244912, upload-time = "2026-03-17T22:04:37.251Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f4/6b89e297b93704345f0f3f8c62229bee323ef25682a3f9b4f89a39324950/onnxruntime-1.24.4-cp312-cp312-win_amd64.whl", hash = "sha256:535b29475ca42b593c45fbb2152fbf1cdf3f287315bf650e6a724a0a1d065cdb", size = 12596856, upload-time = "2026-03-17T22:05:41.224Z" }, + { url = "https://files.pythonhosted.org/packages/43/06/8b8ec6e9e6a474fcd5d772453f627ad4549dfe3ab8c0bf70af5afcde551b/onnxruntime-1.24.4-cp312-cp312-win_arm64.whl", hash = "sha256:e6214096e14b7b52e3bee1903dc12dc7ca09cb65e26664668a4620cc5e6f9a90", size = 12270275, upload-time = "2026-03-17T22:05:31.132Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f0/8a21ec0a97e40abb7d8da1e8b20fb9e1af509cc6d191f6faa75f73622fb2/onnxruntime-1.24.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e99a48078baaefa2b50fe5836c319499f71f13f76ed32d0211f39109147a49e0", size = 17341922, upload-time = "2026-03-17T22:03:56.364Z" }, + { url = "https://files.pythonhosted.org/packages/8b/25/d7908de8e08cee9abfa15b8aa82349b79733ae5865162a3609c11598805d/onnxruntime-1.24.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4aaed1e5e1aaacf2343c838a30a7c3ade78f13eeb16817411f929d04040a13", size = 15172290, upload-time = "2026-03-17T22:03:37.124Z" }, + { url = "https://files.pythonhosted.org/packages/7f/72/105ec27a78c5aa0154a7c0cd8c41c19a97799c3b12fc30392928997e3be3/onnxruntime-1.24.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e30c972bc02e072911aabb6891453ec73795386c0af2b761b65444b8a4c4745f", size = 17244738, upload-time = "2026-03-17T22:04:40.625Z" }, + { url = "https://files.pythonhosted.org/packages/05/fb/a592736d968c2f58e12de4d52088dda8e0e724b26ad5c0487263adb45875/onnxruntime-1.24.4-cp313-cp313-win_amd64.whl", hash = "sha256:3b6ba8b0181a3aa88edab00eb01424ffc06f42e71095a91186c2249415fcff93", size = 12597435, upload-time = "2026-03-17T22:05:43.826Z" }, + { url = "https://files.pythonhosted.org/packages/ad/04/ae2479e9841b64bd2eb44f8a64756c62593f896514369a11243b1b86ca5c/onnxruntime-1.24.4-cp313-cp313-win_arm64.whl", hash = "sha256:71d6a5c1821d6e8586a024000ece458db8f2fc0ecd050435d45794827ce81e19", size = 12269852, upload-time = "2026-03-17T22:05:33.353Z" }, + { url = "https://files.pythonhosted.org/packages/b4/af/a479a536c4398ffaf49fbbe755f45d5b8726bdb4335ab31b537f3d7149b8/onnxruntime-1.24.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1700f559c8086d06b2a4d5de51e62cb4ff5e2631822f71a36db8c72383db71ee", size = 15176861, upload-time = "2026-03-17T22:03:40.143Z" }, + { url = "https://files.pythonhosted.org/packages/be/13/19f5da70c346a76037da2c2851ecbf1266e61d7f0dcdb887c667210d4608/onnxruntime-1.24.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c74e268dc808e61e63784d43f9ddcdaf50a776c2819e8bd1d1b11ef64bf7e36", size = 17247454, upload-time = "2026-03-17T22:04:46.643Z" }, + { url = "https://files.pythonhosted.org/packages/89/db/b30dbbd6037847b205ab75d962bc349bf1e46d02a65b30d7047a6893ffd6/onnxruntime-1.24.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:fbff2a248940e3398ae78374c5a839e49a2f39079b488bc64439fa0ec327a3e4", size = 17343300, upload-time = "2026-03-17T22:03:59.223Z" }, + { url = "https://files.pythonhosted.org/packages/61/88/1746c0e7959961475b84c776d35601a21d445f463c93b1433a409ec3e188/onnxruntime-1.24.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2b7969e72d8cb53ffc88ab6d49dd5e75c1c663bda7be7eb0ece192f127343d1", size = 15175936, upload-time = "2026-03-17T22:03:43.671Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ba/4699cde04a52cece66cbebc85bd8335a0d3b9ad485abc9a2e15946a1349d/onnxruntime-1.24.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14ed1f197fab812b695a5eaddb536c635e58a2fbbe50a517c78f082cc6ce9177", size = 17246432, upload-time = "2026-03-17T22:04:49.58Z" }, + { url = "https://files.pythonhosted.org/packages/ef/60/4590910841bb28bd3b4b388a9efbedf4e2d2cca99ddf0c863642b4e87814/onnxruntime-1.24.4-cp314-cp314-win_amd64.whl", hash = "sha256:311e309f573bf3c12aa5723e23823077f83d5e412a18499d4485c7eb41040858", size = 12903276, upload-time = "2026-03-17T22:05:46.349Z" }, + { url = "https://files.pythonhosted.org/packages/7f/6f/60e2c0acea1e1ac09b3e794b5a19c166eebf91c0b860b3e6db8e74983fda/onnxruntime-1.24.4-cp314-cp314-win_arm64.whl", hash = "sha256:3f0b910e86b759a4732663ec61fd57ac42ee1b0066f68299de164220b660546d", size = 12594365, upload-time = "2026-03-17T22:05:35.795Z" }, + { url = "https://files.pythonhosted.org/packages/cf/68/0c05d10f8f6c40fe0912ebec0d5a33884aaa2af2053507e864dab0883208/onnxruntime-1.24.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa12ddc54c9c4594073abcaa265cd9681e95fb89dae982a6f508a794ca42e661", size = 15176889, upload-time = "2026-03-17T22:03:48.021Z" }, + { url = "https://files.pythonhosted.org/packages/6c/1d/1666dc64e78d8587d168fec4e3b7922b92eb286a2ddeebcf6acb55c7dc82/onnxruntime-1.24.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1cc6a518255f012134bc791975a6294806be9a3b20c4a54cca25194c90cf731", size = 17247021, upload-time = "2026-03-17T22:04:52.377Z" }, +] + +[[package]] +name = "openai" +version = "2.30.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/88/15/52580c8fbc16d0675d516e8749806eda679b16de1e4434ea06fb6feaa610/openai-2.30.0.tar.gz", hash = "sha256:92f7661c990bda4b22a941806c83eabe4896c3094465030dd882a71abe80c885", size = 676084, upload-time = "2026-03-25T22:08:59.96Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/9e/5bfa2270f902d5b92ab7d41ce0475b8630572e71e349b2a4996d14bdda93/openai-2.30.0-py3-none-any.whl", hash = "sha256:9a5ae616888eb2748ec5e0c5b955a51592e0b201a11f4262db920f2a78c5231d", size = 1146656, upload-time = "2026-03-25T22:08:58.2Z" }, +] + +[[package]] +name = "openai-harmony" +version = "0.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/92/2d038d096f29179c7c9571b431f9e739f87a487121901725e23fe338dd9d/openai_harmony-0.0.8.tar.gz", hash = "sha256:6e43f98e6c242fa2de6f8ea12eab24af63fa2ed3e89c06341fb9d92632c5cbdf", size = 284777, upload-time = "2025-11-05T19:07:06.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/c6/2502f416d46be3ec08bb66d696cccffb57781a499e3ff2e4d7c174af4e8f/openai_harmony-0.0.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:029ec25ca74abe48fdb58eb9fdd2a8c1618581fc33ce8e5653f8a1ffbfbd9326", size = 2627806, upload-time = "2025-11-05T19:06:57.063Z" }, + { url = "https://files.pythonhosted.org/packages/d3/d2/ce6953ca87db9cae3e775024184da7d1c5cb88cead19a2d75b42f00a959c/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4f709815924ec325b9a890e6ab2bbb0ceec8e319a4e257328eb752cf36b2efc", size = 2948463, upload-time = "2025-11-05T19:06:48.17Z" }, + { url = "https://files.pythonhosted.org/packages/fa/4c/b553c9651662d6ce102ca7f3629d268b23df1abe5841e24bed81e8a8e949/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cfcfd963b50a41fc656c84d3440ca6eecdccd6c552158ce790b8f2e33dfb5a9", size = 2704083, upload-time = "2025-11-05T19:06:50.205Z" }, + { url = "https://files.pythonhosted.org/packages/9b/af/4eec8f9ab9c27bcdb444460c72cf43011d176fc44c79d6e113094ca1e152/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a3a16972aa1cee38ea958470cd04ac9a2d5ac38fdcf77ab686611246220c158", size = 2959765, upload-time = "2025-11-05T19:06:53.62Z" }, + { url = "https://files.pythonhosted.org/packages/11/3c/33f3374e4624e0e776f6b13b73c45a7ead7f9c4529f8369ed5bfcaa30cac/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4d5cfa168e74d08f8ba6d58a7e49bc7daef4d58951ec69b66b0d56f4927a68d", size = 3427031, upload-time = "2025-11-05T19:06:51.829Z" }, + { url = "https://files.pythonhosted.org/packages/25/3f/1a192b93bb47c6b44cd98ba8cc1d3d2a9308f1bb700c3017e6352da11bda/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c007d277218a50db8839e599ed78e0fffe5130f614c3f6d93ae257f282071a29", size = 2953260, upload-time = "2025-11-05T19:06:55.406Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f8/93b582cad3531797c3db7c2db5400fd841538ccddfd9f5e3df61be99a630/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8565d4f5a0638da1bffde29832ed63c9e695c558611053add3b2dc0b56c92dbc", size = 3127044, upload-time = "2025-11-05T19:06:59.553Z" }, + { url = "https://files.pythonhosted.org/packages/1d/10/4327dbf87f75ae813405fd9a9b4a5cde63d506ffed0a096a440a4cabd89c/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:cbaa3bda75ef0d8836e1f8cc84af62f971b1d756d740efc95c38c3e04c0bfde2", size = 2932931, upload-time = "2025-11-05T19:07:01.437Z" }, + { url = "https://files.pythonhosted.org/packages/8a/c8/1774eec4f6f360ef57618fb8f52e3d3af245b2491bd0297513aa09eec04b/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:772922a9bd24e133950fad71eb1550836f415a88e8c77870e12d0c3bd688ddc2", size = 2996140, upload-time = "2025-11-05T19:07:03.438Z" }, + { url = "https://files.pythonhosted.org/packages/60/c3/3d1e01e2dba517a91760e4a03e4f20ffc75039a6fe584d0e6f9b5c78fd15/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:007b0476a1f331f8130783f901f1da6f5a7057af1a4891f1b6a31dec364189b5", size = 3205080, upload-time = "2025-11-05T19:07:05.078Z" }, + { url = "https://files.pythonhosted.org/packages/14/63/119de431572d7c70a7bf1037034a9be6ed0a7502a7498ba7302bca5b3242/openai_harmony-0.0.8-cp38-abi3-win32.whl", hash = "sha256:a9b5f893326b28d9e935ade14b4f655f5a840942473bc89b201c25f7a15af9cf", size = 2082457, upload-time = "2025-11-05T19:07:09.631Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/c83cf5a206c263ee70448a5ae4264682555f4d0b5bed0d2cc6ca1108103d/openai_harmony-0.0.8-cp38-abi3-win_amd64.whl", hash = "sha256:39d44f0d8f466bd56698e7ead708bead3141e27b9b87e3ab7d5a6d0e4a869ee5", size = 2438369, upload-time = "2025-11-05T19:07:08.1Z" }, +] + +[[package]] +name = "opencv-python-headless" +version = "4.13.0.92" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/42/2310883be3b8826ac58c3f2787b9358a2d46923d61f88fedf930bc59c60c/opencv_python_headless-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:1a7d040ac656c11b8c38677cc8cccdc149f98535089dbe5b081e80a4e5903209", size = 46247192, upload-time = "2026-02-05T07:01:35.187Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1e/6f9e38005a6f7f22af785df42a43139d0e20f169eb5787ce8be37ee7fcc9/opencv_python_headless-4.13.0.92-cp37-abi3-macosx_14_0_x86_64.whl", hash = "sha256:3e0a6f0a37994ec6ce5f59e936be21d5d6384a4556f2d2da9c2f9c5dc948394c", size = 32568914, upload-time = "2026-02-05T07:01:51.989Z" }, + { url = "https://files.pythonhosted.org/packages/21/76/9417a6aef9def70e467a5bf560579f816148a4c658b7d525581b356eda9e/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c8cfc8e87ed452b5cecb9419473ee5560a989859fe1d10d1ce11ae87b09a2cb", size = 33703709, upload-time = "2026-02-05T10:24:46.469Z" }, + { url = "https://files.pythonhosted.org/packages/92/ce/bd17ff5772938267fd49716e94ca24f616ff4cb1ff4c6be13085108037be/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0525a3d2c0b46c611e2130b5fdebc94cf404845d8fa64d2f3a3b679572a5bd22", size = 56016764, upload-time = "2026-02-05T10:26:48.904Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b4/b7bcbf7c874665825a8c8e1097e93ea25d1f1d210a3e20d4451d01da30aa/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb60e36b237b1ebd40a912da5384b348df8ed534f6f644d8e0b4f103e272ba7d", size = 35010236, upload-time = "2026-02-05T10:28:11.031Z" }, + { url = "https://files.pythonhosted.org/packages/4b/33/b5db29a6c00eb8f50708110d8d453747ca125c8b805bc437b289dbdcc057/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0bd48544f77c68b2941392fcdf9bcd2b9cdf00e98cb8c29b2455d194763cf99e", size = 60391106, upload-time = "2026-02-05T10:30:14.236Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c3/52cfea47cd33e53e8c0fbd6e7c800b457245c1fda7d61660b4ffe9596a7f/opencv_python_headless-4.13.0.92-cp37-abi3-win32.whl", hash = "sha256:a7cf08e5b191f4ebb530791acc0825a7986e0d0dee2a3c491184bd8599848a4b", size = 30812232, upload-time = "2026-02-05T07:02:29.594Z" }, + { url = "https://files.pythonhosted.org/packages/4a/90/b338326131ccb2aaa3c2c85d00f41822c0050139a4bfe723cfd95455bd2d/opencv_python_headless-4.13.0.92-cp37-abi3-win_amd64.whl", hash = "sha256:77a82fe35ddcec0f62c15f2ba8a12ecc2ed4207c17b0902c7a3151ae29f37fb6", size = 40070414, upload-time = "2026-02-05T07:02:26.448Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.41.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/8e/3778a7e87801d994869a9396b9fc2a289e5f9be91ff54a27d41eace494b0/opentelemetry_api-1.41.0.tar.gz", hash = "sha256:9421d911326ec12dee8bc933f7839090cad7a3f13fcfb0f9e82f8174dc003c09", size = 71416, upload-time = "2026-04-09T14:38:34.544Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/ee/99ab786653b3bda9c37ade7e24a7b607a1b1f696063172768417539d876d/opentelemetry_api-1.41.0-py3-none-any.whl", hash = "sha256:0e77c806e6a89c9e4f8d372034622f3e1418a11bdbe1c80a50b3d3397ad0fa4f", size = 69007, upload-time = "2026-04-09T14:38:11.833Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp" +version = "1.41.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-exporter-otlp-proto-grpc" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/b7/845565a2ab5d22c1486bc7729a06b05cd0964c61539d766e1f107c9eea0c/opentelemetry_exporter_otlp-1.41.0.tar.gz", hash = "sha256:97ff847321f8d4c919032a67d20d3137fb7b34eac0c47f13f71112858927fc5b", size = 6152, upload-time = "2026-04-09T14:38:35.895Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f2/f1076fff152858773f22cda146713f9ae3661795af6bacd411a76f2151ac/opentelemetry_exporter_otlp-1.41.0-py3-none-any.whl", hash = "sha256:443b6a45c990ae4c55e147f97049a86c5f5b704f3d78b48b44a073a886ec4d6e", size = 7022, upload-time = "2026-04-09T14:38:13.934Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.41.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-proto" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8c/28/e8eca94966fe9a1465f6094dc5ddc5398473682180279c94020bc23b4906/opentelemetry_exporter_otlp_proto_common-1.41.0.tar.gz", hash = "sha256:966bbce537e9edb166154779a7c4f8ab6b8654a03a28024aeaf1a3eacb07d6ee", size = 20411, upload-time = "2026-04-09T14:38:36.572Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/c4/78b9bf2d9c1d5e494f44932988d9d91c51a66b9a7b48adf99b62f7c65318/opentelemetry_exporter_otlp_proto_common-1.41.0-py3-none-any.whl", hash = "sha256:7a99177bf61f85f4f9ed2072f54d676364719c066f6d11f515acc6c745c7acf0", size = 18366, upload-time = "2026-04-09T14:38:15.135Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.41.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "grpcio" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/46/d75a3f8c91915f2e58f61d0a2e4ada63891e7c7a37a20ff7949ba184a6b2/opentelemetry_exporter_otlp_proto_grpc-1.41.0.tar.gz", hash = "sha256:f704201251c6f65772b11bddea1c948000554459101bdbb0116e0a01b70592f6", size = 25754, upload-time = "2026-04-09T14:38:37.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/f6/b09e2e0c9f0b5750cebc6eaf31527b910821453cef40a5a0fe93550422b2/opentelemetry_exporter_otlp_proto_grpc-1.41.0-py3-none-any.whl", hash = "sha256:3a1a86bd24806ccf136ec9737dbfa4c09b069f9130ff66b0acb014f9c5255fd1", size = 20299, upload-time = "2026-04-09T14:38:17.01Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-http" +version = "1.41.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "requests" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/63/d9f43cd75f3fabb7e01148c89cfa9491fc18f6580a6764c554ff7c953c46/opentelemetry_exporter_otlp_proto_http-1.41.0.tar.gz", hash = "sha256:dcd6e0686f56277db4eecbadd5262124e8f2cc739cadbc3fae3d08a12c976cf5", size = 24139, upload-time = "2026-04-09T14:38:38.128Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b5/a214cd907eedc17699d1c2d602288ae17cb775526df04db3a3b3585329d2/opentelemetry_exporter_otlp_proto_http-1.41.0-py3-none-any.whl", hash = "sha256:a9c4ee69cce9c3f4d7ee736ad1b44e3c9654002c0816900abbafd9f3cf289751", size = 22673, upload-time = "2026-04-09T14:38:18.349Z" }, +] + +[[package]] +name = "opentelemetry-proto" +version = "1.41.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/d9/08e3dc6156878713e8c811682bc76151f5fe1a3cb7f3abda3966fd56e71e/opentelemetry_proto-1.41.0.tar.gz", hash = "sha256:95d2e576f9fb1800473a3e4cfcca054295d06bdb869fda4dc9f4f779dc68f7b6", size = 45669, upload-time = "2026-04-09T14:38:45.978Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/8c/65ef7a9383a363864772022e822b5d5c6988e6f9dabeebb9278f5b86ebc3/opentelemetry_proto-1.41.0-py3-none-any.whl", hash = "sha256:b970ab537309f9eed296be482c3e7cca05d8aca8165346e929f658dbe153b247", size = 72074, upload-time = "2026-04-09T14:38:29.38Z" }, +] + +[[package]] +name = "opentelemetry-sdk" +version = "1.41.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/0e/a586df1186f9f56b5a0879d52653effc40357b8e88fc50fe300038c3c08b/opentelemetry_sdk-1.41.0.tar.gz", hash = "sha256:7bddf3961131b318fc2d158947971a8e37e38b1cd23470cfb72b624e7cc108bd", size = 230181, upload-time = "2026-04-09T14:38:47.225Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/13/a7825118208cb32e6a4edcd0a99f925cbef81e77b3b0aedfd9125583c543/opentelemetry_sdk-1.41.0-py3-none-any.whl", hash = "sha256:a596f5687964a3e0d7f8edfdcf5b79cbca9c93c7025ebf5fb00f398a9443b0bd", size = 180214, upload-time = "2026-04-09T14:38:30.657Z" }, +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.62b0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/b0/c14f723e86c049b7bf8ff431160d982519b97a7be2857ed2247377397a24/opentelemetry_semantic_conventions-0.62b0.tar.gz", hash = "sha256:cbfb3c8fc259575cf68a6e1b94083cc35adc4a6b06e8cf431efa0d62606c0097", size = 145753, upload-time = "2026-04-09T14:38:48.274Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/6c/5e86fa1759a525ef91c2d8b79d668574760ff3f900d114297765eb8786cb/opentelemetry_semantic_conventions-0.62b0-py3-none-any.whl", hash = "sha256:0ddac1ce59eaf1a827d9987ab60d9315fb27aea23304144242d1fcad9e16b489", size = 231619, upload-time = "2026-04-09T14:38:32.394Z" }, +] + +[[package]] +name = "opentelemetry-semantic-conventions-ai" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-sdk" }, + { name = "opentelemetry-semantic-conventions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/24/02/10aeacc37a38a3a8fa16ff67bec1ae3bf882539f6f9efb0f70acf802ca2d/opentelemetry_semantic_conventions_ai-0.5.1.tar.gz", hash = "sha256:153906200d8c1d2f8e09bd78dbef526916023de85ac3dab35912bfafb69ff04c", size = 26533, upload-time = "2026-03-26T14:20:38.73Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/22/41fb05f1dc5fda2c468e05a41814c20859016c85117b66c8a257cae814f6/opentelemetry_semantic_conventions_ai-0.5.1-py3-none-any.whl", hash = "sha256:25aeb22bd261543b4898a73824026d96770e5351209c7d07a0b1314762b1f6e4", size = 11250, upload-time = "2026-03-26T14:20:37.108Z" }, +] + +[[package]] +name = "optuna" +version = "4.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "alembic" }, + { name = "colorlog" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "sqlalchemy" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/9b/62f120fb2ecbc4338bee70c5a3671c8e561714f3aa1a046b897ff142050e/optuna-4.8.0.tar.gz", hash = "sha256:6f7043e9f8ecb5e607af86a7eb00fb5ec2be26c3b08c201209a73d36aff37a38", size = 482603, upload-time = "2026-03-16T04:59:58.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/24/7c731839566d30dc70556d9824ef17692d896c15e3df627bce8c16f753e1/optuna-4.8.0-py3-none-any.whl", hash = "sha256:c57a7682679c36bfc9bca0da430698179e513874074b71bebedb0334964ab930", size = 419456, upload-time = "2026-03-16T04:59:56.977Z" }, +] + +[[package]] +name = "orjson" +version = "3.11.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/1b/2024d06792d0779f9dbc51531b61c24f76c75b9f4ce05e6f3377a1814cea/orjson-3.11.8.tar.gz", hash = "sha256:96163d9cdc5a202703e9ad1b9ae757d5f0ca62f4fa0cc93d1f27b0e180cc404e", size = 5603832, upload-time = "2026-03-31T16:16:27.878Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/90/5d81f61fe3e4270da80c71442864c091cee3003cc8984c75f413fe742a07/orjson-3.11.8-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e6693ff90018600c72fd18d3d22fa438be26076cd3c823da5f63f7bab28c11cb", size = 229663, upload-time = "2026-03-31T16:14:30.708Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ef/85e06b0eb11de6fb424120fd5788a07035bd4c5e6bb7841ae9972a0526d1/orjson-3.11.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93de06bc920854552493c81f1f729fab7213b7db4b8195355db5fda02c7d1363", size = 132321, upload-time = "2026-03-31T16:14:32.317Z" }, + { url = "https://files.pythonhosted.org/packages/86/71/089338ee51b3132f050db0864a7df9bdd5e94c2a03820ab8a91e8f655618/orjson-3.11.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fe0b8c83e0f36247fc9431ce5425a5d95f9b3a689133d494831bdbd6f0bceb13", size = 130658, upload-time = "2026-03-31T16:14:33.935Z" }, + { url = "https://files.pythonhosted.org/packages/10/0d/f39d8802345d0ad65f7fd4374b29b9b59f98656dc30f21ca5c773265b2f0/orjson-3.11.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d823831105c01f6c8029faf297633dbeb30271892bd430e9c24ceae3734744", size = 135708, upload-time = "2026-03-31T16:14:35.224Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b5/40aae576b3473511696dcffea84fde638b2b64774eb4dcb8b2c262729f8a/orjson-3.11.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c60c0423f15abb6cf78f56dff00168a1b582f7a1c23f114036e2bfc697814d5f", size = 147047, upload-time = "2026-03-31T16:14:36.489Z" }, + { url = "https://files.pythonhosted.org/packages/7b/f0/778a84458d1fdaa634b2e572e51ce0b354232f580b2327e1f00a8d88c38c/orjson-3.11.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:01928d0476b216ad2201823b0a74000440360cef4fed1912d297b8d84718f277", size = 133072, upload-time = "2026-03-31T16:14:37.715Z" }, + { url = "https://files.pythonhosted.org/packages/bf/d3/1bbf2fc3ffcc4b829ade554b574af68cec898c9b5ad6420a923c75a073d3/orjson-3.11.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4a639049c44d36a6d1ae0f4a94b271605c745aee5647fa8ffaabcdc01b69a6", size = 133867, upload-time = "2026-03-31T16:14:39.356Z" }, + { url = "https://files.pythonhosted.org/packages/08/94/6413da22edc99a69a8d0c2e83bf42973b8aa94d83ef52a6d39ac85da00bc/orjson-3.11.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3222adff1e1ff0dce93c16146b93063a7793de6c43d52309ae321234cdaf0f4d", size = 142268, upload-time = "2026-03-31T16:14:40.972Z" }, + { url = "https://files.pythonhosted.org/packages/4a/5f/aa5dbaa6136d7ba55f5461ac2e885efc6e6349424a428927fd46d68f4396/orjson-3.11.8-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:3223665349bbfb68da234acd9846955b1a0808cbe5520ff634bf253a4407009b", size = 424008, upload-time = "2026-03-31T16:14:42.637Z" }, + { url = "https://files.pythonhosted.org/packages/fa/aa/2c1962d108c7fe5e27aa03a354b378caf56d8eafdef15fd83dec081ce45a/orjson-3.11.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:61c9d357a59465736022d5d9ba06687afb7611dfb581a9d2129b77a6fcf78e59", size = 147942, upload-time = "2026-03-31T16:14:44.256Z" }, + { url = "https://files.pythonhosted.org/packages/47/d1/65f404f4c47eb1b0b4476f03ec838cac0c4aa933920ff81e5dda4dee14e7/orjson-3.11.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:58fb9b17b4472c7b1dcf1a54583629e62e23779b2331052f09a9249edf81675b", size = 136640, upload-time = "2026-03-31T16:14:45.884Z" }, + { url = "https://files.pythonhosted.org/packages/90/5f/7b784aea98bdb125a2f2da7c27d6c2d2f6d943d96ef0278bae596d563f85/orjson-3.11.8-cp310-cp310-win32.whl", hash = "sha256:b43dc2a391981d36c42fa57747a49dae793ef1d2e43898b197925b5534abd10a", size = 132066, upload-time = "2026-03-31T16:14:47.397Z" }, + { url = "https://files.pythonhosted.org/packages/92/ec/2e284af8d6c9478df5ef938917743f61d68f4c70d17f1b6e82f7e3b8dba1/orjson-3.11.8-cp310-cp310-win_amd64.whl", hash = "sha256:c98121237fea2f679480765abd566f7713185897f35c9e6c2add7e3a9900eb61", size = 127609, upload-time = "2026-03-31T16:14:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/67/41/5aa7fa3b0f4dc6b47dcafc3cea909299c37e40e9972feabc8b6a74e2730d/orjson-3.11.8-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:003646067cc48b7fcab2ae0c562491c9b5d2cbd43f1e5f16d98fd118c5522d34", size = 229229, upload-time = "2026-03-31T16:14:50.424Z" }, + { url = "https://files.pythonhosted.org/packages/0a/d7/57e7f2458e0a2c41694f39fc830030a13053a84f837a5b73423dca1f0938/orjson-3.11.8-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ed193ce51d77a3830cad399a529cd4ef029968761f43ddc549e1bc62b40d88f8", size = 128871, upload-time = "2026-03-31T16:14:51.888Z" }, + { url = "https://files.pythonhosted.org/packages/53/4a/e0fdb9430983e6c46e0299559275025075568aad5d21dd606faee3703924/orjson-3.11.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30491bc4f862aa15744b9738517454f1e46e56c972a2be87d70d727d5b2a8f8", size = 132104, upload-time = "2026-03-31T16:14:53.142Z" }, + { url = "https://files.pythonhosted.org/packages/08/4a/2025a60ff3f5c8522060cda46612d9b1efa653de66ed2908591d8d82f22d/orjson-3.11.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eda5b8b6be91d3f26efb7dc6e5e68ee805bc5617f65a328587b35255f138bf4", size = 130483, upload-time = "2026-03-31T16:14:54.605Z" }, + { url = "https://files.pythonhosted.org/packages/2d/3c/b9cde05bdc7b2385c66014e0620627da638d3d04e4954416ab48c31196c5/orjson-3.11.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee8db7bfb6fe03581bbab54d7c4124a6dd6a7f4273a38f7267197890f094675f", size = 135481, upload-time = "2026-03-31T16:14:55.901Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f2/a8238e7734de7cb589fed319857a8025d509c89dc52fdcc88f39c6d03d5a/orjson-3.11.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d8b5231de76c528a46b57010bbd83fb51e056aa0220a372fd5065e978406f1c", size = 146819, upload-time = "2026-03-31T16:14:57.548Z" }, + { url = "https://files.pythonhosted.org/packages/db/10/dbf1e2a3cafea673b1b4350e371877b759060d6018a998643b7040e5de48/orjson-3.11.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58a4a208a6fbfdb7a7327b8f201c6014f189f721fd55d047cafc4157af1bc62a", size = 132846, upload-time = "2026-03-31T16:14:58.91Z" }, + { url = "https://files.pythonhosted.org/packages/f8/fc/55e667ec9c85694038fcff00573d221b085d50777368ee3d77f38668bf3c/orjson-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f8952d6d2505c003e8f0224ff7858d341fa4e33fef82b91c4ff0ef070f2393c", size = 133580, upload-time = "2026-03-31T16:15:00.519Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a6/c08c589a9aad0cb46c4831d17de212a2b6901f9d976814321ff8e69e8785/orjson-3.11.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0022bb50f90da04b009ce32c512dc1885910daa7cb10b7b0cba4505b16db82a8", size = 142042, upload-time = "2026-03-31T16:15:01.906Z" }, + { url = "https://files.pythonhosted.org/packages/5c/cc/2f78ea241d52b717d2efc38878615fe80425bf2beb6e68c984dde257a766/orjson-3.11.8-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ff51f9d657d1afb6f410cb435792ce4e1fe427aab23d2fcd727a2876e21d4cb6", size = 423845, upload-time = "2026-03-31T16:15:03.703Z" }, + { url = "https://files.pythonhosted.org/packages/70/07/c17dcf05dd8045457538428a983bf1f1127928df5bf328cb24d2b7cddacb/orjson-3.11.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6dbe9a97bdb4d8d9d5367b52a7c32549bba70b2739c58ef74a6964a6d05ae054", size = 147729, upload-time = "2026-03-31T16:15:05.203Z" }, + { url = "https://files.pythonhosted.org/packages/90/6c/0fb6e8a24e682e0958d71711ae6f39110e4b9cd8cab1357e2a89cb8e1951/orjson-3.11.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5c370674ebabe16c6ccac33ff80c62bf8a6e59439f5e9d40c1f5ab8fd2215b7", size = 136425, upload-time = "2026-03-31T16:15:07.052Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/4d3cc3a3d616035beb51b24a09bb872942dc452cf2df0c1d11ab35046d9f/orjson-3.11.8-cp311-cp311-win32.whl", hash = "sha256:0e32f7154299f42ae66f13488963269e5eccb8d588a65bc839ed986919fc9fac", size = 131870, upload-time = "2026-03-31T16:15:08.678Z" }, + { url = "https://files.pythonhosted.org/packages/13/26/9fe70f81d16b702f8c3a775e8731b50ad91d22dacd14c7599b60a0941cd1/orjson-3.11.8-cp311-cp311-win_amd64.whl", hash = "sha256:25e0c672a2e32348d2eb33057b41e754091f2835f87222e4675b796b92264f06", size = 127440, upload-time = "2026-03-31T16:15:09.994Z" }, + { url = "https://files.pythonhosted.org/packages/e8/c6/b038339f4145efd2859c1ca53097a52c0bb9cbdd24f947ebe146da1ad067/orjson-3.11.8-cp311-cp311-win_arm64.whl", hash = "sha256:9185589c1f2a944c17e26c9925dcdbc2df061cc4a145395c57f0c51f9b5dbfcd", size = 127399, upload-time = "2026-03-31T16:15:11.412Z" }, + { url = "https://files.pythonhosted.org/packages/01/f6/8d58b32ab32d9215973a1688aebd098252ee8af1766c0e4e36e7831f0295/orjson-3.11.8-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1cd0b77e77c95758f8e1100139844e99f3ccc87e71e6fc8e1c027e55807c549f", size = 229233, upload-time = "2026-03-31T16:15:12.762Z" }, + { url = "https://files.pythonhosted.org/packages/a9/8b/2ffe35e71f6b92622e8ea4607bf33ecf7dfb51b3619dcfabfd36cbe2d0a5/orjson-3.11.8-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:6a3d159d5ffa0e3961f353c4b036540996bf8b9697ccc38261c0eac1fd3347a6", size = 128772, upload-time = "2026-03-31T16:15:14.237Z" }, + { url = "https://files.pythonhosted.org/packages/27/d2/1f8682ae50d5c6897a563cb96bc106da8c9cb5b7b6e81a52e4cc086679b9/orjson-3.11.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76070a76e9c5ae661e2d9848f216980d8d533e0f8143e6ed462807b242e3c5e8", size = 131946, upload-time = "2026-03-31T16:15:15.607Z" }, + { url = "https://files.pythonhosted.org/packages/52/4b/5500f76f0eece84226e0689cb48dcde081104c2fa6e2483d17ca13685ffb/orjson-3.11.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54153d21520a71a4c82a0dbb4523e468941d549d221dc173de0f019678cf3813", size = 130368, upload-time = "2026-03-31T16:15:17.066Z" }, + { url = "https://files.pythonhosted.org/packages/da/4e/58b927e08fbe9840e6c920d9e299b051ea667463b1f39a56e668669f8508/orjson-3.11.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:469ac2125611b7c5741a0b3798cd9e5786cbad6345f9f400c77212be89563bec", size = 135540, upload-time = "2026-03-31T16:15:18.404Z" }, + { url = "https://files.pythonhosted.org/packages/56/7c/ba7cb871cba1bcd5cd02ee34f98d894c6cea96353ad87466e5aef2429c60/orjson-3.11.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14778ffd0f6896aa613951a7fbf4690229aa7a543cb2bfbe9f358e08aafa9546", size = 146877, upload-time = "2026-03-31T16:15:19.833Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/eb9c25fc1386696c6a342cd361c306452c75e0b55e86ad602dd4827a7fd7/orjson-3.11.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea56a955056a6d6c550cf18b3348656a9d9a4f02e2d0c02cabf3c73f1055d506", size = 132837, upload-time = "2026-03-31T16:15:21.282Z" }, + { url = "https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53a0f57e59a530d18a142f4d4ba6dfc708dc5fdedce45e98ff06b44930a2a48f", size = 133624, upload-time = "2026-03-31T16:15:22.641Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/90048793db94ee4b2fcec4ac8e5ddb077367637d6650be896b3494b79bb7/orjson-3.11.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9b48e274f8824567d74e2158199e269597edf00823a1b12b63d48462bbf5123e", size = 141904, upload-time = "2026-03-31T16:15:24.435Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cf/eb284847487821a5d415e54149a6449ba9bfc5872ce63ab7be41b8ec401c/orjson-3.11.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3f262401086a3960586af06c054609365e98407151f5ea24a62893a40d80dbbb", size = 423742, upload-time = "2026-03-31T16:15:26.155Z" }, + { url = "https://files.pythonhosted.org/packages/44/09/e12423d327071c851c13e76936f144a96adacfc037394dec35ac3fc8d1e8/orjson-3.11.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e8c6218b614badf8e229b697865df4301afa74b791b6c9ade01d19a9953a942", size = 147806, upload-time = "2026-03-31T16:15:27.909Z" }, + { url = "https://files.pythonhosted.org/packages/b3/6d/37c2589ba864e582ffe7611643314785c6afb1f83c701654ef05daa8fcc7/orjson-3.11.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:093d489fa039ddade2db541097dbb484999fcc65fc2b0ff9819141e2ab364f25", size = 136485, upload-time = "2026-03-31T16:15:29.749Z" }, + { url = "https://files.pythonhosted.org/packages/be/c9/135194a02ab76b04ed9a10f68624b7ebd238bbe55548878b11ff15a0f352/orjson-3.11.8-cp312-cp312-win32.whl", hash = "sha256:e0950ed1bcb9893f4293fd5c5a7ee10934fbf82c4101c70be360db23ce24b7d2", size = 131966, upload-time = "2026-03-31T16:15:31.687Z" }, + { url = "https://files.pythonhosted.org/packages/ed/9a/9796f8fbe3cf30ce9cb696748dbb535e5c87be4bf4fe2e9ca498ef1fa8cf/orjson-3.11.8-cp312-cp312-win_amd64.whl", hash = "sha256:3cf17c141617b88ced4536b2135c552490f07799f6ad565948ea07bef0dcb9a6", size = 127441, upload-time = "2026-03-31T16:15:33.333Z" }, + { url = "https://files.pythonhosted.org/packages/cc/47/5aaf54524a7a4a0dd09dd778f3fa65dd2108290615b652e23d944152bc8e/orjson-3.11.8-cp312-cp312-win_arm64.whl", hash = "sha256:48854463b0572cc87dac7d981aa72ed8bf6deedc0511853dc76b8bbd5482d36d", size = 127364, upload-time = "2026-03-31T16:15:34.748Z" }, + { url = "https://files.pythonhosted.org/packages/66/7f/95fba509bb2305fab0073558f1e8c3a2ec4b2afe58ed9fcb7d3b8beafe94/orjson-3.11.8-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3f23426851d98478c8970da5991f84784a76682213cd50eb73a1da56b95239dc", size = 229180, upload-time = "2026-03-31T16:15:36.426Z" }, + { url = "https://files.pythonhosted.org/packages/f6/9d/b237215c743ca073697d759b5503abd2cb8a0d7b9c9e21f524bcf176ab66/orjson-3.11.8-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:ebaed4cef74a045b83e23537b52ef19a367c7e3f536751e355a2a394f8648559", size = 128754, upload-time = "2026-03-31T16:15:38.049Z" }, + { url = "https://files.pythonhosted.org/packages/42/3d/27d65b6d11e63f133781425f132807aef793ed25075fec686fc8e46dd528/orjson-3.11.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97c8f5d3b62380b70c36ffacb2a356b7c6becec86099b177f73851ba095ef623", size = 131877, upload-time = "2026-03-31T16:15:39.484Z" }, + { url = "https://files.pythonhosted.org/packages/dd/cc/faee30cd8f00421999e40ef0eba7332e3a625ce91a58200a2f52c7fef235/orjson-3.11.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:436c4922968a619fb7fef1ccd4b8b3a76c13b67d607073914d675026e911a65c", size = 130361, upload-time = "2026-03-31T16:15:41.274Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bb/a6c55896197f97b6d4b4e7c7fd77e7235517c34f5d6ad5aadd43c54c6d7c/orjson-3.11.8-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ab359aff0436d80bfe8a23b46b5fea69f1e18aaf1760a709b4787f1318b317f", size = 135521, upload-time = "2026-03-31T16:15:42.758Z" }, + { url = "https://files.pythonhosted.org/packages/9c/7c/ca3a3525aa32ff636ebb1778e77e3587b016ab2edb1b618b36ba96f8f2c0/orjson-3.11.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f89b6d0b3a8d81e1929d3ab3d92bbc225688bd80a770c49432543928fe09ac55", size = 146862, upload-time = "2026-03-31T16:15:44.341Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0c/18a9d7f18b5edd37344d1fd5be17e94dc652c67826ab749c6e5948a78112/orjson-3.11.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29c009e7a2ca9ad0ed1376ce20dd692146a5d9fe4310848904b6b4fee5c5c137", size = 132847, upload-time = "2026-03-31T16:15:46.368Z" }, + { url = "https://files.pythonhosted.org/packages/23/91/7e722f352ad67ca573cee44de2a58fb810d0f4eb4e33276c6a557979fd8a/orjson-3.11.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b895b781b3e395c067129d8551655642dfe9437273211d5404e87ac752b53", size = 133637, upload-time = "2026-03-31T16:15:48.123Z" }, + { url = "https://files.pythonhosted.org/packages/af/04/32845ce13ac5bd1046ddb02ac9432ba856cc35f6d74dde95864fe0ad5523/orjson-3.11.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:88006eda83858a9fdf73985ce3804e885c2befb2f506c9a3723cdeb5a2880e3e", size = 141906, upload-time = "2026-03-31T16:15:49.626Z" }, + { url = "https://files.pythonhosted.org/packages/02/5e/c551387ddf2d7106d9039369862245c85738b828844d13b99ccb8d61fd06/orjson-3.11.8-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:55120759e61309af7fcf9e961c6f6af3dde5921cdb3ee863ef63fd9db126cae6", size = 423722, upload-time = "2026-03-31T16:15:51.176Z" }, + { url = "https://files.pythonhosted.org/packages/00/a3/ecfe62434096f8a794d4976728cb59bcfc4a643977f21c2040545d37eb4c/orjson-3.11.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:98bdc6cb889d19bed01de46e67574a2eab61f5cc6b768ed50e8ac68e9d6ffab6", size = 147801, upload-time = "2026-03-31T16:15:52.939Z" }, + { url = "https://files.pythonhosted.org/packages/18/6d/0dce10b9f6643fdc59d99333871a38fa5a769d8e2fc34a18e5d2bfdee900/orjson-3.11.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:708c95f925a43ab9f34625e45dcdadf09ec8a6e7b664a938f2f8d5650f6c090b", size = 136460, upload-time = "2026-03-31T16:15:54.431Z" }, + { url = "https://files.pythonhosted.org/packages/01/d6/6dde4f31842d87099238f1f07b459d24edc1a774d20687187443ab044191/orjson-3.11.8-cp313-cp313-win32.whl", hash = "sha256:01c4e5a6695dc09098f2e6468a251bc4671c50922d4d745aff1a0a33a0cf5b8d", size = 131956, upload-time = "2026-03-31T16:15:56.081Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f9/4e494a56e013db957fb77186b818b916d4695b8fa2aa612364974160e91b/orjson-3.11.8-cp313-cp313-win_amd64.whl", hash = "sha256:c154a35dd1330707450bb4d4e7dd1f17fa6f42267a40c1e8a1daa5e13719b4b8", size = 127410, upload-time = "2026-03-31T16:15:57.54Z" }, + { url = "https://files.pythonhosted.org/packages/57/7f/803203d00d6edb6e9e7eef421d4e1adbb5ea973e40b3533f3cfd9aeb374e/orjson-3.11.8-cp313-cp313-win_arm64.whl", hash = "sha256:4861bde57f4d253ab041e374f44023460e60e71efaa121f3c5f0ed457c3a701e", size = 127338, upload-time = "2026-03-31T16:15:59.106Z" }, + { url = "https://files.pythonhosted.org/packages/6d/35/b01910c3d6b85dc882442afe5060cbf719c7d1fc85749294beda23d17873/orjson-3.11.8-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ec795530a73c269a55130498842aaa762e4a939f6ce481a7e986eeaa790e9da4", size = 229171, upload-time = "2026-03-31T16:16:00.651Z" }, + { url = "https://files.pythonhosted.org/packages/c2/56/c9ec97bd11240abef39b9e5d99a15462809c45f677420fd148a6c5e6295e/orjson-3.11.8-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:c492a0e011c0f9066e9ceaa896fbc5b068c54d365fea5f3444b697ee01bc8625", size = 128746, upload-time = "2026-03-31T16:16:02.673Z" }, + { url = "https://files.pythonhosted.org/packages/3b/e4/66d4f30a90de45e2f0cbd9623588e8ae71eef7679dbe2ae954ed6d66a41f/orjson-3.11.8-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:883206d55b1bd5f5679ad5e6ddd3d1a5e3cac5190482927fdb8c78fb699193b5", size = 131867, upload-time = "2026-03-31T16:16:04.342Z" }, + { url = "https://files.pythonhosted.org/packages/19/30/2a645fc9286b928675e43fa2a3a16fb7b6764aa78cc719dc82141e00f30b/orjson-3.11.8-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5774c1fdcc98b2259800b683b19599c133baeb11d60033e2095fd9d4667b82db", size = 124664, upload-time = "2026-03-31T16:16:05.837Z" }, + { url = "https://files.pythonhosted.org/packages/db/44/77b9a86d84a28d52ba3316d77737f6514e17118119ade3f91b639e859029/orjson-3.11.8-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7381c83dd3d4a6347e6635950aa448f54e7b8406a27c7ecb4a37e9f1ae08b", size = 129701, upload-time = "2026-03-31T16:16:07.407Z" }, + { url = "https://files.pythonhosted.org/packages/b3/ea/eff3d9bfe47e9bc6969c9181c58d9f71237f923f9c86a2d2f490cd898c82/orjson-3.11.8-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14439063aebcb92401c11afc68ee4e407258d2752e62d748b6942dad20d2a70d", size = 141202, upload-time = "2026-03-31T16:16:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/52/c8/90d4b4c60c84d62068d0cf9e4d8f0a4e05e76971d133ac0c60d818d4db20/orjson-3.11.8-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa72e71977bff96567b0f500fc5bfd2fdf915f34052c782a4c6ebbdaa97aa858", size = 127194, upload-time = "2026-03-31T16:16:11.02Z" }, + { url = "https://files.pythonhosted.org/packages/8d/c7/ea9e08d1f0ba981adffb629811148b44774d935171e7b3d780ae43c4c254/orjson-3.11.8-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7679bc2f01bb0d219758f1a5f87bb7c8a81c0a186824a393b366876b4948e14f", size = 133639, upload-time = "2026-03-31T16:16:13.434Z" }, + { url = "https://files.pythonhosted.org/packages/6c/8c/ddbbfd6ba59453c8fc7fe1d0e5983895864e264c37481b2a791db635f046/orjson-3.11.8-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:14f7b8fcb35ef403b42fa5ecfa4ed032332a91f3dc7368fbce4184d59e1eae0d", size = 141914, upload-time = "2026-03-31T16:16:14.955Z" }, + { url = "https://files.pythonhosted.org/packages/4e/31/dbfbefec9df060d34ef4962cd0afcb6fa7a9ec65884cb78f04a7859526c3/orjson-3.11.8-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:c2bdf7b2facc80b5e34f48a2d557727d5c5c57a8a450de122ae81fa26a81c1bc", size = 423800, upload-time = "2026-03-31T16:16:16.594Z" }, + { url = "https://files.pythonhosted.org/packages/87/cf/f74e9ae9803d4ab46b163494adba636c6d7ea955af5cc23b8aaa94cfd528/orjson-3.11.8-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ccd7ba1b0605813a0715171d39ec4c314cb97a9c85893c2c5c0c3a3729df38bf", size = 147837, upload-time = "2026-03-31T16:16:18.585Z" }, + { url = "https://files.pythonhosted.org/packages/64/e6/9214f017b5db85e84e68602792f742e5dc5249e963503d1b356bee611e01/orjson-3.11.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cdbc8c9c02463fef4d3c53a9ba3336d05496ec8e1f1c53326a1e4acc11f5c600", size = 136441, upload-time = "2026-03-31T16:16:20.151Z" }, + { url = "https://files.pythonhosted.org/packages/24/dd/3590348818f58f837a75fb969b04cdf187ae197e14d60b5e5a794a38b79d/orjson-3.11.8-cp314-cp314-win32.whl", hash = "sha256:0b57f67710a8cd459e4e54eb96d5f77f3624eba0c661ba19a525807e42eccade", size = 131983, upload-time = "2026-03-31T16:16:21.823Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0f/b6cb692116e05d058f31ceee819c70f097fa9167c82f67fabe7516289abc/orjson-3.11.8-cp314-cp314-win_amd64.whl", hash = "sha256:735e2262363dcbe05c35e3a8869898022af78f89dde9e256924dc02e99fe69ca", size = 127396, upload-time = "2026-03-31T16:16:23.685Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d1/facb5b5051fabb0ef9d26c6544d87ef19a939a9a001198655d0d891062dd/orjson-3.11.8-cp314-cp314-win_arm64.whl", hash = "sha256:6ccdea2c213cf9f3d9490cbd5d427693c870753df41e6cb375bd79bcbafc8817", size = 127330, upload-time = "2026-03-31T16:16:25.496Z" }, +] + +[[package]] +name = "outlines" +version = "1.2.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cloudpickle" }, + { name = "diskcache" }, + { name = "genson" }, + { name = "jinja2" }, + { name = "jsonpath-ng" }, + { name = "jsonschema" }, + { name = "outlines-core" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/15/b378d55a5a44253462adb6e5ab9deade92a5960ab2eab47e9fe8c728c6ea/outlines-1.2.9.tar.gz", hash = "sha256:dcd0b08b4cb173fec01c7cacc09efebf4b16f4710adcaaf94ecbdb70d0f82f2e", size = 2866022, upload-time = "2025-11-24T12:49:03.231Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/15/efb96450da2292088c51e516f705b41b7ea94436e21ee5c23f30b8154487/outlines-1.2.9-py3-none-any.whl", hash = "sha256:0448eb5747e9c4ef1a061bd8881816ac5abd9ad7135294471c0753efa8cfafdb", size = 98380, upload-time = "2025-11-24T12:49:01.677Z" }, +] + +[[package]] +name = "outlines-core" +version = "0.2.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/d3/e04e9145f8f806723dec9b9e5227ad695a3efcd3ced7794cf7c22b15df5e/outlines_core-0.2.11.tar.gz", hash = "sha256:dfce56f717ff5083e54cbcfdb66cad243365437fccbb5509adaa7e31e030f1d8", size = 197263, upload-time = "2025-05-19T10:12:51.719Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/8f/83c83e2afd142067c7f3cf2e152809195eee72d6a9b6c8745f13b827273d/outlines_core-0.2.11-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:89d79d8454b321f60047541a896d410ca9db631d241960266c4fe839cf5cd1b1", size = 1961650, upload-time = "2025-05-19T10:11:53.12Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e9/c6b99b4364b7026b71badc06b9809a2fc4154d6b0c475bc03ab4471f81e5/outlines_core-0.2.11-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:44d581893f8644da02db7be11887229a40d26077cbdd22072ad1ed1db0ad0b2d", size = 2133920, upload-time = "2025-05-19T10:11:55.15Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b8/cfa2bd8e1260eb1870c42a1a34389e9673a12335d09004ea6f1c82266a5e/outlines_core-0.2.11-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:e88b7f717915d91136d915adb65c2603d2aa6457ec3fc336884bdb0b28d3188a", size = 1960688, upload-time = "2025-05-19T10:11:56.773Z" }, + { url = "https://files.pythonhosted.org/packages/b9/02/4cffd04e360e315b060692bf1a80f84bac1671ef90f12daf765db6d68791/outlines_core-0.2.11-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:8c7ecdba2162e9b30b837251387c26b1a23f80f58d01d02e7600e4b1962c5333", size = 2130263, upload-time = "2025-05-19T10:11:58.1Z" }, + { url = "https://files.pythonhosted.org/packages/4e/85/69a450a486824026eca181a8d573aae3ecfdb25f0c2af852065dde17a372/outlines_core-0.2.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5fcefd221c10c95ce74838869450c6fdbbe2f581f0ba27e57a95232bd88c3a", size = 2289453, upload-time = "2025-05-19T10:11:59.919Z" }, + { url = "https://files.pythonhosted.org/packages/d1/3c/d7cb3eac6870a68b9034854fbfa07e67abfa1fa0d92198b9fee83fe6d044/outlines_core-0.2.11-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:a3c7774b112106f3afe931c65637fb3e0725d43707ceff1d34d6899cf0fa8200", size = 2115289, upload-time = "2025-05-19T10:12:01.527Z" }, + { url = "https://files.pythonhosted.org/packages/cc/5f/4cef22e2cf1ec286bd78c0052a0fa7ecf8519144477e7d4e276cbd70c625/outlines_core-0.2.11-cp310-cp310-win32.whl", hash = "sha256:1cfbb4cdcf34be5c6b08d279928b2b1050ed4c5e96e6e8405e3e624305c6799e", size = 1768059, upload-time = "2025-05-19T10:12:03.058Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3a/ce6aceb6545bb1e13cf05c1f34468c5c14c8c8be92cdabcf777b4bb067ef/outlines_core-0.2.11-cp310-cp310-win_amd64.whl", hash = "sha256:670c1c1fca26fb5c7f00dbb11d1f81cca4204863c3dfdeee82017a6846397bf9", size = 2062413, upload-time = "2025-05-19T10:12:05.097Z" }, + { url = "https://files.pythonhosted.org/packages/4d/ca/d5e92e197b40f62deb46dcc55567a51c8bf37943df7bc6658d93f30740f1/outlines_core-0.2.11-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:e96b8d0b56afcd3b86f4efca466c578f3725da1148ef62423249c92993841762", size = 1961746, upload-time = "2025-05-19T10:12:06.723Z" }, + { url = "https://files.pythonhosted.org/packages/02/b2/f3d6e7e37ebe1de3c345b53d8dc01e9b5c5f05b20e494fe94bf8972db4b0/outlines_core-0.2.11-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:d108ee8cd5e2fe71c2b0720b949d004901fec8bdb64bcd0c01b8abe38ab7ae1c", size = 2133815, upload-time = "2025-05-19T10:12:07.934Z" }, + { url = "https://files.pythonhosted.org/packages/07/21/62a680da6941b53d765160d22bdcf35849c22b7a987f4e9e8b7db7885c9f/outlines_core-0.2.11-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ebf42ab5b7ae38235d3c3333b5cacd6e91449b87b8a48a85094ea28ad9de9878", size = 1960539, upload-time = "2025-05-19T10:12:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/20cfb402aee1a7be0e08d861349570255ad2d17ba7fe7f8fd5706326588c/outlines_core-0.2.11-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:fd4305ff8418d14059d95dc3276ca96ba1b5aa499908e1af8bb3c7207aa7ac68", size = 2129894, upload-time = "2025-05-19T10:12:10.534Z" }, + { url = "https://files.pythonhosted.org/packages/4c/db/32c6e1170f139420e948fdd18a09a6175244bc0760dcf4dc2470e18411b9/outlines_core-0.2.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:132605b8dd1e3d1369da6a851992dd357f6376068292f6bd47caa7a28b794d19", size = 2289078, upload-time = "2025-05-19T10:12:12.118Z" }, + { url = "https://files.pythonhosted.org/packages/25/c3/b6e6f4e08fa84d2424f82705a6dc47fee33cb91989010fa678736957dcf6/outlines_core-0.2.11-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b31d5fc83b78aad282dd667b8d6e684614481fe08a7609ce0ce45dee64cd2991", size = 2115075, upload-time = "2025-05-19T10:12:13.761Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9b/b84c4933e4f35b34e9b23fadd63a365ad8563cc7561d8528b33de4ee8102/outlines_core-0.2.11-cp311-cp311-win32.whl", hash = "sha256:3e316a79f3ecfa12c17746edebcbd66538ee22a43986982f6b96166fb94ee6b1", size = 1768254, upload-time = "2025-05-19T10:12:15.02Z" }, + { url = "https://files.pythonhosted.org/packages/99/5b/380c933c65ca9744c163fe4a3702ad7f3e9ca02e09ac84a09b6837cff9b6/outlines_core-0.2.11-cp311-cp311-win_amd64.whl", hash = "sha256:c260a042b5854ff69291649cfd112066e6bab0dad0bb9cec8a6c3705ef3a59cd", size = 2062167, upload-time = "2025-05-19T10:12:16.443Z" }, + { url = "https://files.pythonhosted.org/packages/5f/2c/c7636823244c70e2960060bf9bd978248dffb55c5e7c91c46d18354b2a24/outlines_core-0.2.11-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:4a9db4872bae083631d720994f4cee603bce0536b33d5a988814576863b657cf", size = 1957668, upload-time = "2025-05-19T10:12:18.29Z" }, + { url = "https://files.pythonhosted.org/packages/c7/09/5c62047da139d722317a444a4d01cd5f11943a8c2eaecce784341dd0844a/outlines_core-0.2.11-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8359a45c59f6a8f2eb717245806501a59044c75f6ea8bd08faaa131cc8cdec45", size = 2130493, upload-time = "2025-05-19T10:12:19.537Z" }, + { url = "https://files.pythonhosted.org/packages/89/7a/d6a2810f90e37d550168e0c0a9a915086ea721444727e3ca2c630898d1ef/outlines_core-0.2.11-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:5d26a46591377340e0b870b8a96ea8341058341a62ee0bded9098e0c88dd24f4", size = 1956804, upload-time = "2025-05-19T10:12:20.755Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ea/339e6c273b5581128c3b7ca27d428d8993c3085912af1a467aa32ef0e9d1/outlines_core-0.2.11-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:ae460a34675fb11d92a5c605a480fbae4cd6c1b2d11b3698da64a7fcaba64dcf", size = 2127085, upload-time = "2025-05-19T10:12:22.02Z" }, + { url = "https://files.pythonhosted.org/packages/92/c7/a65d1fddf49830ebc41422294eacde35286d9f68994a8aa905cb14f5aade/outlines_core-0.2.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86df9740368866295077346440d911df4972da2b3f1f54b8125e6f329e8a8891", size = 2287677, upload-time = "2025-05-19T10:12:24.24Z" }, + { url = "https://files.pythonhosted.org/packages/23/79/8795aed8be9b77dd69d78e7cfbfcf28c179e6b08da6e56bbbf48a09fe55f/outlines_core-0.2.11-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:96ce4dd78f106799be4a0a5795cefd1352806162973756a4b6fce4bb6eddd7e4", size = 2113000, upload-time = "2025-05-19T10:12:25.446Z" }, + { url = "https://files.pythonhosted.org/packages/59/e3/cbe9294b06d92ee1892dbb6f2125d833d68e8629d45d080d6daba54eec2d/outlines_core-0.2.11-cp312-cp312-win32.whl", hash = "sha256:358db161cce3650ba822e118dcf0a1efa571c7deb4864ab9d64ca2c9cca7425d", size = 1765703, upload-time = "2025-05-19T10:12:26.693Z" }, + { url = "https://files.pythonhosted.org/packages/1d/c9/ed3cf362515fac16e313368b9b2f2497051f4ded88679205830b6f889f54/outlines_core-0.2.11-cp312-cp312-win_amd64.whl", hash = "sha256:231f9d20d2630c70665345821780d7808b29539620a75c99f65113b518c51032", size = 2060945, upload-time = "2025-05-19T10:12:28.294Z" }, + { url = "https://files.pythonhosted.org/packages/11/58/df6f57546f7792c990a4380ceaf99243a0b26b24c199e34e0a9277c89976/outlines_core-0.2.11-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:0907ff25d79edbf8650268028de85a1b41b38696f147059e007da4626a1031f1", size = 1957172, upload-time = "2025-05-19T10:12:29.737Z" }, + { url = "https://files.pythonhosted.org/packages/9b/cf/b07e33c44544e7865ec481554788807dfa6ad10fd86191ad21f2200f145e/outlines_core-0.2.11-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:f4146da5957f97550eebd19e80635e48035886fd10f03e9735cc111caaf74e93", size = 2130284, upload-time = "2025-05-19T10:12:31.408Z" }, + { url = "https://files.pythonhosted.org/packages/83/70/8f981706e2620914c48fd1edb42f9409d76b84c72149d48e89d14820fab6/outlines_core-0.2.11-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:8776a6db8843187c90e4c54bf94510cda68ca7a11c9b48d90587179fd3224bc2", size = 1956727, upload-time = "2025-05-19T10:12:32.996Z" }, + { url = "https://files.pythonhosted.org/packages/89/de/fba234a9c3984408f017ee0b1ca2e9d6191f8086afa649d3e4b04ed055e2/outlines_core-0.2.11-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:d44f38a89028bed50494420b47d08ebefa78f34b129e2ea6383c801e5ba62c26", size = 2126905, upload-time = "2025-05-19T10:12:34.261Z" }, + { url = "https://files.pythonhosted.org/packages/87/96/7dcdc5198844145ab35528f9f93a58c3d47b87e54d0f79357c631d7b7a9a/outlines_core-0.2.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daef6eaaf8c3403455ab5cbf265cb5c6838df571eb7c4b23cddac19cfc701726", size = 2287320, upload-time = "2025-05-19T10:12:35.515Z" }, + { url = "https://files.pythonhosted.org/packages/4d/68/b420b6a3beaadbf8e9f2a82132120027efd6424634013fbeca8c2fed7467/outlines_core-0.2.11-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:76b2512417c68863f8f227a080e87f755682dfd895e23b021121318be11da579", size = 2112861, upload-time = "2025-05-19T10:12:36.742Z" }, + { url = "https://files.pythonhosted.org/packages/78/d6/7c2a016f7a5eab2f3df2b3a258f270872c78fe0dd7d9fbee87429f1b6b1f/outlines_core-0.2.11-cp313-cp313-win32.whl", hash = "sha256:707eeb3d190485f55a27ad9a6ad70df86688fa2bf405894a118283be7f59bd55", size = 1765574, upload-time = "2025-05-19T10:12:37.98Z" }, + { url = "https://files.pythonhosted.org/packages/a5/39/4c07f1d1f8e6ed85db9fe73a021113795a05aae8a84f36f0bdebb08bfde8/outlines_core-0.2.11-cp313-cp313-win_amd64.whl", hash = "sha256:ad46698564c9b13cbfbc744067de12be73bd740d7b2de20ec6b979ad7511f7c9", size = 2060567, upload-time = "2025-05-19T10:12:39.228Z" }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812, upload-time = "2024-01-27T21:01:33.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832, upload-time = "2024-01-27T21:01:31.393Z" }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] +dependencies = [ + { name = "numpy", marker = "python_full_version < '3.11' or python_full_version >= '3.14'" }, + { name = "python-dateutil", marker = "python_full_version < '3.11' or python_full_version >= '3.14'" }, + { name = "pytz", marker = "python_full_version < '3.11' or python_full_version >= '3.14'" }, + { name = "tzdata", marker = "python_full_version < '3.11' or python_full_version >= '3.14'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763, upload-time = "2025-09-29T23:16:53.287Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217, upload-time = "2025-09-29T23:17:04.522Z" }, + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791, upload-time = "2025-09-29T23:17:18.444Z" }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373, upload-time = "2025-09-29T23:17:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444, upload-time = "2025-09-29T23:17:49.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459, upload-time = "2025-09-29T23:18:03.722Z" }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086, upload-time = "2025-09-29T23:18:18.505Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + +[[package]] +name = "pandas" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "tzdata", marker = "(python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/99/b342345300f13440fe9fe385c3c481e2d9a595ee3bab4d3219247ac94e9a/pandas-3.0.2.tar.gz", hash = "sha256:f4753e73e34c8d83221ba58f232433fca2748be8b18dbca02d242ed153945043", size = 4645855, upload-time = "2026-03-31T06:48:30.816Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/35/6411db530c618e0e0005187e35aa02ce60ae4c4c4d206964a2f978217c27/pandas-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a727a73cbdba2f7458dc82449e2315899d5140b449015d822f515749a46cbbe0", size = 10326926, upload-time = "2026-03-31T06:46:08.29Z" }, + { url = "https://files.pythonhosted.org/packages/c4/d3/b7da1d5d7dbdc5ef52ed7debd2b484313b832982266905315dad5a0bf0b1/pandas-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dbbd4aa20ca51e63b53bbde6a0fa4254b1aaabb74d2f542df7a7959feb1d760c", size = 9926987, upload-time = "2026-03-31T06:46:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/52/77/9b1c2d6070b5dbe239a7bc889e21bfa58720793fb902d1e070695d87c6d0/pandas-3.0.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:339dda302bd8369dedeae979cb750e484d549b563c3f54f3922cb8ff4978c5eb", size = 10757067, upload-time = "2026-03-31T06:46:14.903Z" }, + { url = "https://files.pythonhosted.org/packages/20/17/ec40d981705654853726e7ac9aea9ddbb4a5d9cf54d8472222f4f3de06c2/pandas-3.0.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61c2fd96d72b983a9891b2598f286befd4ad262161a609c92dc1652544b46b76", size = 11258787, upload-time = "2026-03-31T06:46:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/90/e3/3f1126d43d3702ca8773871a81c9f15122a1f412342cc56284ffda5b1f70/pandas-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c934008c733b8bbea273ea308b73b3156f0181e5b72960790b09c18a2794fe1e", size = 11771616, upload-time = "2026-03-31T06:46:20.532Z" }, + { url = "https://files.pythonhosted.org/packages/2e/cf/0f4e268e1f5062e44a6bda9f925806721cd4c95c2b808a4c82ebe914f96b/pandas-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:60a80bb4feacbef5e1447a3f82c33209c8b7e07f28d805cfd1fb951e5cb443aa", size = 12337623, upload-time = "2026-03-31T06:46:23.754Z" }, + { url = "https://files.pythonhosted.org/packages/44/a0/97a6339859d4acb2536efb24feb6708e82f7d33b2ed7e036f2983fcced82/pandas-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:ed72cb3f45190874eb579c64fa92d9df74e98fd63e2be7f62bce5ace0ade61df", size = 9897372, upload-time = "2026-03-31T06:46:26.703Z" }, + { url = "https://files.pythonhosted.org/packages/8f/eb/781516b808a99ddf288143cec46b342b3016c3414d137da1fdc3290d8860/pandas-3.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:f12b1a9e332c01e09510586f8ca9b108fd631fd656af82e452d7315ef6df5f9f", size = 9154922, upload-time = "2026-03-31T06:46:30.284Z" }, + { url = "https://files.pythonhosted.org/packages/f3/b0/c20bd4d6d3f736e6bd6b55794e9cd0a617b858eaad27c8f410ea05d953b7/pandas-3.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:232a70ebb568c0c4d2db4584f338c1577d81e3af63292208d615907b698a0f18", size = 10347921, upload-time = "2026-03-31T06:46:33.36Z" }, + { url = "https://files.pythonhosted.org/packages/35/d0/4831af68ce30cc2d03c697bea8450e3225a835ef497d0d70f31b8cdde965/pandas-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:970762605cff1ca0d3f71ed4f3a769ea8f85fc8e6348f6e110b8fea7e6eb5a14", size = 9888127, upload-time = "2026-03-31T06:46:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/61/a9/16ea9346e1fc4a96e2896242d9bc674764fb9049b0044c0132502f7a771e/pandas-3.0.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aff4e6f4d722e0652707d7bcb190c445fe58428500c6d16005b02401764b1b3d", size = 10399577, upload-time = "2026-03-31T06:46:39.224Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef8b27695c3d3dc78403c9a7d5e59a62d5464a7e1123b4e0042763f7104dc74f", size = 10880030, upload-time = "2026-03-31T06:46:42.412Z" }, + { url = "https://files.pythonhosted.org/packages/da/65/7225c0ea4d6ce9cb2160a7fb7f39804871049f016e74782e5dade4d14109/pandas-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f8d68083e49e16b84734eb1a4dcae4259a75c90fb6e2251ab9a00b61120c06ab", size = 11409468, upload-time = "2026-03-31T06:46:45.2Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/46e7c76032639f2132359b5cf4c785dd8cf9aea5ea64699eac752f02b9db/pandas-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:32cc41f310ebd4a296d93515fcac312216adfedb1894e879303987b8f1e2b97d", size = 11936381, upload-time = "2026-03-31T06:46:48.293Z" }, + { url = "https://files.pythonhosted.org/packages/7b/8b/721a9cff6fa6a91b162eb51019c6243b82b3226c71bb6c8ef4a9bd65cbc6/pandas-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:a4785e1d6547d8427c5208b748ae2efb64659a21bd82bf440d4262d02bfa02a4", size = 9744993, upload-time = "2026-03-31T06:46:51.488Z" }, + { url = "https://files.pythonhosted.org/packages/d5/18/7f0bd34ae27b28159aa80f2a6799f47fda34f7fb938a76e20c7b7fe3b200/pandas-3.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:08504503f7101300107ecdc8df73658e4347586db5cfdadabc1592e9d7e7a0fd", size = 9056118, upload-time = "2026-03-31T06:46:54.548Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ca/3e639a1ea6fcd0617ca4e8ca45f62a74de33a56ae6cd552735470b22c8d3/pandas-3.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5918ba197c951dec132b0c5929a00c0bf05d5942f590d3c10a807f6e15a57d3", size = 10321105, upload-time = "2026-03-31T06:46:57.327Z" }, + { url = "https://files.pythonhosted.org/packages/0b/77/dbc82ff2fb0e63c6564356682bf201edff0ba16c98630d21a1fb312a8182/pandas-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d606a041c89c0a474a4702d532ab7e73a14fe35c8d427b972a625c8e46373668", size = 9864088, upload-time = "2026-03-31T06:46:59.935Z" }, + { url = "https://files.pythonhosted.org/packages/5c/2b/341f1b04bbca2e17e13cd3f08c215b70ef2c60c5356ef1e8c6857449edc7/pandas-3.0.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:710246ba0616e86891b58ab95f2495143bb2bc83ab6b06747c74216f583a6ac9", size = 10369066, upload-time = "2026-03-31T06:47:02.792Z" }, + { url = "https://files.pythonhosted.org/packages/12/c5/cbb1ffefb20a93d3f0e1fdcda699fb84976210d411b008f97f48bf6ce27e/pandas-3.0.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5d3cfe227c725b1f3dff4278b43d8c784656a42a9325b63af6b1492a8232209e", size = 10876780, upload-time = "2026-03-31T06:47:06.205Z" }, + { url = "https://files.pythonhosted.org/packages/98/fe/2249ae5e0a69bd0ddf17353d0a5d26611d70970111f5b3600cdc8be883e7/pandas-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c3b723df9087a9a9a840e263ebd9f88b64a12075d1bf2ea401a5a42f254f084d", size = 11375181, upload-time = "2026-03-31T06:47:09.383Z" }, + { url = "https://files.pythonhosted.org/packages/de/64/77a38b09e70b6464883b8d7584ab543e748e42c1b5d337a2ee088e0df741/pandas-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3096110bf9eac0070b7208465f2740e2d8a670d5cb6530b5bb884eca495fd39", size = 11928899, upload-time = "2026-03-31T06:47:12.686Z" }, + { url = "https://files.pythonhosted.org/packages/5e/52/42855bf626868413f761addd574acc6195880ae247a5346477a4361c3acb/pandas-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:07a10f5c36512eead51bc578eb3354ad17578b22c013d89a796ab5eee90cd991", size = 9746574, upload-time = "2026-03-31T06:47:15.64Z" }, + { url = "https://files.pythonhosted.org/packages/88/39/21304ae06a25e8bf9fc820d69b29b2c495b2ae580d1e143146c309941760/pandas-3.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:5fdbfa05931071aba28b408e59226186b01eb5e92bea2ab78b65863ca3228d84", size = 9047156, upload-time = "2026-03-31T06:47:18.595Z" }, + { url = "https://files.pythonhosted.org/packages/72/20/7defa8b27d4f330a903bb68eea33be07d839c5ea6bdda54174efcec0e1d2/pandas-3.0.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:dbc20dea3b9e27d0e66d74c42b2d0c1bed9c2ffe92adea33633e3bedeb5ac235", size = 10756238, upload-time = "2026-03-31T06:47:22.012Z" }, + { url = "https://files.pythonhosted.org/packages/e9/95/49433c14862c636afc0e9b2db83ff16b3ad92959364e52b2955e44c8e94c/pandas-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b75c347eff42497452116ce05ef461822d97ce5b9ff8df6edacb8076092c855d", size = 10408520, upload-time = "2026-03-31T06:47:25.197Z" }, + { url = "https://files.pythonhosted.org/packages/3b/f8/462ad2b5881d6b8ec8e5f7ed2ea1893faa02290d13870a1600fe72ad8efc/pandas-3.0.2-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1478075142e83a5571782ad007fb201ed074bdeac7ebcc8890c71442e96adf7", size = 10324154, upload-time = "2026-03-31T06:47:28.097Z" }, + { url = "https://files.pythonhosted.org/packages/0a/65/d1e69b649cbcddda23ad6e4c40ef935340f6f652a006e5cbc3555ac8adb3/pandas-3.0.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5880314e69e763d4c8b27937090de570f1fb8d027059a7ada3f7f8e98bdcb677", size = 10714449, upload-time = "2026-03-31T06:47:30.85Z" }, + { url = "https://files.pythonhosted.org/packages/47/a4/85b59bc65b8190ea3689882db6cdf32a5003c0ccd5a586c30fdcc3ffc4fc/pandas-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b5329e26898896f06035241a626d7c335daa479b9bbc82be7c2742d048e41172", size = 11338475, upload-time = "2026-03-31T06:47:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c4/bc6966c6e38e5d9478b935272d124d80a589511ed1612a5d21d36f664c68/pandas-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:81526c4afd31971f8b62671442a4b2b51e0aa9acc3819c9f0f12a28b6fcf85f1", size = 11786568, upload-time = "2026-03-31T06:47:36.941Z" }, + { url = "https://files.pythonhosted.org/packages/e8/74/09298ca9740beed1d3504e073d67e128aa07e5ca5ca2824b0c674c0b8676/pandas-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:7cadd7e9a44ec13b621aec60f9150e744cfc7a3dd32924a7e2f45edff31823b0", size = 10488652, upload-time = "2026-03-31T06:47:40.612Z" }, + { url = "https://files.pythonhosted.org/packages/bb/40/c6ea527147c73b24fc15c891c3fcffe9c019793119c5742b8784a062c7db/pandas-3.0.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:db0dbfd2a6cdf3770aa60464d50333d8f3d9165b2f2671bcc299b72de5a6677b", size = 10326084, upload-time = "2026-03-31T06:47:43.834Z" }, + { url = "https://files.pythonhosted.org/packages/95/25/bdb9326c3b5455f8d4d3549fce7abcf967259de146fe2cf7a82368141948/pandas-3.0.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0555c5882688a39317179ab4a0ed41d3ebc8812ab14c69364bbee8fb7a3f6288", size = 9914146, upload-time = "2026-03-31T06:47:46.67Z" }, + { url = "https://files.pythonhosted.org/packages/8d/77/3a227ff3337aa376c60d288e1d61c5d097131d0ac71f954d90a8f369e422/pandas-3.0.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:01f31a546acd5574ef77fe199bc90b55527c225c20ccda6601cf6b0fd5ed597c", size = 10444081, upload-time = "2026-03-31T06:47:49.681Z" }, + { url = "https://files.pythonhosted.org/packages/15/88/3cdd54fa279341afa10acf8d2b503556b1375245dccc9315659f795dd2e9/pandas-3.0.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:deeca1b5a931fdf0c2212c8a659ade6d3b1edc21f0914ce71ef24456ca7a6535", size = 10897535, upload-time = "2026-03-31T06:47:53.033Z" }, + { url = "https://files.pythonhosted.org/packages/06/9d/98cc7a7624f7932e40f434299260e2917b090a579d75937cb8a57b9d2de3/pandas-3.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0f48afd9bb13300ffb5a3316973324c787054ba6665cda0da3fbd67f451995db", size = 11446992, upload-time = "2026-03-31T06:47:56.193Z" }, + { url = "https://files.pythonhosted.org/packages/9a/cd/19ff605cc3760e80602e6826ddef2824d8e7050ed80f2e11c4b079741dc3/pandas-3.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6c4d8458b97a35717b62469a4ea0e85abd5ed8687277f5ccfc67f8a5126f8c53", size = 11968257, upload-time = "2026-03-31T06:47:59.137Z" }, + { url = "https://files.pythonhosted.org/packages/db/60/aba6a38de456e7341285102bede27514795c1eaa353bc0e7638b6b785356/pandas-3.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:b35d14bb5d8285d9494fe93815a9e9307c0876e10f1e8e89ac5b88f728ec8dcf", size = 9865893, upload-time = "2026-03-31T06:48:02.038Z" }, + { url = "https://files.pythonhosted.org/packages/08/71/e5ec979dd2e8a093dacb8864598c0ff59a0cee0bbcdc0bfec16a51684d4f/pandas-3.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:63d141b56ef686f7f0d714cfb8de4e320475b86bf4b620aa0b7da89af8cbdbbb", size = 9188644, upload-time = "2026-03-31T06:48:05.045Z" }, + { url = "https://files.pythonhosted.org/packages/f1/6c/7b45d85db19cae1eb524f2418ceaa9d85965dcf7b764ed151386b7c540f0/pandas-3.0.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:140f0cffb1fa2524e874dde5b477d9defe10780d8e9e220d259b2c0874c89d9d", size = 10776246, upload-time = "2026-03-31T06:48:07.789Z" }, + { url = "https://files.pythonhosted.org/packages/a8/3e/7b00648b086c106e81766f25322b48aa8dfa95b55e621dbdf2fdd413a117/pandas-3.0.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ae37e833ff4fed0ba352f6bdd8b73ba3ab3256a85e54edfd1ab51ae40cca0af8", size = 10424801, upload-time = "2026-03-31T06:48:10.897Z" }, + { url = "https://files.pythonhosted.org/packages/da/6e/558dd09a71b53b4008e7fc8a98ec6d447e9bfb63cdaeea10e5eb9b2dabe8/pandas-3.0.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d888a5c678a419a5bb41a2a93818e8ed9fd3172246555c0b37b7cc27027effd", size = 10345643, upload-time = "2026-03-31T06:48:13.7Z" }, + { url = "https://files.pythonhosted.org/packages/be/e3/921c93b4d9a280409451dc8d07b062b503bbec0531d2627e73a756e99a82/pandas-3.0.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b444dc64c079e84df91baa8bf613d58405645461cabca929d9178f2cd392398d", size = 10743641, upload-time = "2026-03-31T06:48:16.659Z" }, + { url = "https://files.pythonhosted.org/packages/56/ca/fd17286f24fa3b4d067965d8d5d7e14fe557dd4f979a0b068ac0deaf8228/pandas-3.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4544c7a54920de8eeacaa1466a6b7268ecfbc9bc64ab4dbb89c6bbe94d5e0660", size = 11361993, upload-time = "2026-03-31T06:48:19.475Z" }, + { url = "https://files.pythonhosted.org/packages/e4/a5/2f6ed612056819de445a433ca1f2821ac3dab7f150d569a59e9cc105de1d/pandas-3.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:734be7551687c00fbd760dc0522ed974f82ad230d4a10f54bf51b80d44a08702", size = 11815274, upload-time = "2026-03-31T06:48:22.695Z" }, + { url = "https://files.pythonhosted.org/packages/00/2f/b622683e99ec3ce00b0854bac9e80868592c5b051733f2cf3a868e5fea26/pandas-3.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:57a07209bebcbcf768d2d13c9b78b852f9a15978dac41b9e6421a81ad4cdd276", size = 10888530, upload-time = "2026-03-31T06:48:25.806Z" }, + { url = "https://files.pythonhosted.org/packages/cb/2b/f8434233fab2bd66a02ec014febe4e5adced20e2693e0e90a07d118ed30e/pandas-3.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:5371b72c2d4d415d08765f32d689217a43227484e81b2305b52076e328f6f482", size = 9455341, upload-time = "2026-03-31T06:48:28.418Z" }, +] + +[[package]] +name = "partial-json-parser" +version = "0.2.1.1.post7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/6d/eed37d7ebc1e0bcd27b831c0cf1fe94881934316187c4b30d23f29ea0bd4/partial_json_parser-0.2.1.1.post7.tar.gz", hash = "sha256:86590e1ba6bcb6739a2dfc17d2323f028cb5884f4c6ce23db376999132c9a922", size = 10296, upload-time = "2025-11-17T07:27:41.202Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/32/658973117bf0fd82a24abbfb94fe73a5e86216e49342985e10acce54775a/partial_json_parser-0.2.1.1.post7-py3-none-any.whl", hash = "sha256:145119e5eabcf80cbb13844a6b50a85c68bf99d376f8ed771e2a3c3b03e653ae", size = 10877, upload-time = "2025-11-17T07:27:40.457Z" }, +] + +[[package]] +name = "peft" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accelerate" }, + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, + { name = "tqdm" }, + { name = "transformers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/48/147b3ea999560b40a34fd78724c7777aa9d18409c2250bdcaf9c4f2db7fc/peft-0.18.1.tar.gz", hash = "sha256:2dd0d6bfce936d1850e48aaddbd250941c5c02fc8ef3237cd8fd5aac35e0bae2", size = 635030, upload-time = "2026-01-09T13:08:01.136Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/14/b4e3f574acf349ae6f61f9c000a77f97a3b315b4bb6ad03791e79ae4a568/peft-0.18.1-py3-none-any.whl", hash = "sha256:0bf06847a3551e3019fc58c440cffc9a6b73e6e2962c95b52e224f77bbdb50f1", size = 556960, upload-time = "2026-01-09T13:07:55.865Z" }, +] + +[[package]] +name = "pillow" +version = "12.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/aa/d0b28e1c811cd4d5f5c2bfe2e022292bd255ae5744a3b9ac7d6c8f72dd75/pillow-12.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a4e8f36e677d3336f35089648c8955c51c6d386a13cf6ee9c189c5f5bd713a9f", size = 5354355, upload-time = "2026-04-01T14:42:15.402Z" }, + { url = "https://files.pythonhosted.org/packages/27/8e/1d5b39b8ae2bd7650d0c7b6abb9602d16043ead9ebbfef4bc4047454da2a/pillow-12.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e589959f10d9824d39b350472b92f0ce3b443c0a3442ebf41c40cb8361c5b97", size = 4695871, upload-time = "2026-04-01T14:42:18.234Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c5/dcb7a6ca6b7d3be41a76958e90018d56c8462166b3ef223150360850c8da/pillow-12.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a52edc8bfff4429aaabdf4d9ee0daadbbf8562364f940937b941f87a4290f5ff", size = 6269734, upload-time = "2026-04-01T14:42:20.608Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f1/aa1bb13b2f4eba914e9637893c73f2af8e48d7d4023b9d3750d4c5eb2d0c/pillow-12.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:975385f4776fafde056abb318f612ef6285b10a1f12b8570f3647ad0d74b48ec", size = 8076080, upload-time = "2026-04-01T14:42:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/a1/2a/8c79d6a53169937784604a8ae8d77e45888c41537f7f6f65ed1f407fe66d/pillow-12.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd9c0c7a0c681a347b3194c500cb1e6ca9cab053ea4d82a5cf45b6b754560136", size = 6382236, upload-time = "2026-04-01T14:42:25.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/42/bbcb6051030e1e421d103ce7a8ecadf837aa2f39b8f82ef1a8d37c3d4ebc/pillow-12.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88d387ff40b3ff7c274947ed3125dedf5262ec6919d83946753b5f3d7c67ea4c", size = 7070220, upload-time = "2026-04-01T14:42:28.68Z" }, + { url = "https://files.pythonhosted.org/packages/3f/e1/c2a7d6dd8cfa6b231227da096fd2d58754bab3603b9d73bf609d3c18b64f/pillow-12.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:51c4167c34b0d8ba05b547a3bb23578d0ba17b80a5593f93bd8ecb123dd336a3", size = 6493124, upload-time = "2026-04-01T14:42:31.579Z" }, + { url = "https://files.pythonhosted.org/packages/5f/41/7c8617da5d32e1d2f026e509484fdb6f3ad7efaef1749a0c1928adbb099e/pillow-12.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34c0d99ecccea270c04882cb3b86e7b57296079c9a4aff88cb3b33563d95afaa", size = 7194324, upload-time = "2026-04-01T14:42:34.615Z" }, + { url = "https://files.pythonhosted.org/packages/2d/de/a777627e19fd6d62f84070ee1521adde5eeda4855b5cf60fe0b149118bca/pillow-12.2.0-cp310-cp310-win32.whl", hash = "sha256:b85f66ae9eb53e860a873b858b789217ba505e5e405a24b85c0464822fe88032", size = 6376363, upload-time = "2026-04-01T14:42:37.19Z" }, + { url = "https://files.pythonhosted.org/packages/e7/34/fc4cb5204896465842767b96d250c08410f01f2f28afc43b257de842eed5/pillow-12.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:673aa32138f3e7531ccdbca7b3901dba9b70940a19ccecc6a37c77d5fdeb05b5", size = 7083523, upload-time = "2026-04-01T14:42:39.62Z" }, + { url = "https://files.pythonhosted.org/packages/2d/a0/32852d36bc7709f14dc3f64f929a275e958ad8c19a6deba9610d458e28b3/pillow-12.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:3e080565d8d7c671db5802eedfb438e5565ffa40115216eabb8cd52d0ecce024", size = 2463318, upload-time = "2026-04-01T14:42:42.063Z" }, + { url = "https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab", size = 5354347, upload-time = "2026-04-01T14:42:44.255Z" }, + { url = "https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65", size = 4695873, upload-time = "2026-04-01T14:42:46.452Z" }, + { url = "https://files.pythonhosted.org/packages/df/21/e3fbdf54408a973c7f7f89a23b2cb97a7ef30c61ab4142af31eee6aebc88/pillow-12.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7", size = 6280168, upload-time = "2026-04-01T14:42:49.228Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f1/00b7278c7dd52b17ad4329153748f87b6756ec195ff786c2bdf12518337d/pillow-12.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e", size = 8088188, upload-time = "2026-04-01T14:42:51.735Z" }, + { url = "https://files.pythonhosted.org/packages/ad/cf/220a5994ef1b10e70e85748b75649d77d506499352be135a4989c957b701/pillow-12.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3997232e10d2920a68d25191392e3a4487d8183039e1c74c2297f00ed1c50705", size = 6394401, upload-time = "2026-04-01T14:42:54.343Z" }, + { url = "https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176", size = 7079655, upload-time = "2026-04-01T14:42:56.954Z" }, + { url = "https://files.pythonhosted.org/packages/6b/3d/45132c57d5fb4b5744567c3817026480ac7fc3ce5d4c47902bc0e7f6f853/pillow-12.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:56a3f9c60a13133a98ecff6197af34d7824de9b7b38c3654861a725c970c197b", size = 6503105, upload-time = "2026-04-01T14:42:59.847Z" }, + { url = "https://files.pythonhosted.org/packages/7d/2e/9df2fc1e82097b1df3dce58dc43286aa01068e918c07574711fcc53e6fb4/pillow-12.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909", size = 7203402, upload-time = "2026-04-01T14:43:02.664Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2e/2941e42858ebb67e50ae741473de81c2984e6eff7b397017623c676e2e8d/pillow-12.2.0-cp311-cp311-win32.whl", hash = "sha256:8c984051042858021a54926eb597d6ee3012393ce9c181814115df4c60b9a808", size = 6378149, upload-time = "2026-04-01T14:43:05.274Z" }, + { url = "https://files.pythonhosted.org/packages/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60", size = 7082626, upload-time = "2026-04-01T14:43:08.557Z" }, + { url = "https://files.pythonhosted.org/packages/c2/88/549194b5d6f1f494b485e493edc6693c0a16f4ada488e5bd974ed1f42fad/pillow-12.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:9a8a34cc89c67a65ea7437ce257cea81a9dad65b29805f3ecee8c8fe8ff25ffe", size = 2463531, upload-time = "2026-04-01T14:43:10.743Z" }, + { url = "https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5", size = 5308279, upload-time = "2026-04-01T14:43:13.246Z" }, + { url = "https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3f40b3c5a968281fd507d519e444c35f0ff171237f4fdde090dd60699458421", size = 4695490, upload-time = "2026-04-01T14:43:15.584Z" }, + { url = "https://files.pythonhosted.org/packages/de/af/4e8e6869cbed569d43c416fad3dc4ecb944cb5d9492defaed89ddd6fe871/pillow-12.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:03e7e372d5240cc23e9f07deca4d775c0817bffc641b01e9c3af208dbd300987", size = 6284462, upload-time = "2026-04-01T14:43:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9e/c05e19657fd57841e476be1ab46c4d501bffbadbafdc31a6d665f8b737b6/pillow-12.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b86024e52a1b269467a802258c25521e6d742349d760728092e1bc2d135b4d76", size = 8094744, upload-time = "2026-04-01T14:43:20.716Z" }, + { url = "https://files.pythonhosted.org/packages/2b/54/1789c455ed10176066b6e7e6da1b01e50e36f94ba584dc68d9eebfe9156d/pillow-12.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7371b48c4fa448d20d2714c9a1f775a81155050d383333e0a6c15b1123dda005", size = 6398371, upload-time = "2026-04-01T14:43:23.443Z" }, + { url = "https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780", size = 7087215, upload-time = "2026-04-01T14:43:26.758Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f8/2f6825e441d5b1959d2ca5adec984210f1ec086435b0ed5f52c19b3b8a6e/pillow-12.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:01afa7cf67f74f09523699b4e88c73fb55c13346d212a59a2db1f86b0a63e8c5", size = 6509783, upload-time = "2026-04-01T14:43:29.56Z" }, + { url = "https://files.pythonhosted.org/packages/67/f9/029a27095ad20f854f9dba026b3ea6428548316e057e6fc3545409e86651/pillow-12.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc3d34d4a8fbec3e88a79b92e5465e0f9b842b628675850d860b8bd300b159f5", size = 7212112, upload-time = "2026-04-01T14:43:32.091Z" }, + { url = "https://files.pythonhosted.org/packages/be/42/025cfe05d1be22dbfdb4f264fe9de1ccda83f66e4fc3aac94748e784af04/pillow-12.2.0-cp312-cp312-win32.whl", hash = "sha256:58f62cc0f00fd29e64b29f4fd923ffdb3859c9f9e6105bfc37ba1d08994e8940", size = 6378489, upload-time = "2026-04-01T14:43:34.601Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f84204dee22a783350679a0333981df803dac21a0190d706a50475e361c93f5", size = 7084129, upload-time = "2026-04-01T14:43:37.213Z" }, + { url = "https://files.pythonhosted.org/packages/10/e1/542a474affab20fd4a0f1836cb234e8493519da6b76899e30bcc5d990b8b/pillow-12.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:af73337013e0b3b46f175e79492d96845b16126ddf79c438d7ea7ff27783a414", size = 2463612, upload-time = "2026-04-01T14:43:39.421Z" }, + { url = "https://files.pythonhosted.org/packages/4a/01/53d10cf0dbad820a8db274d259a37ba50b88b24768ddccec07355382d5ad/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c", size = 4100837, upload-time = "2026-04-01T14:43:41.506Z" }, + { url = "https://files.pythonhosted.org/packages/0f/98/f3a6657ecb698c937f6c76ee564882945f29b79bad496abcba0e84659ec5/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2", size = 4176528, upload-time = "2026-04-01T14:43:43.773Z" }, + { url = "https://files.pythonhosted.org/packages/69/bc/8986948f05e3ea490b8442ea1c1d4d990b24a7e43d8a51b2c7d8b1dced36/pillow-12.2.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c", size = 3640401, upload-time = "2026-04-01T14:43:45.87Z" }, + { url = "https://files.pythonhosted.org/packages/34/46/6c717baadcd62bc8ed51d238d521ab651eaa74838291bda1f86fe1f864c9/pillow-12.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795", size = 5308094, upload-time = "2026-04-01T14:43:48.438Z" }, + { url = "https://files.pythonhosted.org/packages/71/43/905a14a8b17fdb1ccb58d282454490662d2cb89a6bfec26af6d3520da5ec/pillow-12.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f", size = 4695402, upload-time = "2026-04-01T14:43:51.292Z" }, + { url = "https://files.pythonhosted.org/packages/73/dd/42107efcb777b16fa0393317eac58f5b5cf30e8392e266e76e51cff28c3d/pillow-12.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed", size = 6280005, upload-time = "2026-04-01T14:43:54.242Z" }, + { url = "https://files.pythonhosted.org/packages/a8/68/b93e09e5e8549019e61acf49f65b1a8530765a7f812c77a7461bca7e4494/pillow-12.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9", size = 8090669, upload-time = "2026-04-01T14:43:57.335Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/3ccb54ce8ec4ddd1accd2d89004308b7b0b21c4ac3d20fa70af4760a4330/pillow-12.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed", size = 6395194, upload-time = "2026-04-01T14:43:59.864Z" }, + { url = "https://files.pythonhosted.org/packages/67/ee/21d4e8536afd1a328f01b359b4d3997b291ffd35a237c877b331c1c3b71c/pillow-12.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3", size = 7082423, upload-time = "2026-04-01T14:44:02.74Z" }, + { url = "https://files.pythonhosted.org/packages/78/5f/e9f86ab0146464e8c133fe85df987ed9e77e08b29d8d35f9f9f4d6f917ba/pillow-12.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9", size = 6505667, upload-time = "2026-04-01T14:44:05.381Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1e/409007f56a2fdce61584fd3acbc2bbc259857d555196cedcadc68c015c82/pillow-12.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795", size = 7208580, upload-time = "2026-04-01T14:44:08.39Z" }, + { url = "https://files.pythonhosted.org/packages/23/c4/7349421080b12fb35414607b8871e9534546c128a11965fd4a7002ccfbee/pillow-12.2.0-cp313-cp313-win32.whl", hash = "sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e", size = 6375896, upload-time = "2026-04-01T14:44:11.197Z" }, + { url = "https://files.pythonhosted.org/packages/3f/82/8a3739a5e470b3c6cbb1d21d315800d8e16bff503d1f16b03a4ec3212786/pillow-12.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b", size = 7081266, upload-time = "2026-04-01T14:44:13.947Z" }, + { url = "https://files.pythonhosted.org/packages/c3/25/f968f618a062574294592f668218f8af564830ccebdd1fa6200f598e65c5/pillow-12.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06", size = 2463508, upload-time = "2026-04-01T14:44:16.312Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a4/b342930964e3cb4dce5038ae34b0eab4653334995336cd486c5a8c25a00c/pillow-12.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b", size = 5309927, upload-time = "2026-04-01T14:44:18.89Z" }, + { url = "https://files.pythonhosted.org/packages/9f/de/23198e0a65a9cf06123f5435a5d95cea62a635697f8f03d134d3f3a96151/pillow-12.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f", size = 4698624, upload-time = "2026-04-01T14:44:21.115Z" }, + { url = "https://files.pythonhosted.org/packages/01/a6/1265e977f17d93ea37aa28aa81bad4fa597933879fac2520d24e021c8da3/pillow-12.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612", size = 6321252, upload-time = "2026-04-01T14:44:23.663Z" }, + { url = "https://files.pythonhosted.org/packages/3c/83/5982eb4a285967baa70340320be9f88e57665a387e3a53a7f0db8231a0cd/pillow-12.2.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c", size = 8126550, upload-time = "2026-04-01T14:44:26.772Z" }, + { url = "https://files.pythonhosted.org/packages/4e/48/6ffc514adce69f6050d0753b1a18fd920fce8cac87620d5a31231b04bfc5/pillow-12.2.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea", size = 6433114, upload-time = "2026-04-01T14:44:29.615Z" }, + { url = "https://files.pythonhosted.org/packages/36/a3/f9a77144231fb8d40ee27107b4463e205fa4677e2ca2548e14da5cf18dce/pillow-12.2.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4", size = 7115667, upload-time = "2026-04-01T14:44:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fc/ac4ee3041e7d5a565e1c4fd72a113f03b6394cc72ab7089d27608f8aaccb/pillow-12.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4", size = 6538966, upload-time = "2026-04-01T14:44:35.252Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a8/27fb307055087f3668f6d0a8ccb636e7431d56ed0750e07a60547b1e083e/pillow-12.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea", size = 7238241, upload-time = "2026-04-01T14:44:37.875Z" }, + { url = "https://files.pythonhosted.org/packages/ad/4b/926ab182c07fccae9fcb120043464e1ff1564775ec8864f21a0ebce6ac25/pillow-12.2.0-cp313-cp313t-win32.whl", hash = "sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24", size = 6379592, upload-time = "2026-04-01T14:44:40.336Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c4/f9e476451a098181b30050cc4c9a3556b64c02cf6497ea421ac047e89e4b/pillow-12.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98", size = 7085542, upload-time = "2026-04-01T14:44:43.251Z" }, + { url = "https://files.pythonhosted.org/packages/00/a4/285f12aeacbe2d6dc36c407dfbbe9e96d4a80b0fb710a337f6d2ad978c75/pillow-12.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453", size = 2465765, upload-time = "2026-04-01T14:44:45.996Z" }, + { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848, upload-time = "2026-04-01T14:44:48.48Z" }, + { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515, upload-time = "2026-04-01T14:44:51.353Z" }, + { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159, upload-time = "2026-04-01T14:44:53.588Z" }, + { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185, upload-time = "2026-04-01T14:44:56.039Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386, upload-time = "2026-04-01T14:44:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384, upload-time = "2026-04-01T14:45:01.5Z" }, + { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599, upload-time = "2026-04-01T14:45:04.5Z" }, + { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021, upload-time = "2026-04-01T14:45:07.117Z" }, + { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360, upload-time = "2026-04-01T14:45:09.763Z" }, + { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628, upload-time = "2026-04-01T14:45:12.378Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321, upload-time = "2026-04-01T14:45:15.122Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723, upload-time = "2026-04-01T14:45:17.797Z" }, + { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400, upload-time = "2026-04-01T14:45:20.529Z" }, + { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835, upload-time = "2026-04-01T14:45:23.162Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225, upload-time = "2026-04-01T14:45:25.637Z" }, + { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541, upload-time = "2026-04-01T14:45:28.355Z" }, + { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251, upload-time = "2026-04-01T14:45:30.924Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807, upload-time = "2026-04-01T14:45:33.908Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935, upload-time = "2026-04-01T14:45:36.623Z" }, + { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720, upload-time = "2026-04-01T14:45:39.258Z" }, + { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498, upload-time = "2026-04-01T14:45:41.879Z" }, + { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413, upload-time = "2026-04-01T14:45:44.705Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084, upload-time = "2026-04-01T14:45:47.568Z" }, + { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152, upload-time = "2026-04-01T14:45:50.032Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" }, + { url = "https://files.pythonhosted.org/packages/4e/b7/2437044fb910f499610356d1352e3423753c98e34f915252aafecc64889f/pillow-12.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f", size = 5273969, upload-time = "2026-04-01T14:45:55.538Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f4/8316e31de11b780f4ac08ef3654a75555e624a98db1056ecb2122d008d5a/pillow-12.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d", size = 4659674, upload-time = "2026-04-01T14:45:58.093Z" }, + { url = "https://files.pythonhosted.org/packages/d4/37/664fca7201f8bb2aa1d20e2c3d5564a62e6ae5111741966c8319ca802361/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f", size = 5288479, upload-time = "2026-04-01T14:46:01.141Z" }, + { url = "https://files.pythonhosted.org/packages/49/62/5b0ed78fce87346be7a5cfcfaaad91f6a1f98c26f86bdbafa2066c647ef6/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e", size = 7032230, upload-time = "2026-04-01T14:46:03.874Z" }, + { url = "https://files.pythonhosted.org/packages/c3/28/ec0fc38107fc32536908034e990c47914c57cd7c5a3ece4d8d8f7ffd7e27/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6c9fa44005fa37a91ebfc95d081e8079757d2e904b27103f4f5fa6f0bf78c0", size = 5355404, upload-time = "2026-04-01T14:46:06.33Z" }, + { url = "https://files.pythonhosted.org/packages/5e/8b/51b0eddcfa2180d60e41f06bd6d0a62202b20b59c68f5a132e615b75aecf/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1", size = 6002215, upload-time = "2026-04-01T14:46:08.83Z" }, + { url = "https://files.pythonhosted.org/packages/bc/60/5382c03e1970de634027cee8e1b7d39776b778b81812aaf45b694dfe9e28/pillow-12.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e", size = 7080946, upload-time = "2026-04-01T14:46:11.734Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "prometheus-client" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/fb/d9aa83ffe43ce1f19e557c0971d04b90561b0cfd50762aafb01968285553/prometheus_client-0.25.0.tar.gz", hash = "sha256:5e373b75c31afb3c86f1a52fa1ad470c9aace18082d39ec0d2f918d11cc9ba28", size = 86035, upload-time = "2026-04-09T19:53:42.359Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/9b/d4b1e644385499c8346fa9b622a3f030dce14cd6ef8a1871c221a17a67e7/prometheus_client-0.25.0-py3-none-any.whl", hash = "sha256:d5aec89e349a6ec230805d0df882f3807f74fd6c1a2fa86864e3c2279059fed1", size = 64154, upload-time = "2026-04-09T19:53:41.324Z" }, +] + +[[package]] +name = "prometheus-fastapi-instrumentator" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "prometheus-client" }, + { name = "starlette" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/6d/24d53033cf93826aa7857699a4450c1c67e5b9c710e925b1ed2b320c04df/prometheus_fastapi_instrumentator-7.1.0.tar.gz", hash = "sha256:be7cd61eeea4e5912aeccb4261c6631b3f227d8924542d79eaf5af3f439cbe5e", size = 20220, upload-time = "2025-03-19T19:35:05.351Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/72/0824c18f3bc75810f55dacc2dd933f6ec829771180245ae3cc976195dec0/prometheus_fastapi_instrumentator-7.1.0-py3-none-any.whl", hash = "sha256:978130f3c0bb7b8ebcc90d35516a6fe13e02d2eb358c8f83887cdef7020c31e9", size = 19296, upload-time = "2025-03-19T19:35:04.323Z" }, +] + +[[package]] +name = "propcache" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/0e/934b541323035566a9af292dba85a195f7b78179114f2c6ebb24551118a9/propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db", size = 79534, upload-time = "2025-10-08T19:46:02.083Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6b/db0d03d96726d995dc7171286c6ba9d8d14251f37433890f88368951a44e/propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8", size = 45526, upload-time = "2025-10-08T19:46:03.884Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c3/82728404aea669e1600f304f2609cde9e665c18df5a11cdd57ed73c1dceb/propcache-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925", size = 47263, upload-time = "2025-10-08T19:46:05.405Z" }, + { url = "https://files.pythonhosted.org/packages/df/1b/39313ddad2bf9187a1432654c38249bab4562ef535ef07f5eb6eb04d0b1b/propcache-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21", size = 201012, upload-time = "2025-10-08T19:46:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/5b/01/f1d0b57d136f294a142acf97f4ed58c8e5b974c21e543000968357115011/propcache-0.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5", size = 209491, upload-time = "2025-10-08T19:46:08.909Z" }, + { url = "https://files.pythonhosted.org/packages/a1/c8/038d909c61c5bb039070b3fb02ad5cccdb1dde0d714792e251cdb17c9c05/propcache-0.4.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db", size = 215319, upload-time = "2025-10-08T19:46:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/08/57/8c87e93142b2c1fa2408e45695205a7ba05fb5db458c0bf5c06ba0e09ea6/propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7", size = 196856, upload-time = "2025-10-08T19:46:12.003Z" }, + { url = "https://files.pythonhosted.org/packages/42/df/5615fec76aa561987a534759b3686008a288e73107faa49a8ae5795a9f7a/propcache-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4", size = 193241, upload-time = "2025-10-08T19:46:13.495Z" }, + { url = "https://files.pythonhosted.org/packages/d5/21/62949eb3a7a54afe8327011c90aca7e03547787a88fb8bd9726806482fea/propcache-0.4.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60", size = 190552, upload-time = "2025-10-08T19:46:14.938Z" }, + { url = "https://files.pythonhosted.org/packages/30/ee/ab4d727dd70806e5b4de96a798ae7ac6e4d42516f030ee60522474b6b332/propcache-0.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f", size = 200113, upload-time = "2025-10-08T19:46:16.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0b/38b46208e6711b016aa8966a3ac793eee0d05c7159d8342aa27fc0bc365e/propcache-0.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900", size = 200778, upload-time = "2025-10-08T19:46:18.023Z" }, + { url = "https://files.pythonhosted.org/packages/cf/81/5abec54355ed344476bee711e9f04815d4b00a311ab0535599204eecc257/propcache-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c", size = 193047, upload-time = "2025-10-08T19:46:19.449Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b6/1f237c04e32063cb034acd5f6ef34ef3a394f75502e72703545631ab1ef6/propcache-0.4.1-cp310-cp310-win32.whl", hash = "sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb", size = 38093, upload-time = "2025-10-08T19:46:20.643Z" }, + { url = "https://files.pythonhosted.org/packages/a6/67/354aac4e0603a15f76439caf0427781bcd6797f370377f75a642133bc954/propcache-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37", size = 41638, upload-time = "2025-10-08T19:46:21.935Z" }, + { url = "https://files.pythonhosted.org/packages/e0/e1/74e55b9fd1a4c209ff1a9a824bf6c8b3d1fc5a1ac3eabe23462637466785/propcache-0.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581", size = 38229, upload-time = "2025-10-08T19:46:23.368Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d4/4e2c9aaf7ac2242b9358f98dccd8f90f2605402f5afeff6c578682c2c491/propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf", size = 80208, upload-time = "2025-10-08T19:46:24.597Z" }, + { url = "https://files.pythonhosted.org/packages/c2/21/d7b68e911f9c8e18e4ae43bdbc1e1e9bbd971f8866eb81608947b6f585ff/propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5", size = 45777, upload-time = "2025-10-08T19:46:25.733Z" }, + { url = "https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e", size = 47647, upload-time = "2025-10-08T19:46:27.304Z" }, + { url = "https://files.pythonhosted.org/packages/58/1a/3c62c127a8466c9c843bccb503d40a273e5cc69838805f322e2826509e0d/propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566", size = 214929, upload-time = "2025-10-08T19:46:28.62Z" }, + { url = "https://files.pythonhosted.org/packages/56/b9/8fa98f850960b367c4b8fe0592e7fc341daa7a9462e925228f10a60cf74f/propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165", size = 221778, upload-time = "2025-10-08T19:46:30.358Z" }, + { url = "https://files.pythonhosted.org/packages/46/a6/0ab4f660eb59649d14b3d3d65c439421cf2f87fe5dd68591cbe3c1e78a89/propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc", size = 228144, upload-time = "2025-10-08T19:46:32.607Z" }, + { url = "https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48", size = 210030, upload-time = "2025-10-08T19:46:33.969Z" }, + { url = "https://files.pythonhosted.org/packages/40/e2/27e6feebb5f6b8408fa29f5efbb765cd54c153ac77314d27e457a3e993b7/propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570", size = 208252, upload-time = "2025-10-08T19:46:35.309Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f8/91c27b22ccda1dbc7967f921c42825564fa5336a01ecd72eb78a9f4f53c2/propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85", size = 202064, upload-time = "2025-10-08T19:46:36.993Z" }, + { url = "https://files.pythonhosted.org/packages/f2/26/7f00bd6bd1adba5aafe5f4a66390f243acab58eab24ff1a08bebb2ef9d40/propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e", size = 212429, upload-time = "2025-10-08T19:46:38.398Z" }, + { url = "https://files.pythonhosted.org/packages/84/89/fd108ba7815c1117ddca79c228f3f8a15fc82a73bca8b142eb5de13b2785/propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757", size = 216727, upload-time = "2025-10-08T19:46:39.732Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/3ec3f7e3173e73f1d600495d8b545b53802cbf35506e5732dd8578db3724/propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f", size = 205097, upload-time = "2025-10-08T19:46:41.025Z" }, + { url = "https://files.pythonhosted.org/packages/61/b0/b2631c19793f869d35f47d5a3a56fb19e9160d3c119f15ac7344fc3ccae7/propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1", size = 38084, upload-time = "2025-10-08T19:46:42.693Z" }, + { url = "https://files.pythonhosted.org/packages/f4/78/6cce448e2098e9f3bfc91bb877f06aa24b6ccace872e39c53b2f707c4648/propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6", size = 41637, upload-time = "2025-10-08T19:46:43.778Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e9/754f180cccd7f51a39913782c74717c581b9cc8177ad0e949f4d51812383/propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239", size = 38064, upload-time = "2025-10-08T19:46:44.872Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" }, + { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037, upload-time = "2025-10-08T19:46:47.23Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324, upload-time = "2025-10-08T19:46:48.384Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505, upload-time = "2025-10-08T19:46:50.055Z" }, + { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242, upload-time = "2025-10-08T19:46:51.815Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474, upload-time = "2025-10-08T19:46:53.208Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575, upload-time = "2025-10-08T19:46:54.511Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736, upload-time = "2025-10-08T19:46:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019, upload-time = "2025-10-08T19:46:57.595Z" }, + { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376, upload-time = "2025-10-08T19:46:59.067Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988, upload-time = "2025-10-08T19:47:00.544Z" }, + { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615, upload-time = "2025-10-08T19:47:01.968Z" }, + { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066, upload-time = "2025-10-08T19:47:03.503Z" }, + { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655, upload-time = "2025-10-08T19:47:04.973Z" }, + { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789, upload-time = "2025-10-08T19:47:06.077Z" }, + { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750, upload-time = "2025-10-08T19:47:07.648Z" }, + { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780, upload-time = "2025-10-08T19:47:08.851Z" }, + { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308, upload-time = "2025-10-08T19:47:09.982Z" }, + { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0c/cd762dd011a9287389a6a3eb43aa30207bde253610cca06824aeabfe9653/propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af", size = 211215, upload-time = "2025-10-08T19:47:13.146Z" }, + { url = "https://files.pythonhosted.org/packages/30/3e/49861e90233ba36890ae0ca4c660e95df565b2cd15d4a68556ab5865974e/propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c", size = 218112, upload-time = "2025-10-08T19:47:14.913Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f", size = 204442, upload-time = "2025-10-08T19:47:16.277Z" }, + { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ec/d8a7cd406ee1ddb705db2139f8a10a8a427100347bd698e7014351c7af09/propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24", size = 196920, upload-time = "2025-10-08T19:47:19.355Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6c/f38ab64af3764f431e359f8baf9e0a21013e24329e8b85d2da32e8ed07ca/propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa", size = 203748, upload-time = "2025-10-08T19:47:21.338Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e3/fa846bd70f6534d647886621388f0a265254d30e3ce47e5c8e6e27dbf153/propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61", size = 205877, upload-time = "2025-10-08T19:47:23.059Z" }, + { url = "https://files.pythonhosted.org/packages/e2/39/8163fc6f3133fea7b5f2827e8eba2029a0277ab2c5beee6c1db7b10fc23d/propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66", size = 199437, upload-time = "2025-10-08T19:47:24.445Z" }, + { url = "https://files.pythonhosted.org/packages/93/89/caa9089970ca49c7c01662bd0eeedfe85494e863e8043565aeb6472ce8fe/propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81", size = 37586, upload-time = "2025-10-08T19:47:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e", size = 40790, upload-time = "2025-10-08T19:47:26.847Z" }, + { url = "https://files.pythonhosted.org/packages/59/1b/e71ae98235f8e2ba5004d8cb19765a74877abf189bc53fc0c80d799e56c3/propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1", size = 37158, upload-time = "2025-10-08T19:47:27.961Z" }, + { url = "https://files.pythonhosted.org/packages/83/ce/a31bbdfc24ee0dcbba458c8175ed26089cf109a55bbe7b7640ed2470cfe9/propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b", size = 81451, upload-time = "2025-10-08T19:47:29.445Z" }, + { url = "https://files.pythonhosted.org/packages/25/9c/442a45a470a68456e710d96cacd3573ef26a1d0a60067e6a7d5e655621ed/propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566", size = 46374, upload-time = "2025-10-08T19:47:30.579Z" }, + { url = "https://files.pythonhosted.org/packages/f4/bf/b1d5e21dbc3b2e889ea4327044fb16312a736d97640fb8b6aa3f9c7b3b65/propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835", size = 48396, upload-time = "2025-10-08T19:47:31.79Z" }, + { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c1/86f846827fb969c4b78b0af79bba1d1ea2156492e1b83dea8b8a6ae27395/propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859", size = 273856, upload-time = "2025-10-08T19:47:34.906Z" }, + { url = "https://files.pythonhosted.org/packages/36/1d/fc272a63c8d3bbad6878c336c7a7dea15e8f2d23a544bda43205dfa83ada/propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b", size = 280420, upload-time = "2025-10-08T19:47:36.338Z" }, + { url = "https://files.pythonhosted.org/packages/07/0c/01f2219d39f7e53d52e5173bcb09c976609ba30209912a0680adfb8c593a/propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0", size = 263254, upload-time = "2025-10-08T19:47:37.692Z" }, + { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" }, + { url = "https://files.pythonhosted.org/packages/7a/71/1f9e22eb8b8316701c2a19fa1f388c8a3185082607da8e406a803c9b954e/propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393", size = 247873, upload-time = "2025-10-08T19:47:41.084Z" }, + { url = "https://files.pythonhosted.org/packages/4a/65/3d4b61f36af2b4eddba9def857959f1016a51066b4f1ce348e0cf7881f58/propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874", size = 262739, upload-time = "2025-10-08T19:47:42.51Z" }, + { url = "https://files.pythonhosted.org/packages/2a/42/26746ab087faa77c1c68079b228810436ccd9a5ce9ac85e2b7307195fd06/propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7", size = 263514, upload-time = "2025-10-08T19:47:43.927Z" }, + { url = "https://files.pythonhosted.org/packages/94/13/630690fe201f5502d2403dd3cfd451ed8858fe3c738ee88d095ad2ff407b/propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1", size = 257781, upload-time = "2025-10-08T19:47:45.448Z" }, + { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" }, + { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" }, + { url = "https://files.pythonhosted.org/packages/8e/5c/bca52d654a896f831b8256683457ceddd490ec18d9ec50e97dfd8fc726a8/propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12", size = 78152, upload-time = "2025-10-08T19:47:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/65/9b/03b04e7d82a5f54fb16113d839f5ea1ede58a61e90edf515f6577c66fa8f/propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c", size = 44869, upload-time = "2025-10-08T19:47:52.594Z" }, + { url = "https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded", size = 46596, upload-time = "2025-10-08T19:47:54.073Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" }, + { url = "https://files.pythonhosted.org/packages/df/f6/c5fa1357cc9748510ee55f37173eb31bfde6d94e98ccd9e6f033f2fc06e1/propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4", size = 211490, upload-time = "2025-10-08T19:47:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/80/1e/e5889652a7c4a3846683401a48f0f2e5083ce0ec1a8a5221d8058fbd1adf/propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44", size = 215371, upload-time = "2025-10-08T19:47:59.317Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d", size = 201424, upload-time = "2025-10-08T19:48:00.67Z" }, + { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" }, + { url = "https://files.pythonhosted.org/packages/dc/89/ce24f3dc182630b4e07aa6d15f0ff4b14ed4b9955fae95a0b54c58d66c05/propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e", size = 193130, upload-time = "2025-10-08T19:48:04.499Z" }, + { url = "https://files.pythonhosted.org/packages/a9/24/ef0d5fd1a811fb5c609278d0209c9f10c35f20581fcc16f818da959fc5b4/propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f", size = 202625, upload-time = "2025-10-08T19:48:06.213Z" }, + { url = "https://files.pythonhosted.org/packages/f5/02/98ec20ff5546f68d673df2f7a69e8c0d076b5abd05ca882dc7ee3a83653d/propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49", size = 204209, upload-time = "2025-10-08T19:48:08.432Z" }, + { url = "https://files.pythonhosted.org/packages/a0/87/492694f76759b15f0467a2a93ab68d32859672b646aa8a04ce4864e7932d/propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144", size = 197797, upload-time = "2025-10-08T19:48:09.968Z" }, + { url = "https://files.pythonhosted.org/packages/ee/36/66367de3575db1d2d3f3d177432bd14ee577a39d3f5d1b3d5df8afe3b6e2/propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f", size = 38140, upload-time = "2025-10-08T19:48:11.232Z" }, + { url = "https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153", size = 41257, upload-time = "2025-10-08T19:48:12.707Z" }, + { url = "https://files.pythonhosted.org/packages/34/5e/63bd5896c3fec12edcbd6f12508d4890d23c265df28c74b175e1ef9f4f3b/propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992", size = 38097, upload-time = "2025-10-08T19:48:13.923Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/9ff785d787ccf9bbb3f3106f79884a130951436f58392000231b4c737c80/propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f", size = 81455, upload-time = "2025-10-08T19:48:15.16Z" }, + { url = "https://files.pythonhosted.org/packages/90/85/2431c10c8e7ddb1445c1f7c4b54d886e8ad20e3c6307e7218f05922cad67/propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393", size = 46372, upload-time = "2025-10-08T19:48:16.424Z" }, + { url = "https://files.pythonhosted.org/packages/01/20/b0972d902472da9bcb683fa595099911f4d2e86e5683bcc45de60dd05dc3/propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0", size = 48411, upload-time = "2025-10-08T19:48:17.577Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" }, + { url = "https://files.pythonhosted.org/packages/20/67/89800c8352489b21a8047c773067644e3897f02ecbbd610f4d46b7f08612/propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be", size = 273557, upload-time = "2025-10-08T19:48:20.762Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a1/b52b055c766a54ce6d9c16d9aca0cad8059acd9637cdf8aa0222f4a026ef/propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc", size = 280015, upload-time = "2025-10-08T19:48:22.592Z" }, + { url = "https://files.pythonhosted.org/packages/48/c8/33cee30bd890672c63743049f3c9e4be087e6780906bfc3ec58528be59c1/propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a", size = 262880, upload-time = "2025-10-08T19:48:23.947Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" }, + { url = "https://files.pythonhosted.org/packages/cf/12/96e4664c82ca2f31e1c8dff86afb867348979eb78d3cb8546a680287a1e9/propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726", size = 247641, upload-time = "2025-10-08T19:48:27.207Z" }, + { url = "https://files.pythonhosted.org/packages/18/ed/e7a9cfca28133386ba52278136d42209d3125db08d0a6395f0cba0c0285c/propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367", size = 262510, upload-time = "2025-10-08T19:48:28.65Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/16d8bf65e8845dd62b4e2b57444ab81f07f40caa5652b8969b87ddcf2ef6/propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36", size = 263161, upload-time = "2025-10-08T19:48:30.133Z" }, + { url = "https://files.pythonhosted.org/packages/e7/70/c99e9edb5d91d5ad8a49fa3c1e8285ba64f1476782fed10ab251ff413ba1/propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455", size = 257393, upload-time = "2025-10-08T19:48:31.567Z" }, + { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" }, + { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" }, + { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, +] + +[[package]] +name = "protobuf" +version = "6.33.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/70/e908e9c5e52ef7c3a6c7902c9dfbb34c7e29c25d2f81ade3856445fd5c94/protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135", size = 444531, upload-time = "2026-03-18T19:05:00.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/9f/2f509339e89cfa6f6a4c4ff50438db9ca488dec341f7e454adad60150b00/protobuf-6.33.6-cp310-abi3-win32.whl", hash = "sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3", size = 425739, upload-time = "2026-03-18T19:04:48.373Z" }, + { url = "https://files.pythonhosted.org/packages/76/5d/683efcd4798e0030c1bab27374fd13a89f7c2515fb1f3123efdfaa5eab57/protobuf-6.33.6-cp310-abi3-win_amd64.whl", hash = "sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326", size = 437089, upload-time = "2026-03-18T19:04:50.381Z" }, + { url = "https://files.pythonhosted.org/packages/5c/01/a3c3ed5cd186f39e7880f8303cc51385a198a81469d53d0fdecf1f64d929/protobuf-6.33.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a", size = 427737, upload-time = "2026-03-18T19:04:51.866Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/b3c01fdec7d2f627b3a6884243ba328c1217ed2d978def5c12dc50d328a3/protobuf-6.33.6-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2", size = 324610, upload-time = "2026-03-18T19:04:53.096Z" }, + { url = "https://files.pythonhosted.org/packages/9b/ca/25afc144934014700c52e05103c2421997482d561f3101ff352e1292fb81/protobuf-6.33.6-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3", size = 339381, upload-time = "2026-03-18T19:04:54.616Z" }, + { url = "https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593", size = 323436, upload-time = "2026-03-18T19:04:55.768Z" }, + { url = "https://files.pythonhosted.org/packages/c4/72/02445137af02769918a93807b2b7890047c32bfb9f90371cbc12688819eb/protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901", size = 170656, upload-time = "2026-03-18T19:04:59.826Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "py-cpuinfo" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716, upload-time = "2022-10-25T20:38:06.303Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, +] + +[[package]] +name = "pyarrow" +version = "23.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/88/22/134986a4cc224d593c1afde5494d18ff629393d74cc2eddb176669f234a4/pyarrow-23.0.1.tar.gz", hash = "sha256:b8c5873e33440b2bc2f4a79d2b47017a89c5a24116c055625e6f2ee50523f019", size = 1167336, upload-time = "2026-02-16T10:14:12.39Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/a8/24e5dc6855f50a62936ceb004e6e9645e4219a8065f304145d7fb8a79d5d/pyarrow-23.0.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:3fab8f82571844eb3c460f90a75583801d14ca0cc32b1acc8c361650e006fd56", size = 34307390, upload-time = "2026-02-16T10:08:08.654Z" }, + { url = "https://files.pythonhosted.org/packages/bc/8e/4be5617b4aaae0287f621ad31c6036e5f63118cfca0dc57d42121ff49b51/pyarrow-23.0.1-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:3f91c038b95f71ddfc865f11d5876c42f343b4495535bd262c7b321b0b94507c", size = 35853761, upload-time = "2026-02-16T10:08:17.811Z" }, + { url = "https://files.pythonhosted.org/packages/2e/08/3e56a18819462210432ae37d10f5c8eed3828be1d6c751b6e6a2e93c286a/pyarrow-23.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:d0744403adabef53c985a7f8a082b502a368510c40d184df349a0a8754533258", size = 44493116, upload-time = "2026-02-16T10:08:25.792Z" }, + { url = "https://files.pythonhosted.org/packages/f8/82/c40b68001dbec8a3faa4c08cd8c200798ac732d2854537c5449dc859f55a/pyarrow-23.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c33b5bf406284fd0bba436ed6f6c3ebe8e311722b441d89397c54f871c6863a2", size = 47564532, upload-time = "2026-02-16T10:08:34.27Z" }, + { url = "https://files.pythonhosted.org/packages/20/bc/73f611989116b6f53347581b02177f9f620efdf3cd3f405d0e83cdf53a83/pyarrow-23.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ddf743e82f69dcd6dbbcb63628895d7161e04e56794ef80550ac6f3315eeb1d5", size = 48183685, upload-time = "2026-02-16T10:08:42.889Z" }, + { url = "https://files.pythonhosted.org/packages/b0/cc/6c6b3ecdae2a8c3aced99956187e8302fc954cc2cca2a37cf2111dad16ce/pyarrow-23.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e052a211c5ac9848ae15d5ec875ed0943c0221e2fcfe69eee80b604b4e703222", size = 50605582, upload-time = "2026-02-16T10:08:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/8d/94/d359e708672878d7638a04a0448edf7c707f9e5606cee11e15aaa5c7535a/pyarrow-23.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5abde149bb3ce524782d838eb67ac095cd3fd6090eba051130589793f1a7f76d", size = 27521148, upload-time = "2026-02-16T10:08:58.077Z" }, + { url = "https://files.pythonhosted.org/packages/b0/41/8e6b6ef7e225d4ceead8459427a52afdc23379768f54dd3566014d7618c1/pyarrow-23.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:6f0147ee9e0386f519c952cc670eb4a8b05caa594eeffe01af0e25f699e4e9bb", size = 34302230, upload-time = "2026-02-16T10:09:03.859Z" }, + { url = "https://files.pythonhosted.org/packages/bf/4a/1472c00392f521fea03ae93408bf445cc7bfa1ab81683faf9bc188e36629/pyarrow-23.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:0ae6e17c828455b6265d590100c295193f93cc5675eb0af59e49dbd00d2de350", size = 35850050, upload-time = "2026-02-16T10:09:11.877Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b2/bd1f2f05ded56af7f54d702c8364c9c43cd6abb91b0e9933f3d77b4f4132/pyarrow-23.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:fed7020203e9ef273360b9e45be52a2a47d3103caf156a30ace5247ffb51bdbd", size = 44491918, upload-time = "2026-02-16T10:09:18.144Z" }, + { url = "https://files.pythonhosted.org/packages/0b/62/96459ef5b67957eac38a90f541d1c28833d1b367f014a482cb63f3b7cd2d/pyarrow-23.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:26d50dee49d741ac0e82185033488d28d35be4d763ae6f321f97d1140eb7a0e9", size = 47562811, upload-time = "2026-02-16T10:09:25.792Z" }, + { url = "https://files.pythonhosted.org/packages/7d/94/1170e235add1f5f45a954e26cd0e906e7e74e23392dcb560de471f7366ec/pyarrow-23.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3c30143b17161310f151f4a2bcfe41b5ff744238c1039338779424e38579d701", size = 48183766, upload-time = "2026-02-16T10:09:34.645Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2d/39a42af4570377b99774cdb47f63ee6c7da7616bd55b3d5001aa18edfe4f/pyarrow-23.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db2190fa79c80a23fdd29fef4b8992893f024ae7c17d2f5f4db7171fa30c2c78", size = 50607669, upload-time = "2026-02-16T10:09:44.153Z" }, + { url = "https://files.pythonhosted.org/packages/00/ca/db94101c187f3df742133ac837e93b1f269ebdac49427f8310ee40b6a58f/pyarrow-23.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:f00f993a8179e0e1c9713bcc0baf6d6c01326a406a9c23495ec1ba9c9ebf2919", size = 27527698, upload-time = "2026-02-16T10:09:50.263Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4b/4166bb5abbfe6f750fc60ad337c43ecf61340fa52ab386da6e8dbf9e63c4/pyarrow-23.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f4b0dbfa124c0bb161f8b5ebb40f1a680b70279aa0c9901d44a2b5a20806039f", size = 34214575, upload-time = "2026-02-16T10:09:56.225Z" }, + { url = "https://files.pythonhosted.org/packages/e1/da/3f941e3734ac8088ea588b53e860baeddac8323ea40ce22e3d0baa865cc9/pyarrow-23.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:7707d2b6673f7de054e2e83d59f9e805939038eebe1763fe811ee8fa5c0cd1a7", size = 35832540, upload-time = "2026-02-16T10:10:03.428Z" }, + { url = "https://files.pythonhosted.org/packages/88/7c/3d841c366620e906d54430817531b877ba646310296df42ef697308c2705/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:86ff03fb9f1a320266e0de855dee4b17da6794c595d207f89bba40d16b5c78b9", size = 44470940, upload-time = "2026-02-16T10:10:10.704Z" }, + { url = "https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:813d99f31275919c383aab17f0f455a04f5a429c261cc411b1e9a8f5e4aaaa05", size = 47586063, upload-time = "2026-02-16T10:10:17.95Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/b7d2ebcff47a514f47f9da1e74b7949138c58cfeb108cdd4ee62f43f0cf3/pyarrow-23.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bf5842f960cddd2ef757d486041d57c96483efc295a8c4a0e20e704cbbf39c67", size = 48173045, upload-time = "2026-02-16T10:10:25.363Z" }, + { url = "https://files.pythonhosted.org/packages/43/b2/b40961262213beaba6acfc88698eb773dfce32ecdf34d19291db94c2bd73/pyarrow-23.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564baf97c858ecc03ec01a41062e8f4698abc3e6e2acd79c01c2e97880a19730", size = 50621741, upload-time = "2026-02-16T10:10:33.477Z" }, + { url = "https://files.pythonhosted.org/packages/f6/70/1fdda42d65b28b078e93d75d371b2185a61da89dda4def8ba6ba41ebdeb4/pyarrow-23.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:07deae7783782ac7250989a7b2ecde9b3c343a643f82e8a4df03d93b633006f0", size = 27620678, upload-time = "2026-02-16T10:10:39.31Z" }, + { url = "https://files.pythonhosted.org/packages/47/10/2cbe4c6f0fb83d2de37249567373d64327a5e4d8db72f486db42875b08f6/pyarrow-23.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6b8fda694640b00e8af3c824f99f789e836720aa8c9379fb435d4c4953a756b8", size = 34210066, upload-time = "2026-02-16T10:10:45.487Z" }, + { url = "https://files.pythonhosted.org/packages/cb/4f/679fa7e84dadbaca7a65f7cdba8d6c83febbd93ca12fa4adf40ba3b6362b/pyarrow-23.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:8ff51b1addc469b9444b7c6f3548e19dc931b172ab234e995a60aea9f6e6025f", size = 35825526, upload-time = "2026-02-16T10:10:52.266Z" }, + { url = "https://files.pythonhosted.org/packages/f9/63/d2747d930882c9d661e9398eefc54f15696547b8983aaaf11d4a2e8b5426/pyarrow-23.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:71c5be5cbf1e1cb6169d2a0980850bccb558ddc9b747b6206435313c47c37677", size = 44473279, upload-time = "2026-02-16T10:11:01.557Z" }, + { url = "https://files.pythonhosted.org/packages/b3/93/10a48b5e238de6d562a411af6467e71e7aedbc9b87f8d3a35f1560ae30fb/pyarrow-23.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9b6f4f17b43bc39d56fec96e53fe89d94bac3eb134137964371b45352d40d0c2", size = 47585798, upload-time = "2026-02-16T10:11:09.401Z" }, + { url = "https://files.pythonhosted.org/packages/5c/20/476943001c54ef078dbf9542280e22741219a184a0632862bca4feccd666/pyarrow-23.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fc13fc6c403d1337acab46a2c4346ca6c9dec5780c3c697cf8abfd5e19b6b37", size = 48179446, upload-time = "2026-02-16T10:11:17.781Z" }, + { url = "https://files.pythonhosted.org/packages/4b/b6/5dd0c47b335fcd8edba9bfab78ad961bd0fd55ebe53468cc393f45e0be60/pyarrow-23.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5c16ed4f53247fa3ffb12a14d236de4213a4415d127fe9cebed33d51671113e2", size = 50623972, upload-time = "2026-02-16T10:11:26.185Z" }, + { url = "https://files.pythonhosted.org/packages/d5/09/a532297c9591a727d67760e2e756b83905dd89adb365a7f6e9c72578bcc1/pyarrow-23.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:cecfb12ef629cf6be0b1887f9f86463b0dd3dc3195ae6224e74006be4736035a", size = 27540749, upload-time = "2026-02-16T10:12:23.297Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8e/38749c4b1303e6ae76b3c80618f84861ae0c55dd3c2273842ea6f8258233/pyarrow-23.0.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:29f7f7419a0e30264ea261fdc0e5fe63ce5a6095003db2945d7cd78df391a7e1", size = 34471544, upload-time = "2026-02-16T10:11:32.535Z" }, + { url = "https://files.pythonhosted.org/packages/a3/73/f237b2bc8c669212f842bcfd842b04fc8d936bfc9d471630569132dc920d/pyarrow-23.0.1-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:33d648dc25b51fd8055c19e4261e813dfc4d2427f068bcecc8b53d01b81b0500", size = 35949911, upload-time = "2026-02-16T10:11:39.813Z" }, + { url = "https://files.pythonhosted.org/packages/0c/86/b912195eee0903b5611bf596833def7d146ab2d301afeb4b722c57ffc966/pyarrow-23.0.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:cd395abf8f91c673dd3589cadc8cc1ee4e8674fa61b2e923c8dd215d9c7d1f41", size = 44520337, upload-time = "2026-02-16T10:11:47.764Z" }, + { url = "https://files.pythonhosted.org/packages/69/c2/f2a717fb824f62d0be952ea724b4f6f9372a17eed6f704b5c9526f12f2f1/pyarrow-23.0.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:00be9576d970c31defb5c32eb72ef585bf600ef6d0a82d5eccaae96639cf9d07", size = 47548944, upload-time = "2026-02-16T10:11:56.607Z" }, + { url = "https://files.pythonhosted.org/packages/84/a7/90007d476b9f0dc308e3bc57b832d004f848fd6c0da601375d20d92d1519/pyarrow-23.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c2139549494445609f35a5cda4eb94e2c9e4d704ce60a095b342f82460c73a83", size = 48236269, upload-time = "2026-02-16T10:12:04.47Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3f/b16fab3e77709856eb6ac328ce35f57a6d4a18462c7ca5186ef31b45e0e0/pyarrow-23.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7044b442f184d84e2351e5084600f0d7343d6117aabcbc1ac78eb1ae11eb4125", size = 50604794, upload-time = "2026-02-16T10:12:11.797Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a1/22df0620a9fac31d68397a75465c344e83c3dfe521f7612aea33e27ab6c0/pyarrow-23.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a35581e856a2fafa12f3f54fce4331862b1cfb0bef5758347a858a4aa9d6bae8", size = 27660642, upload-time = "2026-02-16T10:12:17.746Z" }, + { url = "https://files.pythonhosted.org/packages/8d/1b/6da9a89583ce7b23ac611f183ae4843cd3a6cf54f079549b0e8c14031e73/pyarrow-23.0.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:5df1161da23636a70838099d4aaa65142777185cc0cdba4037a18cee7d8db9ca", size = 34238755, upload-time = "2026-02-16T10:12:32.819Z" }, + { url = "https://files.pythonhosted.org/packages/ae/b5/d58a241fbe324dbaeb8df07be6af8752c846192d78d2272e551098f74e88/pyarrow-23.0.1-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:fa8e51cb04b9f8c9c5ace6bab63af9a1f88d35c0d6cbf53e8c17c098552285e1", size = 35847826, upload-time = "2026-02-16T10:12:38.949Z" }, + { url = "https://files.pythonhosted.org/packages/54/a5/8cbc83f04aba433ca7b331b38f39e000efd9f0c7ce47128670e737542996/pyarrow-23.0.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b95a3994f015be13c63148fef8832e8a23938128c185ee951c98908a696e0eb", size = 44536859, upload-time = "2026-02-16T10:12:45.467Z" }, + { url = "https://files.pythonhosted.org/packages/36/2e/c0f017c405fcdc252dbccafbe05e36b0d0eb1ea9a958f081e01c6972927f/pyarrow-23.0.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4982d71350b1a6e5cfe1af742c53dfb759b11ce14141870d05d9e540d13bc5d1", size = 47614443, upload-time = "2026-02-16T10:12:55.525Z" }, + { url = "https://files.pythonhosted.org/packages/af/6b/2314a78057912f5627afa13ba43809d9d653e6630859618b0fd81a4e0759/pyarrow-23.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c250248f1fe266db627921c89b47b7c06fee0489ad95b04d50353537d74d6886", size = 48232991, upload-time = "2026-02-16T10:13:04.729Z" }, + { url = "https://files.pythonhosted.org/packages/40/f2/1bcb1d3be3460832ef3370d621142216e15a2c7c62602a4ea19ec240dd64/pyarrow-23.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f4763b83c11c16e5f4c15601ba6dfa849e20723b46aa2617cb4bffe8768479f", size = 50645077, upload-time = "2026-02-16T10:13:14.147Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3f/b1da7b61cd66566a4d4c8383d376c606d1c34a906c3f1cb35c479f59d1aa/pyarrow-23.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:3a4c85ef66c134161987c17b147d6bffdca4566f9a4c1d81a0a01cdf08414ea5", size = 28234271, upload-time = "2026-02-16T10:14:09.397Z" }, + { url = "https://files.pythonhosted.org/packages/b5/78/07f67434e910a0f7323269be7bfbf58699bd0c1d080b18a1ab49ba943fe8/pyarrow-23.0.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:17cd28e906c18af486a499422740298c52d7c6795344ea5002a7720b4eadf16d", size = 34488692, upload-time = "2026-02-16T10:13:21.541Z" }, + { url = "https://files.pythonhosted.org/packages/50/76/34cf7ae93ece1f740a04910d9f7e80ba166b9b4ab9596a953e9e62b90fe1/pyarrow-23.0.1-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:76e823d0e86b4fb5e1cf4a58d293036e678b5a4b03539be933d3b31f9406859f", size = 35964383, upload-time = "2026-02-16T10:13:28.63Z" }, + { url = "https://files.pythonhosted.org/packages/46/90/459b827238936d4244214be7c684e1b366a63f8c78c380807ae25ed92199/pyarrow-23.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a62e1899e3078bf65943078b3ad2a6ddcacf2373bc06379aac61b1e548a75814", size = 44538119, upload-time = "2026-02-16T10:13:35.506Z" }, + { url = "https://files.pythonhosted.org/packages/28/a1/93a71ae5881e99d1f9de1d4554a87be37da11cd6b152239fb5bd924fdc64/pyarrow-23.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:df088e8f640c9fae3b1f495b3c64755c4e719091caf250f3a74d095ddf3c836d", size = 47571199, upload-time = "2026-02-16T10:13:42.504Z" }, + { url = "https://files.pythonhosted.org/packages/88/a3/d2c462d4ef313521eaf2eff04d204ac60775263f1fb08c374b543f79f610/pyarrow-23.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:46718a220d64677c93bc243af1d44b55998255427588e400677d7192671845c7", size = 48259435, upload-time = "2026-02-16T10:13:49.226Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f1/11a544b8c3d38a759eb3fbb022039117fd633e9a7b19e4841cc3da091915/pyarrow-23.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a09f3876e87f48bc2f13583ab551f0379e5dfb83210391e68ace404181a20690", size = 50629149, upload-time = "2026-02-16T10:13:57.238Z" }, + { url = "https://files.pythonhosted.org/packages/50/f2/c0e76a0b451ffdf0cf788932e182758eb7558953f4f27f1aff8e2518b653/pyarrow-23.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:527e8d899f14bd15b740cd5a54ad56b7f98044955373a17179d5956ddb93d9ce", size = 28365807, upload-time = "2026-02-16T10:14:03.892Z" }, +] + +[[package]] +name = "pybase64" +version = "1.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/b8/4ed5c7ad5ec15b08d35cc79ace6145d5c1ae426e46435f4987379439dfea/pybase64-1.4.3.tar.gz", hash = "sha256:c2ed274c9e0ba9c8f9c4083cfe265e66dd679126cd9c2027965d807352f3f053", size = 137272, upload-time = "2025-12-06T13:27:04.013Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/47/16d7af6fae7803f4c691856bc0d8d433ccf30e106432e2ef7707ee19a38a/pybase64-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f63aa7f29139b8a05ce5f97cdb7fad63d29071e5bdc8a638a343311fe996112a", size = 38241, upload-time = "2025-12-06T13:22:27.396Z" }, + { url = "https://files.pythonhosted.org/packages/4d/3e/268beb8d2240ab55396af4d1b45d2494935982212549b92a5f5b57079bd3/pybase64-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5943ec1ae87a8b4fe310905bb57205ea4330c75e2c628433a7d9dd52295b588", size = 31672, upload-time = "2025-12-06T13:22:28.854Z" }, + { url = "https://files.pythonhosted.org/packages/80/14/4365fa33222edcc46b6db4973f9e22bda82adfb6ab2a01afff591f1e41c8/pybase64-1.4.3-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5f2b8aef86f35cd5894c13681faf433a1fffc5b2e76544dcb5416a514a1a8347", size = 65978, upload-time = "2025-12-06T13:22:30.191Z" }, + { url = "https://files.pythonhosted.org/packages/1c/22/e89739d8bc9b96c68ead44b4eec42fe555683d9997e4ba65216d384920fc/pybase64-1.4.3-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6ec7e53dd09b0a8116ccf5c3265c7c7fce13c980747525be76902aef36a514a", size = 68903, upload-time = "2025-12-06T13:22:31.29Z" }, + { url = "https://files.pythonhosted.org/packages/77/e1/7e59a19f8999cdefe9eb0d56bfd701dd38263b0f6fb4a4d29fce165a1b36/pybase64-1.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7528604cd69c538e1dbaafded46e9e4915a2adcd6f2a60fcef6390d87ca922ea", size = 57516, upload-time = "2025-12-06T13:22:32.395Z" }, + { url = "https://files.pythonhosted.org/packages/42/ad/f47dc7e6fe32022b176868b88b671a32dab389718c8ca905cab79280aaaf/pybase64-1.4.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:4ec645f32b50593879031e09158f8681a1db9f5df0f72af86b3969a1c5d1fa2b", size = 54533, upload-time = "2025-12-06T13:22:33.457Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/7ab312b5a324833953b00e47b23eb4f83d45bd5c5c854b4b4e51b2a0cf5b/pybase64-1.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:634a000c5b3485ccc18bb9b244e0124f74b6fbc7f43eade815170237a7b34c64", size = 57187, upload-time = "2025-12-06T13:22:34.566Z" }, + { url = "https://files.pythonhosted.org/packages/2c/84/80acab1fcbaaae103e6b862ef5019192c8f2cd8758433595a202179a0d1d/pybase64-1.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:309ea32ad07639a485580af1be0ad447a434deb1924e76adced63ac2319cfe15", size = 57730, upload-time = "2025-12-06T13:22:35.581Z" }, + { url = "https://files.pythonhosted.org/packages/1f/24/84256d472400ea3163d7d69c44bb7e2e1027f0f1d4d20c47629a7dc4578e/pybase64-1.4.3-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:d10d517566b748d3f25f6ac7162af779360c1c6426ad5f962927ee205990d27c", size = 53036, upload-time = "2025-12-06T13:22:36.621Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0f/33aecbed312ee0431798a73fa25e00dedbffdd91389ee23121fed397c550/pybase64-1.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a74cc0f4d835400857cc5c6d27ec854f7949491e07a04e6d66e2137812831f4c", size = 56321, upload-time = "2025-12-06T13:22:37.7Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1c/a341b050746658cbec8cab3c733aeb3ef52ce8f11e60d0d47adbdf729ebf/pybase64-1.4.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1b591d774ac09d5eb73c156a03277cb271438fbd8042bae4109ff3a827cd218c", size = 50114, upload-time = "2025-12-06T13:22:38.752Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d3/f7e6680ae6dc4ddff39112ad66e0fa6b2ec346e73881bafc08498c560bc0/pybase64-1.4.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5eb588d35a04302ef6157d17db62354a787ac6f8b1585dd0b90c33d63a97a550", size = 66570, upload-time = "2025-12-06T13:22:40.221Z" }, + { url = "https://files.pythonhosted.org/packages/4c/71/774748eecc7fe23869b7e5df028e3c4c2efa16b506b83ea3fa035ea95dc2/pybase64-1.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df8b122d5be2c96962231cc4831d9c2e1eae6736fb12850cec4356d8b06fe6f8", size = 55700, upload-time = "2025-12-06T13:22:41.289Z" }, + { url = "https://files.pythonhosted.org/packages/b3/91/dd15075bb2fe0086193e1cd4bad80a43652c38d8a572f9218d46ba721802/pybase64-1.4.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:31b7a85c661fc591bbcce82fb8adaebe2941e6a83b08444b0957b77380452a4b", size = 52491, upload-time = "2025-12-06T13:22:42.628Z" }, + { url = "https://files.pythonhosted.org/packages/7b/27/f357d63ea3774c937fc47160e040419ed528827aa3d4306d5ec9826259c0/pybase64-1.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e6d7beaae65979fef250e25e66cf81c68a8f81910bcda1a2f43297ab486a7e4e", size = 53957, upload-time = "2025-12-06T13:22:44.615Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c3/243693771701a54e67ff5ccbf4c038344f429613f5643169a7befc51f007/pybase64-1.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4a6276bc3a3962d172a2b5aba544d89881c4037ea954517b86b00892c703d007", size = 68422, upload-time = "2025-12-06T13:22:45.641Z" }, + { url = "https://files.pythonhosted.org/packages/75/95/f987081bf6bc1d1eda3012dae1b06ad427732ef9933a632cb8b58f9917f8/pybase64-1.4.3-cp310-cp310-win32.whl", hash = "sha256:4bdd07ef017515204ee6eaab17e1ad05f83c0ccb5af8ae24a0fe6d9cb5bb0b7a", size = 33622, upload-time = "2025-12-06T13:22:47.348Z" }, + { url = "https://files.pythonhosted.org/packages/79/28/c169a769fe90128f16d394aad87b2096dd4bf2f035ae0927108a46b617df/pybase64-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:5db0b6bbda15110db2740c61970a8fda3bf9c93c3166a3f57f87c7865ed1125c", size = 35799, upload-time = "2025-12-06T13:22:48.731Z" }, + { url = "https://files.pythonhosted.org/packages/ab/f2/bdbe6af0bd4f3fe5bc70e77ead7f7d523bb9d3ca3ad50ac42b9adbb9ca14/pybase64-1.4.3-cp310-cp310-win_arm64.whl", hash = "sha256:f96367dfc82598569aa02b1103ebd419298293e59e1151abda2b41728703284b", size = 31158, upload-time = "2025-12-06T13:22:50.021Z" }, + { url = "https://files.pythonhosted.org/packages/2b/63/21e981e9d3f1f123e0b0ee2130112b1956cad9752309f574862c7ae77c08/pybase64-1.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:70b0d4a4d54e216ce42c2655315378b8903933ecfa32fced453989a92b4317b2", size = 38237, upload-time = "2025-12-06T13:22:52.159Z" }, + { url = "https://files.pythonhosted.org/packages/92/fb/3f448e139516404d2a3963915cc10dc9dde7d3a67de4edba2f827adfef17/pybase64-1.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8127f110cdee7a70e576c5c9c1d4e17e92e76c191869085efbc50419f4ae3c72", size = 31673, upload-time = "2025-12-06T13:22:53.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/bb06a5b9885e7d853ac1e801c4d8abfdb4c8506deee33e53d55aa6690e67/pybase64-1.4.3-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f9ef0388878bc15a084bd9bf73ec1b2b4ee513d11009b1506375e10a7aae5032", size = 68331, upload-time = "2025-12-06T13:22:54.197Z" }, + { url = "https://files.pythonhosted.org/packages/64/15/8d60b9ec5e658185fc2ee3333e01a6e30d717cf677b24f47cbb3a859d13c/pybase64-1.4.3-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95a57cccf106352a72ed8bc8198f6820b16cc7d55aa3867a16dea7011ae7c218", size = 71370, upload-time = "2025-12-06T13:22:55.517Z" }, + { url = "https://files.pythonhosted.org/packages/ac/29/a3e5c1667cc8c38d025a4636855de0fc117fc62e2afeb033a3c6f12c6a22/pybase64-1.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cd1c47dfceb9c7bd3de210fb4e65904053ed2d7c9dce6d107f041ff6fbd7e21", size = 59834, upload-time = "2025-12-06T13:22:56.682Z" }, + { url = "https://files.pythonhosted.org/packages/a9/00/8ffcf9810bd23f3984698be161cf7edba656fd639b818039a7be1d6405d4/pybase64-1.4.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:9fe9922698f3e2f72874b26890d53a051c431d942701bb3a37aae94da0b12107", size = 56652, upload-time = "2025-12-06T13:22:57.724Z" }, + { url = "https://files.pythonhosted.org/packages/81/62/379e347797cdea4ab686375945bc77ad8d039c688c0d4d0cfb09d247beb9/pybase64-1.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:af5f4bd29c86b59bb4375e0491d16ec8a67548fa99c54763aaedaf0b4b5a6632", size = 59382, upload-time = "2025-12-06T13:22:58.758Z" }, + { url = "https://files.pythonhosted.org/packages/c6/f2/9338ffe2f487086f26a2c8ca175acb3baa86fce0a756ff5670a0822bb877/pybase64-1.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c302f6ca7465262908131411226e02100f488f531bb5e64cb901aa3f439bccd9", size = 59990, upload-time = "2025-12-06T13:23:01.007Z" }, + { url = "https://files.pythonhosted.org/packages/f9/a4/85a6142b65b4df8625b337727aa81dc199642de3d09677804141df6ee312/pybase64-1.4.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2f3f439fa4d7fde164ebbbb41968db7d66b064450ab6017c6c95cef0afa2b349", size = 54923, upload-time = "2025-12-06T13:23:02.369Z" }, + { url = "https://files.pythonhosted.org/packages/ac/00/e40215d25624012bf5b7416ca37f168cb75f6dd15acdb91ea1f2ea4dc4e7/pybase64-1.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a23c6866551043f8b681a5e1e0d59469148b2920a3b4fc42b1275f25ea4217a", size = 58664, upload-time = "2025-12-06T13:23:03.378Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/d7e19a63e795c13837f2356268d95dc79d1180e756f57ced742a1e52fdeb/pybase64-1.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:56e6526f8565642abc5f84338cc131ce298a8ccab696b19bdf76fa6d7dc592ef", size = 52338, upload-time = "2025-12-06T13:23:04.458Z" }, + { url = "https://files.pythonhosted.org/packages/f2/32/3c746d7a310b69bdd9df77ffc85c41b80bce00a774717596f869b0d4a20e/pybase64-1.4.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6a792a8b9d866ffa413c9687d9b611553203753987a3a582d68cbc51cf23da45", size = 68993, upload-time = "2025-12-06T13:23:05.526Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b3/63cec68f9d6f6e4c0b438d14e5f1ef536a5fe63ce14b70733ac5e31d7ab8/pybase64-1.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:62ad29a5026bb22cfcd1ca484ec34b0a5ced56ddba38ceecd9359b2818c9c4f9", size = 58055, upload-time = "2025-12-06T13:23:06.931Z" }, + { url = "https://files.pythonhosted.org/packages/d5/cb/7acf7c3c06f9692093c07f109668725dc37fb9a3df0fa912b50add645195/pybase64-1.4.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:11b9d1d2d32ec358c02214363b8fc3651f6be7dd84d880ecd597a6206a80e121", size = 54430, upload-time = "2025-12-06T13:23:07.936Z" }, + { url = "https://files.pythonhosted.org/packages/33/39/4eb33ff35d173bfff4002e184ce8907f5d0a42d958d61cd9058ef3570179/pybase64-1.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0aebaa7f238caa0a0d373616016e2040c6c879ebce3ba7ab3c59029920f13640", size = 56272, upload-time = "2025-12-06T13:23:09.253Z" }, + { url = "https://files.pythonhosted.org/packages/19/97/a76d65c375a254e65b730c6f56bf528feca91305da32eceab8bcc08591e6/pybase64-1.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e504682b20c63c2b0c000e5f98a80ea867f8d97642e042a5a39818e44ba4d599", size = 70904, upload-time = "2025-12-06T13:23:10.336Z" }, + { url = "https://files.pythonhosted.org/packages/5e/2c/8338b6d3da3c265002839e92af0a80d6db88385c313c73f103dfb800c857/pybase64-1.4.3-cp311-cp311-win32.whl", hash = "sha256:e9a8b81984e3c6fb1db9e1614341b0a2d98c0033d693d90c726677db1ffa3a4c", size = 33639, upload-time = "2025-12-06T13:23:11.9Z" }, + { url = "https://files.pythonhosted.org/packages/39/dc/32efdf2f5927e5449cc341c266a1bbc5fecd5319a8807d9c5405f76e6d02/pybase64-1.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:a90a8fa16a901fabf20de824d7acce07586e6127dc2333f1de05f73b1f848319", size = 35797, upload-time = "2025-12-06T13:23:13.174Z" }, + { url = "https://files.pythonhosted.org/packages/da/59/eda4f9cb0cbce5a45f0cd06131e710674f8123a4d570772c5b9694f88559/pybase64-1.4.3-cp311-cp311-win_arm64.whl", hash = "sha256:61d87de5bc94d143622e94390ec3e11b9c1d4644fe9be3a81068ab0f91056f59", size = 31160, upload-time = "2025-12-06T13:23:15.696Z" }, + { url = "https://files.pythonhosted.org/packages/86/a7/efcaa564f091a2af7f18a83c1c4875b1437db56ba39540451dc85d56f653/pybase64-1.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:18d85e5ab8b986bb32d8446aca6258ed80d1bafe3603c437690b352c648f5967", size = 38167, upload-time = "2025-12-06T13:23:16.821Z" }, + { url = "https://files.pythonhosted.org/packages/db/c7/c7ad35adff2d272bf2930132db2b3eea8c44bb1b1f64eb9b2b8e57cde7b4/pybase64-1.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3f5791a3491d116d0deaf4d83268f48792998519698f8751efb191eac84320e9", size = 31673, upload-time = "2025-12-06T13:23:17.835Z" }, + { url = "https://files.pythonhosted.org/packages/43/1b/9a8cab0042b464e9a876d5c65fe5127445a2436da36fda64899b119b1a1b/pybase64-1.4.3-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f0b3f200c3e06316f6bebabd458b4e4bcd4c2ca26af7c0c766614d91968dee27", size = 68210, upload-time = "2025-12-06T13:23:18.813Z" }, + { url = "https://files.pythonhosted.org/packages/62/f7/965b79ff391ad208b50e412b5d3205ccce372a2d27b7218ae86d5295b105/pybase64-1.4.3-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb632edfd132b3eaf90c39c89aa314beec4e946e210099b57d40311f704e11d4", size = 71599, upload-time = "2025-12-06T13:23:20.195Z" }, + { url = "https://files.pythonhosted.org/packages/03/4b/a3b5175130b3810bbb8ccfa1edaadbd3afddb9992d877c8a1e2f274b476e/pybase64-1.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:356ef1d74648ce997f5a777cf8f1aefecc1c0b4fe6201e0ef3ec8a08170e1b54", size = 59922, upload-time = "2025-12-06T13:23:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/da/5d/c38d1572027fc601b62d7a407721688b04b4d065d60ca489912d6893e6cf/pybase64-1.4.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:c48361f90db32bacaa5518419d4eb9066ba558013aaf0c7781620279ecddaeb9", size = 56712, upload-time = "2025-12-06T13:23:22.77Z" }, + { url = "https://files.pythonhosted.org/packages/e7/d4/4e04472fef485caa8f561d904d4d69210a8f8fc1608ea15ebd9012b92655/pybase64-1.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:702bcaa16ae02139d881aeaef5b1c8ffb4a3fae062fe601d1e3835e10310a517", size = 59300, upload-time = "2025-12-06T13:23:24.543Z" }, + { url = "https://files.pythonhosted.org/packages/86/e7/16e29721b86734b881d09b7e23dfd7c8408ad01a4f4c7525f3b1088e25ec/pybase64-1.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:53d0ffe1847b16b647c6413d34d1de08942b7724273dd57e67dcbdb10c574045", size = 60278, upload-time = "2025-12-06T13:23:25.608Z" }, + { url = "https://files.pythonhosted.org/packages/b1/02/18515f211d7c046be32070709a8efeeef8a0203de4fd7521e6b56404731b/pybase64-1.4.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:9a1792e8b830a92736dae58f0c386062eb038dfe8004fb03ba33b6083d89cd43", size = 54817, upload-time = "2025-12-06T13:23:26.633Z" }, + { url = "https://files.pythonhosted.org/packages/e7/be/14e29d8e1a481dbff151324c96dd7b5d2688194bb65dc8a00ca0e1ad1e86/pybase64-1.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1d468b1b1ac5ad84875a46eaa458663c3721e8be5f155ade356406848d3701f6", size = 58611, upload-time = "2025-12-06T13:23:27.684Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8a/a2588dfe24e1bbd742a554553778ab0d65fdf3d1c9a06d10b77047d142aa/pybase64-1.4.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e97b7bdbd62e71898cd542a6a9e320d9da754ff3ebd02cb802d69087ee94d468", size = 52404, upload-time = "2025-12-06T13:23:28.714Z" }, + { url = "https://files.pythonhosted.org/packages/27/fc/afcda7445bebe0cbc38cafdd7813234cdd4fc5573ff067f1abf317bb0cec/pybase64-1.4.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b33aeaa780caaa08ffda87fc584d5eab61e3d3bbb5d86ead02161dc0c20d04bc", size = 68817, upload-time = "2025-12-06T13:23:30.079Z" }, + { url = "https://files.pythonhosted.org/packages/d3/3a/87c3201e555ed71f73e961a787241a2438c2bbb2ca8809c29ddf938a3157/pybase64-1.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c0efcf78f11cf866bed49caa7b97552bc4855a892f9cc2372abcd3ed0056f0d", size = 57854, upload-time = "2025-12-06T13:23:31.17Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7d/931c2539b31a7b375e7d595b88401eeb5bd6c5ce1059c9123f9b608aaa14/pybase64-1.4.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:66e3791f2ed725a46593f8bd2761ff37d01e2cdad065b1dceb89066f476e50c6", size = 54333, upload-time = "2025-12-06T13:23:32.422Z" }, + { url = "https://files.pythonhosted.org/packages/de/5e/537601e02cc01f27e9d75f440f1a6095b8df44fc28b1eef2cd739aea8cec/pybase64-1.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:72bb0b6bddadab26e1b069bb78e83092711a111a80a0d6b9edcb08199ad7299b", size = 56492, upload-time = "2025-12-06T13:23:33.515Z" }, + { url = "https://files.pythonhosted.org/packages/96/97/2a2e57acf8f5c9258d22aba52e71f8050e167b29ed2ee1113677c1b600c1/pybase64-1.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5b3365dbcbcdb0a294f0f50af0c0a16b27a232eddeeb0bceeefd844ef30d2a23", size = 70974, upload-time = "2025-12-06T13:23:36.27Z" }, + { url = "https://files.pythonhosted.org/packages/75/2e/a9e28941c6dab6f06e6d3f6783d3373044be9b0f9a9d3492c3d8d2260ac0/pybase64-1.4.3-cp312-cp312-win32.whl", hash = "sha256:7bca1ed3a5df53305c629ca94276966272eda33c0d71f862d2d3d043f1e1b91a", size = 33686, upload-time = "2025-12-06T13:23:37.848Z" }, + { url = "https://files.pythonhosted.org/packages/83/e3/507ab649d8c3512c258819c51d25c45d6e29d9ca33992593059e7b646a33/pybase64-1.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:9f2da8f56d9b891b18b4daf463a0640eae45a80af548ce435be86aa6eff3603b", size = 35833, upload-time = "2025-12-06T13:23:38.877Z" }, + { url = "https://files.pythonhosted.org/packages/bc/8a/6eba66cd549a2fc74bb4425fd61b839ba0ab3022d3c401b8a8dc2cc00c7a/pybase64-1.4.3-cp312-cp312-win_arm64.whl", hash = "sha256:0631d8a2d035de03aa9bded029b9513e1fee8ed80b7ddef6b8e9389ffc445da0", size = 31185, upload-time = "2025-12-06T13:23:39.908Z" }, + { url = "https://files.pythonhosted.org/packages/3a/50/b7170cb2c631944388fe2519507fe3835a4054a6a12a43f43781dae82be1/pybase64-1.4.3-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:ea4b785b0607d11950b66ce7c328f452614aefc9c6d3c9c28bae795dc7f072e1", size = 33901, upload-time = "2025-12-06T13:23:40.951Z" }, + { url = "https://files.pythonhosted.org/packages/48/8b/69f50578e49c25e0a26e3ee72c39884ff56363344b79fc3967f5af420ed6/pybase64-1.4.3-cp313-cp313-android_21_x86_64.whl", hash = "sha256:6a10b6330188c3026a8b9c10e6b9b3f2e445779cf16a4c453d51a072241c65a2", size = 40807, upload-time = "2025-12-06T13:23:42.006Z" }, + { url = "https://files.pythonhosted.org/packages/5c/8d/20b68f11adfc4c22230e034b65c71392e3e338b413bf713c8945bd2ccfb3/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:27fdff227a0c0e182e0ba37a99109645188978b920dfb20d8b9c17eeee370d0d", size = 30932, upload-time = "2025-12-06T13:23:43.348Z" }, + { url = "https://files.pythonhosted.org/packages/f7/79/b1b550ac6bff51a4880bf6e089008b2e1ca16f2c98db5e039a08ac3ad157/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2a8204f1fdfec5aa4184249b51296c0de95445869920c88123978304aad42df1", size = 31394, upload-time = "2025-12-06T13:23:44.317Z" }, + { url = "https://files.pythonhosted.org/packages/82/70/b5d7c5932bf64ee1ec5da859fbac981930b6a55d432a603986c7f509c838/pybase64-1.4.3-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:874fc2a3777de6baf6aa921a7aa73b3be98295794bea31bd80568a963be30767", size = 38078, upload-time = "2025-12-06T13:23:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/56/fe/e66fe373bce717c6858427670736d54297938dad61c5907517ab4106bd90/pybase64-1.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2dc64a94a9d936b8e3449c66afabbaa521d3cc1a563d6bbaaa6ffa4535222e4b", size = 38158, upload-time = "2025-12-06T13:23:46.872Z" }, + { url = "https://files.pythonhosted.org/packages/80/a9/b806ed1dcc7aed2ea3dd4952286319e6f3a8b48615c8118f453948e01999/pybase64-1.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e48f86de1c145116ccf369a6e11720ce696c2ec02d285f440dfb57ceaa0a6cb4", size = 31672, upload-time = "2025-12-06T13:23:47.88Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c9/24b3b905cf75e23a9a4deaf203b35ffcb9f473ac0e6d8257f91a05dfce62/pybase64-1.4.3-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:1d45c8fe8fe82b65c36b227bb4a2cf623d9ada16bed602ce2d3e18c35285b72a", size = 68244, upload-time = "2025-12-06T13:23:49.026Z" }, + { url = "https://files.pythonhosted.org/packages/f8/cd/d15b0c3e25e5859fab0416dc5b96d34d6bd2603c1c96a07bb2202b68ab92/pybase64-1.4.3-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ad70c26ba091d8f5167e9d4e1e86a0483a5414805cdb598a813db635bd3be8b8", size = 71620, upload-time = "2025-12-06T13:23:50.081Z" }, + { url = "https://files.pythonhosted.org/packages/0d/31/4ca953cc3dcde2b3711d6bfd70a6f4ad2ca95a483c9698076ba605f1520f/pybase64-1.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e98310b7c43145221e7194ac9fa7fffc84763c87bfc5e2f59f9f92363475bdc1", size = 59930, upload-time = "2025-12-06T13:23:51.68Z" }, + { url = "https://files.pythonhosted.org/packages/60/55/e7f7bdcd0fd66e61dda08db158ffda5c89a306bbdaaf5a062fbe4e48f4a1/pybase64-1.4.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:398685a76034e91485a28aeebcb49e64cd663212fd697b2497ac6dfc1df5e671", size = 56425, upload-time = "2025-12-06T13:23:52.732Z" }, + { url = "https://files.pythonhosted.org/packages/cb/65/b592c7f921e51ca1aca3af5b0d201a98666d0a36b930ebb67e7c2ed27395/pybase64-1.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7e46400a6461187ccb52ed75b0045d937529e801a53a9cd770b350509f9e4d50", size = 59327, upload-time = "2025-12-06T13:23:53.856Z" }, + { url = "https://files.pythonhosted.org/packages/23/95/1613d2fb82dbb1548595ad4179f04e9a8451bfa18635efce18b631eabe3f/pybase64-1.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1b62b9f2f291d94f5e0b76ab499790b7dcc78a009d4ceea0b0428770267484b6", size = 60294, upload-time = "2025-12-06T13:23:54.937Z" }, + { url = "https://files.pythonhosted.org/packages/9d/73/40431f37f7d1b3eab4673e7946ff1e8f5d6bd425ec257e834dae8a6fc7b0/pybase64-1.4.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:f30ceb5fa4327809dede614be586efcbc55404406d71e1f902a6fdcf322b93b2", size = 54858, upload-time = "2025-12-06T13:23:56.031Z" }, + { url = "https://files.pythonhosted.org/packages/a7/84/f6368bcaf9f743732e002a9858646fd7a54f428490d427dd6847c5cfe89e/pybase64-1.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0d5f18ed53dfa1d4cf8b39ee542fdda8e66d365940e11f1710989b3cf4a2ed66", size = 58629, upload-time = "2025-12-06T13:23:57.12Z" }, + { url = "https://files.pythonhosted.org/packages/43/75/359532f9adb49c6b546cafc65c46ed75e2ccc220d514ba81c686fbd83965/pybase64-1.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:119d31aa4b58b85a8ebd12b63c07681a138c08dfc2fe5383459d42238665d3eb", size = 52448, upload-time = "2025-12-06T13:23:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/92/6c/ade2ba244c3f33ed920a7ed572ad772eb0b5f14480b72d629d0c9e739a40/pybase64-1.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3cf0218b0e2f7988cf7d738a73b6a1d14f3be6ce249d7c0f606e768366df2cce", size = 68841, upload-time = "2025-12-06T13:23:59.886Z" }, + { url = "https://files.pythonhosted.org/packages/a0/51/b345139cd236be382f2d4d4453c21ee6299e14d2f759b668e23080f8663f/pybase64-1.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:12f4ee5e988bc5c0c1106b0d8fc37fb0508f12dab76bac1b098cb500d148da9d", size = 57910, upload-time = "2025-12-06T13:24:00.994Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b8/9f84bdc4f1c4f0052489396403c04be2f9266a66b70c776001eaf0d78c1f/pybase64-1.4.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:937826bc7b6b95b594a45180e81dd4d99bd4dd4814a443170e399163f7ff3fb6", size = 54335, upload-time = "2025-12-06T13:24:02.046Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c7/be63b617d284de46578a366da77ede39c8f8e815ed0d82c7c2acca560fab/pybase64-1.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:88995d1460971ef80b13e3e007afbe4b27c62db0508bc7250a2ab0a0b4b91362", size = 56486, upload-time = "2025-12-06T13:24:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/5e/96/f252c8f9abd6ded3ef1ccd3cdbb8393a33798007f761b23df8de1a2480e6/pybase64-1.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:72326fe163385ed3e1e806dd579d47fde5d8a59e51297a60fc4e6cbc1b4fc4ed", size = 70978, upload-time = "2025-12-06T13:24:04.221Z" }, + { url = "https://files.pythonhosted.org/packages/af/51/0f5714af7aeef96e30f968e4371d75ad60558aaed3579d7c6c8f1c43c18a/pybase64-1.4.3-cp313-cp313-win32.whl", hash = "sha256:b1623730c7892cf5ed0d6355e375416be6ef8d53ab9b284f50890443175c0ac3", size = 33684, upload-time = "2025-12-06T13:24:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ad/0cea830a654eb08563fb8214150ef57546ece1cc421c09035f0e6b0b5ea9/pybase64-1.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:8369887590f1646a5182ca2fb29252509da7ae31d4923dbb55d3e09da8cc4749", size = 35832, upload-time = "2025-12-06T13:24:06.35Z" }, + { url = "https://files.pythonhosted.org/packages/b4/0d/eec2a8214989c751bc7b4cad1860eb2c6abf466e76b77508c0f488c96a37/pybase64-1.4.3-cp313-cp313-win_arm64.whl", hash = "sha256:860b86bca71e5f0237e2ab8b2d9c4c56681f3513b1bf3e2117290c1963488390", size = 31175, upload-time = "2025-12-06T13:24:07.419Z" }, + { url = "https://files.pythonhosted.org/packages/db/c9/e23463c1a2913686803ef76b1a5ae7e6fac868249a66e48253d17ad7232c/pybase64-1.4.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eb51db4a9c93215135dccd1895dca078e8785c357fabd983c9f9a769f08989a9", size = 38497, upload-time = "2025-12-06T13:24:08.873Z" }, + { url = "https://files.pythonhosted.org/packages/71/83/343f446b4b7a7579bf6937d2d013d82f1a63057cf05558e391ab6039d7db/pybase64-1.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a03ef3f529d85fd46b89971dfb00c634d53598d20ad8908fb7482955c710329d", size = 32076, upload-time = "2025-12-06T13:24:09.975Z" }, + { url = "https://files.pythonhosted.org/packages/46/fc/cb64964c3b29b432f54d1bce5e7691d693e33bbf780555151969ffd95178/pybase64-1.4.3-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:2e745f2ce760c6cf04d8a72198ef892015ddb89f6ceba489e383518ecbdb13ab", size = 72317, upload-time = "2025-12-06T13:24:11.129Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b7/fab2240da6f4e1ad46f71fa56ec577613cf5df9dce2d5b4cfaa4edd0e365/pybase64-1.4.3-cp313-cp313t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fac217cd9de8581a854b0ac734c50fd1fa4b8d912396c1fc2fce7c230efe3a7", size = 75534, upload-time = "2025-12-06T13:24:12.433Z" }, + { url = "https://files.pythonhosted.org/packages/91/3b/3e2f2b6e68e3d83ddb9fa799f3548fb7449765daec9bbd005a9fbe296d7f/pybase64-1.4.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:da1ee8fa04b283873de2d6e8fa5653e827f55b86bdf1a929c5367aaeb8d26f8a", size = 65399, upload-time = "2025-12-06T13:24:13.928Z" }, + { url = "https://files.pythonhosted.org/packages/6b/08/476ac5914c3b32e0274a2524fc74f01cbf4f4af4513d054e41574eb018f6/pybase64-1.4.3-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:b0bf8e884ee822ca7b1448eeb97fa131628fe0ff42f60cae9962789bd562727f", size = 60487, upload-time = "2025-12-06T13:24:15.177Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b8/618a92915330cc9cba7880299b546a1d9dab1a21fd6c0292ee44a4fe608c/pybase64-1.4.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1bf749300382a6fd1f4f255b183146ef58f8e9cb2f44a077b3a9200dfb473a77", size = 63959, upload-time = "2025-12-06T13:24:16.854Z" }, + { url = "https://files.pythonhosted.org/packages/a5/52/af9d8d051652c3051862c442ec3861259c5cdb3fc69774bc701470bd2a59/pybase64-1.4.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:153a0e42329b92337664cfc356f2065248e6c9a1bd651bbcd6dcaf15145d3f06", size = 64874, upload-time = "2025-12-06T13:24:18.328Z" }, + { url = "https://files.pythonhosted.org/packages/e4/51/5381a7adf1f381bd184d33203692d3c57cf8ae9f250f380c3fecbdbe554b/pybase64-1.4.3-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:86ee56ac7f2184ca10217ed1c655c1a060273e233e692e9086da29d1ae1768db", size = 58572, upload-time = "2025-12-06T13:24:19.417Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f0/578ee4ffce5818017de4fdf544e066c225bc435e73eb4793cde28a689d0b/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0e71a4db76726bf830b47477e7d830a75c01b2e9b01842e787a0836b0ba741e3", size = 63636, upload-time = "2025-12-06T13:24:20.497Z" }, + { url = "https://files.pythonhosted.org/packages/b9/ad/8ae94814bf20159ea06310b742433e53d5820aa564c9fdf65bf2d79f8799/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2ba7799ec88540acd9861b10551d24656ca3c2888ecf4dba2ee0a71544a8923f", size = 56193, upload-time = "2025-12-06T13:24:21.559Z" }, + { url = "https://files.pythonhosted.org/packages/d1/31/6438cfcc3d3f0fa84d229fa125c243d5094e72628e525dfefadf3bcc6761/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2860299e4c74315f5951f0cf3e72ba0f201c3356c8a68f95a3ab4e620baf44e9", size = 72655, upload-time = "2025-12-06T13:24:22.673Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0d/2bbc9e9c3fc12ba8a6e261482f03a544aca524f92eae0b4908c0a10ba481/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:bb06015db9151f0c66c10aae8e3603adab6b6cd7d1f7335a858161d92fc29618", size = 62471, upload-time = "2025-12-06T13:24:23.8Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0b/34d491e7f49c1dbdb322ea8da6adecda7c7cd70b6644557c6e4ca5c6f7c7/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:242512a070817272865d37c8909059f43003b81da31f616bb0c391ceadffe067", size = 58119, upload-time = "2025-12-06T13:24:24.994Z" }, + { url = "https://files.pythonhosted.org/packages/ce/17/c21d0cde2a6c766923ae388fc1f78291e1564b0d38c814b5ea8a0e5e081c/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5d8277554a12d3e3eed6180ebda62786bf9fc8d7bb1ee00244258f4a87ca8d20", size = 60791, upload-time = "2025-12-06T13:24:26.046Z" }, + { url = "https://files.pythonhosted.org/packages/92/b2/eaa67038916a48de12b16f4c384bcc1b84b7ec731b23613cb05f27673294/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f40b7ddd698fc1e13a4b64fbe405e4e0e1279e8197e37050e24154655f5f7c4e", size = 74701, upload-time = "2025-12-06T13:24:27.466Z" }, + { url = "https://files.pythonhosted.org/packages/42/10/abb7757c330bb869ebb95dab0c57edf5961ffbd6c095c8209cbbf75d117d/pybase64-1.4.3-cp313-cp313t-win32.whl", hash = "sha256:46d75c9387f354c5172582a9eaae153b53a53afeb9c19fcf764ea7038be3bd8b", size = 33965, upload-time = "2025-12-06T13:24:28.548Z" }, + { url = "https://files.pythonhosted.org/packages/63/a0/2d4e5a59188e9e6aed0903d580541aaea72dcbbab7bf50fb8b83b490b6c3/pybase64-1.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:d7344625591d281bec54e85cbfdab9e970f6219cac1570f2aa140b8c942ccb81", size = 36207, upload-time = "2025-12-06T13:24:29.646Z" }, + { url = "https://files.pythonhosted.org/packages/1f/05/95b902e8f567b4d4b41df768ccc438af618f8d111e54deaf57d2df46bd76/pybase64-1.4.3-cp313-cp313t-win_arm64.whl", hash = "sha256:28a3c60c55138e0028313f2eccd321fec3c4a0be75e57a8d3eb883730b1b0880", size = 31505, upload-time = "2025-12-06T13:24:30.687Z" }, + { url = "https://files.pythonhosted.org/packages/e4/80/4bd3dff423e5a91f667ca41982dc0b79495b90ec0c0f5d59aca513e50f8c/pybase64-1.4.3-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:015bb586a1ea1467f69d57427abe587469392215f59db14f1f5c39b52fdafaf5", size = 33835, upload-time = "2025-12-06T13:24:31.767Z" }, + { url = "https://files.pythonhosted.org/packages/45/60/a94d94cc1e3057f602e0b483c9ebdaef40911d84a232647a2fe593ab77bb/pybase64-1.4.3-cp314-cp314-android_24_x86_64.whl", hash = "sha256:d101e3a516f837c3dcc0e5a0b7db09582ebf99ed670865223123fb2e5839c6c0", size = 40673, upload-time = "2025-12-06T13:24:32.82Z" }, + { url = "https://files.pythonhosted.org/packages/e3/71/cf62b261d431857e8e054537a5c3c24caafa331de30daede7b2c6c558501/pybase64-1.4.3-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8f183ac925a48046abe047360fe3a1b28327afb35309892132fe1915d62fb282", size = 30939, upload-time = "2025-12-06T13:24:34.001Z" }, + { url = "https://files.pythonhosted.org/packages/24/3e/d12f92a3c1f7c6ab5d53c155bff9f1084ba997a37a39a4f781ccba9455f3/pybase64-1.4.3-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30bf3558e24dcce4da5248dcf6d73792adfcf4f504246967e9db155be4c439ad", size = 31401, upload-time = "2025-12-06T13:24:35.11Z" }, + { url = "https://files.pythonhosted.org/packages/9b/3d/9c27440031fea0d05146f8b70a460feb95d8b4e3d9ca8f45c972efb4c3d3/pybase64-1.4.3-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a674b419de318d2ce54387dd62646731efa32b4b590907800f0bd40675c1771d", size = 38075, upload-time = "2025-12-06T13:24:36.53Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d4/6c0e0cf0efd53c254173fbcd84a3d8fcbf5e0f66622473da425becec32a5/pybase64-1.4.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:720104fd7303d07bac302be0ff8f7f9f126f2f45c1edb4f48fdb0ff267e69fe1", size = 38257, upload-time = "2025-12-06T13:24:38.049Z" }, + { url = "https://files.pythonhosted.org/packages/50/eb/27cb0b610d5cd70f5ad0d66c14ad21c04b8db930f7139818e8fbdc14df4d/pybase64-1.4.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:83f1067f73fa5afbc3efc0565cecc6ed53260eccddef2ebe43a8ce2b99ea0e0a", size = 31685, upload-time = "2025-12-06T13:24:40.327Z" }, + { url = "https://files.pythonhosted.org/packages/db/26/b136a4b65e5c94ff06217f7726478df3f31ab1c777c2c02cf698e748183f/pybase64-1.4.3-cp314-cp314-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:b51204d349a4b208287a8aa5b5422be3baa88abf6cc8ff97ccbda34919bbc857", size = 68460, upload-time = "2025-12-06T13:24:41.735Z" }, + { url = "https://files.pythonhosted.org/packages/68/6d/84ce50e7ee1ae79984d689e05a9937b2460d4efa1e5b202b46762fb9036c/pybase64-1.4.3-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:30f2fd53efecbdde4bdca73a872a68dcb0d1bf8a4560c70a3e7746df973e1ef3", size = 71688, upload-time = "2025-12-06T13:24:42.908Z" }, + { url = "https://files.pythonhosted.org/packages/e3/57/6743e420416c3ff1b004041c85eb0ebd9c50e9cf05624664bfa1dc8b5625/pybase64-1.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0932b0c5cfa617091fd74f17d24549ce5de3628791998c94ba57be808078eeaf", size = 60040, upload-time = "2025-12-06T13:24:44.37Z" }, + { url = "https://files.pythonhosted.org/packages/3b/68/733324e28068a89119af2921ce548e1c607cc5c17d354690fc51c302e326/pybase64-1.4.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:acb61f5ab72bec808eb0d4ce8b87ec9f38d7d750cb89b1371c35eb8052a29f11", size = 56478, upload-time = "2025-12-06T13:24:45.815Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9e/f3f4aa8cfe3357a3cdb0535b78eb032b671519d3ecc08c58c4c6b72b5a91/pybase64-1.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:2bc2d5bc15168f5c04c53bdfe5a1e543b2155f456ed1e16d7edce9ce73842021", size = 59463, upload-time = "2025-12-06T13:24:46.938Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d1/53286038e1f0df1cf58abcf4a4a91b0f74ab44539c2547b6c31001ddd054/pybase64-1.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:8a7bc3cd23880bdca59758bcdd6f4ef0674f2393782763910a7466fab35ccb98", size = 60360, upload-time = "2025-12-06T13:24:48.039Z" }, + { url = "https://files.pythonhosted.org/packages/00/9a/5cc6ce95db2383d27ff4d790b8f8b46704d360d701ab77c4f655bcfaa6a7/pybase64-1.4.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ad15acf618880d99792d71e3905b0e2508e6e331b76a1b34212fa0f11e01ad28", size = 54999, upload-time = "2025-12-06T13:24:49.547Z" }, + { url = "https://files.pythonhosted.org/packages/64/e7/c3c1d09c3d7ae79e3aa1358c6d912d6b85f29281e47aa94fc0122a415a2f/pybase64-1.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:448158d417139cb4851200e5fee62677ae51f56a865d50cda9e0d61bda91b116", size = 58736, upload-time = "2025-12-06T13:24:50.641Z" }, + { url = "https://files.pythonhosted.org/packages/db/d5/0baa08e3d8119b15b588c39f0d39fd10472f0372e3c54ca44649cbefa256/pybase64-1.4.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9058c49b5a2f3e691b9db21d37eb349e62540f9f5fc4beabf8cbe3c732bead86", size = 52298, upload-time = "2025-12-06T13:24:51.791Z" }, + { url = "https://files.pythonhosted.org/packages/00/87/fc6f11474a1de7e27cd2acbb8d0d7508bda3efa73dfe91c63f968728b2a3/pybase64-1.4.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ce561724f6522907a66303aca27dce252d363fcd85884972d348f4403ba3011a", size = 69049, upload-time = "2025-12-06T13:24:53.253Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/7fb5566f669ac18b40aa5fc1c438e24df52b843c1bdc5da47d46d4c1c630/pybase64-1.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:63316560a94ac449fe86cb8b9e0a13714c659417e92e26a5cbf085cd0a0c838d", size = 57952, upload-time = "2025-12-06T13:24:54.342Z" }, + { url = "https://files.pythonhosted.org/packages/de/cc/ceb949232dbbd3ec4ee0190d1df4361296beceee9840390a63df8bc31784/pybase64-1.4.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:7ecd796f2ac0be7b73e7e4e232b8c16422014de3295d43e71d2b19fd4a4f5368", size = 54484, upload-time = "2025-12-06T13:24:55.774Z" }, + { url = "https://files.pythonhosted.org/packages/a7/69/659f3c8e6a5d7b753b9c42a4bd9c42892a0f10044e9c7351a4148d413a33/pybase64-1.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d01e102a12fb2e1ed3dc11611c2818448626637857ec3994a9cf4809dfd23477", size = 56542, upload-time = "2025-12-06T13:24:57Z" }, + { url = "https://files.pythonhosted.org/packages/85/2c/29c9e6c9c82b72025f9676f9e82eb1fd2339ad038cbcbf8b9e2ac02798fc/pybase64-1.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ebff797a93c2345f22183f454fd8607a34d75eca5a3a4a969c1c75b304cee39d", size = 71045, upload-time = "2025-12-06T13:24:58.179Z" }, + { url = "https://files.pythonhosted.org/packages/b9/84/5a3dce8d7a0040a5c0c14f0fe1311cd8db872913fa04438071b26b0dac04/pybase64-1.4.3-cp314-cp314-win32.whl", hash = "sha256:28b2a1bb0828c0595dc1ea3336305cd97ff85b01c00d81cfce4f92a95fb88f56", size = 34200, upload-time = "2025-12-06T13:24:59.956Z" }, + { url = "https://files.pythonhosted.org/packages/57/bc/ce7427c12384adee115b347b287f8f3cf65860b824d74fe2c43e37e81c1f/pybase64-1.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:33338d3888700ff68c3dedfcd49f99bfc3b887570206130926791e26b316b029", size = 36323, upload-time = "2025-12-06T13:25:01.708Z" }, + { url = "https://files.pythonhosted.org/packages/9a/1b/2b8ffbe9a96eef7e3f6a5a7be75995eebfb6faaedc85b6da6b233e50c778/pybase64-1.4.3-cp314-cp314-win_arm64.whl", hash = "sha256:62725669feb5acb186458da2f9353e88ae28ef66bb9c4c8d1568b12a790dfa94", size = 31584, upload-time = "2025-12-06T13:25:02.801Z" }, + { url = "https://files.pythonhosted.org/packages/ac/d8/6824c2e6fb45b8fa4e7d92e3c6805432d5edc7b855e3e8e1eedaaf6efb7c/pybase64-1.4.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:153fe29be038948d9372c3e77ae7d1cab44e4ba7d9aaf6f064dbeea36e45b092", size = 38601, upload-time = "2025-12-06T13:25:04.222Z" }, + { url = "https://files.pythonhosted.org/packages/ea/e5/10d2b3a4ad3a4850be2704a2f70cd9c0cf55725c8885679872d3bc846c67/pybase64-1.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f7fe3decaa7c4a9e162327ec7bd81ce183d2b16f23c6d53b606649c6e0203e9e", size = 32078, upload-time = "2025-12-06T13:25:05.362Z" }, + { url = "https://files.pythonhosted.org/packages/43/04/8b15c34d3c2282f1c1b0850f1113a249401b618a382646a895170bc9b5e7/pybase64-1.4.3-cp314-cp314t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:a5ae04ea114c86eb1da1f6e18d75f19e3b5ae39cb1d8d3cd87c29751a6a22780", size = 72474, upload-time = "2025-12-06T13:25:06.434Z" }, + { url = "https://files.pythonhosted.org/packages/42/00/f34b4d11278f8fdc68bc38f694a91492aa318f7c6f1bd7396197ac0f8b12/pybase64-1.4.3-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1755b3dce3a2a5c7d17ff6d4115e8bee4a1d5aeae74469db02e47c8f477147da", size = 75706, upload-time = "2025-12-06T13:25:07.636Z" }, + { url = "https://files.pythonhosted.org/packages/bb/5d/71747d4ad7fe16df4c4c852bdbdeb1f2cf35677b48d7c34d3011a7a6ad3a/pybase64-1.4.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fb852f900e27ffc4ec1896817535a0fa19610ef8875a096b59f21d0aa42ff172", size = 65589, upload-time = "2025-12-06T13:25:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/49/b1/d1e82bd58805bb5a3a662864800bab83a83a36ba56e7e3b1706c708002a5/pybase64-1.4.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:9cf21ea8c70c61eddab3421fbfce061fac4f2fb21f7031383005a1efdb13d0b9", size = 60670, upload-time = "2025-12-06T13:25:10.04Z" }, + { url = "https://files.pythonhosted.org/packages/15/67/16c609b7a13d1d9fc87eca12ba2dce5e67f949eeaab61a41bddff843cbb0/pybase64-1.4.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:afff11b331fdc27692fc75e85ae083340a35105cea1a3c4552139e2f0e0d174f", size = 64194, upload-time = "2025-12-06T13:25:11.48Z" }, + { url = "https://files.pythonhosted.org/packages/3c/11/37bc724e42960f0106c2d33dc957dcec8f760c91a908cc6c0df7718bc1a8/pybase64-1.4.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9a5143df542c1ce5c1f423874b948c4d689b3f05ec571f8792286197a39ba02", size = 64984, upload-time = "2025-12-06T13:25:12.645Z" }, + { url = "https://files.pythonhosted.org/packages/6e/66/b2b962a6a480dd5dae3029becf03ea1a650d326e39bf1c44ea3db78bb010/pybase64-1.4.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:d62e9861019ad63624b4a7914dff155af1cc5d6d79df3be14edcaedb5fdad6f9", size = 58750, upload-time = "2025-12-06T13:25:13.848Z" }, + { url = "https://files.pythonhosted.org/packages/2b/15/9b6d711035e29b18b2e1c03d47f41396d803d06ef15b6c97f45b75f73f04/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:84cfd4d92668ef5766cc42a9c9474b88960ac2b860767e6e7be255c6fddbd34a", size = 63816, upload-time = "2025-12-06T13:25:15.356Z" }, + { url = "https://files.pythonhosted.org/packages/b4/21/e2901381ed0df62e2308380f30d9c4d87d6b74e33a84faed3478d33a7197/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:60fc025437f9a7c2cc45e0c19ed68ed08ba672be2c5575fd9d98bdd8f01dd61f", size = 56348, upload-time = "2025-12-06T13:25:16.559Z" }, + { url = "https://files.pythonhosted.org/packages/c4/16/3d788388a178a0407aa814b976fe61bfa4af6760d9aac566e59da6e4a8b4/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:edc8446196f04b71d3af76c0bd1fe0a45066ac5bffecca88adb9626ee28c266f", size = 72842, upload-time = "2025-12-06T13:25:18.055Z" }, + { url = "https://files.pythonhosted.org/packages/a6/63/c15b1f8bd47ea48a5a2d52a4ec61f037062932ea6434ab916107b58e861e/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e99f6fa6509c037794da57f906ade271f52276c956d00f748e5b118462021d48", size = 62651, upload-time = "2025-12-06T13:25:19.191Z" }, + { url = "https://files.pythonhosted.org/packages/bd/b8/f544a2e37c778d59208966d4ef19742a0be37c12fc8149ff34483c176616/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d94020ef09f624d841aa9a3a6029df8cf65d60d7a6d5c8687579fa68bd679b65", size = 58295, upload-time = "2025-12-06T13:25:20.822Z" }, + { url = "https://files.pythonhosted.org/packages/03/99/1fae8a3b7ac181e36f6e7864a62d42d5b1f4fa7edf408c6711e28fba6b4d/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f64ce70d89942a23602dee910dec9b48e5edf94351e1b378186b74fcc00d7f66", size = 60960, upload-time = "2025-12-06T13:25:22.099Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9e/cd4c727742345ad8384569a4466f1a1428f4e5cc94d9c2ab2f53d30be3fe/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8ea99f56e45c469818b9781903be86ba4153769f007ba0655fa3b46dc332803d", size = 74863, upload-time = "2025-12-06T13:25:23.442Z" }, + { url = "https://files.pythonhosted.org/packages/28/86/a236ecfc5b494e1e922da149689f690abc84248c7c1358f5605b8c9fdd60/pybase64-1.4.3-cp314-cp314t-win32.whl", hash = "sha256:343b1901103cc72362fd1f842524e3bb24978e31aea7ff11e033af7f373f66ab", size = 34513, upload-time = "2025-12-06T13:25:24.592Z" }, + { url = "https://files.pythonhosted.org/packages/56/ce/ca8675f8d1352e245eb012bfc75429ee9cf1f21c3256b98d9a329d44bf0f/pybase64-1.4.3-cp314-cp314t-win_amd64.whl", hash = "sha256:57aff6f7f9dea6705afac9d706432049642de5b01080d3718acc23af87c5af76", size = 36702, upload-time = "2025-12-06T13:25:25.72Z" }, + { url = "https://files.pythonhosted.org/packages/3b/30/4a675864877397179b09b720ee5fcb1cf772cf7bebc831989aff0a5f79c1/pybase64-1.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:e906aa08d4331e799400829e0f5e4177e76a3281e8a4bc82ba114c6b30e405c9", size = 31904, upload-time = "2025-12-06T13:25:26.826Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7c/545fd4935a0e1ddd7147f557bf8157c73eecec9cffd523382fa7af2557de/pybase64-1.4.3-graalpy311-graalpy242_311_native-macosx_10_9_x86_64.whl", hash = "sha256:d27c1dfdb0c59a5e758e7a98bd78eaca5983c22f4a811a36f4f980d245df4611", size = 38393, upload-time = "2025-12-06T13:26:19.535Z" }, + { url = "https://files.pythonhosted.org/packages/c3/ca/ae7a96be9ddc96030d4e9dffc43635d4e136b12058b387fd47eb8301b60f/pybase64-1.4.3-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0f1a0c51d6f159511e3431b73c25db31095ee36c394e26a4349e067c62f434e5", size = 32109, upload-time = "2025-12-06T13:26:20.72Z" }, + { url = "https://files.pythonhosted.org/packages/bf/44/d4b7adc7bf4fd5b52d8d099121760c450a52c390223806b873f0b6a2d551/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a492518f3078a4e3faaef310697d21df9c6bc71908cebc8c2f6fbfa16d7d6b1f", size = 43227, upload-time = "2025-12-06T13:26:21.845Z" }, + { url = "https://files.pythonhosted.org/packages/08/86/2ba2d8734ef7939debeb52cf9952e457ba7aa226cae5c0e6dd631f9b851f/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cae1a0f47784fd16df90d8acc32011c8d5fcdd9ab392c9ec49543e5f6a9c43a4", size = 35804, upload-time = "2025-12-06T13:26:23.149Z" }, + { url = "https://files.pythonhosted.org/packages/4f/5b/19c725dc3aaa6281f2ce3ea4c1628d154a40dd99657d1381995f8096768b/pybase64-1.4.3-graalpy311-graalpy242_311_native-win_amd64.whl", hash = "sha256:03cea70676ffbd39a1ab7930a2d24c625b416cacc9d401599b1d29415a43ab6a", size = 35880, upload-time = "2025-12-06T13:26:24.663Z" }, + { url = "https://files.pythonhosted.org/packages/17/45/92322aec1b6979e789b5710f73c59f2172bc37c8ce835305434796824b7b/pybase64-1.4.3-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:2baaa092f3475f3a9c87ac5198023918ea8b6c125f4c930752ab2cbe3cd1d520", size = 38746, upload-time = "2025-12-06T13:26:25.869Z" }, + { url = "https://files.pythonhosted.org/packages/11/94/f1a07402870388fdfc2ecec0c718111189732f7d0f2d7fe1386e19e8fad0/pybase64-1.4.3-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:cde13c0764b1af07a631729f26df019070dad759981d6975527b7e8ecb465b6c", size = 32573, upload-time = "2025-12-06T13:26:27.792Z" }, + { url = "https://files.pythonhosted.org/packages/fa/8f/43c3bb11ca9bacf81cb0b7a71500bb65b2eda6d5fe07433c09b543de97f3/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5c29a582b0ea3936d02bd6fe9bf674ab6059e6e45ab71c78404ab2c913224414", size = 43461, upload-time = "2025-12-06T13:26:28.906Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4c/2a5258329200be57497d3972b5308558c6de42e3749c6cc2aa1cbe34b25a/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6b664758c804fa919b4f1257aa8cf68e95db76fc331de5f70bfc3a34655afe1", size = 36058, upload-time = "2025-12-06T13:26:30.092Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6d/41faa414cde66ec023b0ca8402a8f11cb61731c3dc27c082909cbbd1f929/pybase64-1.4.3-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:f7537fa22ae56a0bf51e4b0ffc075926ad91c618e1416330939f7ef366b58e3b", size = 36231, upload-time = "2025-12-06T13:26:31.656Z" }, + { url = "https://files.pythonhosted.org/packages/2a/cf/6e712491bd665ea8633efb0b484121893ea838d8e830e06f39f2aae37e58/pybase64-1.4.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94cf50c36bb2f8618982ee5a978c4beed9db97d35944fa96e8586dd953c7994a", size = 38007, upload-time = "2025-12-06T13:26:32.804Z" }, + { url = "https://files.pythonhosted.org/packages/38/c0/9272cae1c49176337dcdbd97511e2843faae1aaf5a5fb48569093c6cd4ce/pybase64-1.4.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:01bc3ff5ca1341685c6d2d945b035f442f7b9c3b068a5c6ee8408a41fda5754e", size = 31538, upload-time = "2025-12-06T13:26:34.001Z" }, + { url = "https://files.pythonhosted.org/packages/20/f2/17546f97befe429c73f622bbd869ceebb518c40fdb0dec4c4f98312e80a5/pybase64-1.4.3-pp310-pypy310_pp73-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:03d0aa3761a99034960496280c02aa063f856a3cc9b33771bc4eab0e4e72b5c2", size = 40682, upload-time = "2025-12-06T13:26:35.168Z" }, + { url = "https://files.pythonhosted.org/packages/92/a0/464b36d5dfb61f3da17858afaeaa876a9342d58e9f17803ce7f28b5de9e8/pybase64-1.4.3-pp310-pypy310_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7ca5b1ce768520acd6440280cdab35235b27ad2faacfcec064bc9c3377066ef1", size = 41306, upload-time = "2025-12-06T13:26:36.351Z" }, + { url = "https://files.pythonhosted.org/packages/07/c9/a748dfc0969a8d960ecf1e82c8a2a16046ffec22f8e7ece582aa3b1c6cf9/pybase64-1.4.3-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3caa1e2ddad1c50553ffaaa1c86b74b3f9fbd505bea9970326ab88fc68c4c184", size = 35452, upload-time = "2025-12-06T13:26:37.772Z" }, + { url = "https://files.pythonhosted.org/packages/95/b7/4d37bd3577d1aa6c732dc099087fe027c48873e223de3784b095e5653f8b/pybase64-1.4.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bd47076f736b27a8b0f9b30d93b6bb4f5af01b0dc8971f883ed3b75934f39a99", size = 36125, upload-time = "2025-12-06T13:26:39.78Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/160dded493c00d3376d4ad0f38a2119c5345de4a6693419ad39c3565959b/pybase64-1.4.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:277de6e03cc9090fb359365c686a2a3036d23aee6cd20d45d22b8c89d1247f17", size = 37939, upload-time = "2025-12-06T13:26:41.014Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/a0f10be8d648d6f8f26e560d6e6955efa7df0ff1e009155717454d76f601/pybase64-1.4.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab1dd8b1ed2d1d750260ed58ab40defaa5ba83f76a30e18b9ebd5646f6247ae5", size = 31466, upload-time = "2025-12-06T13:26:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/22/832a2f9e76cdf39b52e01e40d8feeb6a04cf105494f2c3e3126d0149717f/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:bd4d2293de9fd212e294c136cec85892460b17d24e8c18a6ba18750928037750", size = 40681, upload-time = "2025-12-06T13:26:43.782Z" }, + { url = "https://files.pythonhosted.org/packages/12/d7/6610f34a8972415fab3bb4704c174a1cc477bffbc3c36e526428d0f3957d/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af6d0d3a691911cc4c9a625f3ddcd3af720738c21be3d5c72de05629139d393", size = 41294, upload-time = "2025-12-06T13:26:44.936Z" }, + { url = "https://files.pythonhosted.org/packages/64/25/ed24400948a6c974ab1374a233cb7e8af0a5373cea0dd8a944627d17c34a/pybase64-1.4.3-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5cfc8c49a28322d82242088378f8542ce97459866ba73150b062a7073e82629d", size = 35447, upload-time = "2025-12-06T13:26:46.098Z" }, + { url = "https://files.pythonhosted.org/packages/ee/2b/e18ee7c5ee508a82897f021c1981533eca2940b5f072fc6ed0906c03a7a7/pybase64-1.4.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:debf737e09b8bf832ba86f5ecc3d3dbd0e3021d6cd86ba4abe962d6a5a77adb3", size = 36134, upload-time = "2025-12-06T13:26:47.35Z" }, +] + +[[package]] +name = "pycountry" +version = "26.2.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/1d/061b9e7a48b85cfd69f33c33d2ef784a531c359399ad764243399673c8f5/pycountry-26.2.16.tar.gz", hash = "sha256:5b6027d453fcd6060112b951dd010f01f168b51b4bf8a1f1fc8c95c8d94a0801", size = 7711342, upload-time = "2026-02-17T03:42:52.367Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/42/7703bd45b62fecd44cd7d3495423097e2f7d28bc2e99e7c1af68892ab157/pycountry-26.2.16-py3-none-any.whl", hash = "sha256:115c4baf7cceaa30f59a4694d79483c9167dbce7a9de4d3d571c5f3ea77c305a", size = 8044600, upload-time = "2026-02-17T03:42:49.777Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/90/32c9941e728d564b411d574d8ee0cf09b12ec978cb22b294995bae5549a5/pydantic_core-2.41.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146", size = 2107298, upload-time = "2025-11-04T13:39:04.116Z" }, + { url = "https://files.pythonhosted.org/packages/fb/a8/61c96a77fe28993d9a6fb0f4127e05430a267b235a124545d79fea46dd65/pydantic_core-2.41.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2", size = 1901475, upload-time = "2025-11-04T13:39:06.055Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b6/338abf60225acc18cdc08b4faef592d0310923d19a87fba1faf05af5346e/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97", size = 1918815, upload-time = "2025-11-04T13:39:10.41Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1c/2ed0433e682983d8e8cba9c8d8ef274d4791ec6a6f24c58935b90e780e0a/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9", size = 2065567, upload-time = "2025-11-04T13:39:12.244Z" }, + { url = "https://files.pythonhosted.org/packages/b3/24/cf84974ee7d6eae06b9e63289b7b8f6549d416b5c199ca2d7ce13bbcf619/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52", size = 2230442, upload-time = "2025-11-04T13:39:13.962Z" }, + { url = "https://files.pythonhosted.org/packages/fd/21/4e287865504b3edc0136c89c9c09431be326168b1eb7841911cbc877a995/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941", size = 2350956, upload-time = "2025-11-04T13:39:15.889Z" }, + { url = "https://files.pythonhosted.org/packages/a8/76/7727ef2ffa4b62fcab916686a68a0426b9b790139720e1934e8ba797e238/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a", size = 2068253, upload-time = "2025-11-04T13:39:17.403Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8c/a4abfc79604bcb4c748e18975c44f94f756f08fb04218d5cb87eb0d3a63e/pydantic_core-2.41.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c", size = 2177050, upload-time = "2025-11-04T13:39:19.351Z" }, + { url = "https://files.pythonhosted.org/packages/67/b1/de2e9a9a79b480f9cb0b6e8b6ba4c50b18d4e89852426364c66aa82bb7b3/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2", size = 2147178, upload-time = "2025-11-04T13:39:21Z" }, + { url = "https://files.pythonhosted.org/packages/16/c1/dfb33f837a47b20417500efaa0378adc6635b3c79e8369ff7a03c494b4ac/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556", size = 2341833, upload-time = "2025-11-04T13:39:22.606Z" }, + { url = "https://files.pythonhosted.org/packages/47/36/00f398642a0f4b815a9a558c4f1dca1b4020a7d49562807d7bc9ff279a6c/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49", size = 2321156, upload-time = "2025-11-04T13:39:25.843Z" }, + { url = "https://files.pythonhosted.org/packages/7e/70/cad3acd89fde2010807354d978725ae111ddf6d0ea46d1ea1775b5c1bd0c/pydantic_core-2.41.5-cp310-cp310-win32.whl", hash = "sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba", size = 1989378, upload-time = "2025-11-04T13:39:27.92Z" }, + { url = "https://files.pythonhosted.org/packages/76/92/d338652464c6c367e5608e4488201702cd1cbb0f33f7b6a85a60fe5f3720/pydantic_core-2.41.5-cp310-cp310-win_amd64.whl", hash = "sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9", size = 2013622, upload-time = "2025-11-04T13:39:29.848Z" }, + { url = "https://files.pythonhosted.org/packages/e8/72/74a989dd9f2084b3d9530b0915fdda64ac48831c30dbf7c72a41a5232db8/pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6", size = 2105873, upload-time = "2025-11-04T13:39:31.373Z" }, + { url = "https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b", size = 1899826, upload-time = "2025-11-04T13:39:32.897Z" }, + { url = "https://files.pythonhosted.org/packages/33/7f/1d5cab3ccf44c1935a359d51a8a2a9e1a654b744b5e7f80d41b88d501eec/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a", size = 1917869, upload-time = "2025-11-04T13:39:34.469Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6a/30d94a9674a7fe4f4744052ed6c5e083424510be1e93da5bc47569d11810/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8", size = 2063890, upload-time = "2025-11-04T13:39:36.053Z" }, + { url = "https://files.pythonhosted.org/packages/50/be/76e5d46203fcb2750e542f32e6c371ffa9b8ad17364cf94bb0818dbfb50c/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e", size = 2229740, upload-time = "2025-11-04T13:39:37.753Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ee/fed784df0144793489f87db310a6bbf8118d7b630ed07aa180d6067e653a/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1", size = 2350021, upload-time = "2025-11-04T13:39:40.94Z" }, + { url = "https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b", size = 2066378, upload-time = "2025-11-04T13:39:42.523Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3b/698cf8ae1d536a010e05121b4958b1257f0b5522085e335360e53a6b1c8b/pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b", size = 2175761, upload-time = "2025-11-04T13:39:44.553Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ba/15d537423939553116dea94ce02f9c31be0fa9d0b806d427e0308ec17145/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284", size = 2146303, upload-time = "2025-11-04T13:39:46.238Z" }, + { url = "https://files.pythonhosted.org/packages/58/7f/0de669bf37d206723795f9c90c82966726a2ab06c336deba4735b55af431/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594", size = 2340355, upload-time = "2025-11-04T13:39:48.002Z" }, + { url = "https://files.pythonhosted.org/packages/e5/de/e7482c435b83d7e3c3ee5ee4451f6e8973cff0eb6007d2872ce6383f6398/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e", size = 2319875, upload-time = "2025-11-04T13:39:49.705Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e6/8c9e81bb6dd7560e33b9053351c29f30c8194b72f2d6932888581f503482/pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b", size = 1987549, upload-time = "2025-11-04T13:39:51.842Z" }, + { url = "https://files.pythonhosted.org/packages/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe", size = 2011305, upload-time = "2025-11-04T13:39:53.485Z" }, + { url = "https://files.pythonhosted.org/packages/56/d8/0e271434e8efd03186c5386671328154ee349ff0354d83c74f5caaf096ed/pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f", size = 1972902, upload-time = "2025-11-04T13:39:56.488Z" }, + { url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" }, + { url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" }, + { url = "https://files.pythonhosted.org/packages/38/de/8c36b5198a29bdaade07b5985e80a233a5ac27137846f3bc2d3b40a47360/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75", size = 2052578, upload-time = "2025-11-04T13:40:04.401Z" }, + { url = "https://files.pythonhosted.org/packages/00/b5/0e8e4b5b081eac6cb3dbb7e60a65907549a1ce035a724368c330112adfdd/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05", size = 2208504, upload-time = "2025-11-04T13:40:06.072Z" }, + { url = "https://files.pythonhosted.org/packages/77/56/87a61aad59c7c5b9dc8caad5a41a5545cba3810c3e828708b3d7404f6cef/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc", size = 2335816, upload-time = "2025-11-04T13:40:07.835Z" }, + { url = "https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", size = 2075366, upload-time = "2025-11-04T13:40:09.804Z" }, + { url = "https://files.pythonhosted.org/packages/d3/43/ebef01f69baa07a482844faaa0a591bad1ef129253ffd0cdaa9d8a7f72d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5", size = 2171698, upload-time = "2025-11-04T13:40:12.004Z" }, + { url = "https://files.pythonhosted.org/packages/b1/87/41f3202e4193e3bacfc2c065fab7706ebe81af46a83d3e27605029c1f5a6/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", size = 2132603, upload-time = "2025-11-04T13:40:13.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/7d/4c00df99cb12070b6bccdef4a195255e6020a550d572768d92cc54dba91a/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294", size = 2329591, upload-time = "2025-11-04T13:40:15.672Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6a/ebf4b1d65d458f3cda6a7335d141305dfa19bdc61140a884d165a8a1bbc7/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", size = 2319068, upload-time = "2025-11-04T13:40:17.532Z" }, + { url = "https://files.pythonhosted.org/packages/49/3b/774f2b5cd4192d5ab75870ce4381fd89cf218af999515baf07e7206753f0/pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", size = 1985908, upload-time = "2025-11-04T13:40:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", size = 2020145, upload-time = "2025-11-04T13:40:21.548Z" }, + { url = "https://files.pythonhosted.org/packages/f9/22/91fbc821fa6d261b376a3f73809f907cec5ca6025642c463d3488aad22fb/pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", size = 1976179, upload-time = "2025-11-04T13:40:23.393Z" }, + { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, + { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, + { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, + { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, + { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, + { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, + { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, + { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, + { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, + { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, + { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, + { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, + { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, + { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, + { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, + { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, + { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, + { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, + { url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441, upload-time = "2025-11-04T13:42:39.557Z" }, + { url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291, upload-time = "2025-11-04T13:42:42.169Z" }, + { url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632, upload-time = "2025-11-04T13:42:44.564Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1b/687711069de7efa6af934e74f601e2a4307365e8fdc404703afc453eab26/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad", size = 2138905, upload-time = "2025-11-04T13:42:47.156Z" }, + { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, + { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, + { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b0/1a2aa41e3b5a4ba11420aba2d091b2d17959c8d1519ece3627c371951e73/pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8", size = 2103351, upload-time = "2025-11-04T13:43:02.058Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ee/31b1f0020baaf6d091c87900ae05c6aeae101fa4e188e1613c80e4f1ea31/pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a", size = 1925363, upload-time = "2025-11-04T13:43:05.159Z" }, + { url = "https://files.pythonhosted.org/packages/e1/89/ab8e86208467e467a80deaca4e434adac37b10a9d134cd2f99b28a01e483/pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b", size = 2135615, upload-time = "2025-11-04T13:43:08.116Z" }, + { url = "https://files.pythonhosted.org/packages/99/0a/99a53d06dd0348b2008f2f30884b34719c323f16c3be4e6cc1203b74a91d/pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2", size = 2175369, upload-time = "2025-11-04T13:43:12.49Z" }, + { url = "https://files.pythonhosted.org/packages/6d/94/30ca3b73c6d485b9bb0bc66e611cff4a7138ff9736b7e66bcf0852151636/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093", size = 2144218, upload-time = "2025-11-04T13:43:15.431Z" }, + { url = "https://files.pythonhosted.org/packages/87/57/31b4f8e12680b739a91f472b5671294236b82586889ef764b5fbc6669238/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a", size = 2329951, upload-time = "2025-11-04T13:43:18.062Z" }, + { url = "https://files.pythonhosted.org/packages/7d/73/3c2c8edef77b8f7310e6fb012dbc4b8551386ed575b9eb6fb2506e28a7eb/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963", size = 2318428, upload-time = "2025-11-04T13:43:20.679Z" }, + { url = "https://files.pythonhosted.org/packages/2f/02/8559b1f26ee0d502c74f9cca5c0d2fd97e967e083e006bbbb4e97f3a043a/pydantic_core-2.41.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a", size = 2147009, upload-time = "2025-11-04T13:43:23.286Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9b/1b3f0e9f9305839d7e84912f9e8bfbd191ed1b1ef48083609f0dabde978c/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26", size = 2101980, upload-time = "2025-11-04T13:43:25.97Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ed/d71fefcb4263df0da6a85b5d8a7508360f2f2e9b3bf5814be9c8bccdccc1/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808", size = 1923865, upload-time = "2025-11-04T13:43:28.763Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3a/626b38db460d675f873e4444b4bb030453bbe7b4ba55df821d026a0493c4/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc", size = 2134256, upload-time = "2025-11-04T13:43:31.71Z" }, + { url = "https://files.pythonhosted.org/packages/83/d9/8412d7f06f616bbc053d30cb4e5f76786af3221462ad5eee1f202021eb4e/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1", size = 2174762, upload-time = "2025-11-04T13:43:34.744Z" }, + { url = "https://files.pythonhosted.org/packages/55/4c/162d906b8e3ba3a99354e20faa1b49a85206c47de97a639510a0e673f5da/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84", size = 2143141, upload-time = "2025-11-04T13:43:37.701Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f2/f11dd73284122713f5f89fc940f370d035fa8e1e078d446b3313955157fe/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770", size = 2330317, upload-time = "2025-11-04T13:43:40.406Z" }, + { url = "https://files.pythonhosted.org/packages/88/9d/b06ca6acfe4abb296110fb1273a4d848a0bfb2ff65f3ee92127b3244e16b/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f", size = 2316992, upload-time = "2025-11-04T13:43:43.602Z" }, + { url = "https://files.pythonhosted.org/packages/36/c7/cfc8e811f061c841d7990b0201912c3556bfeb99cdcb7ed24adc8d6f8704/pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51", size = 2145302, upload-time = "2025-11-04T13:43:46.64Z" }, +] + +[[package]] +name = "pydantic-extra-types" +version = "2.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/71/dba38ee2651f84f7842206adbd2233d8bbdb59fb85e9fa14232486a8c471/pydantic_extra_types-2.11.1.tar.gz", hash = "sha256:46792d2307383859e923d8fcefa82108b1a141f8a9c0198982b3832ab5ef1049", size = 172002, upload-time = "2026-03-16T08:08:03.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/c1/3226e6d7f5a4f736f38ac11a6fbb262d701889802595cdb0f53a885ac2e0/pydantic_extra_types-2.11.1-py3-none-any.whl", hash = "sha256:1722ea2bddae5628ace25f2aa685b69978ef533123e5638cfbddb999e0100ec1", size = 79526, upload-time = "2026-03-16T08:08:02.533Z" }, +] + +[package.optional-dependencies] +pycountry = [ + { name = "pycountry" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/6d/fffca34caecc4a3f97bda81b2098da5e8ab7efc9a66e819074a11955d87e/pydantic_settings-2.13.1.tar.gz", hash = "sha256:b4c11847b15237fb0171e1462bf540e294affb9b86db4d9aa5c01730bdbe4025", size = 223826, upload-time = "2026-02-19T13:45:08.055Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl", hash = "sha256:d56fd801823dbeae7f0975e1f8c8e25c258eb75d278ea7abb5d9cebb01b56237", size = 58929, upload-time = "2026-02-19T13:45:06.034Z" }, +] + +[[package]] +name = "pydub" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/9a/e6bca0eed82db26562c73b5076539a4a08d3cffd19c3cc5913a3e61145fd/pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f", size = 38326, upload-time = "2021-03-10T02:09:54.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6", size = 32327, upload-time = "2021-03-10T02:09:53.503Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c2/27/a3b6e5bf6ff856d2509292e95c8f57f0df7017cf5394921fc4e4ef40308a/pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b", size = 102564, upload-time = "2026-03-13T19:27:37.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/7a/8dd906bd22e79e47397a61742927f6747fe93242ef86645ee9092e610244/pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c", size = 29726, upload-time = "2026-03-13T19:27:35.677Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pypika" +version = "0.51.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/78/cbaebba88e05e2dcda13ca203131b38d3640219f20ebb49676d26714861b/pypika-0.51.1.tar.gz", hash = "sha256:c30c7c1048fbf056fd3920c5a2b88b0c29dd190a9b2bee971fd17e4abe4d0ebe", size = 80919, upload-time = "2026-02-04T11:27:48.304Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/83/c77dfeed04022e8930b08eedca2b6e5efed256ab3321396fde90066efb65/pypika-0.51.1-py2.py3-none-any.whl", hash = "sha256:77985b4d7ce71b9905255bf12468cf598349e98837c037541cfc240e528aec46", size = 60585, upload-time = "2026-02-04T11:27:46.251Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "pytest" +version = "9.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, +] + +[[package]] +name = "pytest-cov" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", extra = ["toml"] }, + { name = "pluggy" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115, upload-time = "2024-01-23T06:33:00.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863, upload-time = "2024-01-23T06:32:58.246Z" }, +] + +[[package]] +name = "python-json-logger" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/ff/3cc9165fd44106973cd7ac9facb674a65ed853494592541d339bdc9a30eb/python_json_logger-4.1.0.tar.gz", hash = "sha256:b396b9e3ed782b09ff9d6e4f1683d46c83ad0d35d2e407c09a9ebbf038f88195", size = 17573, upload-time = "2026-03-29T04:39:56.805Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl", hash = "sha256:132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2", size = 15021, upload-time = "2026-03-29T04:39:55.266Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.24" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/45/e23b5dc14ddb9918ae4a625379506b17b6f8fc56ca1d82db62462f59aea6/python_multipart-0.0.24.tar.gz", hash = "sha256:9574c97e1c026e00bc30340ef7c7d76739512ab4dfd428fec8c330fa6a5cc3c8", size = 37695, upload-time = "2026-04-05T20:49:13.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/73/89930efabd4da63cea44a3f438aeb753d600123570e6d6264e763617a9ce/python_multipart-0.0.24-py3-none-any.whl", hash = "sha256:9b110a98db707df01a53c194f0af075e736a770dc5058089650d70b4a182f950", size = 24420, upload-time = "2026-04-05T20:49:12.555Z" }, +] + +[[package]] +name = "pytz" +version = "2026.1.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/db/b8721d71d945e6a8ac63c0fc900b2067181dbb50805958d4d4661cf7d277/pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1", size = 321088, upload-time = "2026-03-03T07:47:50.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a", size = 510489, upload-time = "2026-03-03T07:47:49.167Z" }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432, upload-time = "2025-07-14T20:13:05.9Z" }, + { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103, upload-time = "2025-07-14T20:13:07.698Z" }, + { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557, upload-time = "2025-07-14T20:13:11.11Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, + { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, + { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "pyzmq" +version = "27.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850, upload-time = "2025-09-08T23:07:26.274Z" }, + { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380, upload-time = "2025-09-08T23:07:29.78Z" }, + { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421, upload-time = "2025-09-08T23:07:31.263Z" }, + { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149, upload-time = "2025-09-08T23:07:33.17Z" }, + { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070, upload-time = "2025-09-08T23:07:35.205Z" }, + { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441, upload-time = "2025-09-08T23:07:37.432Z" }, + { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529, upload-time = "2025-09-08T23:07:39.047Z" }, + { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276, upload-time = "2025-09-08T23:07:40.695Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208, upload-time = "2025-09-08T23:07:42.298Z" }, + { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766, upload-time = "2025-09-08T23:07:43.869Z" }, + { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328, upload-time = "2025-09-08T23:07:45.946Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803, upload-time = "2025-09-08T23:07:47.551Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836, upload-time = "2025-09-08T23:07:49.436Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038, upload-time = "2025-09-08T23:07:51.234Z" }, + { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531, upload-time = "2025-09-08T23:07:52.795Z" }, + { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786, upload-time = "2025-09-08T23:07:55.047Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220, upload-time = "2025-09-08T23:07:57.172Z" }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155, upload-time = "2025-09-08T23:07:59.05Z" }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428, upload-time = "2025-09-08T23:08:00.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497, upload-time = "2025-09-08T23:08:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload-time = "2025-09-08T23:08:03.807Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload-time = "2025-09-08T23:08:05.301Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload-time = "2025-09-08T23:08:08.396Z" }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload-time = "2025-09-08T23:08:11.907Z" }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload-time = "2025-09-08T23:08:13.513Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, + { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, + { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266, upload-time = "2025-09-08T23:09:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206, upload-time = "2025-09-08T23:09:41.902Z" }, + { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747, upload-time = "2025-09-08T23:09:43.741Z" }, + { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371, upload-time = "2025-09-08T23:09:45.575Z" }, + { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862, upload-time = "2025-09-08T23:09:47.448Z" }, + { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265, upload-time = "2025-09-08T23:09:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208, upload-time = "2025-09-08T23:09:51.073Z" }, + { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371, upload-time = "2025-09-08T23:09:54.563Z" }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, +] + +[[package]] +name = "quack-kernels" +version = "0.3.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "apache-tvm-ffi" }, + { name = "nvidia-cutlass-dsl" }, + { name = "torch" }, + { name = "torch-c-dlpack-ext" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7b/db/d2e480fd71c38b88ffcbf40298d604400c64e0ffcaa06d6aa61a87b2673a/quack_kernels-0.3.9.tar.gz", hash = "sha256:4fd272f52142e408a591b94be7c6a0261e222e034e599bce6da827eeae8ad04d", size = 212760, upload-time = "2026-04-05T06:34:58.642Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/a8/eea5885361143c19505a8e86890a681c363ac0f9ac6ba02b5c2c82ebe44b/quack_kernels-0.3.9-py3-none-any.whl", hash = "sha256:160364a32fd72df6e934adb2bb2ae324843ddccffc88aaa6f5de4c9a00ec7ac8", size = 216038, upload-time = "2026-04-05T06:34:57.426Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "regex" +version = "2026.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/0e/3a246dbf05666918bd3664d9d787f84a9108f6f43cc953a077e4a7dfdb7e/regex-2026.4.4.tar.gz", hash = "sha256:e08270659717f6973523ce3afbafa53515c4dc5dcad637dc215b6fd50f689423", size = 416000, upload-time = "2026-04-03T20:56:28.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/59/fd98f8fd54b3feaa76a855324c676c17668c5a1121ec91b7ec96b01bf865/regex-2026.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:74fa82dcc8143386c7c0392e18032009d1db715c25f4ba22d23dc2e04d02a20f", size = 489403, upload-time = "2026-04-03T20:52:39.742Z" }, + { url = "https://files.pythonhosted.org/packages/6c/64/d0f222f68e3579d50babf0e4fcc9c9639ef0587fecc00b15e1e46bfc32fa/regex-2026.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a85b620a388d6c9caa12189233109e236b3da3deffe4ff11b84ae84e218a274f", size = 291208, upload-time = "2026-04-03T20:52:42.943Z" }, + { url = "https://files.pythonhosted.org/packages/16/7f/3fab9709b0b0060ba81a04b8a107b34147cd14b9c5551b772154d6505504/regex-2026.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2895506ebe32cc63eeed8f80e6eae453171cfccccab35b70dc3129abec35a5b8", size = 289214, upload-time = "2026-04-03T20:52:44.648Z" }, + { url = "https://files.pythonhosted.org/packages/14/bc/f5dcf04fd462139dcd75495c02eee22032ef741cfa151386a39c3f5fc9b5/regex-2026.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6780f008ee81381c737634e75c24e5a6569cc883c4f8e37a37917ee79efcafd9", size = 785505, upload-time = "2026-04-03T20:52:46.35Z" }, + { url = "https://files.pythonhosted.org/packages/37/36/8a906e216d5b4de7ec3788c1d589b45db40c1c9580cd7b326835cfc976d4/regex-2026.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:88e9b048345c613f253bea4645b2fe7e579782b82cac99b1daad81e29cc2ed8e", size = 852129, upload-time = "2026-04-03T20:52:48.661Z" }, + { url = "https://files.pythonhosted.org/packages/a5/bb/bad2d79be0917a6ef31f5e0f161d9265cb56fd90a3ae1d2e8d991882a48b/regex-2026.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:be061028481186ba62a0f4c5f1cc1e3d5ab8bce70c89236ebe01023883bc903b", size = 899578, upload-time = "2026-04-03T20:52:50.61Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b9/7cd0ceb58cd99c70806241636640ae15b4a3fe62e22e9b99afa67a0d7965/regex-2026.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d2228c02b368d69b724c36e96d3d1da721561fb9cc7faa373d7bf65e07d75cb5", size = 793634, upload-time = "2026-04-03T20:52:53Z" }, + { url = "https://files.pythonhosted.org/packages/2c/fb/c58e3ea40ed183806ccbac05c29a3e8c2f88c1d3a66ed27860d5cad7c62d/regex-2026.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0540e5b733618a2f84e9cb3e812c8afa82e151ca8e19cf6c4e95c5a65198236f", size = 786210, upload-time = "2026-04-03T20:52:54.713Z" }, + { url = "https://files.pythonhosted.org/packages/54/a9/53790fc7a6c948a7be2bc7214fd9cabdd0d1ba561b0f401c91f4ff0357f0/regex-2026.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cf9b1b2e692d4877880388934ac746c99552ce6bf40792a767fd42c8c99f136d", size = 769930, upload-time = "2026-04-03T20:52:56.825Z" }, + { url = "https://files.pythonhosted.org/packages/e3/3c/29ca44729191c79f5476538cd0fa04fa2553b3c45508519ecea4c7afa8f6/regex-2026.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:011bb48bffc1b46553ac704c975b3348717f4e4aa7a67522b51906f99da1820c", size = 774892, upload-time = "2026-04-03T20:52:58.934Z" }, + { url = "https://files.pythonhosted.org/packages/3e/db/6ae74ef8a4cfead341c367e4eed45f71fb1aaba35827a775eed4f1ba4f74/regex-2026.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8512fcdb43f1bf18582698a478b5ab73f9c1667a5b7548761329ef410cd0a760", size = 848816, upload-time = "2026-04-03T20:53:00.684Z" }, + { url = "https://files.pythonhosted.org/packages/53/9a/f7f2c1c6b610d7c6de1c3dc5951effd92c324b1fde761af2044b4721020f/regex-2026.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:867bddc63109a0276f5a31999e4c8e0eb7bbbad7d6166e28d969a2c1afeb97f9", size = 758363, upload-time = "2026-04-03T20:53:02.155Z" }, + { url = "https://files.pythonhosted.org/packages/dd/55/e5386d393bbf8b43c8b084703a46d635e7b2bdc6e0f5909a2619ea1125f1/regex-2026.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1b9a00b83f3a40e09859c78920571dcb83293c8004079653dd22ec14bbfa98c7", size = 837122, upload-time = "2026-04-03T20:53:03.727Z" }, + { url = "https://files.pythonhosted.org/packages/01/da/cc78710ea2e60b10bacfcc9beb18c67514200ab03597b3b2b319995785c2/regex-2026.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e355be718caf838aa089870259cf1776dc2a4aa980514af9d02c59544d9a8b22", size = 782140, upload-time = "2026-04-03T20:53:05.608Z" }, + { url = "https://files.pythonhosted.org/packages/a2/5f/c7bcba41529105d6c2ca7080ecab7184cd00bee2e1ad1fdea80e618704ea/regex-2026.4.4-cp310-cp310-win32.whl", hash = "sha256:33bfda9684646d323414df7abe5692c61d297dbb0530b28ec66442e768813c59", size = 266225, upload-time = "2026-04-03T20:53:07.342Z" }, + { url = "https://files.pythonhosted.org/packages/eb/26/a745729c2c49354ec4f4bce168f29da932ca01b4758227686cc16c7dde1b/regex-2026.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:0709f22a56798457ae317bcce42aacee33c680068a8f14097430d9f9ba364bee", size = 278393, upload-time = "2026-04-03T20:53:08.65Z" }, + { url = "https://files.pythonhosted.org/packages/87/8b/4327eeb9dbb4b098ebecaf02e9f82b79b6077beeb54c43d9a0660cf7c44c/regex-2026.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:ee9627de8587c1a22201cb16d0296ab92b4df5cdcb5349f4e9744d61db7c7c98", size = 270470, upload-time = "2026-04-03T20:53:10.018Z" }, + { url = "https://files.pythonhosted.org/packages/e0/7a/617356cbecdb452812a5d42f720d6d5096b360d4a4c1073af700ea140ad2/regex-2026.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4c36a85b00fadb85db9d9e90144af0a980e1a3d2ef9cd0f8a5bef88054657c6", size = 489415, upload-time = "2026-04-03T20:53:11.645Z" }, + { url = "https://files.pythonhosted.org/packages/20/e6/bf057227144d02e3ba758b66649e87531d744dda5f3254f48660f18ae9d8/regex-2026.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dcb5453ecf9cd58b562967badd1edbf092b0588a3af9e32ee3d05c985077ce87", size = 291205, upload-time = "2026-04-03T20:53:13.289Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3b/637181b787dd1a820ba1c712cee2b4144cd84a32dc776ca067b12b2d70c8/regex-2026.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6aa809ed4dc3706cc38594d67e641601bd2f36d5555b2780ff074edfcb136cf8", size = 289225, upload-time = "2026-04-03T20:53:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/05/21/bac05d806ed02cd4b39d9c8e5b5f9a2998c94c3a351b7792e80671fa5315/regex-2026.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33424f5188a7db12958246a54f59a435b6cb62c5cf9c8d71f7cc49475a5fdada", size = 792434, upload-time = "2026-04-03T20:53:17.414Z" }, + { url = "https://files.pythonhosted.org/packages/d9/17/c65d1d8ae90b772d5758eb4014e1e011bb2db353fc4455432e6cc9100df7/regex-2026.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7d346fccdde28abba117cc9edc696b9518c3307fbfcb689e549d9b5979018c6d", size = 861730, upload-time = "2026-04-03T20:53:18.903Z" }, + { url = "https://files.pythonhosted.org/packages/ad/64/933321aa082a2c6ee2785f22776143ba89840189c20d3b6b1d12b6aae16b/regex-2026.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:415a994b536440f5011aa77e50a4274d15da3245e876e5c7f19da349caaedd87", size = 906495, upload-time = "2026-04-03T20:53:20.561Z" }, + { url = "https://files.pythonhosted.org/packages/01/ea/4c8d306e9c36ac22417336b1e02e7b358152c34dc379673f2d331143725f/regex-2026.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21e5eb86179b4c67b5759d452ea7c48eb135cd93308e7a260aa489ed2eb423a4", size = 799810, upload-time = "2026-04-03T20:53:22.961Z" }, + { url = "https://files.pythonhosted.org/packages/29/ce/7605048f00e1379eba89d610c7d644d8f695dc9b26d3b6ecfa3132b872ff/regex-2026.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:312ec9dd1ae7d96abd8c5a36a552b2139931914407d26fba723f9e53c8186f86", size = 774242, upload-time = "2026-04-03T20:53:25.015Z" }, + { url = "https://files.pythonhosted.org/packages/e9/77/283e0d5023fde22cd9e86190d6d9beb21590a452b195ffe00274de470691/regex-2026.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a0d2b28aa1354c7cd7f71b7658c4326f7facac106edd7f40eda984424229fd59", size = 781257, upload-time = "2026-04-03T20:53:26.918Z" }, + { url = "https://files.pythonhosted.org/packages/8b/fb/7f3b772be101373c8626ed34c5d727dcbb8abd42a7b1219bc25fd9a3cc04/regex-2026.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:349d7310eddff40429a099c08d995c6d4a4bfaf3ff40bd3b5e5cb5a5a3c7d453", size = 854490, upload-time = "2026-04-03T20:53:29.065Z" }, + { url = "https://files.pythonhosted.org/packages/85/30/56547b80f34f4dd2986e1cdd63b1712932f63b6c4ce2f79c50a6cd79d1c2/regex-2026.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:e7ab63e9fe45a9ec3417509e18116b367e89c9ceb6219222a3396fa30b147f80", size = 763544, upload-time = "2026-04-03T20:53:30.917Z" }, + { url = "https://files.pythonhosted.org/packages/ac/2f/ce060fdfea8eff34a8997603532e44cdb7d1f35e3bc253612a8707a90538/regex-2026.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fe896e07a5a2462308297e515c0054e9ec2dd18dfdc9427b19900b37dfe6f40b", size = 844442, upload-time = "2026-04-03T20:53:32.463Z" }, + { url = "https://files.pythonhosted.org/packages/e5/44/810cb113096a1dacbe82789fbfab2823f79d19b7f1271acecb7009ba9b88/regex-2026.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eb59c65069498dbae3c0ef07bbe224e1eaa079825a437fb47a479f0af11f774f", size = 789162, upload-time = "2026-04-03T20:53:34.039Z" }, + { url = "https://files.pythonhosted.org/packages/20/96/9647dd7f2ecf6d9ce1fb04dfdb66910d094e10d8fe53e9c15096d8aa0bd2/regex-2026.4.4-cp311-cp311-win32.whl", hash = "sha256:2a5d273181b560ef8397c8825f2b9d57013de744da9e8257b8467e5da8599351", size = 266227, upload-time = "2026-04-03T20:53:35.601Z" }, + { url = "https://files.pythonhosted.org/packages/33/80/74e13262460530c3097ff343a17de9a34d040a5dc4de9cf3a8241faab51c/regex-2026.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:9542ccc1e689e752594309444081582f7be2fdb2df75acafea8a075108566735", size = 278399, upload-time = "2026-04-03T20:53:37.021Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3c/39f19f47f19dcefa3403f09d13562ca1c0fd07ab54db2bc03148f3f6b46a/regex-2026.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:b5f9fb784824a042be3455b53d0b112655686fdb7a91f88f095f3fee1e2a2a54", size = 270473, upload-time = "2026-04-03T20:53:38.633Z" }, + { url = "https://files.pythonhosted.org/packages/e5/28/b972a4d3df61e1d7bcf1b59fdb3cddef22f88b6be43f161bb41ebc0e4081/regex-2026.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c07ab8794fa929e58d97a0e1796b8b76f70943fa39df225ac9964615cf1f9d52", size = 490434, upload-time = "2026-04-03T20:53:40.219Z" }, + { url = "https://files.pythonhosted.org/packages/84/20/30041446cf6dc3e0eab344fc62770e84c23b6b68a3b657821f9f80cb69b4/regex-2026.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c785939dc023a1ce4ec09599c032cc9933d258a998d16ca6f2b596c010940eb", size = 292061, upload-time = "2026-04-03T20:53:41.862Z" }, + { url = "https://files.pythonhosted.org/packages/62/c8/3baa06d75c98c46d4cc4262b71fd2edb9062b5665e868bca57859dadf93a/regex-2026.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b1ce5c81c9114f1ce2f9288a51a8fd3aeea33a0cc440c415bf02da323aa0a76", size = 289628, upload-time = "2026-04-03T20:53:43.701Z" }, + { url = "https://files.pythonhosted.org/packages/31/87/3accf55634caad8c0acab23f5135ef7d4a21c39f28c55c816ae012931408/regex-2026.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:760ef21c17d8e6a4fe8cf406a97cf2806a4df93416ccc82fc98d25b1c20425be", size = 796651, upload-time = "2026-04-03T20:53:45.379Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0c/aaa2c83f34efedbf06f61cb1942c25f6cf1ee3b200f832c4d05f28306c2e/regex-2026.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7088fcdcb604a4417c208e2169715800d28838fefd7455fbe40416231d1d47c1", size = 865916, upload-time = "2026-04-03T20:53:47.064Z" }, + { url = "https://files.pythonhosted.org/packages/d9/f6/8c6924c865124643e8f37823eca845dc27ac509b2ee58123685e71cd0279/regex-2026.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:07edca1ba687998968f7db5bc355288d0c6505caa7374f013d27356d93976d13", size = 912287, upload-time = "2026-04-03T20:53:49.422Z" }, + { url = "https://files.pythonhosted.org/packages/11/0e/a9f6f81013e0deaf559b25711623864970fe6a098314e374ccb1540a4152/regex-2026.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:993f657a7c1c6ec51b5e0ba97c9817d06b84ea5fa8d82e43b9405de0defdc2b9", size = 801126, upload-time = "2026-04-03T20:53:51.096Z" }, + { url = "https://files.pythonhosted.org/packages/71/61/3a0cc8af2dc0c8deb48e644dd2521f173f7e6513c6e195aad9aa8dd77ac5/regex-2026.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2b69102a743e7569ebee67e634a69c4cb7e59d6fa2e1aa7d3bdbf3f61435f62d", size = 776788, upload-time = "2026-04-03T20:53:52.889Z" }, + { url = "https://files.pythonhosted.org/packages/64/0b/8bb9cbf21ef7dee58e49b0fdb066a7aded146c823202e16494a36777594f/regex-2026.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dac006c8b6dda72d86ea3d1333d45147de79a3a3f26f10c1cf9287ca4ca0ac3", size = 785184, upload-time = "2026-04-03T20:53:55.627Z" }, + { url = "https://files.pythonhosted.org/packages/99/c2/d3e80e8137b25ee06c92627de4e4d98b94830e02b3e6f81f3d2e3f504cf5/regex-2026.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:50a766ee2010d504554bfb5f578ed2e066898aa26411d57e6296230627cdefa0", size = 859913, upload-time = "2026-04-03T20:53:57.249Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/9d5d876157d969c804622456ef250017ac7a8f83e0e14f903b9e6df5ce95/regex-2026.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9e2f5217648f68e3028c823df58663587c1507a5ba8419f4fdfc8a461be76043", size = 765732, upload-time = "2026-04-03T20:53:59.428Z" }, + { url = "https://files.pythonhosted.org/packages/82/80/b568935b4421388561c8ed42aff77247285d3ae3bb2a6ca22af63bae805e/regex-2026.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:39d8de85a08e32632974151ba59c6e9140646dcc36c80423962b1c5c0a92e244", size = 852152, upload-time = "2026-04-03T20:54:01.505Z" }, + { url = "https://files.pythonhosted.org/packages/39/29/f0f81217e21cd998245da047405366385d5c6072048038a3d33b37a79dc0/regex-2026.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55d9304e0e7178dfb1e106c33edf834097ddf4a890e2f676f6c5118f84390f73", size = 789076, upload-time = "2026-04-03T20:54:03.323Z" }, + { url = "https://files.pythonhosted.org/packages/49/1d/1d957a61976ab9d4e767dd4f9d04b66cc0c41c5e36cf40e2d43688b5ae6f/regex-2026.4.4-cp312-cp312-win32.whl", hash = "sha256:04bb679bc0bde8a7bfb71e991493d47314e7b98380b083df2447cda4b6edb60f", size = 266700, upload-time = "2026-04-03T20:54:05.639Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/bf575d396aeb58ea13b06ef2adf624f65b70fafef6950a80fc3da9cae3bc/regex-2026.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:db0ac18435a40a2543dbb3d21e161a6c78e33e8159bd2e009343d224bb03bb1b", size = 277768, upload-time = "2026-04-03T20:54:07.312Z" }, + { url = "https://files.pythonhosted.org/packages/c9/27/049df16ec6a6828ccd72add3c7f54b4df029669bea8e9817df6fff58be90/regex-2026.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:4ce255cc05c1947a12989c6db801c96461947adb7a59990f1360b5983fab4983", size = 270568, upload-time = "2026-04-03T20:54:09.484Z" }, + { url = "https://files.pythonhosted.org/packages/9d/83/c4373bc5f31f2cf4b66f9b7c31005bd87fe66f0dce17701f7db4ee79ee29/regex-2026.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:62f5519042c101762509b1d717b45a69c0139d60414b3c604b81328c01bd1943", size = 490273, upload-time = "2026-04-03T20:54:11.202Z" }, + { url = "https://files.pythonhosted.org/packages/46/f8/fe62afbcc3cf4ad4ac9adeaafd98aa747869ae12d3e8e2ac293d0593c435/regex-2026.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3790ba9fb5dd76715a7afe34dbe603ba03f8820764b1dc929dd08106214ed031", size = 291954, upload-time = "2026-04-03T20:54:13.412Z" }, + { url = "https://files.pythonhosted.org/packages/5a/92/4712b9fe6a33d232eeb1c189484b80c6c4b8422b90e766e1195d6e758207/regex-2026.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8fae3c6e795d7678963f2170152b0d892cf6aee9ee8afc8c45e6be38d5107fe7", size = 289487, upload-time = "2026-04-03T20:54:15.824Z" }, + { url = "https://files.pythonhosted.org/packages/88/2c/f83b93f85e01168f1070f045a42d4c937b69fdb8dd7ae82d307253f7e36e/regex-2026.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:298c3ec2d53225b3bf91142eb9691025bab610e0c0c51592dde149db679b3d17", size = 796646, upload-time = "2026-04-03T20:54:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/df/55/61a2e17bf0c4dc57e11caf8dd11771280d8aaa361785f9e3bc40d653f4a7/regex-2026.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e9638791082eaf5b3ac112c587518ee78e083a11c4b28012d8fe2a0f536dfb17", size = 865904, upload-time = "2026-04-03T20:54:20.019Z" }, + { url = "https://files.pythonhosted.org/packages/45/32/1ac8ed1b5a346b5993a3d256abe0a0f03b0b73c8cc88d928537368ac65b6/regex-2026.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ae3e764bd4c5ff55035dc82a8d49acceb42a5298edf6eb2fc4d328ee5dd7afae", size = 912304, upload-time = "2026-04-03T20:54:22.403Z" }, + { url = "https://files.pythonhosted.org/packages/26/47/2ee5c613ab546f0eddebf9905d23e07beb933416b1246c2d8791d01979b4/regex-2026.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ffa81f81b80047ba89a3c69ae6a0f78d06f4a42ce5126b0eb2a0a10ad44e0b2e", size = 801126, upload-time = "2026-04-03T20:54:24.308Z" }, + { url = "https://files.pythonhosted.org/packages/75/cd/41dacd129ca9fd20bd7d02f83e0fad83e034ac8a084ec369c90f55ef37e2/regex-2026.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f56ebf9d70305307a707911b88469213630aba821e77de7d603f9d2f0730687d", size = 776772, upload-time = "2026-04-03T20:54:26.319Z" }, + { url = "https://files.pythonhosted.org/packages/89/6d/5af0b588174cb5f46041fa7dd64d3fd5cd2fe51f18766703d1edc387f324/regex-2026.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:773d1dfd652bbffb09336abf890bfd64785c7463716bf766d0eb3bc19c8b7f27", size = 785228, upload-time = "2026-04-03T20:54:28.387Z" }, + { url = "https://files.pythonhosted.org/packages/b7/3b/f5a72b7045bd59575fc33bf1345f156fcfd5a8484aea6ad84b12c5a82114/regex-2026.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d51d20befd5275d092cdffba57ded05f3c436317ee56466c8928ac32d960edaf", size = 860032, upload-time = "2026-04-03T20:54:30.641Z" }, + { url = "https://files.pythonhosted.org/packages/39/a4/72a317003d6fcd7a573584a85f59f525dfe8f67e355ca74eb6b53d66a5e2/regex-2026.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:0a51cdb3c1e9161154f976cb2bef9894bc063ac82f31b733087ffb8e880137d0", size = 765714, upload-time = "2026-04-03T20:54:32.789Z" }, + { url = "https://files.pythonhosted.org/packages/25/1e/5672e16f34dbbcb2560cc7e6a2fbb26dfa8b270711e730101da4423d3973/regex-2026.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ae5266a82596114e41fb5302140e9630204c1b5f325c770bec654b95dd54b0aa", size = 852078, upload-time = "2026-04-03T20:54:34.546Z" }, + { url = "https://files.pythonhosted.org/packages/f7/0d/c813f0af7c6cc7ed7b9558bac2e5120b60ad0fa48f813e4d4bd55446f214/regex-2026.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c882cd92ec68585e9c1cf36c447ec846c0d94edd706fe59e0c198e65822fd23b", size = 789181, upload-time = "2026-04-03T20:54:36.642Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6d/a344608d1adbd2a95090ddd906cec09a11be0e6517e878d02a5123e0917f/regex-2026.4.4-cp313-cp313-win32.whl", hash = "sha256:05568c4fbf3cb4fa9e28e3af198c40d3237cf6041608a9022285fe567ec3ad62", size = 266690, upload-time = "2026-04-03T20:54:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/31/07/54049f89b46235ca6f45cd6c88668a7050e77d4a15555e47dd40fde75263/regex-2026.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:3384df51ed52db0bea967e21458ab0a414f67cdddfd94401688274e55147bb81", size = 277733, upload-time = "2026-04-03T20:54:40.11Z" }, + { url = "https://files.pythonhosted.org/packages/0e/21/61366a8e20f4d43fb597708cac7f0e2baadb491ecc9549b4980b2be27d16/regex-2026.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:acd38177bd2c8e69a411d6521760806042e244d0ef94e2dd03ecdaa8a3c99427", size = 270565, upload-time = "2026-04-03T20:54:41.883Z" }, + { url = "https://files.pythonhosted.org/packages/f1/1e/3a2b9672433bef02f5d39aa1143ca2c08f311c1d041c464a42be9ae648dc/regex-2026.4.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f94a11a9d05afcfcfa640e096319720a19cc0c9f7768e1a61fceee6a3afc6c7c", size = 494126, upload-time = "2026-04-03T20:54:43.602Z" }, + { url = "https://files.pythonhosted.org/packages/4e/4b/c132a4f4fe18ad3340d89fcb56235132b69559136036b845be3c073142ed/regex-2026.4.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:36bcb9d6d1307ab629edc553775baada2aefa5c50ccc0215fbfd2afcfff43141", size = 293882, upload-time = "2026-04-03T20:54:45.41Z" }, + { url = "https://files.pythonhosted.org/packages/f4/5f/eaa38092ce7a023656280f2341dbbd4ad5f05d780a70abba7bb4f4bea54c/regex-2026.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261c015b3e2ed0919157046d768774ecde57f03d8fa4ba78d29793447f70e717", size = 292334, upload-time = "2026-04-03T20:54:47.051Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f6/dd38146af1392dac33db7074ab331cec23cced3759167735c42c5460a243/regex-2026.4.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c228cf65b4a54583763645dcd73819b3b381ca8b4bb1b349dee1c135f4112c07", size = 811691, upload-time = "2026-04-03T20:54:49.074Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f0/dc54c2e69f5eeec50601054998ec3690d5344277e782bd717e49867c1d29/regex-2026.4.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dd2630faeb6876fb0c287f664d93ddce4d50cd46c6e88e60378c05c9047e08ca", size = 871227, upload-time = "2026-04-03T20:54:51.035Z" }, + { url = "https://files.pythonhosted.org/packages/a1/af/cb16bd5dc61621e27df919a4449bbb7e5a1034c34d307e0a706e9cc0f3e3/regex-2026.4.4-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6a50ab11b7779b849472337191f3a043e27e17f71555f98d0092fa6d73364520", size = 917435, upload-time = "2026-04-03T20:54:52.994Z" }, + { url = "https://files.pythonhosted.org/packages/5c/71/8b260897f22996b666edd9402861668f45a2ca259f665ac029e6104a2d7d/regex-2026.4.4-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0734f63afe785138549fbe822a8cfeaccd1bae814c5057cc0ed5b9f2de4fc883", size = 816358, upload-time = "2026-04-03T20:54:54.884Z" }, + { url = "https://files.pythonhosted.org/packages/1c/60/775f7f72a510ef238254906c2f3d737fc80b16ca85f07d20e318d2eea894/regex-2026.4.4-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c4ee50606cb1967db7e523224e05f32089101945f859928e65657a2cbb3d278b", size = 785549, upload-time = "2026-04-03T20:54:57.01Z" }, + { url = "https://files.pythonhosted.org/packages/58/42/34d289b3627c03cf381e44da534a0021664188fa49ba41513da0b4ec6776/regex-2026.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6c1818f37be3ca02dcb76d63f2c7aaba4b0dc171b579796c6fbe00148dfec6b1", size = 801364, upload-time = "2026-04-03T20:54:58.981Z" }, + { url = "https://files.pythonhosted.org/packages/fc/20/f6ecf319b382a8f1ab529e898b222c3f30600fcede7834733c26279e7465/regex-2026.4.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f5bfc2741d150d0be3e4a0401a5c22b06e60acb9aa4daa46d9e79a6dcd0f135b", size = 866221, upload-time = "2026-04-03T20:55:00.88Z" }, + { url = "https://files.pythonhosted.org/packages/92/6a/9f16d3609d549bd96d7a0b2aee1625d7512ba6a03efc01652149ef88e74d/regex-2026.4.4-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:504ffa8a03609a087cad81277a629b6ce884b51a24bd388a7980ad61748618ff", size = 772530, upload-time = "2026-04-03T20:55:03.213Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f6/aa9768bc96a4c361ac96419fbaf2dcdc33970bb813df3ba9b09d5d7b6d96/regex-2026.4.4-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:70aadc6ff12e4b444586e57fc30771f86253f9f0045b29016b9605b4be5f7dfb", size = 856989, upload-time = "2026-04-03T20:55:05.087Z" }, + { url = "https://files.pythonhosted.org/packages/4d/b4/c671db3556be2473ae3e4bb7a297c518d281452871501221251ea4ecba57/regex-2026.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f4f83781191007b6ef43b03debc35435f10cad9b96e16d147efe84a1d48bdde4", size = 803241, upload-time = "2026-04-03T20:55:07.162Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5c/83e3b1d89fa4f6e5a1bc97b4abd4a9a97b3c1ac7854164f694f5f0ba98a0/regex-2026.4.4-cp313-cp313t-win32.whl", hash = "sha256:e014a797de43d1847df957c0a2a8e861d1c17547ee08467d1db2c370b7568baa", size = 269921, upload-time = "2026-04-03T20:55:09.62Z" }, + { url = "https://files.pythonhosted.org/packages/28/07/077c387121f42cdb4d92b1301133c0d93b5709d096d1669ab847dda9fe2e/regex-2026.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:b15b88b0d52b179712632832c1d6e58e5774f93717849a41096880442da41ab0", size = 281240, upload-time = "2026-04-03T20:55:11.521Z" }, + { url = "https://files.pythonhosted.org/packages/9d/22/ead4a4abc7c59a4d882662aa292ca02c8b617f30b6e163bc1728879e9353/regex-2026.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:586b89cdadf7d67bf86ae3342a4dcd2b8d70a832d90c18a0ae955105caf34dbe", size = 272440, upload-time = "2026-04-03T20:55:13.365Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f5/ed97c2dc47b5fbd4b73c0d7d75f9ebc8eca139f2bbef476bba35f28c0a77/regex-2026.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2da82d643fa698e5e5210e54af90181603d5853cf469f5eedf9bfc8f59b4b8c7", size = 490343, upload-time = "2026-04-03T20:55:15.241Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/de4828a7385ec166d673a5790ad06ac48cdaa98bc0960108dd4b9cc1aef7/regex-2026.4.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:54a1189ad9d9357760557c91103d5e421f0a2dabe68a5cdf9103d0dcf4e00752", size = 291909, upload-time = "2026-04-03T20:55:17.558Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d6/5cfbfc97f3201a4d24b596a77957e092030dcc4205894bc035cedcfce62f/regex-2026.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:76d67d5afb1fe402d10a6403bae668d000441e2ab115191a804287d53b772951", size = 289692, upload-time = "2026-04-03T20:55:20.561Z" }, + { url = "https://files.pythonhosted.org/packages/8e/ac/f2212d9fd56fe897e36d0110ba30ba2d247bd6410c5bd98499c7e5a1e1f2/regex-2026.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e7cd3e4ee8d80447a83bbc9ab0c8459781fa77087f856c3e740d7763be0df27f", size = 796979, upload-time = "2026-04-03T20:55:22.56Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e3/a016c12675fbac988a60c7e1c16e67823ff0bc016beb27bd7a001dbdabc6/regex-2026.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e19e18c568d2866d8b6a6dfad823db86193503f90823a8f66689315ba28fbe8", size = 866744, upload-time = "2026-04-03T20:55:24.646Z" }, + { url = "https://files.pythonhosted.org/packages/af/a4/0b90ca4cf17adc3cb43de80ec71018c37c88ad64987e8d0d481a95ca60b5/regex-2026.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7698a6f38730fd1385d390d1ed07bb13dce39aa616aca6a6d89bea178464b9a4", size = 911613, upload-time = "2026-04-03T20:55:27.033Z" }, + { url = "https://files.pythonhosted.org/packages/8e/3b/2b3dac0b82d41ab43aa87c6ecde63d71189d03fe8854b8ca455a315edac3/regex-2026.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:173a66f3651cdb761018078e2d9487f4cf971232c990035ec0eb1cdc6bf929a9", size = 800551, upload-time = "2026-04-03T20:55:29.532Z" }, + { url = "https://files.pythonhosted.org/packages/25/fe/5365eb7aa0e753c4b5957815c321519ecab033c279c60e1b1ae2367fa810/regex-2026.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa7922bbb2cc84fa062d37723f199d4c0cd200245ce269c05db82d904db66b83", size = 776911, upload-time = "2026-04-03T20:55:31.526Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b3/7fb0072156bba065e3b778a7bc7b0a6328212be5dd6a86fd207e0c4f2dab/regex-2026.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:59f67cd0a0acaf0e564c20bbd7f767286f23e91e2572c5703bf3e56ea7557edb", size = 785751, upload-time = "2026-04-03T20:55:33.797Z" }, + { url = "https://files.pythonhosted.org/packages/02/1a/9f83677eb699273e56e858f7bd95acdbee376d42f59e8bfca2fd80d79df3/regex-2026.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:475e50f3f73f73614f7cba5524d6de49dee269df00272a1b85e3d19f6d498465", size = 860484, upload-time = "2026-04-03T20:55:35.745Z" }, + { url = "https://files.pythonhosted.org/packages/3b/7a/93937507b61cfcff8b4c5857f1b452852b09f741daa9acae15c971d8554e/regex-2026.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:a1c0c7d67b64d85ac2e1879923bad2f08a08f3004055f2f406ef73c850114bd4", size = 765939, upload-time = "2026-04-03T20:55:37.972Z" }, + { url = "https://files.pythonhosted.org/packages/86/ea/81a7f968a351c6552b1670ead861e2a385be730ee28402233020c67f9e0f/regex-2026.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:1371c2ccbb744d66ee63631cc9ca12aa233d5749972626b68fe1a649dd98e566", size = 851417, upload-time = "2026-04-03T20:55:39.92Z" }, + { url = "https://files.pythonhosted.org/packages/4c/7e/323c18ce4b5b8f44517a36342961a0306e931e499febbd876bb149d900f0/regex-2026.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:59968142787042db793348a3f5b918cf24ced1f23247328530e063f89c128a95", size = 789056, upload-time = "2026-04-03T20:55:42.303Z" }, + { url = "https://files.pythonhosted.org/packages/c0/af/e7510f9b11b1913b0cd44eddb784b2d650b2af6515bfce4cffcc5bfd1d38/regex-2026.4.4-cp314-cp314-win32.whl", hash = "sha256:59efe72d37fd5a91e373e5146f187f921f365f4abc1249a5ab446a60f30dd5f8", size = 272130, upload-time = "2026-04-03T20:55:44.995Z" }, + { url = "https://files.pythonhosted.org/packages/9a/51/57dae534c915e2d3a21490e88836fa2ae79dde3b66255ecc0c0a155d2c10/regex-2026.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:e0aab3ff447845049d676827d2ff714aab4f73f340e155b7de7458cf53baa5a4", size = 280992, upload-time = "2026-04-03T20:55:47.316Z" }, + { url = "https://files.pythonhosted.org/packages/0a/5e/abaf9f4c3792e34edb1434f06717fae2b07888d85cb5cec29f9204931bf8/regex-2026.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:a7a5bb6aa0cf62208bb4fa079b0c756734f8ad0e333b425732e8609bd51ee22f", size = 273563, upload-time = "2026-04-03T20:55:49.273Z" }, + { url = "https://files.pythonhosted.org/packages/ff/06/35da85f9f217b9538b99cbb170738993bcc3b23784322decb77619f11502/regex-2026.4.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:97850d0638391bdc7d35dc1c1039974dcb921eaafa8cc935ae4d7f272b1d60b3", size = 494191, upload-time = "2026-04-03T20:55:51.258Z" }, + { url = "https://files.pythonhosted.org/packages/54/5b/1bc35f479eef8285c4baf88d8c002023efdeebb7b44a8735b36195486ae7/regex-2026.4.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ee7337f88f2a580679f7bbfe69dc86c043954f9f9c541012f49abc554a962f2e", size = 293877, upload-time = "2026-04-03T20:55:53.214Z" }, + { url = "https://files.pythonhosted.org/packages/39/5b/f53b9ad17480b3ddd14c90da04bfb55ac6894b129e5dea87bcaf7d00e336/regex-2026.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7429f4e6192c11d659900c0648ba8776243bf396ab95558b8c51a345afeddde6", size = 292410, upload-time = "2026-04-03T20:55:55.736Z" }, + { url = "https://files.pythonhosted.org/packages/bb/56/52377f59f60a7c51aa4161eecf0b6032c20b461805aca051250da435ffc9/regex-2026.4.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4f10fbd5dd13dcf4265b4cc07d69ca70280742870c97ae10093e3d66000359", size = 811831, upload-time = "2026-04-03T20:55:57.802Z" }, + { url = "https://files.pythonhosted.org/packages/dd/63/8026310bf066f702a9c361f83a8c9658f3fe4edb349f9c1e5d5273b7c40c/regex-2026.4.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a152560af4f9742b96f3827090f866eeec5becd4765c8e0d3473d9d280e76a5a", size = 871199, upload-time = "2026-04-03T20:56:00.333Z" }, + { url = "https://files.pythonhosted.org/packages/20/9f/a514bbb00a466dbb506d43f187a04047f7be1505f10a9a15615ead5080ee/regex-2026.4.4-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54170b3e95339f415d54651f97df3bff7434a663912f9358237941bbf9143f55", size = 917649, upload-time = "2026-04-03T20:56:02.445Z" }, + { url = "https://files.pythonhosted.org/packages/cb/6b/8399f68dd41a2030218839b9b18360d79b86d22b9fab5ef477c7f23ca67c/regex-2026.4.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:07f190d65f5a72dcb9cf7106bfc3d21e7a49dd2879eda2207b683f32165e4d99", size = 816388, upload-time = "2026-04-03T20:56:04.595Z" }, + { url = "https://files.pythonhosted.org/packages/1e/9c/103963f47c24339a483b05edd568594c2be486188f688c0170fd504b2948/regex-2026.4.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9a2741ce5a29d3c84b0b94261ba630ab459a1b847a0d6beca7d62d188175c790", size = 785746, upload-time = "2026-04-03T20:56:07.13Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ee/7f6054c0dec0cee3463c304405e4ff42e27cff05bf36fcb34be549ab17bd/regex-2026.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b26c30df3a28fd9793113dac7385a4deb7294a06c0f760dd2b008bd49a9139bc", size = 801483, upload-time = "2026-04-03T20:56:09.365Z" }, + { url = "https://files.pythonhosted.org/packages/30/c2/51d3d941cf6070dc00c3338ecf138615fc3cce0421c3df6abe97a08af61a/regex-2026.4.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:421439d1bee44b19f4583ccf42670ca464ffb90e9fdc38d37f39d1ddd1e44f1f", size = 866331, upload-time = "2026-04-03T20:56:12.039Z" }, + { url = "https://files.pythonhosted.org/packages/16/e8/76d50dcc122ac33927d939f350eebcfe3dbcbda96913e03433fc36de5e63/regex-2026.4.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:b40379b53ecbc747fd9bdf4a0ea14eb8188ca1bd0f54f78893a39024b28f4863", size = 772673, upload-time = "2026-04-03T20:56:14.558Z" }, + { url = "https://files.pythonhosted.org/packages/a5/6e/5f6bf75e20ea6873d05ba4ec78378c375cbe08cdec571c83fbb01606e563/regex-2026.4.4-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:08c55c13d2eef54f73eeadc33146fb0baaa49e7335eb1aff6ae1324bf0ddbe4a", size = 857146, upload-time = "2026-04-03T20:56:16.663Z" }, + { url = "https://files.pythonhosted.org/packages/0b/33/3c76d9962949e487ebba353a18e89399f292287204ac8f2f4cfc3a51c233/regex-2026.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9776b85f510062f5a75ef112afe5f494ef1635607bf1cc220c1391e9ac2f5e81", size = 803463, upload-time = "2026-04-03T20:56:18.923Z" }, + { url = "https://files.pythonhosted.org/packages/19/eb/ef32dcd2cb69b69bc0c3e55205bce94a7def48d495358946bc42186dcccc/regex-2026.4.4-cp314-cp314t-win32.whl", hash = "sha256:385edaebde5db5be103577afc8699fea73a0e36a734ba24870be7ffa61119d74", size = 275709, upload-time = "2026-04-03T20:56:20.996Z" }, + { url = "https://files.pythonhosted.org/packages/a0/86/c291bf740945acbf35ed7dbebf8e2eea2f3f78041f6bd7cdab80cb274dc0/regex-2026.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:5d354b18839328927832e2fa5f7c95b7a3ccc39e7a681529e1685898e6436d45", size = 285622, upload-time = "2026-04-03T20:56:23.641Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e7/ec846d560ae6a597115153c02ca6138a7877a1748b2072d9521c10a93e58/regex-2026.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:af0384cb01a33600c49505c27c6c57ab0b27bf84a74e28524c92ca897ebdac9d", size = 275773, upload-time = "2026-04-03T20:56:26.07Z" }, +] + +[[package]] +name = "requests" +version = "2.33.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" }, +] + +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "oauthlib" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" }, +] + +[[package]] +name = "rich" +version = "14.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/c6/f3b320c27991c46f43ee9d856302c70dc2d0fb2dba4842ff739d5f46b393/rich-14.3.3.tar.gz", hash = "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b", size = 230582, upload-time = "2026-02-19T17:23:12.474Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", size = 310458, upload-time = "2026-02-19T17:23:13.732Z" }, +] + +[[package]] +name = "rich-toolkit" +version = "0.19.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/ba/dae9e3096651042754da419a4042bc1c75e07d615f9b15066d738838e4df/rich_toolkit-0.19.7.tar.gz", hash = "sha256:133c0915872da91d4c25d85342d5ec1dfacc69b63448af1a08a0d4b4f23ef46e", size = 195877, upload-time = "2026-02-24T16:06:20.555Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/3c/c923619f6d2f5fafcc96fec0aaf9550a46cd5b6481f06e0c6b66a2a4fed0/rich_toolkit-0.19.7-py3-none-any.whl", hash = "sha256:0288e9203728c47c5a4eb60fd2f0692d9df7455a65901ab6f898437a2ba5989d", size = 32963, upload-time = "2026-02-24T16:06:22.066Z" }, +] + +[[package]] +name = "rignore" +version = "0.7.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/f5/8bed2310abe4ae04b67a38374a4d311dd85220f5d8da56f47ae9361be0b0/rignore-0.7.6.tar.gz", hash = "sha256:00d3546cd793c30cb17921ce674d2c8f3a4b00501cb0e3dd0e82217dbeba2671", size = 57140, upload-time = "2025-11-05T21:41:21.968Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/7a/b970cd0138b0ece72eb28f086e933f9ed75b795716ad3de5ab22994b3b54/rignore-0.7.6-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f3c74a7e5ee77aea669c95fdb3933f2a6c7549893700082e759128a29cf67e45", size = 884999, upload-time = "2025-11-05T20:42:38.373Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/23faca29616d8966ada63fb0e13c214107811fa9a0aba2275e4c7ca63bd5/rignore-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7202404958f5fe3474bac91f65350f0b1dde1a5e05089f2946549b7e91e79ec", size = 824824, upload-time = "2025-11-05T20:42:22.1Z" }, + { url = "https://files.pythonhosted.org/packages/fa/2e/05a1e61f04cf2548524224f0b5f21ca19ea58f7273a863bac10846b8ff69/rignore-0.7.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bde7c5835fa3905bfb7e329a4f1d7eccb676de63da7a3f934ddd5c06df20597", size = 899121, upload-time = "2025-11-05T20:40:48.94Z" }, + { url = "https://files.pythonhosted.org/packages/ff/35/71518847e10bdbf359badad8800e4681757a01f4777b3c5e03dbde8a42d8/rignore-0.7.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:626c3d4ba03af266694d25101bc1d8d16eda49c5feb86cedfec31c614fceca7d", size = 873813, upload-time = "2025-11-05T20:41:04.71Z" }, + { url = "https://files.pythonhosted.org/packages/f6/c8/32ae405d3e7fd4d9f9b7838f2fcca0a5005bb87fa514b83f83fd81c0df22/rignore-0.7.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a43841e651e7a05a4274b9026cc408d1912e64016ede8cd4c145dae5d0635be", size = 1168019, upload-time = "2025-11-05T20:41:20.723Z" }, + { url = "https://files.pythonhosted.org/packages/25/98/013c955982bc5b4719bf9a5bea58be317eea28aa12bfd004025e3cd7c000/rignore-0.7.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7978c498dbf7f74d30cdb8859fe612167d8247f0acd377ae85180e34490725da", size = 942822, upload-time = "2025-11-05T20:41:36.99Z" }, + { url = "https://files.pythonhosted.org/packages/90/fb/9a3f3156c6ed30bcd597e63690353edac1fcffe9d382ad517722b56ac195/rignore-0.7.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d22f72ab695c07d2d96d2a645208daff17084441b5d58c07378c9dd6f9c4c87", size = 959820, upload-time = "2025-11-05T20:42:06.364Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b2/93bf609633021e9658acaff24cfb055d8cdaf7f5855d10ebb35307900dda/rignore-0.7.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5bd8e1a91ed1a789b2cbe39eeea9204a6719d4f2cf443a9544b521a285a295f", size = 985050, upload-time = "2025-11-05T20:41:51.124Z" }, + { url = "https://files.pythonhosted.org/packages/69/bc/ec2d040469bdfd7b743df10f2201c5d285009a4263d506edbf7a06a090bb/rignore-0.7.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bc1fc03efad5789365018e94ac4079f851a999bc154d1551c45179f7fcf45322", size = 1079164, upload-time = "2025-11-05T21:40:10.368Z" }, + { url = "https://files.pythonhosted.org/packages/df/26/4b635f4ea5baf4baa8ba8eee06163f6af6e76dfbe72deb57da34bb24b19d/rignore-0.7.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:ce2617fe28c51367fd8abfd4eeea9e61664af63c17d4ea00353d8ef56dfb95fa", size = 1139028, upload-time = "2025-11-05T21:40:27.977Z" }, + { url = "https://files.pythonhosted.org/packages/6a/54/a3147ebd1e477b06eb24e2c2c56d951ae5faa9045b7b36d7892fec5080d9/rignore-0.7.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7c4ad2cee85068408e7819a38243043214e2c3047e9bd4c506f8de01c302709e", size = 1119024, upload-time = "2025-11-05T21:40:45.148Z" }, + { url = "https://files.pythonhosted.org/packages/fb/f4/27475db769a57cff18fe7e7267b36e6cdb5b1281caa185ba544171106cba/rignore-0.7.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:02cd240bfd59ecc3907766f4839cbba20530a2e470abca09eaa82225e4d946fb", size = 1128531, upload-time = "2025-11-05T21:41:02.734Z" }, + { url = "https://files.pythonhosted.org/packages/97/32/6e782d3b352e4349fa0e90bf75b13cb7f11d8908b36d9e2b262224b65d9a/rignore-0.7.6-cp310-cp310-win32.whl", hash = "sha256:fe2bd8fa1ff555259df54c376abc73855cb02628a474a40d51b358c3a1ddc55b", size = 646817, upload-time = "2025-11-05T21:41:47.51Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8a/53185c69abb3bb362e8a46b8089999f820bf15655629ff8395107633c8ab/rignore-0.7.6-cp310-cp310-win_amd64.whl", hash = "sha256:d80afd6071c78baf3765ec698841071b19e41c326f994cfa69b5a1df676f5d39", size = 727001, upload-time = "2025-11-05T21:41:32.778Z" }, + { url = "https://files.pythonhosted.org/packages/25/41/b6e2be3069ef3b7f24e35d2911bd6deb83d20ed5642ad81d5a6d1c015473/rignore-0.7.6-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:40be8226e12d6653abbebaffaea2885f80374c1c8f76fe5ca9e0cadd120a272c", size = 885285, upload-time = "2025-11-05T20:42:39.763Z" }, + { url = "https://files.pythonhosted.org/packages/52/66/ba7f561b6062402022887706a7f2b2c2e2e2a28f1e3839202b0a2f77e36d/rignore-0.7.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182f4e5e4064d947c756819446a7d4cdede8e756b8c81cf9e509683fe38778d7", size = 823882, upload-time = "2025-11-05T20:42:23.488Z" }, + { url = "https://files.pythonhosted.org/packages/f5/81/4087453df35a90b07370647b19017029324950c1b9137d54bf1f33843f17/rignore-0.7.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16b63047648a916a87be1e51bb5c009063f1b8b6f5afe4f04f875525507e63dc", size = 899362, upload-time = "2025-11-05T20:40:51.111Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c9/390a8fdfabb76d71416be773bd9f162977bd483084f68daf19da1dec88a6/rignore-0.7.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba5524f5178deca4d7695e936604ebc742acb8958f9395776e1fcb8133f8257a", size = 873633, upload-time = "2025-11-05T20:41:06.193Z" }, + { url = "https://files.pythonhosted.org/packages/df/c9/79404fcb0faa76edfbc9df0901f8ef18568d1104919ebbbad6d608c888d1/rignore-0.7.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62020dbb89a1dd4b84ab3d60547b3b2eb2723641d5fb198463643f71eaaed57d", size = 1167633, upload-time = "2025-11-05T20:41:22.491Z" }, + { url = "https://files.pythonhosted.org/packages/6e/8d/b3466d32d445d158a0aceb80919085baaae495b1f540fb942f91d93b5e5b/rignore-0.7.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b34acd532769d5a6f153a52a98dcb81615c949ab11697ce26b2eb776af2e174d", size = 941434, upload-time = "2025-11-05T20:41:38.151Z" }, + { url = "https://files.pythonhosted.org/packages/e8/40/9cd949761a7af5bc27022a939c91ff622d29c7a0b66d0c13a863097dde2d/rignore-0.7.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c5e53b752f9de44dff7b3be3c98455ce3bf88e69d6dc0cf4f213346c5e3416c", size = 959461, upload-time = "2025-11-05T20:42:08.476Z" }, + { url = "https://files.pythonhosted.org/packages/b5/87/1e1a145731f73bdb7835e11f80da06f79a00d68b370d9a847de979575e6d/rignore-0.7.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25b3536d13a5d6409ce85f23936f044576eeebf7b6db1d078051b288410fc049", size = 985323, upload-time = "2025-11-05T20:41:52.735Z" }, + { url = "https://files.pythonhosted.org/packages/6c/31/1ecff992fc3f59c4fcdcb6c07d5f6c1e6dfb55ccda19c083aca9d86fa1c6/rignore-0.7.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e01cad2b0b92f6b1993f29fc01f23f2d78caf4bf93b11096d28e9d578eb08ce", size = 1079173, upload-time = "2025-11-05T21:40:12.007Z" }, + { url = "https://files.pythonhosted.org/packages/17/18/162eedadb4c2282fa4c521700dbf93c9b14b8842e8354f7d72b445b8d593/rignore-0.7.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5991e46ab9b4868334c9e372ab0892b0150f3f586ff2b1e314272caeb38aaedb", size = 1139012, upload-time = "2025-11-05T21:40:29.399Z" }, + { url = "https://files.pythonhosted.org/packages/78/96/a9ca398a8af74bb143ad66c2a31303c894111977e28b0d0eab03867f1b43/rignore-0.7.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6c8ae562e5d1246cba5eaeb92a47b2a279e7637102828dde41dcbe291f529a3e", size = 1118827, upload-time = "2025-11-05T21:40:46.6Z" }, + { url = "https://files.pythonhosted.org/packages/9f/22/1c1a65047df864def9a047dbb40bc0b580b8289a4280e62779cd61ae21f2/rignore-0.7.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aaf938530dcc0b47c4cfa52807aa2e5bfd5ca6d57a621125fe293098692f6345", size = 1128182, upload-time = "2025-11-05T21:41:04.239Z" }, + { url = "https://files.pythonhosted.org/packages/bd/f4/1526eb01fdc2235aca1fd9d0189bee4021d009a8dcb0161540238c24166e/rignore-0.7.6-cp311-cp311-win32.whl", hash = "sha256:166ebce373105dd485ec213a6a2695986346e60c94ff3d84eb532a237b24a4d5", size = 646547, upload-time = "2025-11-05T21:41:49.439Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c8/dda0983e1845706beb5826459781549a840fe5a7eb934abc523e8cd17814/rignore-0.7.6-cp311-cp311-win_amd64.whl", hash = "sha256:44f35ee844b1a8cea50d056e6a595190ce9d42d3cccf9f19d280ae5f3058973a", size = 727139, upload-time = "2025-11-05T21:41:34.367Z" }, + { url = "https://files.pythonhosted.org/packages/e3/47/eb1206b7bf65970d41190b879e1723fc6bbdb2d45e53565f28991a8d9d96/rignore-0.7.6-cp311-cp311-win_arm64.whl", hash = "sha256:14b58f3da4fa3d5c3fa865cab49821675371f5e979281c683e131ae29159a581", size = 657598, upload-time = "2025-11-05T21:41:23.758Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0e/012556ef3047a2628842b44e753bb15f4dc46806780ff090f1e8fe4bf1eb/rignore-0.7.6-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:03e82348cb7234f8d9b2834f854400ddbbd04c0f8f35495119e66adbd37827a8", size = 883488, upload-time = "2025-11-05T20:42:41.359Z" }, + { url = "https://files.pythonhosted.org/packages/93/b0/d4f1f3fe9eb3f8e382d45ce5b0547ea01c4b7e0b4b4eb87bcd66a1d2b888/rignore-0.7.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9e624f6be6116ea682e76c5feb71ea91255c67c86cb75befe774365b2931961", size = 820411, upload-time = "2025-11-05T20:42:24.782Z" }, + { url = "https://files.pythonhosted.org/packages/4a/c8/dea564b36dedac8de21c18e1851789545bc52a0c22ece9843444d5608a6a/rignore-0.7.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bda49950d405aa8d0ebe26af807c4e662dd281d926530f03f29690a2e07d649a", size = 897821, upload-time = "2025-11-05T20:40:52.613Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/ee96db17ac1835e024c5d0742eefb7e46de60020385ac883dd3d1cde2c1f/rignore-0.7.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5fd5ab3840b8c16851d327ed06e9b8be6459702a53e5ab1fc4073b684b3789e", size = 873963, upload-time = "2025-11-05T20:41:07.49Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8c/ad5a57bbb9d14d5c7e5960f712a8a0b902472ea3f4a2138cbf70d1777b75/rignore-0.7.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ced2a248352636a5c77504cb755dc02c2eef9a820a44d3f33061ce1bb8a7f2d2", size = 1169216, upload-time = "2025-11-05T20:41:23.73Z" }, + { url = "https://files.pythonhosted.org/packages/80/e6/5b00bc2a6bc1701e6878fca798cf5d9125eb3113193e33078b6fc0d99123/rignore-0.7.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a04a3b73b75ddc12c9c9b21efcdaab33ca3832941d6f1d67bffd860941cd448a", size = 942942, upload-time = "2025-11-05T20:41:39.393Z" }, + { url = "https://files.pythonhosted.org/packages/85/e5/7f99bd0cc9818a91d0e8b9acc65b792e35750e3bdccd15a7ee75e64efca4/rignore-0.7.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d24321efac92140b7ec910ac7c53ab0f0c86a41133d2bb4b0e6a7c94967f44dd", size = 959787, upload-time = "2025-11-05T20:42:09.765Z" }, + { url = "https://files.pythonhosted.org/packages/55/54/2ffea79a7c1eabcede1926347ebc2a81bc6b81f447d05b52af9af14948b9/rignore-0.7.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c7aa109d41e593785c55fdaa89ad80b10330affa9f9d3e3a51fa695f739b20", size = 984245, upload-time = "2025-11-05T20:41:54.062Z" }, + { url = "https://files.pythonhosted.org/packages/41/f7/e80f55dfe0f35787fa482aa18689b9c8251e045076c35477deb0007b3277/rignore-0.7.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1734dc49d1e9501b07852ef44421f84d9f378da9fbeda729e77db71f49cac28b", size = 1078647, upload-time = "2025-11-05T21:40:13.463Z" }, + { url = "https://files.pythonhosted.org/packages/d4/cf/2c64f0b6725149f7c6e7e5a909d14354889b4beaadddaa5fff023ec71084/rignore-0.7.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5719ea14ea2b652c0c0894be5dfde954e1853a80dea27dd2fbaa749618d837f5", size = 1139186, upload-time = "2025-11-05T21:40:31.27Z" }, + { url = "https://files.pythonhosted.org/packages/75/95/a86c84909ccc24af0d094b50d54697951e576c252a4d9f21b47b52af9598/rignore-0.7.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e23424fc7ce35726854f639cb7968151a792c0c3d9d082f7f67e0c362cfecca", size = 1117604, upload-time = "2025-11-05T21:40:48.07Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5e/13b249613fd5d18d58662490ab910a9f0be758981d1797789913adb4e918/rignore-0.7.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3efdcf1dd84d45f3e2bd2f93303d9be103888f56dfa7c3349b5bf4f0657ec696", size = 1127725, upload-time = "2025-11-05T21:41:05.804Z" }, + { url = "https://files.pythonhosted.org/packages/c7/28/fa5dcd1e2e16982c359128664e3785f202d3eca9b22dd0b2f91c4b3d242f/rignore-0.7.6-cp312-cp312-win32.whl", hash = "sha256:ccca9d1a8b5234c76b71546fc3c134533b013f40495f394a65614a81f7387046", size = 646145, upload-time = "2025-11-05T21:41:51.096Z" }, + { url = "https://files.pythonhosted.org/packages/26/87/69387fb5dd81a0f771936381431780b8cf66fcd2cfe9495e1aaf41548931/rignore-0.7.6-cp312-cp312-win_amd64.whl", hash = "sha256:c96a285e4a8bfec0652e0bfcf42b1aabcdda1e7625f5006d188e3b1c87fdb543", size = 726090, upload-time = "2025-11-05T21:41:36.485Z" }, + { url = "https://files.pythonhosted.org/packages/24/5f/e8418108dcda8087fb198a6f81caadbcda9fd115d61154bf0df4d6d3619b/rignore-0.7.6-cp312-cp312-win_arm64.whl", hash = "sha256:a64a750e7a8277a323f01ca50b7784a764845f6cce2fe38831cb93f0508d0051", size = 656317, upload-time = "2025-11-05T21:41:25.305Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8a/a4078f6e14932ac7edb171149c481de29969d96ddee3ece5dc4c26f9e0c3/rignore-0.7.6-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2bdab1d31ec9b4fb1331980ee49ea051c0d7f7bb6baa28b3125ef03cdc48fdaf", size = 883057, upload-time = "2025-11-05T20:42:42.741Z" }, + { url = "https://files.pythonhosted.org/packages/f9/8f/f8daacd177db4bf7c2223bab41e630c52711f8af9ed279be2058d2fe4982/rignore-0.7.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:90f0a00ce0c866c275bf888271f1dc0d2140f29b82fcf33cdbda1e1a6af01010", size = 820150, upload-time = "2025-11-05T20:42:26.545Z" }, + { url = "https://files.pythonhosted.org/packages/36/31/b65b837e39c3f7064c426754714ac633b66b8c2290978af9d7f513e14aa9/rignore-0.7.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1ad295537041dc2ed4b540fb1a3906bd9ede6ccdad3fe79770cd89e04e3c73c", size = 897406, upload-time = "2025-11-05T20:40:53.854Z" }, + { url = "https://files.pythonhosted.org/packages/ca/58/1970ce006c427e202ac7c081435719a076c478f07b3a23f469227788dc23/rignore-0.7.6-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f782dbd3a65a5ac85adfff69e5c6b101285ef3f845c3a3cae56a54bebf9fe116", size = 874050, upload-time = "2025-11-05T20:41:08.922Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/eb45db9f90137329072a732273be0d383cb7d7f50ddc8e0bceea34c1dfdf/rignore-0.7.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65cece3b36e5b0826d946494734c0e6aaf5a0337e18ff55b071438efe13d559e", size = 1167835, upload-time = "2025-11-05T20:41:24.997Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f1/6f1d72ddca41a64eed569680587a1236633587cc9f78136477ae69e2c88a/rignore-0.7.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7e4bb66c13cd7602dc8931822c02dfbbd5252015c750ac5d6152b186f0a8be0", size = 941945, upload-time = "2025-11-05T20:41:40.628Z" }, + { url = "https://files.pythonhosted.org/packages/48/6f/2f178af1c1a276a065f563ec1e11e7a9e23d4996fd0465516afce4b5c636/rignore-0.7.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297e500c15766e196f68aaaa70e8b6db85fa23fdc075b880d8231fdfba738cd7", size = 959067, upload-time = "2025-11-05T20:42:11.09Z" }, + { url = "https://files.pythonhosted.org/packages/5b/db/423a81c4c1e173877c7f9b5767dcaf1ab50484a94f60a0b2ed78be3fa765/rignore-0.7.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a07084211a8d35e1a5b1d32b9661a5ed20669970b369df0cf77da3adea3405de", size = 984438, upload-time = "2025-11-05T20:41:55.443Z" }, + { url = "https://files.pythonhosted.org/packages/31/eb/c4f92cc3f2825d501d3c46a244a671eb737fc1bcf7b05a3ecd34abb3e0d7/rignore-0.7.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:181eb2a975a22256a1441a9d2f15eb1292839ea3f05606620bd9e1938302cf79", size = 1078365, upload-time = "2025-11-05T21:40:15.148Z" }, + { url = "https://files.pythonhosted.org/packages/26/09/99442f02794bd7441bfc8ed1c7319e890449b816a7493b2db0e30af39095/rignore-0.7.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:7bbcdc52b5bf9f054b34ce4af5269df5d863d9c2456243338bc193c28022bd7b", size = 1139066, upload-time = "2025-11-05T21:40:32.771Z" }, + { url = "https://files.pythonhosted.org/packages/2c/88/bcfc21e520bba975410e9419450f4b90a2ac8236b9a80fd8130e87d098af/rignore-0.7.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f2e027a6da21a7c8c0d87553c24ca5cc4364def18d146057862c23a96546238e", size = 1118036, upload-time = "2025-11-05T21:40:49.646Z" }, + { url = "https://files.pythonhosted.org/packages/e2/25/d37215e4562cda5c13312636393aea0bafe38d54d4e0517520a4cc0753ec/rignore-0.7.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee4a18b82cbbc648e4aac1510066682fe62beb5dc88e2c67c53a83954e541360", size = 1127550, upload-time = "2025-11-05T21:41:07.648Z" }, + { url = "https://files.pythonhosted.org/packages/dc/76/a264ab38bfa1620ec12a8ff1c07778da89e16d8c0f3450b0333020d3d6dc/rignore-0.7.6-cp313-cp313-win32.whl", hash = "sha256:a7d7148b6e5e95035d4390396895adc384d37ff4e06781a36fe573bba7c283e5", size = 646097, upload-time = "2025-11-05T21:41:53.201Z" }, + { url = "https://files.pythonhosted.org/packages/62/44/3c31b8983c29ea8832b6082ddb1d07b90379c2d993bd20fce4487b71b4f4/rignore-0.7.6-cp313-cp313-win_amd64.whl", hash = "sha256:b037c4b15a64dced08fc12310ee844ec2284c4c5c1ca77bc37d0a04f7bff386e", size = 726170, upload-time = "2025-11-05T21:41:38.131Z" }, + { url = "https://files.pythonhosted.org/packages/aa/41/e26a075cab83debe41a42661262f606166157df84e0e02e2d904d134c0d8/rignore-0.7.6-cp313-cp313-win_arm64.whl", hash = "sha256:e47443de9b12fe569889bdbe020abe0e0b667516ee2ab435443f6d0869bd2804", size = 656184, upload-time = "2025-11-05T21:41:27.396Z" }, + { url = "https://files.pythonhosted.org/packages/9a/b9/1f5bd82b87e5550cd843ceb3768b4a8ef274eb63f29333cf2f29644b3d75/rignore-0.7.6-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:8e41be9fa8f2f47239ded8920cc283699a052ac4c371f77f5ac017ebeed75732", size = 882632, upload-time = "2025-11-05T20:42:44.063Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6b/07714a3efe4a8048864e8a5b7db311ba51b921e15268b17defaebf56d3db/rignore-0.7.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6dc1e171e52cefa6c20e60c05394a71165663b48bca6c7666dee4f778f2a7d90", size = 820760, upload-time = "2025-11-05T20:42:27.885Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0f/348c829ea2d8d596e856371b14b9092f8a5dfbb62674ec9b3f67e4939a9d/rignore-0.7.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ce2268837c3600f82ab8db58f5834009dc638ee17103582960da668963bebc5", size = 899044, upload-time = "2025-11-05T20:40:55.336Z" }, + { url = "https://files.pythonhosted.org/packages/f0/30/2e1841a19b4dd23878d73edd5d82e998a83d5ed9570a89675f140ca8b2ad/rignore-0.7.6-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:690a3e1b54bfe77e89c4bacb13f046e642f8baadafc61d68f5a726f324a76ab6", size = 874144, upload-time = "2025-11-05T20:41:10.195Z" }, + { url = "https://files.pythonhosted.org/packages/c2/bf/0ce9beb2e5f64c30e3580bef09f5829236889f01511a125f98b83169b993/rignore-0.7.6-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09d12ac7a0b6210c07bcd145007117ebd8abe99c8eeb383e9e4673910c2754b2", size = 1168062, upload-time = "2025-11-05T20:41:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/b9/8b/571c178414eb4014969865317da8a02ce4cf5241a41676ef91a59aab24de/rignore-0.7.6-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a2b2b74a8c60203b08452479b90e5ce3dbe96a916214bc9eb2e5af0b6a9beb0", size = 942542, upload-time = "2025-11-05T20:41:41.838Z" }, + { url = "https://files.pythonhosted.org/packages/19/62/7a3cf601d5a45137a7e2b89d10c05b5b86499190c4b7ca5c3c47d79ee519/rignore-0.7.6-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc5a531ef02131e44359419a366bfac57f773ea58f5278c2cdd915f7d10ea94", size = 958739, upload-time = "2025-11-05T20:42:12.463Z" }, + { url = "https://files.pythonhosted.org/packages/5f/1f/4261f6a0d7caf2058a5cde2f5045f565ab91aa7badc972b57d19ce58b14e/rignore-0.7.6-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7a1f77d9c4cd7e76229e252614d963442686bfe12c787a49f4fe481df49e7a9", size = 984138, upload-time = "2025-11-05T20:41:56.775Z" }, + { url = "https://files.pythonhosted.org/packages/2b/bf/628dfe19c75e8ce1f45f7c248f5148b17dfa89a817f8e3552ab74c3ae812/rignore-0.7.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ead81f728682ba72b5b1c3d5846b011d3e0174da978de87c61645f2ed36659a7", size = 1079299, upload-time = "2025-11-05T21:40:16.639Z" }, + { url = "https://files.pythonhosted.org/packages/af/a5/be29c50f5c0c25c637ed32db8758fdf5b901a99e08b608971cda8afb293b/rignore-0.7.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:12ffd50f520c22ffdabed8cd8bfb567d9ac165b2b854d3e679f4bcaef11a9441", size = 1139618, upload-time = "2025-11-05T21:40:34.507Z" }, + { url = "https://files.pythonhosted.org/packages/2a/40/3c46cd7ce4fa05c20b525fd60f599165e820af66e66f2c371cd50644558f/rignore-0.7.6-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:e5a16890fbe3c894f8ca34b0fcacc2c200398d4d46ae654e03bc9b3dbf2a0a72", size = 1117626, upload-time = "2025-11-05T21:40:51.494Z" }, + { url = "https://files.pythonhosted.org/packages/8c/b9/aea926f263b8a29a23c75c2e0d8447965eb1879d3feb53cfcf84db67ed58/rignore-0.7.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3abab3bf99e8a77488ef6c7c9a799fac22224c28fe9f25cc21aa7cc2b72bfc0b", size = 1128144, upload-time = "2025-11-05T21:41:09.169Z" }, + { url = "https://files.pythonhosted.org/packages/a4/f6/0d6242f8d0df7f2ecbe91679fefc1f75e7cd2072cb4f497abaab3f0f8523/rignore-0.7.6-cp314-cp314-win32.whl", hash = "sha256:eeef421c1782953c4375aa32f06ecae470c1285c6381eee2a30d2e02a5633001", size = 646385, upload-time = "2025-11-05T21:41:55.105Z" }, + { url = "https://files.pythonhosted.org/packages/d5/38/c0dcd7b10064f084343d6af26fe9414e46e9619c5f3224b5272e8e5d9956/rignore-0.7.6-cp314-cp314-win_amd64.whl", hash = "sha256:6aeed503b3b3d5af939b21d72a82521701a4bd3b89cd761da1e7dc78621af304", size = 725738, upload-time = "2025-11-05T21:41:39.736Z" }, + { url = "https://files.pythonhosted.org/packages/d9/7a/290f868296c1ece914d565757ab363b04730a728b544beb567ceb3b2d96f/rignore-0.7.6-cp314-cp314-win_arm64.whl", hash = "sha256:104f215b60b3c984c386c3e747d6ab4376d5656478694e22c7bd2f788ddd8304", size = 656008, upload-time = "2025-11-05T21:41:29.028Z" }, + { url = "https://files.pythonhosted.org/packages/ca/d2/3c74e3cd81fe8ea08a8dcd2d755c09ac2e8ad8fe409508904557b58383d3/rignore-0.7.6-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bb24a5b947656dd94cb9e41c4bc8b23cec0c435b58be0d74a874f63c259549e8", size = 882835, upload-time = "2025-11-05T20:42:45.443Z" }, + { url = "https://files.pythonhosted.org/packages/77/61/a772a34b6b63154877433ac2d048364815b24c2dd308f76b212c408101a2/rignore-0.7.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5b1e33c9501cefe24b70a1eafd9821acfd0ebf0b35c3a379430a14df089993e3", size = 820301, upload-time = "2025-11-05T20:42:29.226Z" }, + { url = "https://files.pythonhosted.org/packages/71/30/054880b09c0b1b61d17eeb15279d8bf729c0ba52b36c3ada52fb827cbb3c/rignore-0.7.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bec3994665a44454df86deb762061e05cd4b61e3772f5b07d1882a8a0d2748d5", size = 897611, upload-time = "2025-11-05T20:40:56.475Z" }, + { url = "https://files.pythonhosted.org/packages/1e/40/b2d1c169f833d69931bf232600eaa3c7998ba4f9a402e43a822dad2ea9f2/rignore-0.7.6-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26cba2edfe3cff1dfa72bddf65d316ddebf182f011f2f61538705d6dbaf54986", size = 873875, upload-time = "2025-11-05T20:41:11.561Z" }, + { url = "https://files.pythonhosted.org/packages/55/59/ca5ae93d83a1a60e44b21d87deb48b177a8db1b85e82fc8a9abb24a8986d/rignore-0.7.6-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffa86694fec604c613696cb91e43892aa22e1fec5f9870e48f111c603e5ec4e9", size = 1167245, upload-time = "2025-11-05T20:41:28.29Z" }, + { url = "https://files.pythonhosted.org/packages/a5/52/cf3dce392ba2af806cba265aad6bcd9c48bb2a6cb5eee448d3319f6e505b/rignore-0.7.6-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48efe2ed95aa8104145004afb15cdfa02bea5cdde8b0344afeb0434f0d989aa2", size = 941750, upload-time = "2025-11-05T20:41:43.111Z" }, + { url = "https://files.pythonhosted.org/packages/ec/be/3f344c6218d779395e785091d05396dfd8b625f6aafbe502746fcd880af2/rignore-0.7.6-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dcae43eb44b7f2457fef7cc87f103f9a0013017a6f4e62182c565e924948f21", size = 958896, upload-time = "2025-11-05T20:42:13.784Z" }, + { url = "https://files.pythonhosted.org/packages/c9/34/d3fa71938aed7d00dcad87f0f9bcb02ad66c85d6ffc83ba31078ce53646a/rignore-0.7.6-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2cd649a7091c0dad2f11ef65630d30c698d505cbe8660dd395268e7c099cc99f", size = 983992, upload-time = "2025-11-05T20:41:58.022Z" }, + { url = "https://files.pythonhosted.org/packages/24/a4/52a697158e9920705bdbd0748d59fa63e0f3233fb92e9df9a71afbead6ca/rignore-0.7.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42de84b0289d478d30ceb7ae59023f7b0527786a9a5b490830e080f0e4ea5aeb", size = 1078181, upload-time = "2025-11-05T21:40:18.151Z" }, + { url = "https://files.pythonhosted.org/packages/ac/65/aa76dbcdabf3787a6f0fd61b5cc8ed1e88580590556d6c0207960d2384bb/rignore-0.7.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:875a617e57b53b4acbc5a91de418233849711c02e29cc1f4f9febb2f928af013", size = 1139232, upload-time = "2025-11-05T21:40:35.966Z" }, + { url = "https://files.pythonhosted.org/packages/08/44/31b31a49b3233c6842acc1c0731aa1e7fb322a7170612acf30327f700b44/rignore-0.7.6-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8703998902771e96e49968105207719f22926e4431b108450f3f430b4e268b7c", size = 1117349, upload-time = "2025-11-05T21:40:53.013Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ae/1b199a2302c19c658cf74e5ee1427605234e8c91787cfba0015f2ace145b/rignore-0.7.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:602ef33f3e1b04c1e9a10a3c03f8bc3cef2d2383dcc250d309be42b49923cabc", size = 1127702, upload-time = "2025-11-05T21:41:10.881Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d3/18210222b37e87e36357f7b300b7d98c6dd62b133771e71ae27acba83a4f/rignore-0.7.6-cp314-cp314t-win32.whl", hash = "sha256:c1d8f117f7da0a4a96a8daef3da75bc090e3792d30b8b12cfadc240c631353f9", size = 647033, upload-time = "2025-11-05T21:42:00.095Z" }, + { url = "https://files.pythonhosted.org/packages/3e/87/033eebfbee3ec7d92b3bb1717d8f68c88e6fc7de54537040f3b3a405726f/rignore-0.7.6-cp314-cp314t-win_amd64.whl", hash = "sha256:ca36e59408bec81de75d307c568c2d0d410fb880b1769be43611472c61e85c96", size = 725647, upload-time = "2025-11-05T21:41:44.449Z" }, + { url = "https://files.pythonhosted.org/packages/79/62/b88e5879512c55b8ee979c666ee6902adc4ed05007226de266410ae27965/rignore-0.7.6-cp314-cp314t-win_arm64.whl", hash = "sha256:b83adabeb3e8cf662cabe1931b83e165b88c526fa6af6b3aa90429686e474896", size = 656035, upload-time = "2025-11-05T21:41:31.13Z" }, + { url = "https://files.pythonhosted.org/packages/85/12/62d690b4644c330d7ac0f739b7f078190ab4308faa909a60842d0e4af5b2/rignore-0.7.6-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3d3a523af1cd4ed2c0cba8d277a32d329b0c96ef9901fb7ca45c8cfaccf31a5", size = 887462, upload-time = "2025-11-05T20:42:50.804Z" }, + { url = "https://files.pythonhosted.org/packages/05/bc/6528a0e97ed2bd7a7c329183367d1ffbc5b9762ae8348d88dae72cc9d1f5/rignore-0.7.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:990853566e65184a506e1e2af2d15045afad3ebaebb8859cb85b882081915110", size = 826918, upload-time = "2025-11-05T20:42:33.689Z" }, + { url = "https://files.pythonhosted.org/packages/3e/2c/7d7bad116e09a04e9e1688c6f891fa2d4fd33f11b69ac0bd92419ddebeae/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cab9ff2e436ce7240d7ee301c8ef806ed77c1fd6b8a8239ff65f9bbbcb5b8a3", size = 900922, upload-time = "2025-11-05T20:41:00.361Z" }, + { url = "https://files.pythonhosted.org/packages/09/ba/e5ea89fbde8e37a90ce456e31c5e9d85512cef5ae38e0f4d2426eb776a19/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d1a6671b2082c13bfd9a5cf4ce64670f832a6d41470556112c4ab0b6519b2fc4", size = 876987, upload-time = "2025-11-05T20:41:16.219Z" }, + { url = "https://files.pythonhosted.org/packages/d0/fb/93d14193f0ec0c3d35b763f0a000e9780f63b2031f3d3756442c2152622d/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2468729b4c5295c199d084ab88a40afcb7c8b974276805105239c07855bbacee", size = 1171110, upload-time = "2025-11-05T20:41:32.631Z" }, + { url = "https://files.pythonhosted.org/packages/9e/46/08436312ff96ffa29cfa4e1a987efc37e094531db46ba5e9fda9bb792afd/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:775710777fd71e5fdf54df69cdc249996a1d6f447a2b5bfb86dbf033fddd9cf9", size = 943339, upload-time = "2025-11-05T20:41:47.128Z" }, + { url = "https://files.pythonhosted.org/packages/34/28/3b3c51328f505cfaf7e53f408f78a1e955d561135d02f9cb0341ea99f69a/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4565407f4a77f72cf9d91469e75d15d375f755f0a01236bb8aaa176278cc7085", size = 961680, upload-time = "2025-11-05T20:42:18.061Z" }, + { url = "https://files.pythonhosted.org/packages/5c/9e/cbff75c8676d4f4a90bd58a1581249d255c7305141b0868f0abc0324836b/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc44c33f8fb2d5c9da748de7a6e6653a78aa740655e7409895e94a247ffa97c8", size = 987045, upload-time = "2025-11-05T20:42:02.315Z" }, + { url = "https://files.pythonhosted.org/packages/8c/25/d802d1d369502a7ddb8816059e7c79d2d913e17df975b863418e0aca4d8a/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8f32478f05540513c11923e8838afab9efef0131d66dca7f67f0e1bbd118af6a", size = 1080310, upload-time = "2025-11-05T21:40:23.184Z" }, + { url = "https://files.pythonhosted.org/packages/43/f0/250b785c2e473b1ab763eaf2be820934c2a5409a722e94b279dddac21c7d/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:1b63a3dd76225ea35b01dd6596aa90b275b5d0f71d6dc28fce6dd295d98614aa", size = 1140998, upload-time = "2025-11-05T21:40:40.603Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d6/bb42fd2a8bba6aea327962656e20621fd495523259db40cfb4c5f760f05c/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:fe6c41175c36554a4ef0994cd1b4dbd6d73156fca779066456b781707402048e", size = 1121178, upload-time = "2025-11-05T21:40:57.585Z" }, + { url = "https://files.pythonhosted.org/packages/97/f4/aeb548374129dce3dc191a4bb598c944d9ed663f467b9af830315d86059c/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9a0c6792406ae36f4e7664dc772da909451d46432ff8485774526232d4885063", size = 1130190, upload-time = "2025-11-05T21:41:16.403Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/a6250ff0c49a3cdb943910ada4116e708118e9b901c878cfae616c80a904/rignore-0.7.6-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a20b6fb61bcced9a83dfcca6599ad45182b06ba720cff7c8d891e5b78db5b65f", size = 886470, upload-time = "2025-11-05T20:42:52.314Z" }, + { url = "https://files.pythonhosted.org/packages/35/af/c69c0c51b8f9f7914d95c4ea91c29a2ac067572048cae95dd6d2efdbe05d/rignore-0.7.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:392dcabfecbe176c9ebbcb40d85a5e86a5989559c4f988c2741da7daf1b5be25", size = 825976, upload-time = "2025-11-05T20:42:35.118Z" }, + { url = "https://files.pythonhosted.org/packages/f1/d2/1b264f56132264ea609d3213ab603d6a27016b19559a1a1ede1a66a03dcd/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22baa462abdc36fdd5a5e2dae423107723351b85ff093762f9261148b9d0a04a", size = 899739, upload-time = "2025-11-05T20:41:01.518Z" }, + { url = "https://files.pythonhosted.org/packages/55/e4/b3c5dfdd8d8a10741dfe7199ef45d19a0e42d0c13aa377c83bd6caf65d90/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53fb28882d2538cb2d231972146c4927a9d9455e62b209f85d634408c4103538", size = 874843, upload-time = "2025-11-05T20:41:17.687Z" }, + { url = "https://files.pythonhosted.org/packages/cc/10/d6f3750233881a2a154cefc9a6a0a9b19da526b19f7f08221b552c6f827d/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87409f7eeb1103d6b77f3472a3a0d9a5953e3ae804a55080bdcb0120ee43995b", size = 1170348, upload-time = "2025-11-05T20:41:34.21Z" }, + { url = "https://files.pythonhosted.org/packages/6e/10/ad98ca05c9771c15af734cee18114a3c280914b6e34fde9ffea2e61e88aa/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684014e42e4341ab3ea23a203551857fcc03a7f8ae96ca3aefb824663f55db32", size = 942315, upload-time = "2025-11-05T20:41:48.508Z" }, + { url = "https://files.pythonhosted.org/packages/de/00/ab5c0f872acb60d534e687e629c17e0896c62da9b389c66d3aa16b817aa8/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77356ebb01ba13f8a425c3d30fcad40e57719c0e37670d022d560884a30e4767", size = 961047, upload-time = "2025-11-05T20:42:19.403Z" }, + { url = "https://files.pythonhosted.org/packages/b8/86/3030fdc363a8f0d1cd155b4c453d6db9bab47a24fcc64d03f61d9d78fe6a/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6cbd8a48abbd3747a6c830393cd578782fab5d43f4deea48c5f5e344b8fed2b0", size = 986090, upload-time = "2025-11-05T20:42:03.581Z" }, + { url = "https://files.pythonhosted.org/packages/33/b8/133aa4002cee0ebbb39362f94e4898eec7fbd09cec9fcbce1cd65b355b7f/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2673225dcec7f90497e79438c35e34638d0d0391ccea3cbb79bfb9adc0dc5bd7", size = 1079656, upload-time = "2025-11-05T21:40:24.89Z" }, + { url = "https://files.pythonhosted.org/packages/67/56/36d5d34210e5e7dfcd134eed8335b19e80ae940ee758f493e4f2b344dd70/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:c081f17290d8a2b96052b79207622aa635686ea39d502b976836384ede3d303c", size = 1139789, upload-time = "2025-11-05T21:40:42.119Z" }, + { url = "https://files.pythonhosted.org/packages/6b/5b/bb4f9420802bf73678033a4a55ab1bede36ce2e9b41fec5f966d83d932b3/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:57e8327aacc27f921968cb2a174f9e47b084ce9a7dd0122c8132d22358f6bd79", size = 1120308, upload-time = "2025-11-05T21:40:59.402Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8b/a1299085b28a2f6135e30370b126e3c5055b61908622f2488ade67641479/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d8955b57e42f2a5434670d5aa7b75eaf6e74602ccd8955dddf7045379cd762fb", size = 1129444, upload-time = "2025-11-05T21:41:17.906Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, + { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, +] + +[[package]] +name = "ruff" +version = "0.15.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/d9/aa3f7d59a10ef6b14fe3431706f854dbf03c5976be614a9796d36326810c/ruff-0.15.10.tar.gz", hash = "sha256:d1f86e67ebfdef88e00faefa1552b5e510e1d35f3be7d423dc7e84e63788c94e", size = 4631728, upload-time = "2026-04-09T14:06:09.884Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/00/a1c2fdc9939b2c03691edbda290afcd297f1f389196172826b03d6b6a595/ruff-0.15.10-py3-none-linux_armv6l.whl", hash = "sha256:0744e31482f8f7d0d10a11fcbf897af272fefdfcb10f5af907b18c2813ff4d5f", size = 10563362, upload-time = "2026-04-09T14:06:21.189Z" }, + { url = "https://files.pythonhosted.org/packages/5c/15/006990029aea0bebe9d33c73c3e28c80c391ebdba408d1b08496f00d422d/ruff-0.15.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b1e7c16ea0ff5a53b7c2df52d947e685973049be1cdfe2b59a9c43601897b22e", size = 10951122, upload-time = "2026-04-09T14:06:02.236Z" }, + { url = "https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:93cc06a19e5155b4441dd72808fdf84290d84ad8a39ca3b0f994363ade4cebb1", size = 10314005, upload-time = "2026-04-09T14:06:00.026Z" }, + { url = "https://files.pythonhosted.org/packages/da/73/c209138a5c98c0d321266372fc4e33ad43d506d7e5dd817dd89b60a8548f/ruff-0.15.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83e1dd04312997c99ea6965df66a14fb4f03ba978564574ffc68b0d61fd3989e", size = 10643450, upload-time = "2026-04-09T14:05:42.137Z" }, + { url = "https://files.pythonhosted.org/packages/ec/76/0deec355d8ec10709653635b1f90856735302cb8e149acfdf6f82a5feb70/ruff-0.15.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8154d43684e4333360fedd11aaa40b1b08a4e37d8ffa9d95fee6fa5b37b6fab1", size = 10379597, upload-time = "2026-04-09T14:05:49.984Z" }, + { url = "https://files.pythonhosted.org/packages/dc/be/86bba8fc8798c081e28a4b3bb6d143ccad3fd5f6f024f02002b8f08a9fa3/ruff-0.15.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ab88715f3a6deb6bde6c227f3a123410bec7b855c3ae331b4c006189e895cef", size = 11146645, upload-time = "2026-04-09T14:06:12.246Z" }, + { url = "https://files.pythonhosted.org/packages/a8/89/140025e65911b281c57be1d385ba1d932c2366ca88ae6663685aed8d4881/ruff-0.15.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a768ff5969b4f44c349d48edf4ab4f91eddb27fd9d77799598e130fb628aa158", size = 12030289, upload-time = "2026-04-09T14:06:04.776Z" }, + { url = "https://files.pythonhosted.org/packages/88/de/ddacca9545a5e01332567db01d44bd8cf725f2db3b3d61a80550b48308ea/ruff-0.15.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ee3ef42dab7078bda5ff6a1bcba8539e9857deb447132ad5566a038674540d0", size = 11496266, upload-time = "2026-04-09T14:05:55.485Z" }, + { url = "https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51cb8cc943e891ba99989dd92d61e29b1d231e14811db9be6440ecf25d5c1609", size = 11256418, upload-time = "2026-04-09T14:05:57.69Z" }, + { url = "https://files.pythonhosted.org/packages/dc/8d/55de0d35aacf6cd50b6ee91ee0f291672080021896543776f4170fc5c454/ruff-0.15.10-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:e59c9bdc056a320fb9ea1700a8d591718b8faf78af065484e801258d3a76bc3f", size = 11288416, upload-time = "2026-04-09T14:05:44.695Z" }, + { url = "https://files.pythonhosted.org/packages/68/cf/9438b1a27426ec46a80e0a718093c7f958ef72f43eb3111862949ead3cc1/ruff-0.15.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:136c00ca2f47b0018b073f28cb5c1506642a830ea941a60354b0e8bc8076b151", size = 10621053, upload-time = "2026-04-09T14:05:52.782Z" }, + { url = "https://files.pythonhosted.org/packages/4c/50/e29be6e2c135e9cd4cb15fbade49d6a2717e009dff3766dd080fcb82e251/ruff-0.15.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8b80a2f3c9c8a950d6237f2ca12b206bccff626139be9fa005f14feb881a1ae8", size = 10378302, upload-time = "2026-04-09T14:06:14.361Z" }, + { url = "https://files.pythonhosted.org/packages/18/2f/e0b36a6f99c51bb89f3a30239bc7bf97e87a37ae80aa2d6542d6e5150364/ruff-0.15.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:e3e53c588164dc025b671c9df2462429d60357ea91af7e92e9d56c565a9f1b07", size = 10850074, upload-time = "2026-04-09T14:06:16.581Z" }, + { url = "https://files.pythonhosted.org/packages/11/08/874da392558ce087a0f9b709dc6ec0d60cbc694c1c772dab8d5f31efe8cb/ruff-0.15.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b0c52744cf9f143a393e284125d2576140b68264a93c6716464e129a3e9adb48", size = 11358051, upload-time = "2026-04-09T14:06:18.948Z" }, + { url = "https://files.pythonhosted.org/packages/e4/46/602938f030adfa043e67112b73821024dc79f3ab4df5474c25fa4c1d2d14/ruff-0.15.10-py3-none-win32.whl", hash = "sha256:d4272e87e801e9a27a2e8df7b21011c909d9ddd82f4f3281d269b6ba19789ca5", size = 10588964, upload-time = "2026-04-09T14:06:07.14Z" }, + { url = "https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl", hash = "sha256:28cb32d53203242d403d819fd6983152489b12e4a3ae44993543d6fe62ab42ed", size = 11745044, upload-time = "2026-04-09T14:05:39.473Z" }, + { url = "https://files.pythonhosted.org/packages/58/ed/dea90a65b7d9e69888890fb14c90d7f51bf0c1e82ad800aeb0160e4bacfd/ruff-0.15.10-py3-none-win_arm64.whl", hash = "sha256:601d1610a9e1f1c2165a4f561eeaa2e2ea1e97f3287c5aa258d3dab8b57c6188", size = 11035607, upload-time = "2026-04-09T14:05:47.593Z" }, +] + +[[package]] +name = "safehttpx" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/d1/4282284d9cf1ee873607a46442da977fc3c985059315ab23610be31d5885/safehttpx-0.1.7.tar.gz", hash = "sha256:db201c0978c41eddb8bb480f3eee59dd67304fdd91646035e9d9a720049a9d23", size = 10385, upload-time = "2025-10-24T18:30:09.783Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/a3/0f0b7d78e2f1eb9e8e1afbff1d2bff8d60144aee17aca51c065b516743dd/safehttpx-0.1.7-py3-none-any.whl", hash = "sha256:c4f4a162db6993464d7ca3d7cc4af0ffc6515a606dfd220b9f82c6945d869cde", size = 8959, upload-time = "2025-10-24T18:30:08.733Z" }, +] + +[[package]] +name = "safetensors" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/29/9c/6e74567782559a63bd040a236edca26fd71bc7ba88de2ef35d75df3bca5e/safetensors-0.7.0.tar.gz", hash = "sha256:07663963b67e8bd9f0b8ad15bb9163606cd27cc5a1b96235a50d8369803b96b0", size = 200878, upload-time = "2025-11-19T15:18:43.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/47/aef6c06649039accf914afef490268e1067ed82be62bcfa5b7e886ad15e8/safetensors-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c82f4d474cf725255d9e6acf17252991c3c8aac038d6ef363a4bf8be2f6db517", size = 467781, upload-time = "2025-11-19T15:18:35.84Z" }, + { url = "https://files.pythonhosted.org/packages/e8/00/374c0c068e30cd31f1e1b46b4b5738168ec79e7689ca82ee93ddfea05109/safetensors-0.7.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:94fd4858284736bb67a897a41608b5b0c2496c9bdb3bf2af1fa3409127f20d57", size = 447058, upload-time = "2025-11-19T15:18:34.416Z" }, + { url = "https://files.pythonhosted.org/packages/f1/06/578ffed52c2296f93d7fd2d844cabfa92be51a587c38c8afbb8ae449ca89/safetensors-0.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e07d91d0c92a31200f25351f4acb2bc6aff7f48094e13ebb1d0fb995b54b6542", size = 491748, upload-time = "2025-11-19T15:18:09.79Z" }, + { url = "https://files.pythonhosted.org/packages/ae/33/1debbbb70e4791dde185edb9413d1fe01619255abb64b300157d7f15dddd/safetensors-0.7.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8469155f4cb518bafb4acf4865e8bb9d6804110d2d9bdcaa78564b9fd841e104", size = 503881, upload-time = "2025-11-19T15:18:16.145Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1c/40c2ca924d60792c3be509833df711b553c60effbd91da6f5284a83f7122/safetensors-0.7.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54bef08bf00a2bff599982f6b08e8770e09cc012d7bba00783fc7ea38f1fb37d", size = 623463, upload-time = "2025-11-19T15:18:21.11Z" }, + { url = "https://files.pythonhosted.org/packages/9b/3a/13784a9364bd43b0d61eef4bea2845039bc2030458b16594a1bd787ae26e/safetensors-0.7.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42cb091236206bb2016d245c377ed383aa7f78691748f3bb6ee1bfa51ae2ce6a", size = 532855, upload-time = "2025-11-19T15:18:25.719Z" }, + { url = "https://files.pythonhosted.org/packages/a0/60/429e9b1cb3fc651937727befe258ea24122d9663e4d5709a48c9cbfceecb/safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac7252938f0696ddea46f5e855dd3138444e82236e3be475f54929f0c510d48", size = 507152, upload-time = "2025-11-19T15:18:33.023Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a8/4b45e4e059270d17af60359713ffd83f97900d45a6afa73aaa0d737d48b6/safetensors-0.7.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1d060c70284127fa805085d8f10fbd0962792aed71879d00864acda69dbab981", size = 541856, upload-time = "2025-11-19T15:18:31.075Z" }, + { url = "https://files.pythonhosted.org/packages/06/87/d26d8407c44175d8ae164a95b5a62707fcc445f3c0c56108e37d98070a3d/safetensors-0.7.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cdab83a366799fa730f90a4ebb563e494f28e9e92c4819e556152ad55e43591b", size = 674060, upload-time = "2025-11-19T15:18:37.211Z" }, + { url = "https://files.pythonhosted.org/packages/11/f5/57644a2ff08dc6325816ba7217e5095f17269dada2554b658442c66aed51/safetensors-0.7.0-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:672132907fcad9f2aedcb705b2d7b3b93354a2aec1b2f706c4db852abe338f85", size = 771715, upload-time = "2025-11-19T15:18:38.689Z" }, + { url = "https://files.pythonhosted.org/packages/86/31/17883e13a814bd278ae6e266b13282a01049b0c81341da7fd0e3e71a80a3/safetensors-0.7.0-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:5d72abdb8a4d56d4020713724ba81dac065fedb7f3667151c4a637f1d3fb26c0", size = 714377, upload-time = "2025-11-19T15:18:40.162Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d8/0c8a7dc9b41dcac53c4cbf9df2b9c83e0e0097203de8b37a712b345c0be5/safetensors-0.7.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0f6d66c1c538d5a94a73aa9ddca8ccc4227e6c9ff555322ea40bdd142391dd4", size = 677368, upload-time = "2025-11-19T15:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/05/e5/cb4b713c8a93469e3c5be7c3f8d77d307e65fe89673e731f5c2bfd0a9237/safetensors-0.7.0-cp38-abi3-win32.whl", hash = "sha256:c74af94bf3ac15ac4d0f2a7c7b4663a15f8c2ab15ed0fc7531ca61d0835eccba", size = 326423, upload-time = "2025-11-19T15:18:45.74Z" }, + { url = "https://files.pythonhosted.org/packages/5d/e6/ec8471c8072382cb91233ba7267fd931219753bb43814cbc71757bfd4dab/safetensors-0.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:d1239932053f56f3456f32eb9625590cc7582e905021f94636202a864d470755", size = 341380, upload-time = "2025-11-19T15:18:44.427Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6a/4d08d89a6fcbe905c5ae68b8b34f0791850882fc19782d0d02c65abbdf3b/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4729811a6640d019a4b7ba8638ee2fd21fa5ca8c7e7bdf0fed62068fcaac737", size = 492430, upload-time = "2025-11-19T15:18:11.884Z" }, + { url = "https://files.pythonhosted.org/packages/dd/29/59ed8152b30f72c42d00d241e58eaca558ae9dbfa5695206e2e0f54c7063/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12f49080303fa6bb424b362149a12949dfbbf1e06811a88f2307276b0c131afd", size = 503977, upload-time = "2025-11-19T15:18:17.523Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/4811bfec67fa260e791369b16dab105e4bae82686120554cc484064e22b4/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0071bffba4150c2f46cae1432d31995d77acfd9f8db598b5d1a2ce67e8440ad2", size = 623890, upload-time = "2025-11-19T15:18:22.666Z" }, + { url = "https://files.pythonhosted.org/packages/58/5b/632a58724221ef03d78ab65062e82a1010e1bef8e8e0b9d7c6d7b8044841/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:473b32699f4200e69801bf5abf93f1a4ecd432a70984df164fc22ccf39c4a6f3", size = 531885, upload-time = "2025-11-19T15:18:27.146Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "joblib", marker = "python_full_version < '3.11'" }, + { name = "numpy", marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "threadpoolctl", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136, upload-time = "2025-09-09T08:21:29.075Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/3e/daed796fd69cce768b8788401cc464ea90b306fb196ae1ffed0b98182859/scikit_learn-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b33579c10a3081d076ab403df4a4190da4f4432d443521674637677dc91e61f", size = 9336221, upload-time = "2025-09-09T08:20:19.328Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ce/af9d99533b24c55ff4e18d9b7b4d9919bbc6cd8f22fe7a7be01519a347d5/scikit_learn-1.7.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:36749fb62b3d961b1ce4fedf08fa57a1986cd409eff2d783bca5d4b9b5fce51c", size = 8653834, upload-time = "2025-09-09T08:20:22.073Z" }, + { url = "https://files.pythonhosted.org/packages/58/0e/8c2a03d518fb6bd0b6b0d4b114c63d5f1db01ff0f9925d8eb10960d01c01/scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7a58814265dfc52b3295b1900cfb5701589d30a8bb026c7540f1e9d3499d5ec8", size = 9660938, upload-time = "2025-09-09T08:20:24.327Z" }, + { url = "https://files.pythonhosted.org/packages/2b/75/4311605069b5d220e7cf5adabb38535bd96f0079313cdbb04b291479b22a/scikit_learn-1.7.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a847fea807e278f821a0406ca01e387f97653e284ecbd9750e3ee7c90347f18", size = 9477818, upload-time = "2025-09-09T08:20:26.845Z" }, + { url = "https://files.pythonhosted.org/packages/7f/9b/87961813c34adbca21a6b3f6b2bea344c43b30217a6d24cc437c6147f3e8/scikit_learn-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:ca250e6836d10e6f402436d6463d6c0e4d8e0234cfb6a9a47835bd392b852ce5", size = 8886969, upload-time = "2025-09-09T08:20:29.329Z" }, + { url = "https://files.pythonhosted.org/packages/43/83/564e141eef908a5863a54da8ca342a137f45a0bfb71d1d79704c9894c9d1/scikit_learn-1.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7509693451651cd7361d30ce4e86a1347493554f172b1c72a39300fa2aea79e", size = 9331967, upload-time = "2025-09-09T08:20:32.421Z" }, + { url = "https://files.pythonhosted.org/packages/18/d6/ba863a4171ac9d7314c4d3fc251f015704a2caeee41ced89f321c049ed83/scikit_learn-1.7.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:0486c8f827c2e7b64837c731c8feff72c0bd2b998067a8a9cbc10643c31f0fe1", size = 8648645, upload-time = "2025-09-09T08:20:34.436Z" }, + { url = "https://files.pythonhosted.org/packages/ef/0e/97dbca66347b8cf0ea8b529e6bb9367e337ba2e8be0ef5c1a545232abfde/scikit_learn-1.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89877e19a80c7b11a2891a27c21c4894fb18e2c2e077815bcade10d34287b20d", size = 9715424, upload-time = "2025-09-09T08:20:36.776Z" }, + { url = "https://files.pythonhosted.org/packages/f7/32/1f3b22e3207e1d2c883a7e09abb956362e7d1bd2f14458c7de258a26ac15/scikit_learn-1.7.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8da8bf89d4d79aaec192d2bda62f9b56ae4e5b4ef93b6a56b5de4977e375c1f1", size = 9509234, upload-time = "2025-09-09T08:20:38.957Z" }, + { url = "https://files.pythonhosted.org/packages/9f/71/34ddbd21f1da67c7a768146968b4d0220ee6831e4bcbad3e03dd3eae88b6/scikit_learn-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:9b7ed8d58725030568523e937c43e56bc01cadb478fc43c042a9aca1dacb3ba1", size = 8894244, upload-time = "2025-09-09T08:20:41.166Z" }, + { url = "https://files.pythonhosted.org/packages/a7/aa/3996e2196075689afb9fce0410ebdb4a09099d7964d061d7213700204409/scikit_learn-1.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8d91a97fa2b706943822398ab943cde71858a50245e31bc71dba62aab1d60a96", size = 9259818, upload-time = "2025-09-09T08:20:43.19Z" }, + { url = "https://files.pythonhosted.org/packages/43/5d/779320063e88af9c4a7c2cf463ff11c21ac9c8bd730c4a294b0000b666c9/scikit_learn-1.7.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:acbc0f5fd2edd3432a22c69bed78e837c70cf896cd7993d71d51ba6708507476", size = 8636997, upload-time = "2025-09-09T08:20:45.468Z" }, + { url = "https://files.pythonhosted.org/packages/5c/d0/0c577d9325b05594fdd33aa970bf53fb673f051a45496842caee13cfd7fe/scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b", size = 9478381, upload-time = "2025-09-09T08:20:47.982Z" }, + { url = "https://files.pythonhosted.org/packages/82/70/8bf44b933837ba8494ca0fc9a9ab60f1c13b062ad0197f60a56e2fc4c43e/scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44", size = 9300296, upload-time = "2025-09-09T08:20:50.366Z" }, + { url = "https://files.pythonhosted.org/packages/c6/99/ed35197a158f1fdc2fe7c3680e9c70d0128f662e1fee4ed495f4b5e13db0/scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290", size = 8731256, upload-time = "2025-09-09T08:20:52.627Z" }, + { url = "https://files.pythonhosted.org/packages/ae/93/a3038cb0293037fd335f77f31fe053b89c72f17b1c8908c576c29d953e84/scikit_learn-1.7.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b7dacaa05e5d76759fb071558a8b5130f4845166d88654a0f9bdf3eb57851b7", size = 9212382, upload-time = "2025-09-09T08:20:54.731Z" }, + { url = "https://files.pythonhosted.org/packages/40/dd/9a88879b0c1104259136146e4742026b52df8540c39fec21a6383f8292c7/scikit_learn-1.7.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:abebbd61ad9e1deed54cca45caea8ad5f79e1b93173dece40bb8e0c658dbe6fe", size = 8592042, upload-time = "2025-09-09T08:20:57.313Z" }, + { url = "https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f", size = 9434180, upload-time = "2025-09-09T08:20:59.671Z" }, + { url = "https://files.pythonhosted.org/packages/f1/fd/df59faa53312d585023b2da27e866524ffb8faf87a68516c23896c718320/scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0", size = 9283660, upload-time = "2025-09-09T08:21:01.71Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c7/03000262759d7b6f38c836ff9d512f438a70d8a8ddae68ee80de72dcfb63/scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c", size = 8702057, upload-time = "2025-09-09T08:21:04.234Z" }, + { url = "https://files.pythonhosted.org/packages/55/87/ef5eb1f267084532c8e4aef98a28b6ffe7425acbfd64b5e2f2e066bc29b3/scikit_learn-1.7.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9acb6c5e867447b4e1390930e3944a005e2cb115922e693c08a323421a6966e8", size = 9558731, upload-time = "2025-09-09T08:21:06.381Z" }, + { url = "https://files.pythonhosted.org/packages/93/f8/6c1e3fc14b10118068d7938878a9f3f4e6d7b74a8ddb1e5bed65159ccda8/scikit_learn-1.7.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:2a41e2a0ef45063e654152ec9d8bcfc39f7afce35b08902bfe290c2498a67a6a", size = 9038852, upload-time = "2025-09-09T08:21:08.628Z" }, + { url = "https://files.pythonhosted.org/packages/83/87/066cafc896ee540c34becf95d30375fe5cbe93c3b75a0ee9aa852cd60021/scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c", size = 9527094, upload-time = "2025-09-09T08:21:11.486Z" }, + { url = "https://files.pythonhosted.org/packages/9c/2b/4903e1ccafa1f6453b1ab78413938c8800633988c838aa0be386cbb33072/scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c", size = 9367436, upload-time = "2025-09-09T08:21:13.602Z" }, + { url = "https://files.pythonhosted.org/packages/b5/aa/8444be3cfb10451617ff9d177b3c190288f4563e6c50ff02728be67ad094/scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973", size = 9275749, upload-time = "2025-09-09T08:21:15.96Z" }, + { url = "https://files.pythonhosted.org/packages/d9/82/dee5acf66837852e8e68df6d8d3a6cb22d3df997b733b032f513d95205b7/scikit_learn-1.7.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa8f63940e29c82d1e67a45d5297bdebbcb585f5a5a50c4914cc2e852ab77f33", size = 9208906, upload-time = "2025-09-09T08:21:18.557Z" }, + { url = "https://files.pythonhosted.org/packages/3c/30/9029e54e17b87cb7d50d51a5926429c683d5b4c1732f0507a6c3bed9bf65/scikit_learn-1.7.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f95dc55b7902b91331fa4e5845dd5bde0580c9cd9612b1b2791b7e80c3d32615", size = 8627836, upload-time = "2025-09-09T08:21:20.695Z" }, + { url = "https://files.pythonhosted.org/packages/60/18/4a52c635c71b536879f4b971c2cedf32c35ee78f48367885ed8025d1f7ee/scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106", size = 9426236, upload-time = "2025-09-09T08:21:22.645Z" }, + { url = "https://files.pythonhosted.org/packages/99/7e/290362f6ab582128c53445458a5befd471ed1ea37953d5bcf80604619250/scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61", size = 9312593, upload-time = "2025-09-09T08:21:24.65Z" }, + { url = "https://files.pythonhosted.org/packages/8e/87/24f541b6d62b1794939ae6422f8023703bbf6900378b2b34e0b4384dfefd/scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8", size = 8820007, upload-time = "2025-09-09T08:21:26.713Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "joblib", marker = "python_full_version >= '3.11'" }, + { name = "numpy", marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "threadpoolctl", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/d4/40988bf3b8e34feec1d0e6a051446b1f66225f8529b9309becaeef62b6c4/scikit_learn-1.8.0.tar.gz", hash = "sha256:9bccbb3b40e3de10351f8f5068e105d0f4083b1a65fa07b6634fbc401a6287fd", size = 7335585, upload-time = "2025-12-10T07:08:53.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/92/53ea2181da8ac6bf27170191028aee7251f8f841f8d3edbfdcaf2008fde9/scikit_learn-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:146b4d36f800c013d267b29168813f7a03a43ecd2895d04861f1240b564421da", size = 8595835, upload-time = "2025-12-10T07:07:39.385Z" }, + { url = "https://files.pythonhosted.org/packages/01/18/d154dc1638803adf987910cdd07097d9c526663a55666a97c124d09fb96a/scikit_learn-1.8.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f984ca4b14914e6b4094c5d52a32ea16b49832c03bd17a110f004db3c223e8e1", size = 8080381, upload-time = "2025-12-10T07:07:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/8a/44/226142fcb7b7101e64fdee5f49dbe6288d4c7af8abf593237b70fca080a4/scikit_learn-1.8.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e30adb87f0cc81c7690a84f7932dd66be5bac57cfe16b91cb9151683a4a2d3b", size = 8799632, upload-time = "2025-12-10T07:07:43.899Z" }, + { url = "https://files.pythonhosted.org/packages/36/4d/4a67f30778a45d542bbea5db2dbfa1e9e100bf9ba64aefe34215ba9f11f6/scikit_learn-1.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ada8121bcb4dac28d930febc791a69f7cb1673c8495e5eee274190b73a4559c1", size = 9103788, upload-time = "2025-12-10T07:07:45.982Z" }, + { url = "https://files.pythonhosted.org/packages/89/3c/45c352094cfa60050bcbb967b1faf246b22e93cb459f2f907b600f2ceda5/scikit_learn-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:c57b1b610bd1f40ba43970e11ce62821c2e6569e4d74023db19c6b26f246cb3b", size = 8081706, upload-time = "2025-12-10T07:07:48.111Z" }, + { url = "https://files.pythonhosted.org/packages/3d/46/5416595bb395757f754feb20c3d776553a386b661658fb21b7c814e89efe/scikit_learn-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:2838551e011a64e3053ad7618dda9310175f7515f1742fa2d756f7c874c05961", size = 7688451, upload-time = "2025-12-10T07:07:49.873Z" }, + { url = "https://files.pythonhosted.org/packages/90/74/e6a7cc4b820e95cc38cf36cd74d5aa2b42e8ffc2d21fe5a9a9c45c1c7630/scikit_learn-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5fb63362b5a7ddab88e52b6dbb47dac3fd7dafeee740dc6c8d8a446ddedade8e", size = 8548242, upload-time = "2025-12-10T07:07:51.568Z" }, + { url = "https://files.pythonhosted.org/packages/49/d8/9be608c6024d021041c7f0b3928d4749a706f4e2c3832bbede4fb4f58c95/scikit_learn-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5025ce924beccb28298246e589c691fe1b8c1c96507e6d27d12c5fadd85bfd76", size = 8079075, upload-time = "2025-12-10T07:07:53.697Z" }, + { url = "https://files.pythonhosted.org/packages/dd/47/f187b4636ff80cc63f21cd40b7b2d177134acaa10f6bb73746130ee8c2e5/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4496bb2cf7a43ce1a2d7524a79e40bc5da45cf598dbf9545b7e8316ccba47bb4", size = 8660492, upload-time = "2025-12-10T07:07:55.574Z" }, + { url = "https://files.pythonhosted.org/packages/97/74/b7a304feb2b49df9fafa9382d4d09061a96ee9a9449a7cbea7988dda0828/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0bcfe4d0d14aec44921545fd2af2338c7471de9cb701f1da4c9d85906ab847a", size = 8931904, upload-time = "2025-12-10T07:07:57.666Z" }, + { url = "https://files.pythonhosted.org/packages/9f/c4/0ab22726a04ede56f689476b760f98f8f46607caecff993017ac1b64aa5d/scikit_learn-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:35c007dedb2ffe38fe3ee7d201ebac4a2deccd2408e8621d53067733e3c74809", size = 8019359, upload-time = "2025-12-10T07:07:59.838Z" }, + { url = "https://files.pythonhosted.org/packages/24/90/344a67811cfd561d7335c1b96ca21455e7e472d281c3c279c4d3f2300236/scikit_learn-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:8c497fff237d7b4e07e9ef1a640887fa4fb765647f86fbe00f969ff6280ce2bb", size = 7641898, upload-time = "2025-12-10T07:08:01.36Z" }, + { url = "https://files.pythonhosted.org/packages/03/aa/e22e0768512ce9255eba34775be2e85c2048da73da1193e841707f8f039c/scikit_learn-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d6ae97234d5d7079dc0040990a6f7aeb97cb7fa7e8945f1999a429b23569e0a", size = 8513770, upload-time = "2025-12-10T07:08:03.251Z" }, + { url = "https://files.pythonhosted.org/packages/58/37/31b83b2594105f61a381fc74ca19e8780ee923be2d496fcd8d2e1147bd99/scikit_learn-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:edec98c5e7c128328124a029bceb09eda2d526997780fef8d65e9a69eead963e", size = 8044458, upload-time = "2025-12-10T07:08:05.336Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5a/3f1caed8765f33eabb723596666da4ebbf43d11e96550fb18bdec42b467b/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74b66d8689d52ed04c271e1329f0c61635bcaf5b926db9b12d58914cdc01fe57", size = 8610341, upload-time = "2025-12-10T07:08:07.732Z" }, + { url = "https://files.pythonhosted.org/packages/38/cf/06896db3f71c75902a8e9943b444a56e727418f6b4b4a90c98c934f51ed4/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fdf95767f989b0cfedb85f7ed8ca215d4be728031f56ff5a519ee1e3276dc2e", size = 8900022, upload-time = "2025-12-10T07:08:09.862Z" }, + { url = "https://files.pythonhosted.org/packages/1c/f9/9b7563caf3ec8873e17a31401858efab6b39a882daf6c1bfa88879c0aa11/scikit_learn-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:2de443b9373b3b615aec1bb57f9baa6bb3a9bd093f1269ba95c17d870422b271", size = 7989409, upload-time = "2025-12-10T07:08:12.028Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/1f4001503650e72c4f6009ac0c4413cb17d2d601cef6f71c0453da2732fc/scikit_learn-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:eddde82a035681427cbedded4e6eff5e57fa59216c2e3e90b10b19ab1d0a65c3", size = 7619760, upload-time = "2025-12-10T07:08:13.688Z" }, + { url = "https://files.pythonhosted.org/packages/d2/7d/a630359fc9dcc95496588c8d8e3245cc8fd81980251079bc09c70d41d951/scikit_learn-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7cc267b6108f0a1499a734167282c00c4ebf61328566b55ef262d48e9849c735", size = 8826045, upload-time = "2025-12-10T07:08:15.215Z" }, + { url = "https://files.pythonhosted.org/packages/cc/56/a0c86f6930cfcd1c7054a2bc417e26960bb88d32444fe7f71d5c2cfae891/scikit_learn-1.8.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:fe1c011a640a9f0791146011dfd3c7d9669785f9fed2b2a5f9e207536cf5c2fd", size = 8420324, upload-time = "2025-12-10T07:08:17.561Z" }, + { url = "https://files.pythonhosted.org/packages/46/1e/05962ea1cebc1cf3876667ecb14c283ef755bf409993c5946ade3b77e303/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72358cce49465d140cc4e7792015bb1f0296a9742d5622c67e31399b75468b9e", size = 8680651, upload-time = "2025-12-10T07:08:19.952Z" }, + { url = "https://files.pythonhosted.org/packages/fe/56/a85473cd75f200c9759e3a5f0bcab2d116c92a8a02ee08ccd73b870f8bb4/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80832434a6cc114f5219211eec13dcbc16c2bac0e31ef64c6d346cde3cf054cb", size = 8925045, upload-time = "2025-12-10T07:08:22.11Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b7/64d8cfa896c64435ae57f4917a548d7ac7a44762ff9802f75a79b77cb633/scikit_learn-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ee787491dbfe082d9c3013f01f5991658b0f38aa8177e4cd4bf434c58f551702", size = 8507994, upload-time = "2025-12-10T07:08:23.943Z" }, + { url = "https://files.pythonhosted.org/packages/5e/37/e192ea709551799379958b4c4771ec507347027bb7c942662c7fbeba31cb/scikit_learn-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf97c10a3f5a7543f9b88cbf488d33d175e9146115a451ae34568597ba33dcde", size = 7869518, upload-time = "2025-12-10T07:08:25.71Z" }, + { url = "https://files.pythonhosted.org/packages/24/05/1af2c186174cc92dcab2233f327336058c077d38f6fe2aceb08e6ab4d509/scikit_learn-1.8.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c22a2da7a198c28dd1a6e1136f19c830beab7fdca5b3e5c8bba8394f8a5c45b3", size = 8528667, upload-time = "2025-12-10T07:08:27.541Z" }, + { url = "https://files.pythonhosted.org/packages/a8/25/01c0af38fe969473fb292bba9dc2b8f9b451f3112ff242c647fee3d0dfe7/scikit_learn-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:6b595b07a03069a2b1740dc08c2299993850ea81cce4fe19b2421e0c970de6b7", size = 8066524, upload-time = "2025-12-10T07:08:29.822Z" }, + { url = "https://files.pythonhosted.org/packages/be/ce/a0623350aa0b68647333940ee46fe45086c6060ec604874e38e9ab7d8e6c/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29ffc74089f3d5e87dfca4c2c8450f88bdc61b0fc6ed5d267f3988f19a1309f6", size = 8657133, upload-time = "2025-12-10T07:08:31.865Z" }, + { url = "https://files.pythonhosted.org/packages/b8/cb/861b41341d6f1245e6ca80b1c1a8c4dfce43255b03df034429089ca2a2c5/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb65db5d7531bccf3a4f6bec3462223bea71384e2cda41da0f10b7c292b9e7c4", size = 8923223, upload-time = "2025-12-10T07:08:34.166Z" }, + { url = "https://files.pythonhosted.org/packages/76/18/a8def8f91b18cd1ba6e05dbe02540168cb24d47e8dcf69e8d00b7da42a08/scikit_learn-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:56079a99c20d230e873ea40753102102734c5953366972a71d5cb39a32bc40c6", size = 8096518, upload-time = "2025-12-10T07:08:36.339Z" }, + { url = "https://files.pythonhosted.org/packages/d1/77/482076a678458307f0deb44e29891d6022617b2a64c840c725495bee343f/scikit_learn-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:3bad7565bc9cf37ce19a7c0d107742b320c1285df7aab1a6e2d28780df167242", size = 7754546, upload-time = "2025-12-10T07:08:38.128Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d1/ef294ca754826daa043b2a104e59960abfab4cf653891037d19dd5b6f3cf/scikit_learn-1.8.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4511be56637e46c25721e83d1a9cea9614e7badc7040c4d573d75fbe257d6fd7", size = 8848305, upload-time = "2025-12-10T07:08:41.013Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e2/b1f8b05138ee813b8e1a4149f2f0d289547e60851fd1bb268886915adbda/scikit_learn-1.8.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:a69525355a641bf8ef136a7fa447672fb54fe8d60cab5538d9eb7c6438543fb9", size = 8432257, upload-time = "2025-12-10T07:08:42.873Z" }, + { url = "https://files.pythonhosted.org/packages/26/11/c32b2138a85dcb0c99f6afd13a70a951bfdff8a6ab42d8160522542fb647/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2656924ec73e5939c76ac4c8b026fc203b83d8900362eb2599d8aee80e4880f", size = 8678673, upload-time = "2025-12-10T07:08:45.362Z" }, + { url = "https://files.pythonhosted.org/packages/c7/57/51f2384575bdec454f4fe4e7a919d696c9ebce914590abf3e52d47607ab8/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15fc3b5d19cc2be65404786857f2e13c70c83dd4782676dd6814e3b89dc8f5b9", size = 8922467, upload-time = "2025-12-10T07:08:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/35/4d/748c9e2872637a57981a04adc038dacaa16ba8ca887b23e34953f0b3f742/scikit_learn-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2", size = 8774395, upload-time = "2025-12-10T07:08:49.337Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/d7b2ebe4704a5e50790ba089d5c2ae308ab6bb852719e6c3bd4f04c3a363/scikit_learn-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f28dd15c6bb0b66ba09728cf09fd8736c304be29409bd8445a080c1280619e8c", size = 8002647, upload-time = "2025-12-10T07:08:51.601Z" }, +] + +[[package]] +name = "scipy" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "numpy", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770, upload-time = "2025-05-08T16:04:20.849Z" }, + { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511, upload-time = "2025-05-08T16:04:27.103Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151, upload-time = "2025-05-08T16:04:31.731Z" }, + { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732, upload-time = "2025-05-08T16:04:36.596Z" }, + { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617, upload-time = "2025-05-08T16:04:43.546Z" }, + { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964, upload-time = "2025-05-08T16:04:49.431Z" }, + { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749, upload-time = "2025-05-08T16:04:55.215Z" }, + { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383, upload-time = "2025-05-08T16:05:01.914Z" }, + { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201, upload-time = "2025-05-08T16:05:08.166Z" }, + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255, upload-time = "2025-05-08T16:05:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035, upload-time = "2025-05-08T16:05:20.152Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499, upload-time = "2025-05-08T16:05:24.494Z" }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602, upload-time = "2025-05-08T16:05:29.313Z" }, + { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415, upload-time = "2025-05-08T16:05:34.699Z" }, + { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622, upload-time = "2025-05-08T16:05:40.762Z" }, + { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796, upload-time = "2025-05-08T16:05:48.119Z" }, + { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684, upload-time = "2025-05-08T16:05:54.22Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504, upload-time = "2025-05-08T16:06:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735, upload-time = "2025-05-08T16:06:06.471Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284, upload-time = "2025-05-08T16:06:11.686Z" }, + { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958, upload-time = "2025-05-08T16:06:15.97Z" }, + { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454, upload-time = "2025-05-08T16:06:20.394Z" }, + { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199, upload-time = "2025-05-08T16:06:26.159Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455, upload-time = "2025-05-08T16:06:32.778Z" }, + { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140, upload-time = "2025-05-08T16:06:39.249Z" }, + { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549, upload-time = "2025-05-08T16:06:45.729Z" }, + { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184, upload-time = "2025-05-08T16:06:52.623Z" }, + { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256, upload-time = "2025-05-08T16:06:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540, upload-time = "2025-05-08T16:07:04.209Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115, upload-time = "2025-05-08T16:07:08.998Z" }, + { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884, upload-time = "2025-05-08T16:07:14.091Z" }, + { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018, upload-time = "2025-05-08T16:07:19.427Z" }, + { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716, upload-time = "2025-05-08T16:07:25.712Z" }, + { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342, upload-time = "2025-05-08T16:07:31.468Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869, upload-time = "2025-05-08T16:07:38.002Z" }, + { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851, upload-time = "2025-05-08T16:08:33.671Z" }, + { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011, upload-time = "2025-05-08T16:07:44.039Z" }, + { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407, upload-time = "2025-05-08T16:07:49.891Z" }, + { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030, upload-time = "2025-05-08T16:07:54.121Z" }, + { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709, upload-time = "2025-05-08T16:07:58.506Z" }, + { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045, upload-time = "2025-05-08T16:08:03.929Z" }, + { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062, upload-time = "2025-05-08T16:08:09.558Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132, upload-time = "2025-05-08T16:08:15.34Z" }, + { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503, upload-time = "2025-05-08T16:08:21.513Z" }, + { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097, upload-time = "2025-05-08T16:08:27.627Z" }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, + { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, + { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, + { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, + { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, + { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, + { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, + { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, + { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, + { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, + { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, + { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, + { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, + { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, + { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, + { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, +] + +[[package]] +name = "semantic-version" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", size = 52289, upload-time = "2022-05-26T13:35:23.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" }, +] + +[[package]] +name = "sentence-transformers" +version = "5.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scikit-learn", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "torch" }, + { name = "tqdm" }, + { name = "transformers" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/b0/fcc810aa1747e96eb2e342e16173dbebbff85b8ccd079f35b32874c5f6ce/sentence_transformers-5.4.0.tar.gz", hash = "sha256:ef0c129d653f736df5fd74d46af11a2234328a32cddb1d91a1975c5f6cccc194", size = 428330, upload-time = "2026-04-09T13:34:12.642Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/d4/58f3e1308c8d15cae83407bd651542b62155a2b3248e0290a724e80fd124/sentence_transformers-5.4.0-py3-none-any.whl", hash = "sha256:4e5ac9a19244153f3f4074d898e664990408d7b077fb1d1d0dc9cb8a9316feac", size = 570836, upload-time = "2026-04-09T13:34:11.298Z" }, +] + +[[package]] +name = "sentencepiece" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b151ae6d0f2a92f8081755ebe8d4a64099accc6f77ba6/sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad", size = 3228515, upload-time = "2025-08-12T07:00:51.718Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/31/5b7cccb307b485db1a2372d6d2980b0a65d067f8be5ca943a103b4acd5b3/sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44", size = 1942557, upload-time = "2025-08-12T06:59:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/1f/41/0ac923a8e685ad290c5afc8ae55c5844977b8d75076fcc04302b9a324274/sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526", size = 1325384, upload-time = "2025-08-12T06:59:14.334Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ef/3751555d67daf9003384978f169d31c775cb5c7baf28633caaf1eb2b2b4d/sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f", size = 1253317, upload-time = "2025-08-12T06:59:16.247Z" }, + { url = "https://files.pythonhosted.org/packages/46/a5/742c69b7bd144eb32b6e5fd50dbd8abbbc7a95fce2fe16e50156fa400e3b/sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92", size = 1316379, upload-time = "2025-08-12T06:59:17.825Z" }, + { url = "https://files.pythonhosted.org/packages/c8/89/8deeafbba2871e8fa10f20f17447786f4ac38085925335728d360eaf4cae/sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c", size = 1387926, upload-time = "2025-08-12T06:59:19.395Z" }, + { url = "https://files.pythonhosted.org/packages/c3/ca/67fe73005f0ab617c6a970b199754e28e524b6873aa7025224fad3cda252/sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa", size = 999550, upload-time = "2025-08-12T06:59:20.844Z" }, + { url = "https://files.pythonhosted.org/packages/6d/33/dc5b54042050d2dda4229c3ce1f862541c99966390b6aa20f54d520d2dc2/sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7", size = 1054613, upload-time = "2025-08-12T06:59:22.255Z" }, + { url = "https://files.pythonhosted.org/packages/fa/19/1ea47f46ff97fe04422b78997da1a37cd632f414aae042d27a9009c5b733/sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0", size = 1033884, upload-time = "2025-08-12T06:59:24.194Z" }, + { url = "https://files.pythonhosted.org/packages/d8/15/46afbab00733d81788b64be430ca1b93011bb9388527958e26cc31832de5/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987", size = 1942560, upload-time = "2025-08-12T06:59:25.82Z" }, + { url = "https://files.pythonhosted.org/packages/fa/79/7c01b8ef98a0567e9d84a4e7a910f8e7074fcbf398a5cd76f93f4b9316f9/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7", size = 1325385, upload-time = "2025-08-12T06:59:27.722Z" }, + { url = "https://files.pythonhosted.org/packages/bb/88/2b41e07bd24f33dcf2f18ec3b74247aa4af3526bad8907b8727ea3caba03/sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a", size = 1253319, upload-time = "2025-08-12T06:59:29.306Z" }, + { url = "https://files.pythonhosted.org/packages/a0/54/38a1af0c6210a3c6f95aa46d23d6640636d020fba7135cd0d9a84ada05a7/sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e", size = 1316162, upload-time = "2025-08-12T06:59:30.914Z" }, + { url = "https://files.pythonhosted.org/packages/ef/66/fb191403ade791ad2c3c1e72fe8413e63781b08cfa3aa4c9dfc536d6e795/sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63", size = 1387785, upload-time = "2025-08-12T06:59:32.491Z" }, + { url = "https://files.pythonhosted.org/packages/a9/2d/3bd9b08e70067b2124518b308db6a84a4f8901cc8a4317e2e4288cdd9b4d/sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094", size = 999555, upload-time = "2025-08-12T06:59:34.475Z" }, + { url = "https://files.pythonhosted.org/packages/32/b8/f709977f5fda195ae1ea24f24e7c581163b6f142b1005bc3d0bbfe4d7082/sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728", size = 1054617, upload-time = "2025-08-12T06:59:36.461Z" }, + { url = "https://files.pythonhosted.org/packages/7a/40/a1fc23be23067da0f703709797b464e8a30a1c78cc8a687120cd58d4d509/sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119", size = 1033877, upload-time = "2025-08-12T06:59:38.391Z" }, + { url = "https://files.pythonhosted.org/packages/4a/be/32ce495aa1d0e0c323dcb1ba87096037358edee539cac5baf8755a6bd396/sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133", size = 1943152, upload-time = "2025-08-12T06:59:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/88/7e/ff23008899a58678e98c6ff592bf4d368eee5a71af96d0df6b38a039dd4f/sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6", size = 1325651, upload-time = "2025-08-12T06:59:41.536Z" }, + { url = "https://files.pythonhosted.org/packages/19/84/42eb3ce4796777a1b5d3699dfd4dca85113e68b637f194a6c8d786f16a04/sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76", size = 1253645, upload-time = "2025-08-12T06:59:42.903Z" }, + { url = "https://files.pythonhosted.org/packages/89/fa/d3d5ebcba3cb9e6d3775a096251860c41a6bc53a1b9461151df83fe93255/sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167", size = 1316273, upload-time = "2025-08-12T06:59:44.476Z" }, + { url = "https://files.pythonhosted.org/packages/04/88/14f2f4a2b922d8b39be45bf63d79e6cd3a9b2f248b2fcb98a69b12af12f5/sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b", size = 1387881, upload-time = "2025-08-12T06:59:46.09Z" }, + { url = "https://files.pythonhosted.org/packages/fd/b8/903e5ccb77b4ef140605d5d71b4f9e0ad95d456d6184688073ed11712809/sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068", size = 999540, upload-time = "2025-08-12T06:59:48.023Z" }, + { url = "https://files.pythonhosted.org/packages/2d/81/92df5673c067148c2545b1bfe49adfd775bcc3a169a047f5a0e6575ddaca/sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de", size = 1054671, upload-time = "2025-08-12T06:59:49.895Z" }, + { url = "https://files.pythonhosted.org/packages/fe/02/c5e3bc518655d714622bec87d83db9cdba1cd0619a4a04e2109751c4f47f/sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4", size = 1033923, upload-time = "2025-08-12T06:59:51.952Z" }, + { url = "https://files.pythonhosted.org/packages/ba/4a/85fbe1706d4d04a7e826b53f327c4b80f849cf1c7b7c5e31a20a97d8f28b/sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706", size = 1943150, upload-time = "2025-08-12T06:59:53.588Z" }, + { url = "https://files.pythonhosted.org/packages/c2/83/4cfb393e287509fc2155480b9d184706ef8d9fa8cbf5505d02a5792bf220/sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062", size = 1325651, upload-time = "2025-08-12T06:59:55.073Z" }, + { url = "https://files.pythonhosted.org/packages/8d/de/5a007fb53b1ab0aafc69d11a5a3dd72a289d5a3e78dcf2c3a3d9b14ffe93/sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff", size = 1253641, upload-time = "2025-08-12T06:59:56.562Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d2/f552be5928105588f4f4d66ee37dd4c61460d8097e62d0e2e0eec41bc61d/sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820", size = 1316271, upload-time = "2025-08-12T06:59:58.109Z" }, + { url = "https://files.pythonhosted.org/packages/96/df/0cfe748ace5485be740fed9476dee7877f109da32ed0d280312c94ec259f/sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47", size = 1387882, upload-time = "2025-08-12T07:00:00.701Z" }, + { url = "https://files.pythonhosted.org/packages/ac/dd/f7774d42a881ced8e1739f393ab1e82ece39fc9abd4779e28050c2e975b5/sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f", size = 999541, upload-time = "2025-08-12T07:00:02.709Z" }, + { url = "https://files.pythonhosted.org/packages/dd/e9/932b9eae6fd7019548321eee1ab8d5e3b3d1294df9d9a0c9ac517c7b636d/sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b", size = 1054669, upload-time = "2025-08-12T07:00:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/c9/3a/76488a00ea7d6931689cda28726a1447d66bf1a4837943489314593d5596/sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd", size = 1033922, upload-time = "2025-08-12T07:00:06.496Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b6/08fe2ce819e02ccb0296f4843e3f195764ce9829cbda61b7513f29b95718/sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94", size = 1946052, upload-time = "2025-08-12T07:00:08.136Z" }, + { url = "https://files.pythonhosted.org/packages/ab/d9/1ea0e740591ff4c6fc2b6eb1d7510d02f3fb885093f19b2f3abd1363b402/sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07", size = 1327408, upload-time = "2025-08-12T07:00:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/99/7e/1fb26e8a21613f6200e1ab88824d5d203714162cf2883248b517deb500b7/sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c", size = 1254857, upload-time = "2025-08-12T07:00:11.021Z" }, + { url = "https://files.pythonhosted.org/packages/bc/85/c72fd1f3c7a6010544d6ae07f8ddb38b5e2a7e33bd4318f87266c0bbafbf/sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596", size = 1315722, upload-time = "2025-08-12T07:00:12.989Z" }, + { url = "https://files.pythonhosted.org/packages/4a/e8/661e5bd82a8aa641fd6c1020bd0e890ef73230a2b7215ddf9c8cd8e941c2/sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6", size = 1387452, upload-time = "2025-08-12T07:00:15.088Z" }, + { url = "https://files.pythonhosted.org/packages/99/5e/ae66c361023a470afcbc1fbb8da722c72ea678a2fcd9a18f1a12598c7501/sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b", size = 1002501, upload-time = "2025-08-12T07:00:16.966Z" }, + { url = "https://files.pythonhosted.org/packages/c1/03/d332828c4ff764e16c1b56c2c8f9a33488bbe796b53fb6b9c4205ddbf167/sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484", size = 1057555, upload-time = "2025-08-12T07:00:18.573Z" }, + { url = "https://files.pythonhosted.org/packages/88/14/5aee0bf0864df9bd82bd59e7711362908e4935e3f9cdc1f57246b5d5c9b9/sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0", size = 1036042, upload-time = "2025-08-12T07:00:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/24/9c/89eb8b2052f720a612478baf11c8227dcf1dc28cd4ea4c0c19506b5af2a2/sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719", size = 1943147, upload-time = "2025-08-12T07:00:21.809Z" }, + { url = "https://files.pythonhosted.org/packages/82/0b/a1432bc87f97c2ace36386ca23e8bd3b91fb40581b5e6148d24b24186419/sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33", size = 1325624, upload-time = "2025-08-12T07:00:23.289Z" }, + { url = "https://files.pythonhosted.org/packages/ea/99/bbe054ebb5a5039457c590e0a4156ed073fb0fe9ce4f7523404dd5b37463/sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1", size = 1253670, upload-time = "2025-08-12T07:00:24.69Z" }, + { url = "https://files.pythonhosted.org/packages/19/ad/d5c7075f701bd97971d7c2ac2904f227566f51ef0838dfbdfdccb58cd212/sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b", size = 1316247, upload-time = "2025-08-12T07:00:26.435Z" }, + { url = "https://files.pythonhosted.org/packages/fb/03/35fbe5f3d9a7435eebd0b473e09584bd3cc354ce118b960445b060d33781/sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b", size = 1387894, upload-time = "2025-08-12T07:00:28.339Z" }, + { url = "https://files.pythonhosted.org/packages/dc/aa/956ef729aafb6c8f9c443104c9636489093bb5c61d6b90fc27aa1a865574/sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f", size = 1096698, upload-time = "2025-08-12T07:00:29.764Z" }, + { url = "https://files.pythonhosted.org/packages/b8/cb/fe400d8836952cc535c81a0ce47dc6875160e5fedb71d2d9ff0e9894c2a6/sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd", size = 1155115, upload-time = "2025-08-12T07:00:32.865Z" }, + { url = "https://files.pythonhosted.org/packages/32/89/047921cf70f36c7b6b6390876b2399b3633ab73b8d0cb857e5a964238941/sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8", size = 1133890, upload-time = "2025-08-12T07:00:34.763Z" }, + { url = "https://files.pythonhosted.org/packages/a1/11/5b414b9fae6255b5fb1e22e2ed3dc3a72d3a694e5703910e640ac78346bb/sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b", size = 1946081, upload-time = "2025-08-12T07:00:36.97Z" }, + { url = "https://files.pythonhosted.org/packages/77/eb/7a5682bb25824db8545f8e5662e7f3e32d72a508fdce086029d89695106b/sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb", size = 1327406, upload-time = "2025-08-12T07:00:38.669Z" }, + { url = "https://files.pythonhosted.org/packages/03/b0/811dae8fb9f2784e138785d481469788f2e0d0c109c5737372454415f55f/sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec", size = 1254846, upload-time = "2025-08-12T07:00:40.611Z" }, + { url = "https://files.pythonhosted.org/packages/ef/23/195b2e7ec85ebb6a547969f60b723c7aca5a75800ece6cc3f41da872d14e/sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c", size = 1315721, upload-time = "2025-08-12T07:00:42.914Z" }, + { url = "https://files.pythonhosted.org/packages/7e/aa/553dbe4178b5f23eb28e59393dddd64186178b56b81d9b8d5c3ff1c28395/sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab", size = 1387458, upload-time = "2025-08-12T07:00:44.56Z" }, + { url = "https://files.pythonhosted.org/packages/66/7c/08ff0012507297a4dd74a5420fdc0eb9e3e80f4e88cab1538d7f28db303d/sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0", size = 1099765, upload-time = "2025-08-12T07:00:46.058Z" }, + { url = "https://files.pythonhosted.org/packages/91/d5/2a69e1ce15881beb9ddfc7e3f998322f5cedcd5e4d244cb74dade9441663/sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d", size = 1157807, upload-time = "2025-08-12T07:00:47.673Z" }, + { url = "https://files.pythonhosted.org/packages/f3/16/54f611fcfc2d1c46cbe3ec4169780b2cfa7cf63708ef2b71611136db7513/sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751", size = 1136264, upload-time = "2025-08-12T07:00:49.485Z" }, +] + +[[package]] +name = "sentry-sdk" +version = "2.58.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/b3/fb8291170d0e844173164709fc0fa0c221ed75a5da740c8746f2a83b4eb1/sentry_sdk-2.58.0.tar.gz", hash = "sha256:c1144d947352d54e5b7daa63596d9f848adf684989c06c4f5a659f0c85a18f6f", size = 438764, upload-time = "2026-04-13T17:23:26.265Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/eb/d875669993b762556ae8b2efd86219943b4c0864d22204d622a9aee3052b/sentry_sdk-2.58.0-py2.py3-none-any.whl", hash = "sha256:688d1c704ddecf382ea3326f21a67453d4caa95592d722b7c780a36a9d23109e", size = 460919, upload-time = "2026-04-13T17:23:24.675Z" }, +] + +[[package]] +name = "setproctitle" +version = "1.3.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/48/49393a96a2eef1ab418b17475fb92b8fcfad83d099e678751b05472e69de/setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e", size = 27002, upload-time = "2025-09-05T12:51:25.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/48/fb401ec8c4953d519d05c87feca816ad668b8258448ff60579ac7a1c1386/setproctitle-1.3.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf555b6299f10a6eb44e4f96d2f5a3884c70ce25dc5c8796aaa2f7b40e72cb1b", size = 18079, upload-time = "2025-09-05T12:49:07.732Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a3/c2b0333c2716fb3b4c9a973dd113366ac51b4f8d56b500f4f8f704b4817a/setproctitle-1.3.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:690b4776f9c15aaf1023bb07d7c5b797681a17af98a4a69e76a1d504e41108b7", size = 13099, upload-time = "2025-09-05T12:49:09.222Z" }, + { url = "https://files.pythonhosted.org/packages/0e/f8/17bda581c517678260e6541b600eeb67745f53596dc077174141ba2f6702/setproctitle-1.3.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:00afa6fc507967d8c9d592a887cdc6c1f5742ceac6a4354d111ca0214847732c", size = 31793, upload-time = "2025-09-05T12:49:10.297Z" }, + { url = "https://files.pythonhosted.org/packages/27/d1/76a33ae80d4e788ecab9eb9b53db03e81cfc95367ec7e3fbf4989962fedd/setproctitle-1.3.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e02667f6b9fc1238ba753c0f4b0a37ae184ce8f3bbbc38e115d99646b3f4cd3", size = 32779, upload-time = "2025-09-05T12:49:12.157Z" }, + { url = "https://files.pythonhosted.org/packages/59/27/1a07c38121967061564f5e0884414a5ab11a783260450172d4fc68c15621/setproctitle-1.3.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:83fcd271567d133eb9532d3b067c8a75be175b2b3b271e2812921a05303a693f", size = 34578, upload-time = "2025-09-05T12:49:13.393Z" }, + { url = "https://files.pythonhosted.org/packages/d8/d4/725e6353935962d8bb12cbf7e7abba1d0d738c7f6935f90239d8e1ccf913/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13fe37951dda1a45c35d77d06e3da5d90e4f875c4918a7312b3b4556cfa7ff64", size = 32030, upload-time = "2025-09-05T12:49:15.362Z" }, + { url = "https://files.pythonhosted.org/packages/67/24/e4677ae8e1cb0d549ab558b12db10c175a889be0974c589c428fece5433e/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a05509cfb2059e5d2ddff701d38e474169e9ce2a298cf1b6fd5f3a213a553fe5", size = 33363, upload-time = "2025-09-05T12:49:16.829Z" }, + { url = "https://files.pythonhosted.org/packages/55/d4/69ce66e4373a48fdbb37489f3ded476bb393e27f514968c3a69a67343ae0/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6da835e76ae18574859224a75db6e15c4c2aaa66d300a57efeaa4c97ca4c7381", size = 31508, upload-time = "2025-09-05T12:49:18.032Z" }, + { url = "https://files.pythonhosted.org/packages/4b/5a/42c1ed0e9665d068146a68326529b5686a1881c8b9197c2664db4baf6aeb/setproctitle-1.3.7-cp310-cp310-win32.whl", hash = "sha256:9e803d1b1e20240a93bac0bc1025363f7f80cb7eab67dfe21efc0686cc59ad7c", size = 12558, upload-time = "2025-09-05T12:49:19.742Z" }, + { url = "https://files.pythonhosted.org/packages/dc/fe/dd206cc19a25561921456f6cb12b405635319299b6f366e0bebe872abc18/setproctitle-1.3.7-cp310-cp310-win_amd64.whl", hash = "sha256:a97200acc6b64ec4cada52c2ecaf1fba1ef9429ce9c542f8a7db5bcaa9dcbd95", size = 13245, upload-time = "2025-09-05T12:49:21.023Z" }, + { url = "https://files.pythonhosted.org/packages/04/cd/1b7ba5cad635510720ce19d7122154df96a2387d2a74217be552887c93e5/setproctitle-1.3.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a600eeb4145fb0ee6c287cb82a2884bd4ec5bbb076921e287039dcc7b7cc6dd0", size = 18085, upload-time = "2025-09-05T12:49:22.183Z" }, + { url = "https://files.pythonhosted.org/packages/8f/1a/b2da0a620490aae355f9d72072ac13e901a9fec809a6a24fc6493a8f3c35/setproctitle-1.3.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97a090fed480471bb175689859532709e28c085087e344bca45cf318034f70c4", size = 13097, upload-time = "2025-09-05T12:49:23.322Z" }, + { url = "https://files.pythonhosted.org/packages/18/2e/bd03ff02432a181c1787f6fc2a678f53b7dacdd5ded69c318fe1619556e8/setproctitle-1.3.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1607b963e7b53e24ec8a2cb4e0ab3ae591d7c6bf0a160feef0551da63452b37f", size = 32191, upload-time = "2025-09-05T12:49:24.567Z" }, + { url = "https://files.pythonhosted.org/packages/28/78/1e62fc0937a8549f2220445ed2175daacee9b6764c7963b16148119b016d/setproctitle-1.3.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a20fb1a3974e2dab857870cf874b325b8705605cb7e7e8bcbb915bca896f52a9", size = 33203, upload-time = "2025-09-05T12:49:25.871Z" }, + { url = "https://files.pythonhosted.org/packages/a0/3c/65edc65db3fa3df400cf13b05e9d41a3c77517b4839ce873aa6b4043184f/setproctitle-1.3.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f8d961bba676e07d77665204f36cffaa260f526e7b32d07ab3df6a2c1dfb44ba", size = 34963, upload-time = "2025-09-05T12:49:27.044Z" }, + { url = "https://files.pythonhosted.org/packages/a1/32/89157e3de997973e306e44152522385f428e16f92f3cf113461489e1e2ee/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:db0fd964fbd3a9f8999b502f65bd2e20883fdb5b1fae3a424e66db9a793ed307", size = 32398, upload-time = "2025-09-05T12:49:28.909Z" }, + { url = "https://files.pythonhosted.org/packages/4a/18/77a765a339ddf046844cb4513353d8e9dcd8183da9cdba6e078713e6b0b2/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:db116850fcf7cca19492030f8d3b4b6e231278e8fe097a043957d22ce1bdf3ee", size = 33657, upload-time = "2025-09-05T12:49:30.323Z" }, + { url = "https://files.pythonhosted.org/packages/6b/63/f0b6205c64d74d2a24a58644a38ec77bdbaa6afc13747e75973bf8904932/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:316664d8b24a5c91ee244460bdaf7a74a707adaa9e14fbe0dc0a53168bb9aba1", size = 31836, upload-time = "2025-09-05T12:49:32.309Z" }, + { url = "https://files.pythonhosted.org/packages/ba/51/e1277f9ba302f1a250bbd3eedbbee747a244b3cc682eb58fb9733968f6d8/setproctitle-1.3.7-cp311-cp311-win32.whl", hash = "sha256:b74774ca471c86c09b9d5037c8451fff06bb82cd320d26ae5a01c758088c0d5d", size = 12556, upload-time = "2025-09-05T12:49:33.529Z" }, + { url = "https://files.pythonhosted.org/packages/b6/7b/822a23f17e9003dfdee92cd72758441ca2a3680388da813a371b716fb07f/setproctitle-1.3.7-cp311-cp311-win_amd64.whl", hash = "sha256:acb9097213a8dd3410ed9f0dc147840e45ca9797785272928d4be3f0e69e3be4", size = 13243, upload-time = "2025-09-05T12:49:34.553Z" }, + { url = "https://files.pythonhosted.org/packages/fb/f0/2dc88e842077719d7384d86cc47403e5102810492b33680e7dadcee64cd8/setproctitle-1.3.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2dc99aec591ab6126e636b11035a70991bc1ab7a261da428491a40b84376654e", size = 18049, upload-time = "2025-09-05T12:49:36.241Z" }, + { url = "https://files.pythonhosted.org/packages/f0/b4/50940504466689cda65680c9e9a1e518e5750c10490639fa687489ac7013/setproctitle-1.3.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cdd8aa571b7aa39840fdbea620e308a19691ff595c3a10231e9ee830339dd798", size = 13079, upload-time = "2025-09-05T12:49:38.088Z" }, + { url = "https://files.pythonhosted.org/packages/d0/99/71630546b9395b095f4082be41165d1078204d1696c2d9baade3de3202d0/setproctitle-1.3.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2906b6c7959cdb75f46159bf0acd8cc9906cf1361c9e1ded0d065fe8f9039629", size = 32932, upload-time = "2025-09-05T12:49:39.271Z" }, + { url = "https://files.pythonhosted.org/packages/50/22/cee06af4ffcfb0e8aba047bd44f5262e644199ae7527ae2c1f672b86495c/setproctitle-1.3.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6915964a6dda07920a1159321dcd6d94fc7fc526f815ca08a8063aeca3c204f1", size = 33736, upload-time = "2025-09-05T12:49:40.565Z" }, + { url = "https://files.pythonhosted.org/packages/5c/00/a5949a8bb06ef5e7df214fc393bb2fb6aedf0479b17214e57750dfdd0f24/setproctitle-1.3.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cff72899861c765bd4021d1ff1c68d60edc129711a2fdba77f9cb69ef726a8b6", size = 35605, upload-time = "2025-09-05T12:49:42.362Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3a/50caca532a9343828e3bf5778c7a84d6c737a249b1796d50dd680290594d/setproctitle-1.3.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b7cb05bd446687ff816a3aaaf831047fc4c364feff7ada94a66024f1367b448c", size = 33143, upload-time = "2025-09-05T12:49:43.515Z" }, + { url = "https://files.pythonhosted.org/packages/ca/14/b843a251296ce55e2e17c017d6b9f11ce0d3d070e9265de4ecad948b913d/setproctitle-1.3.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3a57b9a00de8cae7e2a1f7b9f0c2ac7b69372159e16a7708aa2f38f9e5cc987a", size = 34434, upload-time = "2025-09-05T12:49:45.31Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b7/06145c238c0a6d2c4bc881f8be230bb9f36d2bf51aff7bddcb796d5eed67/setproctitle-1.3.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d8828b356114f6b308b04afe398ed93803d7fca4a955dd3abe84430e28d33739", size = 32795, upload-time = "2025-09-05T12:49:46.419Z" }, + { url = "https://files.pythonhosted.org/packages/ef/dc/ef76a81fac9bf27b84ed23df19c1f67391a753eed6e3c2254ebcb5133f56/setproctitle-1.3.7-cp312-cp312-win32.whl", hash = "sha256:b0304f905efc845829ac2bc791ddebb976db2885f6171f4a3de678d7ee3f7c9f", size = 12552, upload-time = "2025-09-05T12:49:47.635Z" }, + { url = "https://files.pythonhosted.org/packages/e2/5b/a9fe517912cd6e28cf43a212b80cb679ff179a91b623138a99796d7d18a0/setproctitle-1.3.7-cp312-cp312-win_amd64.whl", hash = "sha256:9888ceb4faea3116cf02a920ff00bfbc8cc899743e4b4ac914b03625bdc3c300", size = 13247, upload-time = "2025-09-05T12:49:49.16Z" }, + { url = "https://files.pythonhosted.org/packages/5d/2f/fcedcade3b307a391b6e17c774c6261a7166aed641aee00ed2aad96c63ce/setproctitle-1.3.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c3736b2a423146b5e62230502e47e08e68282ff3b69bcfe08a322bee73407922", size = 18047, upload-time = "2025-09-05T12:49:50.271Z" }, + { url = "https://files.pythonhosted.org/packages/23/ae/afc141ca9631350d0a80b8f287aac79a76f26b6af28fd8bf92dae70dc2c5/setproctitle-1.3.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3384e682b158d569e85a51cfbde2afd1ab57ecf93ea6651fe198d0ba451196ee", size = 13073, upload-time = "2025-09-05T12:49:51.46Z" }, + { url = "https://files.pythonhosted.org/packages/87/ed/0a4f00315bc02510395b95eec3d4aa77c07192ee79f0baae77ea7b9603d8/setproctitle-1.3.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0564a936ea687cd24dffcea35903e2a20962aa6ac20e61dd3a207652401492dd", size = 33284, upload-time = "2025-09-05T12:49:52.741Z" }, + { url = "https://files.pythonhosted.org/packages/fc/e4/adf3c4c0a2173cb7920dc9df710bcc67e9bcdbf377e243b7a962dc31a51a/setproctitle-1.3.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5d1cb3f81531f0eb40e13246b679a1bdb58762b170303463cb06ecc296f26d0", size = 34104, upload-time = "2025-09-05T12:49:54.416Z" }, + { url = "https://files.pythonhosted.org/packages/52/4f/6daf66394152756664257180439d37047aa9a1cfaa5e4f5ed35e93d1dc06/setproctitle-1.3.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a7d159e7345f343b44330cbba9194169b8590cb13dae940da47aa36a72aa9929", size = 35982, upload-time = "2025-09-05T12:49:56.295Z" }, + { url = "https://files.pythonhosted.org/packages/1b/62/f2c0595403cf915db031f346b0e3b2c0096050e90e0be658a64f44f4278a/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0b5074649797fd07c72ca1f6bff0406f4a42e1194faac03ecaab765ce605866f", size = 33150, upload-time = "2025-09-05T12:49:58.025Z" }, + { url = "https://files.pythonhosted.org/packages/a0/29/10dd41cde849fb2f9b626c846b7ea30c99c81a18a5037a45cc4ba33c19a7/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:61e96febced3f61b766115381d97a21a6265a0f29188a791f6df7ed777aef698", size = 34463, upload-time = "2025-09-05T12:49:59.424Z" }, + { url = "https://files.pythonhosted.org/packages/71/3c/cedd8eccfaf15fb73a2c20525b68c9477518917c9437737fa0fda91e378f/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:047138279f9463f06b858e579cc79580fbf7a04554d24e6bddf8fe5dddbe3d4c", size = 32848, upload-time = "2025-09-05T12:50:01.107Z" }, + { url = "https://files.pythonhosted.org/packages/d1/3e/0a0e27d1c9926fecccfd1f91796c244416c70bf6bca448d988638faea81d/setproctitle-1.3.7-cp313-cp313-win32.whl", hash = "sha256:7f47accafac7fe6535ba8ba9efd59df9d84a6214565108d0ebb1199119c9cbbd", size = 12544, upload-time = "2025-09-05T12:50:15.81Z" }, + { url = "https://files.pythonhosted.org/packages/36/1b/6bf4cb7acbbd5c846ede1c3f4d6b4ee52744d402e43546826da065ff2ab7/setproctitle-1.3.7-cp313-cp313-win_amd64.whl", hash = "sha256:fe5ca35aeec6dc50cabab9bf2d12fbc9067eede7ff4fe92b8f5b99d92e21263f", size = 13235, upload-time = "2025-09-05T12:50:16.89Z" }, + { url = "https://files.pythonhosted.org/packages/e6/a4/d588d3497d4714750e3eaf269e9e8985449203d82b16b933c39bd3fc52a1/setproctitle-1.3.7-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:10e92915c4b3086b1586933a36faf4f92f903c5554f3c34102d18c7d3f5378e9", size = 18058, upload-time = "2025-09-05T12:50:02.501Z" }, + { url = "https://files.pythonhosted.org/packages/05/77/7637f7682322a7244e07c373881c7e982567e2cb1dd2f31bd31481e45500/setproctitle-1.3.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:de879e9c2eab637f34b1a14c4da1e030c12658cdc69ee1b3e5be81b380163ce5", size = 13072, upload-time = "2025-09-05T12:50:03.601Z" }, + { url = "https://files.pythonhosted.org/packages/52/09/f366eca0973cfbac1470068d1313fa3fe3de4a594683385204ec7f1c4101/setproctitle-1.3.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c18246d88e227a5b16248687514f95642505000442165f4b7db354d39d0e4c29", size = 34490, upload-time = "2025-09-05T12:50:04.948Z" }, + { url = "https://files.pythonhosted.org/packages/71/36/611fc2ed149fdea17c3677e1d0df30d8186eef9562acc248682b91312706/setproctitle-1.3.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7081f193dab22df2c36f9fc6d113f3793f83c27891af8fe30c64d89d9a37e152", size = 35267, upload-time = "2025-09-05T12:50:06.015Z" }, + { url = "https://files.pythonhosted.org/packages/88/a4/64e77d0671446bd5a5554387b69e1efd915274686844bea733714c828813/setproctitle-1.3.7-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cc9b901ce129350637426a89cfd650066a4adc6899e47822e2478a74023ff7c", size = 37376, upload-time = "2025-09-05T12:50:07.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/bc/ad9c664fe524fb4a4b2d3663661a5c63453ce851736171e454fa2cdec35c/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:80e177eff2d1ec172188d0d7fd9694f8e43d3aab76a6f5f929bee7bf7894e98b", size = 33963, upload-time = "2025-09-05T12:50:09.056Z" }, + { url = "https://files.pythonhosted.org/packages/ab/01/a36de7caf2d90c4c28678da1466b47495cbbad43badb4e982d8db8167ed4/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:23e520776c445478a67ee71b2a3c1ffdafbe1f9f677239e03d7e2cc635954e18", size = 35550, upload-time = "2025-09-05T12:50:10.791Z" }, + { url = "https://files.pythonhosted.org/packages/dd/68/17e8aea0ed5ebc17fbf03ed2562bfab277c280e3625850c38d92a7b5fcd9/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5fa1953126a3b9bd47049d58c51b9dac72e78ed120459bd3aceb1bacee72357c", size = 33727, upload-time = "2025-09-05T12:50:12.032Z" }, + { url = "https://files.pythonhosted.org/packages/b2/33/90a3bf43fe3a2242b4618aa799c672270250b5780667898f30663fd94993/setproctitle-1.3.7-cp313-cp313t-win32.whl", hash = "sha256:4a5e212bf438a4dbeece763f4962ad472c6008ff6702e230b4f16a037e2f6f29", size = 12549, upload-time = "2025-09-05T12:50:13.074Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0e/50d1f07f3032e1f23d814ad6462bc0a138f369967c72494286b8a5228e40/setproctitle-1.3.7-cp313-cp313t-win_amd64.whl", hash = "sha256:cf2727b733e90b4f874bac53e3092aa0413fe1ea6d4f153f01207e6ce65034d9", size = 13243, upload-time = "2025-09-05T12:50:14.146Z" }, + { url = "https://files.pythonhosted.org/packages/89/c7/43ac3a98414f91d1b86a276bc2f799ad0b4b010e08497a95750d5bc42803/setproctitle-1.3.7-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:80c36c6a87ff72eabf621d0c79b66f3bdd0ecc79e873c1e9f0651ee8bf215c63", size = 18052, upload-time = "2025-09-05T12:50:17.928Z" }, + { url = "https://files.pythonhosted.org/packages/cd/2c/dc258600a25e1a1f04948073826bebc55e18dbd99dc65a576277a82146fa/setproctitle-1.3.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b53602371a52b91c80aaf578b5ada29d311d12b8a69c0c17fbc35b76a1fd4f2e", size = 13071, upload-time = "2025-09-05T12:50:19.061Z" }, + { url = "https://files.pythonhosted.org/packages/ab/26/8e3bb082992f19823d831f3d62a89409deb6092e72fc6940962983ffc94f/setproctitle-1.3.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fcb966a6c57cf07cc9448321a08f3be6b11b7635be502669bc1d8745115d7e7f", size = 33180, upload-time = "2025-09-05T12:50:20.395Z" }, + { url = "https://files.pythonhosted.org/packages/f1/af/ae692a20276d1159dd0cf77b0bcf92cbb954b965655eb4a69672099bb214/setproctitle-1.3.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46178672599b940368d769474fe13ecef1b587d58bb438ea72b9987f74c56ea5", size = 34043, upload-time = "2025-09-05T12:50:22.454Z" }, + { url = "https://files.pythonhosted.org/packages/34/b2/6a092076324dd4dac1a6d38482bedebbff5cf34ef29f58585ec76e47bc9d/setproctitle-1.3.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7f9e9e3ff135cbcc3edd2f4cf29b139f4aca040d931573102742db70ff428c17", size = 35892, upload-time = "2025-09-05T12:50:23.937Z" }, + { url = "https://files.pythonhosted.org/packages/1c/1a/8836b9f28cee32859ac36c3df85aa03e1ff4598d23ea17ca2e96b5845a8f/setproctitle-1.3.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:14c7eba8d90c93b0e79c01f0bd92a37b61983c27d6d7d5a3b5defd599113d60e", size = 32898, upload-time = "2025-09-05T12:50:25.617Z" }, + { url = "https://files.pythonhosted.org/packages/ef/22/8fabdc24baf42defb599714799d8445fe3ae987ec425a26ec8e80ea38f8e/setproctitle-1.3.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9e64e98077fb30b6cf98073d6c439cd91deb8ebbf8fc62d9dbf52bd38b0c6ac0", size = 34308, upload-time = "2025-09-05T12:50:26.827Z" }, + { url = "https://files.pythonhosted.org/packages/15/1b/b9bee9de6c8cdcb3b3a6cb0b3e773afdb86bbbc1665a3bfa424a4294fda2/setproctitle-1.3.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b91387cc0f02a00ac95dcd93f066242d3cca10ff9e6153de7ee07069c6f0f7c8", size = 32536, upload-time = "2025-09-05T12:50:28.5Z" }, + { url = "https://files.pythonhosted.org/packages/37/0c/75e5f2685a5e3eda0b39a8b158d6d8895d6daf3ba86dec9e3ba021510272/setproctitle-1.3.7-cp314-cp314-win32.whl", hash = "sha256:52b054a61c99d1b72fba58b7f5486e04b20fefc6961cd76722b424c187f362ed", size = 12731, upload-time = "2025-09-05T12:50:43.955Z" }, + { url = "https://files.pythonhosted.org/packages/d2/ae/acddbce90d1361e1786e1fb421bc25baeb0c22ef244ee5d0176511769ec8/setproctitle-1.3.7-cp314-cp314-win_amd64.whl", hash = "sha256:5818e4080ac04da1851b3ec71e8a0f64e3748bf9849045180566d8b736702416", size = 13464, upload-time = "2025-09-05T12:50:45.057Z" }, + { url = "https://files.pythonhosted.org/packages/01/6d/20886c8ff2e6d85e3cabadab6aab9bb90acaf1a5cfcb04d633f8d61b2626/setproctitle-1.3.7-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6fc87caf9e323ac426910306c3e5d3205cd9f8dcac06d233fcafe9337f0928a3", size = 18062, upload-time = "2025-09-05T12:50:29.78Z" }, + { url = "https://files.pythonhosted.org/packages/9a/60/26dfc5f198715f1343b95c2f7a1c16ae9ffa45bd89ffd45a60ed258d24ea/setproctitle-1.3.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6134c63853d87a4897ba7d5cc0e16abfa687f6c66fc09f262bb70d67718f2309", size = 13075, upload-time = "2025-09-05T12:50:31.604Z" }, + { url = "https://files.pythonhosted.org/packages/21/9c/980b01f50d51345dd513047e3ba9e96468134b9181319093e61db1c47188/setproctitle-1.3.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1403d2abfd32790b6369916e2313dffbe87d6b11dca5bbd898981bcde48e7a2b", size = 34744, upload-time = "2025-09-05T12:50:32.777Z" }, + { url = "https://files.pythonhosted.org/packages/86/b4/82cd0c86e6d1c4538e1a7eb908c7517721513b801dff4ba3f98ef816a240/setproctitle-1.3.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e7c5bfe4228ea22373e3025965d1a4116097e555ee3436044f5c954a5e63ac45", size = 35589, upload-time = "2025-09-05T12:50:34.13Z" }, + { url = "https://files.pythonhosted.org/packages/8a/4f/9f6b2a7417fd45673037554021c888b31247f7594ff4bd2239918c5cd6d0/setproctitle-1.3.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:585edf25e54e21a94ccb0fe81ad32b9196b69ebc4fc25f81da81fb8a50cca9e4", size = 37698, upload-time = "2025-09-05T12:50:35.524Z" }, + { url = "https://files.pythonhosted.org/packages/20/92/927b7d4744aac214d149c892cb5fa6dc6f49cfa040cb2b0a844acd63dcaf/setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:96c38cdeef9036eb2724c2210e8d0b93224e709af68c435d46a4733a3675fee1", size = 34201, upload-time = "2025-09-05T12:50:36.697Z" }, + { url = "https://files.pythonhosted.org/packages/0a/0c/fd4901db5ba4b9d9013e62f61d9c18d52290497f956745cd3e91b0d80f90/setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:45e3ef48350abb49cf937d0a8ba15e42cee1e5ae13ca41a77c66d1abc27a5070", size = 35801, upload-time = "2025-09-05T12:50:38.314Z" }, + { url = "https://files.pythonhosted.org/packages/e7/e3/54b496ac724e60e61cc3447f02690105901ca6d90da0377dffe49ff99fc7/setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1fae595d032b30dab4d659bece20debd202229fce12b55abab978b7f30783d73", size = 33958, upload-time = "2025-09-05T12:50:39.841Z" }, + { url = "https://files.pythonhosted.org/packages/ea/a8/c84bb045ebf8c6fdc7f7532319e86f8380d14bbd3084e6348df56bdfe6fd/setproctitle-1.3.7-cp314-cp314t-win32.whl", hash = "sha256:02432f26f5d1329ab22279ff863c83589894977063f59e6c4b4845804a08f8c2", size = 12745, upload-time = "2025-09-05T12:50:41.377Z" }, + { url = "https://files.pythonhosted.org/packages/08/b6/3a5a4f9952972791a9114ac01dfc123f0df79903577a3e0a7a404a695586/setproctitle-1.3.7-cp314-cp314t-win_amd64.whl", hash = "sha256:cbc388e3d86da1f766d8fc2e12682e446064c01cea9f88a88647cfe7c011de6a", size = 13469, upload-time = "2025-09-05T12:50:42.67Z" }, + { url = "https://files.pythonhosted.org/packages/34/8a/aff5506ce89bc3168cb492b18ba45573158d528184e8a9759a05a09088a9/setproctitle-1.3.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:eb440c5644a448e6203935ed60466ec8d0df7278cd22dc6cf782d07911bcbea6", size = 12654, upload-time = "2025-09-05T12:51:17.141Z" }, + { url = "https://files.pythonhosted.org/packages/41/89/5b6f2faedd6ced3d3c085a5efbd91380fb1f61f4c12bc42acad37932f4e9/setproctitle-1.3.7-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:502b902a0e4c69031b87870ff4986c290ebbb12d6038a70639f09c331b18efb2", size = 14284, upload-time = "2025-09-05T12:51:18.393Z" }, + { url = "https://files.pythonhosted.org/packages/0a/c0/4312fed3ca393a29589603fd48f17937b4ed0638b923bac75a728382e730/setproctitle-1.3.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f6f268caeabb37ccd824d749e7ce0ec6337c4ed954adba33ec0d90cc46b0ab78", size = 13282, upload-time = "2025-09-05T12:51:19.703Z" }, + { url = "https://files.pythonhosted.org/packages/c3/5b/5e1c117ac84e3cefcf8d7a7f6b2461795a87e20869da065a5c087149060b/setproctitle-1.3.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b1cac6a4b0252b8811d60b6d8d0f157c0fdfed379ac89c25a914e6346cf355a1", size = 12587, upload-time = "2025-09-05T12:51:21.195Z" }, + { url = "https://files.pythonhosted.org/packages/73/02/b9eadc226195dcfa90eed37afe56b5dd6fa2f0e5220ab8b7867b8862b926/setproctitle-1.3.7-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f1704c9e041f2b1dc38f5be4552e141e1432fba3dd52c72eeffd5bc2db04dc65", size = 14286, upload-time = "2025-09-05T12:51:22.61Z" }, + { url = "https://files.pythonhosted.org/packages/28/26/1be1d2a53c2a91ec48fa2ff4a409b395f836798adf194d99de9c059419ea/setproctitle-1.3.7-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b08b61976ffa548bd5349ce54404bf6b2d51bd74d4f1b241ed1b0f25bce09c3a", size = 13282, upload-time = "2025-09-05T12:51:24.094Z" }, +] + +[[package]] +name = "setuptools" +version = "80.10.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/95/faf61eb8363f26aa7e1d762267a8d602a1b26d4f3a1e758e92cb3cb8b054/setuptools-80.10.2.tar.gz", hash = "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70", size = 1200343, upload-time = "2026-01-25T22:38:17.252Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/b8/f1f62a5e3c0ad2ff1d189590bfa4c46b4f3b6e49cef6f26c6ee4e575394d/setuptools-80.10.2-py3-none-any.whl", hash = "sha256:95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173", size = 1064234, upload-time = "2026-01-25T22:38:15.216Z" }, +] + +[[package]] +name = "setuptools" +version = "82.0.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.49" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/45/461788f35e0364a8da7bda51a1fe1b09762d0c32f12f63727998d85a873b/sqlalchemy-2.0.49.tar.gz", hash = "sha256:d15950a57a210e36dd4cec1aac22787e2a4d57ba9318233e2ef8b2daf9ff2d5f", size = 9898221, upload-time = "2026-04-03T16:38:11.704Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/76/f908955139842c362aa877848f42f9249642d5b69e06cee9eae5111da1bd/sqlalchemy-2.0.49-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:42e8804962f9e6f4be2cbaedc0c3718f08f60a16910fa3d86da5a1e3b1bfe60f", size = 2159321, upload-time = "2026-04-03T16:50:11.8Z" }, + { url = "https://files.pythonhosted.org/packages/24/e2/17ba0b7bfbd8de67196889b6d951de269e8a46057d92baca162889beb16d/sqlalchemy-2.0.49-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc992c6ed024c8c3c592c5fc9846a03dd68a425674900c70122c77ea16c5fb0b", size = 3238937, upload-time = "2026-04-03T16:54:45.731Z" }, + { url = "https://files.pythonhosted.org/packages/90/1e/410dd499c039deacff395eec01a9da057125fcd0c97e3badc252c6a2d6a7/sqlalchemy-2.0.49-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6eb188b84269f357669b62cb576b5b918de10fb7c728a005fa0ebb0b758adce1", size = 3237188, upload-time = "2026-04-03T16:56:53.217Z" }, + { url = "https://files.pythonhosted.org/packages/ab/06/e797a8b98a3993ac4bc785309b9b6d005457fc70238ee6cefa7c8867a92e/sqlalchemy-2.0.49-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:62557958002b69699bdb7f5137c6714ca1133f045f97b3903964f47db97ea339", size = 3190061, upload-time = "2026-04-03T16:54:47.489Z" }, + { url = "https://files.pythonhosted.org/packages/44/d3/5a9f7ef580af1031184b38235da6ac58c3b571df01c9ec061c44b2b0c5a6/sqlalchemy-2.0.49-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da9b91bca419dc9b9267ffadde24eae9b1a6bffcd09d0a207e5e3af99a03ce0d", size = 3211477, upload-time = "2026-04-03T16:56:55.056Z" }, + { url = "https://files.pythonhosted.org/packages/69/ec/7be8c8cb35f038e963a203e4fe5a028989167cc7299927b7cf297c271e37/sqlalchemy-2.0.49-cp310-cp310-win32.whl", hash = "sha256:5e61abbec255be7b122aa461021daa7c3f310f3e743411a67079f9b3cc91ece3", size = 2119965, upload-time = "2026-04-03T17:00:50.009Z" }, + { url = "https://files.pythonhosted.org/packages/b5/31/0defb93e3a10b0cf7d1271aedd87251a08c3a597ee4f353281769b547b5a/sqlalchemy-2.0.49-cp310-cp310-win_amd64.whl", hash = "sha256:0c98c59075b890df8abfcc6ad632879540f5791c68baebacb4f833713b510e75", size = 2142935, upload-time = "2026-04-03T17:00:51.675Z" }, + { url = "https://files.pythonhosted.org/packages/60/b5/e3617cc67420f8f403efebd7b043128f94775e57e5b84e7255203390ceae/sqlalchemy-2.0.49-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5070135e1b7409c4161133aa525419b0062088ed77c92b1da95366ec5cbebbe", size = 2159126, upload-time = "2026-04-03T16:50:13.242Z" }, + { url = "https://files.pythonhosted.org/packages/20/9b/91ca80403b17cd389622a642699e5f6564096b698e7cdcbcbb6409898bc4/sqlalchemy-2.0.49-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ac7a3e245fd0310fd31495eb61af772e637bdf7d88ee81e7f10a3f271bff014", size = 3315509, upload-time = "2026-04-03T16:54:49.332Z" }, + { url = "https://files.pythonhosted.org/packages/b1/61/0722511d98c54de95acb327824cb759e8653789af2b1944ab1cc69d32565/sqlalchemy-2.0.49-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d4e5a0ceba319942fa6b585cf82539288a61e314ef006c1209f734551ab9536", size = 3315014, upload-time = "2026-04-03T16:56:56.376Z" }, + { url = "https://files.pythonhosted.org/packages/46/55/d514a653ffeb4cebf4b54c47bec32ee28ad89d39fafba16eeed1d81dccd5/sqlalchemy-2.0.49-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3ddcb27fb39171de36e207600116ac9dfd4ae46f86c82a9bf3934043e80ebb88", size = 3267388, upload-time = "2026-04-03T16:54:51.272Z" }, + { url = "https://files.pythonhosted.org/packages/2f/16/0dcc56cb6d3335c1671a2258f5d2cb8267c9a2260e27fde53cbfb1b3540a/sqlalchemy-2.0.49-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:32fe6a41ad97302db2931f05bb91abbcc65b5ce4c675cd44b972428dd2947700", size = 3289602, upload-time = "2026-04-03T16:56:57.63Z" }, + { url = "https://files.pythonhosted.org/packages/51/6c/f8ab6fb04470a133cd80608db40aa292e6bae5f162c3a3d4ab19544a67af/sqlalchemy-2.0.49-cp311-cp311-win32.whl", hash = "sha256:46d51518d53edfbe0563662c96954dc8fcace9832332b914375f45a99b77cc9a", size = 2119044, upload-time = "2026-04-03T17:00:53.455Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/55a6d627d04b6ebb290693681d7683c7da001eddf90b60cfcc41ee907978/sqlalchemy-2.0.49-cp311-cp311-win_amd64.whl", hash = "sha256:951d4a210744813be63019f3df343bf233b7432aadf0db54c75802247330d3af", size = 2143642, upload-time = "2026-04-03T17:00:54.769Z" }, + { url = "https://files.pythonhosted.org/packages/49/b3/2de412451330756aaaa72d27131db6dde23995efe62c941184e15242a5fa/sqlalchemy-2.0.49-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4bbccb45260e4ff1b7db0be80a9025bb1e6698bdb808b83fff0000f7a90b2c0b", size = 2157681, upload-time = "2026-04-03T16:53:07.132Z" }, + { url = "https://files.pythonhosted.org/packages/50/84/b2a56e2105bd11ebf9f0b93abddd748e1a78d592819099359aa98134a8bf/sqlalchemy-2.0.49-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb37f15714ec2652d574f021d479e78cd4eb9d04396dca36568fdfffb3487982", size = 3338976, upload-time = "2026-04-03T17:07:40Z" }, + { url = "https://files.pythonhosted.org/packages/2c/fa/65fcae2ed62f84ab72cf89536c7c3217a156e71a2c111b1305ab6f0690e2/sqlalchemy-2.0.49-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3bb9ec6436a820a4c006aad1ac351f12de2f2dbdaad171692ee457a02429b672", size = 3351937, upload-time = "2026-04-03T17:12:23.374Z" }, + { url = "https://files.pythonhosted.org/packages/f8/2f/6fd118563572a7fe475925742eb6b3443b2250e346a0cc27d8d408e73773/sqlalchemy-2.0.49-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8d6efc136f44a7e8bc8088507eaabbb8c2b55b3dbb63fe102c690da0ddebe55e", size = 3281646, upload-time = "2026-04-03T17:07:41.949Z" }, + { url = "https://files.pythonhosted.org/packages/c5/d7/410f4a007c65275b9cf82354adb4bb8ba587b176d0a6ee99caa16fe638f8/sqlalchemy-2.0.49-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e06e617e3d4fd9e51d385dfe45b077a41e9d1b033a7702551e3278ac597dc750", size = 3316695, upload-time = "2026-04-03T17:12:25.642Z" }, + { url = "https://files.pythonhosted.org/packages/d9/95/81f594aa60ded13273a844539041ccf1e66c5a7bed0a8e27810a3b52d522/sqlalchemy-2.0.49-cp312-cp312-win32.whl", hash = "sha256:83101a6930332b87653886c01d1ee7e294b1fe46a07dd9a2d2b4f91bcc88eec0", size = 2117483, upload-time = "2026-04-03T17:05:40.896Z" }, + { url = "https://files.pythonhosted.org/packages/47/9e/fd90114059175cac64e4fafa9bf3ac20584384d66de40793ae2e2f26f3bb/sqlalchemy-2.0.49-cp312-cp312-win_amd64.whl", hash = "sha256:618a308215b6cececb6240b9abde545e3acdabac7ae3e1d4e666896bf5ba44b4", size = 2144494, upload-time = "2026-04-03T17:05:42.282Z" }, + { url = "https://files.pythonhosted.org/packages/ae/81/81755f50eb2478eaf2049728491d4ea4f416c1eb013338682173259efa09/sqlalchemy-2.0.49-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df2d441bacf97022e81ad047e1597552eb3f83ca8a8f1a1fdd43cd7fe3898120", size = 2154547, upload-time = "2026-04-03T16:53:08.64Z" }, + { url = "https://files.pythonhosted.org/packages/a2/bc/3494270da80811d08bcfa247404292428c4fe16294932bce5593f215cad9/sqlalchemy-2.0.49-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8e20e511dc15265fb433571391ba313e10dd8ea7e509d51686a51313b4ac01a2", size = 3280782, upload-time = "2026-04-03T17:07:43.508Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f5/038741f5e747a5f6ea3e72487211579d8cbea5eb9827a9cbd61d0108c4bd/sqlalchemy-2.0.49-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47604cb2159f8bbd5a1ab48a714557156320f20871ee64d550d8bf2683d980d3", size = 3297156, upload-time = "2026-04-03T17:12:27.697Z" }, + { url = "https://files.pythonhosted.org/packages/88/50/a6af0ff9dc954b43a65ca9b5367334e45d99684c90a3d3413fc19a02d43c/sqlalchemy-2.0.49-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:22d8798819f86720bc646ab015baff5ea4c971d68121cb36e2ebc2ee43ead2b7", size = 3228832, upload-time = "2026-04-03T17:07:45.38Z" }, + { url = "https://files.pythonhosted.org/packages/bc/d1/5f6bdad8de0bf546fc74370939621396515e0cdb9067402d6ba1b8afbe9a/sqlalchemy-2.0.49-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9b1c058c171b739e7c330760044803099c7fff11511e3ab3573e5327116a9c33", size = 3267000, upload-time = "2026-04-03T17:12:29.657Z" }, + { url = "https://files.pythonhosted.org/packages/f7/30/ad62227b4a9819a5e1c6abff77c0f614fa7c9326e5a3bdbee90f7139382b/sqlalchemy-2.0.49-cp313-cp313-win32.whl", hash = "sha256:a143af2ea6672f2af3f44ed8f9cd020e9cc34c56f0e8db12019d5d9ecf41cb3b", size = 2115641, upload-time = "2026-04-03T17:05:43.989Z" }, + { url = "https://files.pythonhosted.org/packages/17/3a/7215b1b7d6d49dc9a87211be44562077f5f04f9bb5a59552c1c8e2d98173/sqlalchemy-2.0.49-cp313-cp313-win_amd64.whl", hash = "sha256:12b04d1db2663b421fe072d638a138460a51d5a862403295671c4f3987fb9148", size = 2141498, upload-time = "2026-04-03T17:05:45.7Z" }, + { url = "https://files.pythonhosted.org/packages/28/4b/52a0cb2687a9cd1648252bb257be5a1ba2c2ded20ba695c65756a55a15a4/sqlalchemy-2.0.49-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24bd94bb301ec672d8f0623eba9226cc90d775d25a0c92b5f8e4965d7f3a1518", size = 3560807, upload-time = "2026-04-03T16:58:31.666Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d8/fda95459204877eed0458550d6c7c64c98cc50c2d8d618026737de9ed41a/sqlalchemy-2.0.49-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a51d3db74ba489266ef55c7a4534eb0b8db9a326553df481c11e5d7660c8364d", size = 3527481, upload-time = "2026-04-03T17:06:00.155Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0a/2aac8b78ac6487240cf7afef8f203ca783e8796002dc0cf65c4ee99ff8bb/sqlalchemy-2.0.49-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:55250fe61d6ebfd6934a272ee16ef1244e0f16b7af6cd18ab5b1fc9f08631db0", size = 3468565, upload-time = "2026-04-03T16:58:33.414Z" }, + { url = "https://files.pythonhosted.org/packages/a5/3d/ce71cfa82c50a373fd2148b3c870be05027155ce791dc9a5dcf439790b8b/sqlalchemy-2.0.49-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:46796877b47034b559a593d7e4b549aba151dae73f9e78212a3478161c12ab08", size = 3477769, upload-time = "2026-04-03T17:06:02.787Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e8/0a9f5c1f7c6f9ca480319bf57c2d7423f08d31445974167a27d14483c948/sqlalchemy-2.0.49-cp313-cp313t-win32.whl", hash = "sha256:9c4969a86e41454f2858256c39bdfb966a20961e9b58bf8749b65abf447e9a8d", size = 2143319, upload-time = "2026-04-03T17:02:04.328Z" }, + { url = "https://files.pythonhosted.org/packages/0e/51/fb5240729fbec73006e137c4f7a7918ffd583ab08921e6ff81a999d6517a/sqlalchemy-2.0.49-cp313-cp313t-win_amd64.whl", hash = "sha256:b9870d15ef00e4d0559ae10ee5bc71b654d1f20076dbe8bc7ed19b4c0625ceba", size = 2175104, upload-time = "2026-04-03T17:02:05.989Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/bf28f618c0a9597d14e0b9ee7d1e0622faff738d44fe986ee287cdf1b8d0/sqlalchemy-2.0.49-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:233088b4b99ebcbc5258c755a097aa52fbf90727a03a5a80781c4b9c54347a2e", size = 2156356, upload-time = "2026-04-03T16:53:09.914Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a7/5f476227576cb8644650eff68cc35fa837d3802b997465c96b8340ced1e2/sqlalchemy-2.0.49-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57ca426a48eb2c682dae8204cd89ea8ab7031e2675120a47924fabc7caacbc2a", size = 3276486, upload-time = "2026-04-03T17:07:46.9Z" }, + { url = "https://files.pythonhosted.org/packages/2e/84/efc7c0bf3a1c5eef81d397f6fddac855becdbb11cb38ff957888603014a7/sqlalchemy-2.0.49-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:685e93e9c8f399b0c96a624799820176312f5ceef958c0f88215af4013d29066", size = 3281479, upload-time = "2026-04-03T17:12:32.226Z" }, + { url = "https://files.pythonhosted.org/packages/91/68/bb406fa4257099c67bd75f3f2261b129c63204b9155de0d450b37f004698/sqlalchemy-2.0.49-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9e0400fa22f79acc334d9a6b185dc00a44a8e6578aa7e12d0ddcd8434152b187", size = 3226269, upload-time = "2026-04-03T17:07:48.678Z" }, + { url = "https://files.pythonhosted.org/packages/67/84/acb56c00cca9f251f437cb49e718e14f7687505749ea9255d7bd8158a6df/sqlalchemy-2.0.49-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a05977bffe9bffd2229f477fa75eabe3192b1b05f408961d1bebff8d1cd4d401", size = 3248260, upload-time = "2026-04-03T17:12:34.381Z" }, + { url = "https://files.pythonhosted.org/packages/56/19/6a20ea25606d1efd7bd1862149bb2a22d1451c3f851d23d887969201633f/sqlalchemy-2.0.49-cp314-cp314-win32.whl", hash = "sha256:0f2fa354ba106eafff2c14b0cc51f22801d1e8b2e4149342023bd6f0955de5f5", size = 2118463, upload-time = "2026-04-03T17:05:47.093Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4f/8297e4ed88e80baa1f5aa3c484a0ee29ef3c69c7582f206c916973b75057/sqlalchemy-2.0.49-cp314-cp314-win_amd64.whl", hash = "sha256:77641d299179c37b89cf2343ca9972c88bb6eef0d5fc504a2f86afd15cd5adf5", size = 2144204, upload-time = "2026-04-03T17:05:48.694Z" }, + { url = "https://files.pythonhosted.org/packages/1f/33/95e7216df810c706e0cd3655a778604bbd319ed4f43333127d465a46862d/sqlalchemy-2.0.49-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c1dc3368794d522f43914e03312202523cc89692f5389c32bea0233924f8d977", size = 3565474, upload-time = "2026-04-03T16:58:35.128Z" }, + { url = "https://files.pythonhosted.org/packages/0c/a4/ed7b18d8ccf7f954a83af6bb73866f5bc6f5636f44c7731fbb741f72cc4f/sqlalchemy-2.0.49-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c821c47ecfe05cc32140dcf8dc6fd5d21971c86dbd56eabfe5ba07a64910c01", size = 3530567, upload-time = "2026-04-03T17:06:04.587Z" }, + { url = "https://files.pythonhosted.org/packages/73/a3/20faa869c7e21a827c4a2a42b41353a54b0f9f5e96df5087629c306df71e/sqlalchemy-2.0.49-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9c04bff9a5335eb95c6ecf1c117576a0aa560def274876fd156cfe5510fccc61", size = 3474282, upload-time = "2026-04-03T16:58:37.131Z" }, + { url = "https://files.pythonhosted.org/packages/b7/50/276b9a007aa0764304ad467eceb70b04822dc32092492ee5f322d559a4dc/sqlalchemy-2.0.49-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7f605a456948c35260e7b2a39f8952a26f077fd25653c37740ed186b90aaa68a", size = 3480406, upload-time = "2026-04-03T17:06:07.176Z" }, + { url = "https://files.pythonhosted.org/packages/e5/c3/c80fcdb41905a2df650c2a3e0337198b6848876e63d66fe9188ef9003d24/sqlalchemy-2.0.49-cp314-cp314t-win32.whl", hash = "sha256:6270d717b11c5476b0cbb21eedc8d4dbb7d1a956fd6c15a23e96f197a6193158", size = 2149151, upload-time = "2026-04-03T17:02:07.281Z" }, + { url = "https://files.pythonhosted.org/packages/05/52/9f1a62feab6ed368aff068524ff414f26a6daebc7361861035ae00b05530/sqlalchemy-2.0.49-cp314-cp314t-win_amd64.whl", hash = "sha256:275424295f4256fd301744b8f335cff367825d270f155d522b30c7bf49903ee7", size = 2184178, upload-time = "2026-04-03T17:02:08.623Z" }, + { url = "https://files.pythonhosted.org/packages/e5/30/8519fdde58a7bdf155b714359791ad1dc018b47d60269d5d160d311fdc36/sqlalchemy-2.0.49-py3-none-any.whl", hash = "sha256:ec44cfa7ef1a728e88ad41674de50f6db8cfdb3e2af84af86e0041aaf02d43d0", size = 1942158, upload-time = "2026-04-03T16:53:44.135Z" }, +] + +[[package]] +name = "sse-starlette" +version = "3.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "starlette" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/8c/f9290339ef6d79badbc010f067cd769d6601ec11a57d78569c683fb4dd87/sse_starlette-3.3.4.tar.gz", hash = "sha256:aaf92fc067af8a5427192895ac028e947b484ac01edbc3caf00e7e7137c7bef1", size = 32427, upload-time = "2026-03-29T09:00:23.307Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/7f/3de5402f39890ac5660b86bcf5c03f9d855dad5c4ed764866d7b592b46fd/sse_starlette-3.3.4-py3-none-any.whl", hash = "sha256:84bb06e58939a8b38d8341f1bc9792f06c2b53f48c608dd207582b664fc8f3c1", size = 14330, upload-time = "2026-03-29T09:00:21.846Z" }, +] + +[[package]] +name = "starlette" +version = "0.52.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/68/79977123bb7be889ad680d79a40f339082c1978b5cfcf62c2d8d196873ac/starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933", size = 2653702, upload-time = "2026-01-18T13:34:11.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl", hash = "sha256:0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74", size = 74272, upload-time = "2026-01-18T13:34:09.188Z" }, +] + +[[package]] +name = "supervisor" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/b5/37e7a3706de436a8a2d75334711dad1afb4ddffab09f25e31d89e467542f/supervisor-4.3.0.tar.gz", hash = "sha256:4a2bf149adf42997e1bb44b70c43b613275ec9852c3edacca86a9166b27e945e", size = 468912, upload-time = "2025-08-23T18:25:02.418Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/65/5e726c372da8a5e35022a94388b12252710aad0c2351699c3d76ae8dba78/supervisor-4.3.0-py2.py3-none-any.whl", hash = "sha256:0bcb763fddafba410f35cbde226aa7f8514b9fb82eb05a0c85f6588d1c13f8db", size = 320736, upload-time = "2025-08-23T18:25:00.767Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "tabulate" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/58/8c37dea7bbf769b20d58e7ace7e5edfe65b849442b00ffcdd56be88697c6/tabulate-0.10.0.tar.gz", hash = "sha256:e2cfde8f79420f6deeffdeda9aaec3b6bc5abce947655d17ac662b126e48a60d", size = 91754, upload-time = "2026-03-04T18:55:34.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl", hash = "sha256:f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3", size = 39814, upload-time = "2026-03-04T18:55:31.284Z" }, +] + +[[package]] +name = "tenacity" +version = "9.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/c6/ee486fd809e357697ee8a44d3d69222b344920433d3b6666ccd9b374630c/tenacity-9.1.4.tar.gz", hash = "sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a", size = 49413, upload-time = "2026-02-07T10:45:33.841Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl", hash = "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55", size = 28926, upload-time = "2026-02-07T10:45:32.24Z" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, +] + +[[package]] +name = "tiktoken" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806, upload-time = "2025-10-06T20:22:45.419Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/b3/2cb7c17b6c4cf8ca983204255d3f1d95eda7213e247e6947a0ee2c747a2c/tiktoken-0.12.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970", size = 1051991, upload-time = "2025-10-06T20:21:34.098Z" }, + { url = "https://files.pythonhosted.org/packages/27/0f/df139f1df5f6167194ee5ab24634582ba9a1b62c6b996472b0277ec80f66/tiktoken-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16", size = 995798, upload-time = "2025-10-06T20:21:35.579Z" }, + { url = "https://files.pythonhosted.org/packages/ef/5d/26a691f28ab220d5edc09b9b787399b130f24327ef824de15e5d85ef21aa/tiktoken-0.12.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030", size = 1129865, upload-time = "2025-10-06T20:21:36.675Z" }, + { url = "https://files.pythonhosted.org/packages/b2/94/443fab3d4e5ebecac895712abd3849b8da93b7b7dec61c7db5c9c7ebe40c/tiktoken-0.12.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134", size = 1152856, upload-time = "2025-10-06T20:21:37.873Z" }, + { url = "https://files.pythonhosted.org/packages/54/35/388f941251b2521c70dd4c5958e598ea6d2c88e28445d2fb8189eecc1dfc/tiktoken-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a", size = 1195308, upload-time = "2025-10-06T20:21:39.577Z" }, + { url = "https://files.pythonhosted.org/packages/f8/00/c6681c7f833dd410576183715a530437a9873fa910265817081f65f9105f/tiktoken-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892", size = 1255697, upload-time = "2025-10-06T20:21:41.154Z" }, + { url = "https://files.pythonhosted.org/packages/5f/d2/82e795a6a9bafa034bf26a58e68fe9a89eeaaa610d51dbeb22106ba04f0a/tiktoken-0.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1", size = 879375, upload-time = "2025-10-06T20:21:43.201Z" }, + { url = "https://files.pythonhosted.org/packages/de/46/21ea696b21f1d6d1efec8639c204bdf20fde8bafb351e1355c72c5d7de52/tiktoken-0.12.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb", size = 1051565, upload-time = "2025-10-06T20:21:44.566Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d9/35c5d2d9e22bb2a5f74ba48266fb56c63d76ae6f66e02feb628671c0283e/tiktoken-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa", size = 995284, upload-time = "2025-10-06T20:21:45.622Z" }, + { url = "https://files.pythonhosted.org/packages/01/84/961106c37b8e49b9fdcf33fe007bb3a8fdcc380c528b20cc7fbba80578b8/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc", size = 1129201, upload-time = "2025-10-06T20:21:47.074Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d0/3d9275198e067f8b65076a68894bb52fd253875f3644f0a321a720277b8a/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded", size = 1152444, upload-time = "2025-10-06T20:21:48.139Z" }, + { url = "https://files.pythonhosted.org/packages/78/db/a58e09687c1698a7c592e1038e01c206569b86a0377828d51635561f8ebf/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd", size = 1195080, upload-time = "2025-10-06T20:21:49.246Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/a9e4d2bf91d515c0f74afc526fd773a812232dd6cda33ebea7f531202325/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967", size = 1255240, upload-time = "2025-10-06T20:21:50.274Z" }, + { url = "https://files.pythonhosted.org/packages/9d/15/963819345f1b1fb0809070a79e9dd96938d4ca41297367d471733e79c76c/tiktoken-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def", size = 879422, upload-time = "2025-10-06T20:21:51.734Z" }, + { url = "https://files.pythonhosted.org/packages/a4/85/be65d39d6b647c79800fd9d29241d081d4eeb06271f383bb87200d74cf76/tiktoken-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8", size = 1050728, upload-time = "2025-10-06T20:21:52.756Z" }, + { url = "https://files.pythonhosted.org/packages/4a/42/6573e9129bc55c9bf7300b3a35bef2c6b9117018acca0dc760ac2d93dffe/tiktoken-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b", size = 994049, upload-time = "2025-10-06T20:21:53.782Z" }, + { url = "https://files.pythonhosted.org/packages/66/c5/ed88504d2f4a5fd6856990b230b56d85a777feab84e6129af0822f5d0f70/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37", size = 1129008, upload-time = "2025-10-06T20:21:54.832Z" }, + { url = "https://files.pythonhosted.org/packages/f4/90/3dae6cc5436137ebd38944d396b5849e167896fc2073da643a49f372dc4f/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad", size = 1152665, upload-time = "2025-10-06T20:21:56.129Z" }, + { url = "https://files.pythonhosted.org/packages/a3/fe/26df24ce53ffde419a42f5f53d755b995c9318908288c17ec3f3448313a3/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5", size = 1194230, upload-time = "2025-10-06T20:21:57.546Z" }, + { url = "https://files.pythonhosted.org/packages/20/cc/b064cae1a0e9fac84b0d2c46b89f4e57051a5f41324e385d10225a984c24/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3", size = 1254688, upload-time = "2025-10-06T20:21:58.619Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/b8523105c590c5b8349f2587e2fdfe51a69544bd5a76295fc20f2374f470/tiktoken-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd", size = 878694, upload-time = "2025-10-06T20:21:59.876Z" }, + { url = "https://files.pythonhosted.org/packages/00/61/441588ee21e6b5cdf59d6870f86beb9789e532ee9718c251b391b70c68d6/tiktoken-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3", size = 1050802, upload-time = "2025-10-06T20:22:00.96Z" }, + { url = "https://files.pythonhosted.org/packages/1f/05/dcf94486d5c5c8d34496abe271ac76c5b785507c8eae71b3708f1ad9b45a/tiktoken-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160", size = 993995, upload-time = "2025-10-06T20:22:02.788Z" }, + { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948, upload-time = "2025-10-06T20:22:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/0c/da/c028aa0babf77315e1cef357d4d768800c5f8a6de04d0eac0f377cb619fa/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be", size = 1151986, upload-time = "2025-10-06T20:22:05.173Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5a/886b108b766aa53e295f7216b509be95eb7d60b166049ce2c58416b25f2a/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a", size = 1194222, upload-time = "2025-10-06T20:22:06.265Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f8/4db272048397636ac7a078d22773dd2795b1becee7bc4922fe6207288d57/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3", size = 1255097, upload-time = "2025-10-06T20:22:07.403Z" }, + { url = "https://files.pythonhosted.org/packages/8e/32/45d02e2e0ea2be3a9ed22afc47d93741247e75018aac967b713b2941f8ea/tiktoken-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697", size = 879117, upload-time = "2025-10-06T20:22:08.418Z" }, + { url = "https://files.pythonhosted.org/packages/ce/76/994fc868f88e016e6d05b0da5ac24582a14c47893f4474c3e9744283f1d5/tiktoken-0.12.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16", size = 1050309, upload-time = "2025-10-06T20:22:10.939Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b8/57ef1456504c43a849821920d582a738a461b76a047f352f18c0b26c6516/tiktoken-0.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a", size = 993712, upload-time = "2025-10-06T20:22:12.115Z" }, + { url = "https://files.pythonhosted.org/packages/72/90/13da56f664286ffbae9dbcfadcc625439142675845baa62715e49b87b68b/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27", size = 1128725, upload-time = "2025-10-06T20:22:13.541Z" }, + { url = "https://files.pythonhosted.org/packages/05/df/4f80030d44682235bdaecd7346c90f67ae87ec8f3df4a3442cb53834f7e4/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb", size = 1151875, upload-time = "2025-10-06T20:22:14.559Z" }, + { url = "https://files.pythonhosted.org/packages/22/1f/ae535223a8c4ef4c0c1192e3f9b82da660be9eb66b9279e95c99288e9dab/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e", size = 1194451, upload-time = "2025-10-06T20:22:15.545Z" }, + { url = "https://files.pythonhosted.org/packages/78/a7/f8ead382fce0243cb625c4f266e66c27f65ae65ee9e77f59ea1653b6d730/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25", size = 1253794, upload-time = "2025-10-06T20:22:16.624Z" }, + { url = "https://files.pythonhosted.org/packages/93/e0/6cc82a562bc6365785a3ff0af27a2a092d57c47d7a81d9e2295d8c36f011/tiktoken-0.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f", size = 878777, upload-time = "2025-10-06T20:22:18.036Z" }, + { url = "https://files.pythonhosted.org/packages/72/05/3abc1db5d2c9aadc4d2c76fa5640134e475e58d9fbb82b5c535dc0de9b01/tiktoken-0.12.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646", size = 1050188, upload-time = "2025-10-06T20:22:19.563Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7b/50c2f060412202d6c95f32b20755c7a6273543b125c0985d6fa9465105af/tiktoken-0.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88", size = 993978, upload-time = "2025-10-06T20:22:20.702Z" }, + { url = "https://files.pythonhosted.org/packages/14/27/bf795595a2b897e271771cd31cb847d479073497344c637966bdf2853da1/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff", size = 1129271, upload-time = "2025-10-06T20:22:22.06Z" }, + { url = "https://files.pythonhosted.org/packages/f5/de/9341a6d7a8f1b448573bbf3425fa57669ac58258a667eb48a25dfe916d70/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830", size = 1151216, upload-time = "2025-10-06T20:22:23.085Z" }, + { url = "https://files.pythonhosted.org/packages/75/0d/881866647b8d1be4d67cb24e50d0c26f9f807f994aa1510cb9ba2fe5f612/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b", size = 1194860, upload-time = "2025-10-06T20:22:24.602Z" }, + { url = "https://files.pythonhosted.org/packages/b3/1e/b651ec3059474dab649b8d5b69f5c65cd8fcd8918568c1935bd4136c9392/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b", size = 1254567, upload-time = "2025-10-06T20:22:25.671Z" }, + { url = "https://files.pythonhosted.org/packages/80/57/ce64fd16ac390fafde001268c364d559447ba09b509181b2808622420eec/tiktoken-0.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3", size = 921067, upload-time = "2025-10-06T20:22:26.753Z" }, + { url = "https://files.pythonhosted.org/packages/ac/a4/72eed53e8976a099539cdd5eb36f241987212c29629d0a52c305173e0a68/tiktoken-0.12.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365", size = 1050473, upload-time = "2025-10-06T20:22:27.775Z" }, + { url = "https://files.pythonhosted.org/packages/e6/d7/0110b8f54c008466b19672c615f2168896b83706a6611ba6e47313dbc6e9/tiktoken-0.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e", size = 993855, upload-time = "2025-10-06T20:22:28.799Z" }, + { url = "https://files.pythonhosted.org/packages/5f/77/4f268c41a3957c418b084dd576ea2fad2e95da0d8e1ab705372892c2ca22/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63", size = 1129022, upload-time = "2025-10-06T20:22:29.981Z" }, + { url = "https://files.pythonhosted.org/packages/4e/2b/fc46c90fe5028bd094cd6ee25a7db321cb91d45dc87531e2bdbb26b4867a/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0", size = 1150736, upload-time = "2025-10-06T20:22:30.996Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/3c7a39ff68022ddfd7d93f3337ad90389a342f761c4d71de99a3ccc57857/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a", size = 1194908, upload-time = "2025-10-06T20:22:32.073Z" }, + { url = "https://files.pythonhosted.org/packages/ab/0d/c1ad6f4016a3968c048545f5d9b8ffebf577774b2ede3e2e352553b685fe/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0", size = 1253706, upload-time = "2025-10-06T20:22:33.385Z" }, + { url = "https://files.pythonhosted.org/packages/af/df/c7891ef9d2712ad774777271d39fdef63941ffba0a9d59b7ad1fd2765e57/tiktoken-0.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71", size = 920667, upload-time = "2025-10-06T20:22:34.444Z" }, +] + +[[package]] +name = "tokenizers" +version = "0.22.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/73/6f/f80cfef4a312e1fb34baf7d85c72d4411afde10978d4657f8cdd811d3ccc/tokenizers-0.22.2.tar.gz", hash = "sha256:473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917", size = 372115, upload-time = "2026-01-05T10:45:15.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/97/5dbfabf04c7e348e655e907ed27913e03db0923abb5dfdd120d7b25630e1/tokenizers-0.22.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:544dd704ae7238755d790de45ba8da072e9af3eea688f698b137915ae959281c", size = 3100275, upload-time = "2026-01-05T10:41:02.158Z" }, + { url = "https://files.pythonhosted.org/packages/2e/47/174dca0502ef88b28f1c9e06b73ce33500eedfac7a7692108aec220464e7/tokenizers-0.22.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:1e418a55456beedca4621dbab65a318981467a2b188e982a23e117f115ce5001", size = 2981472, upload-time = "2026-01-05T10:41:00.276Z" }, + { url = "https://files.pythonhosted.org/packages/d6/84/7990e799f1309a8b87af6b948f31edaa12a3ed22d11b352eaf4f4b2e5753/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2249487018adec45d6e3554c71d46eb39fa8ea67156c640f7513eb26f318cec7", size = 3290736, upload-time = "2026-01-05T10:40:32.165Z" }, + { url = "https://files.pythonhosted.org/packages/78/59/09d0d9ba94dcd5f4f1368d4858d24546b4bdc0231c2354aa31d6199f0399/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25b85325d0815e86e0bac263506dd114578953b7b53d7de09a6485e4a160a7dd", size = 3168835, upload-time = "2026-01-05T10:40:38.847Z" }, + { url = "https://files.pythonhosted.org/packages/47/50/b3ebb4243e7160bda8d34b731e54dd8ab8b133e50775872e7a434e524c28/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfb88f22a209ff7b40a576d5324bf8286b519d7358663db21d6246fb17eea2d5", size = 3521673, upload-time = "2026-01-05T10:40:56.614Z" }, + { url = "https://files.pythonhosted.org/packages/e0/fa/89f4cb9e08df770b57adb96f8cbb7e22695a4cb6c2bd5f0c4f0ebcf33b66/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c774b1276f71e1ef716e5486f21e76333464f47bece56bbd554485982a9e03e", size = 3724818, upload-time = "2026-01-05T10:40:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/64/04/ca2363f0bfbe3b3d36e95bf67e56a4c88c8e3362b658e616d1ac185d47f2/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df6c4265b289083bf710dff49bc51ef252f9d5be33a45ee2bed151114a56207b", size = 3379195, upload-time = "2026-01-05T10:40:51.139Z" }, + { url = "https://files.pythonhosted.org/packages/2e/76/932be4b50ef6ccedf9d3c6639b056a967a86258c6d9200643f01269211ca/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:369cc9fc8cc10cb24143873a0d95438bb8ee257bb80c71989e3ee290e8d72c67", size = 3274982, upload-time = "2026-01-05T10:40:58.331Z" }, + { url = "https://files.pythonhosted.org/packages/1d/28/5f9f5a4cc211b69e89420980e483831bcc29dade307955cc9dc858a40f01/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:29c30b83d8dcd061078b05ae0cb94d3c710555fbb44861139f9f83dcca3dc3e4", size = 9478245, upload-time = "2026-01-05T10:41:04.053Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fb/66e2da4704d6aadebf8cb39f1d6d1957df667ab24cff2326b77cda0dcb85/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:37ae80a28c1d3265bb1f22464c856bd23c02a05bb211e56d0c5301a435be6c1a", size = 9560069, upload-time = "2026-01-05T10:45:10.673Z" }, + { url = "https://files.pythonhosted.org/packages/16/04/fed398b05caa87ce9b1a1bb5166645e38196081b225059a6edaff6440fac/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:791135ee325f2336f498590eb2f11dc5c295232f288e75c99a36c5dbce63088a", size = 9899263, upload-time = "2026-01-05T10:45:12.559Z" }, + { url = "https://files.pythonhosted.org/packages/05/a1/d62dfe7376beaaf1394917e0f8e93ee5f67fea8fcf4107501db35996586b/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:38337540fbbddff8e999d59970f3c6f35a82de10053206a7562f1ea02d046fa5", size = 10033429, upload-time = "2026-01-05T10:45:14.333Z" }, + { url = "https://files.pythonhosted.org/packages/fd/18/a545c4ea42af3df6effd7d13d250ba77a0a86fb20393143bbb9a92e434d4/tokenizers-0.22.2-cp39-abi3-win32.whl", hash = "sha256:a6bf3f88c554a2b653af81f3204491c818ae2ac6fbc09e76ef4773351292bc92", size = 2502363, upload-time = "2026-01-05T10:45:20.593Z" }, + { url = "https://files.pythonhosted.org/packages/65/71/0670843133a43d43070abeb1949abfdef12a86d490bea9cd9e18e37c5ff7/tokenizers-0.22.2-cp39-abi3-win_amd64.whl", hash = "sha256:c9ea31edff2968b44a88f97d784c2f16dc0729b8b143ed004699ebca91f05c48", size = 2747786, upload-time = "2026-01-05T10:45:18.411Z" }, + { url = "https://files.pythonhosted.org/packages/72/f4/0de46cfa12cdcbcd464cc59fde36912af405696f687e53a091fb432f694c/tokenizers-0.22.2-cp39-abi3-win_arm64.whl", hash = "sha256:9ce725d22864a1e965217204946f830c37876eee3b2ba6fc6255e8e903d5fcbc", size = 2612133, upload-time = "2026-01-05T10:45:17.232Z" }, + { url = "https://files.pythonhosted.org/packages/84/04/655b79dbcc9b3ac5f1479f18e931a344af67e5b7d3b251d2dcdcd7558592/tokenizers-0.22.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:753d47ebd4542742ef9261d9da92cd545b2cacbb48349a1225466745bb866ec4", size = 3282301, upload-time = "2026-01-05T10:40:34.858Z" }, + { url = "https://files.pythonhosted.org/packages/46/cd/e4851401f3d8f6f45d8480262ab6a5c8cb9c4302a790a35aa14eeed6d2fd/tokenizers-0.22.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e10bf9113d209be7cd046d40fbabbaf3278ff6d18eb4da4c500443185dc1896c", size = 3161308, upload-time = "2026-01-05T10:40:40.737Z" }, + { url = "https://files.pythonhosted.org/packages/6f/6e/55553992a89982cd12d4a66dddb5e02126c58677ea3931efcbe601d419db/tokenizers-0.22.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64d94e84f6660764e64e7e0b22baa72f6cd942279fdbb21d46abd70d179f0195", size = 3718964, upload-time = "2026-01-05T10:40:46.56Z" }, + { url = "https://files.pythonhosted.org/packages/59/8c/b1c87148aa15e099243ec9f0cf9d0e970cc2234c3257d558c25a2c5304e6/tokenizers-0.22.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f01a9c019878532f98927d2bacb79bbb404b43d3437455522a00a30718cdedb5", size = 3373542, upload-time = "2026-01-05T10:40:52.803Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "tomlkit" +version = "0.13.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" }, +] + +[[package]] +name = "torch" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-bindings", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setuptools", version = "80.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "sympy" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/30/bfebdd8ec77db9a79775121789992d6b3b75ee5494971294d7b4b7c999bc/torch-2.10.0-2-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:2b980edd8d7c0a68c4e951ee1856334a43193f98730d97408fbd148c1a933313", size = 79411457, upload-time = "2026-02-10T21:44:59.189Z" }, + { url = "https://files.pythonhosted.org/packages/0f/8b/4b61d6e13f7108f36910df9ab4b58fd389cc2520d54d81b88660804aad99/torch-2.10.0-2-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:418997cb02d0a0f1497cf6a09f63166f9f5df9f3e16c8a716ab76a72127c714f", size = 79423467, upload-time = "2026-02-10T21:44:48.711Z" }, + { url = "https://files.pythonhosted.org/packages/d3/54/a2ba279afcca44bbd320d4e73675b282fcee3d81400ea1b53934efca6462/torch-2.10.0-2-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:13ec4add8c3faaed8d13e0574f5cd4a323c11655546f91fbe6afa77b57423574", size = 79498202, upload-time = "2026-02-10T21:44:52.603Z" }, + { url = "https://files.pythonhosted.org/packages/ec/23/2c9fe0c9c27f7f6cb865abcea8a4568f29f00acaeadfc6a37f6801f84cb4/torch-2.10.0-2-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:e521c9f030a3774ed770a9c011751fb47c4d12029a3d6522116e48431f2ff89e", size = 79498254, upload-time = "2026-02-10T21:44:44.095Z" }, + { url = "https://files.pythonhosted.org/packages/16/ee/efbd56687be60ef9af0c9c0ebe106964c07400eade5b0af8902a1d8cd58c/torch-2.10.0-3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a1ff626b884f8c4e897c4c33782bdacdff842a165fee79817b1dd549fdda1321", size = 915510070, upload-time = "2026-03-11T14:16:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/36/ab/7b562f1808d3f65414cd80a4f7d4bb00979d9355616c034c171249e1a303/torch-2.10.0-3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac5bdcbb074384c66fa160c15b1ead77839e3fe7ed117d667249afce0acabfac", size = 915518691, upload-time = "2026-03-11T14:15:43.147Z" }, + { url = "https://files.pythonhosted.org/packages/b3/7a/abada41517ce0011775f0f4eacc79659bc9bc6c361e6bfe6f7052a6b9363/torch-2.10.0-3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:98c01b8bb5e3240426dcde1446eed6f40c778091c8544767ef1168fc663a05a6", size = 915622781, upload-time = "2026-03-11T14:17:11.354Z" }, + { url = "https://files.pythonhosted.org/packages/ab/c6/4dfe238342ffdcec5aef1c96c457548762d33c40b45a1ab7033bb26d2ff2/torch-2.10.0-3-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:80b1b5bfe38eb0e9f5ff09f206dcac0a87aadd084230d4a36eea5ec5232c115b", size = 915627275, upload-time = "2026-03-11T14:16:11.325Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/72bf18847f58f877a6a8acf60614b14935e2f156d942483af1ffc081aea0/torch-2.10.0-3-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:46b3574d93a2a8134b3f5475cfb98e2eb46771794c57015f6ad1fb795ec25e49", size = 915523474, upload-time = "2026-03-11T14:17:44.422Z" }, + { url = "https://files.pythonhosted.org/packages/f4/39/590742415c3030551944edc2ddc273ea1fdfe8ffb2780992e824f1ebee98/torch-2.10.0-3-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:b1d5e2aba4eb7f8e87fbe04f86442887f9167a35f092afe4c237dfcaaef6e328", size = 915632474, upload-time = "2026-03-11T14:15:13.666Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8e/34949484f764dde5b222b7fe3fede43e4a6f0da9d7f8c370bb617d629ee2/torch-2.10.0-3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:0228d20b06701c05a8f978357f657817a4a63984b0c90745def81c18aedfa591", size = 915523882, upload-time = "2026-03-11T14:14:46.311Z" }, + { url = "https://files.pythonhosted.org/packages/0c/1a/c61f36cfd446170ec27b3a4984f072fd06dab6b5d7ce27e11adb35d6c838/torch-2.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:5276fa790a666ee8becaffff8acb711922252521b28fbce5db7db5cf9cb2026d", size = 145992962, upload-time = "2026-01-21T16:24:14.04Z" }, + { url = "https://files.pythonhosted.org/packages/b5/60/6662535354191e2d1555296045b63e4279e5a9dbad49acf55a5d38655a39/torch-2.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:aaf663927bcd490ae971469a624c322202a2a1e68936eb952535ca4cd3b90444", size = 915599237, upload-time = "2026-01-21T16:23:25.497Z" }, + { url = "https://files.pythonhosted.org/packages/40/b8/66bbe96f0d79be2b5c697b2e0b187ed792a15c6c4b8904613454651db848/torch-2.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:a4be6a2a190b32ff5c8002a0977a25ea60e64f7ba46b1be37093c141d9c49aeb", size = 113720931, upload-time = "2026-01-21T16:24:23.743Z" }, + { url = "https://files.pythonhosted.org/packages/76/bb/d820f90e69cda6c8169b32a0c6a3ab7b17bf7990b8f2c680077c24a3c14c/torch-2.10.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:35e407430795c8d3edb07a1d711c41cc1f9eaddc8b2f1cc0a165a6767a8fb73d", size = 79411450, upload-time = "2026-01-21T16:25:30.692Z" }, + { url = "https://files.pythonhosted.org/packages/78/89/f5554b13ebd71e05c0b002f95148033e730d3f7067f67423026cc9c69410/torch-2.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3282d9febd1e4e476630a099692b44fdc214ee9bf8ee5377732d9d9dfe5712e4", size = 145992610, upload-time = "2026-01-21T16:25:26.327Z" }, + { url = "https://files.pythonhosted.org/packages/ae/30/a3a2120621bf9c17779b169fc17e3dc29b230c29d0f8222f499f5e159aa8/torch-2.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a2f9edd8dbc99f62bc4dfb78af7bf89499bca3d753423ac1b4e06592e467b763", size = 915607863, upload-time = "2026-01-21T16:25:06.696Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3d/c87b33c5f260a2a8ad68da7147e105f05868c281c63d65ed85aa4da98c66/torch-2.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:29b7009dba4b7a1c960260fc8ac85022c784250af43af9fb0ebafc9883782ebd", size = 113723116, upload-time = "2026-01-21T16:25:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/61/d8/15b9d9d3a6b0c01b883787bd056acbe5cc321090d4b216d3ea89a8fcfdf3/torch-2.10.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:b7bd80f3477b830dd166c707c5b0b82a898e7b16f59a7d9d42778dd058272e8b", size = 79423461, upload-time = "2026-01-21T16:24:50.266Z" }, + { url = "https://files.pythonhosted.org/packages/cc/af/758e242e9102e9988969b5e621d41f36b8f258bb4a099109b7a4b4b50ea4/torch-2.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:5fd4117d89ffd47e3dcc71e71a22efac24828ad781c7e46aaaf56bf7f2796acf", size = 145996088, upload-time = "2026-01-21T16:24:44.171Z" }, + { url = "https://files.pythonhosted.org/packages/23/8e/3c74db5e53bff7ed9e34c8123e6a8bfef718b2450c35eefab85bb4a7e270/torch-2.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:787124e7db3b379d4f1ed54dd12ae7c741c16a4d29b49c0226a89bea50923ffb", size = 915711952, upload-time = "2026-01-21T16:23:53.503Z" }, + { url = "https://files.pythonhosted.org/packages/6e/01/624c4324ca01f66ae4c7cd1b74eb16fb52596dce66dbe51eff95ef9e7a4c/torch-2.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2c66c61f44c5f903046cc696d088e21062644cbe541c7f1c4eaae88b2ad23547", size = 113757972, upload-time = "2026-01-21T16:24:39.516Z" }, + { url = "https://files.pythonhosted.org/packages/c9/5c/dee910b87c4d5c0fcb41b50839ae04df87c1cfc663cf1b5fca7ea565eeaa/torch-2.10.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:6d3707a61863d1c4d6ebba7be4ca320f42b869ee657e9b2c21c736bf17000294", size = 79498198, upload-time = "2026-01-21T16:24:34.704Z" }, + { url = "https://files.pythonhosted.org/packages/c9/6f/f2e91e34e3fcba2e3fc8d8f74e7d6c22e74e480bbd1db7bc8900fdf3e95c/torch-2.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5c4d217b14741e40776dd7074d9006fd28b8a97ef5654db959d8635b2fe5f29b", size = 146004247, upload-time = "2026-01-21T16:24:29.335Z" }, + { url = "https://files.pythonhosted.org/packages/98/fb/5160261aeb5e1ee12ee95fe599d0541f7c976c3701d607d8fc29e623229f/torch-2.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6b71486353fce0f9714ca0c9ef1c850a2ae766b409808acd58e9678a3edb7738", size = 915716445, upload-time = "2026-01-21T16:22:45.353Z" }, + { url = "https://files.pythonhosted.org/packages/6a/16/502fb1b41e6d868e8deb5b0e3ae926bbb36dab8ceb0d1b769b266ad7b0c3/torch-2.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:c2ee399c644dc92ef7bc0d4f7e74b5360c37cdbe7c5ba11318dda49ffac2bc57", size = 113757050, upload-time = "2026-01-21T16:24:19.204Z" }, + { url = "https://files.pythonhosted.org/packages/1a/0b/39929b148f4824bc3ad6f9f72a29d4ad865bcf7ebfc2fa67584773e083d2/torch-2.10.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:3202429f58309b9fa96a614885eace4b7995729f44beb54d3e4a47773649d382", size = 79851305, upload-time = "2026-01-21T16:24:09.209Z" }, + { url = "https://files.pythonhosted.org/packages/d8/14/21fbce63bc452381ba5f74a2c0a959fdf5ad5803ccc0c654e752e0dbe91a/torch-2.10.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:aae1b29cd68e50a9397f5ee897b9c24742e9e306f88a807a27d617f07adb3bd8", size = 146005472, upload-time = "2026-01-21T16:22:29.022Z" }, + { url = "https://files.pythonhosted.org/packages/54/fd/b207d1c525cb570ef47f3e9f836b154685011fce11a2f444ba8a4084d042/torch-2.10.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:6021db85958db2f07ec94e1bc77212721ba4920c12a18dc552d2ae36a3eb163f", size = 915612644, upload-time = "2026-01-21T16:21:47.019Z" }, + { url = "https://files.pythonhosted.org/packages/36/53/0197f868c75f1050b199fe58f9bf3bf3aecac9b4e85cc9c964383d745403/torch-2.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff43db38af76fda183156153983c9a096fc4c78d0cd1e07b14a2314c7f01c2c8", size = 113997015, upload-time = "2026-01-21T16:23:00.767Z" }, + { url = "https://files.pythonhosted.org/packages/0e/13/e76b4d9c160e89fff48bf16b449ea324bda84745d2ab30294c37c2434c0d/torch-2.10.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:cdf2a523d699b70d613243211ecaac14fe9c5df8a0b0a9c02add60fb2a413e0f", size = 79498248, upload-time = "2026-01-21T16:23:09.315Z" }, + { url = "https://files.pythonhosted.org/packages/4f/93/716b5ac0155f1be70ed81bacc21269c3ece8dba0c249b9994094110bfc51/torch-2.10.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:bf0d9ff448b0218e0433aeb198805192346c4fd659c852370d5cc245f602a06a", size = 79464992, upload-time = "2026-01-21T16:23:05.162Z" }, + { url = "https://files.pythonhosted.org/packages/69/2b/51e663ff190c9d16d4a8271203b71bc73a16aa7619b9f271a69b9d4a936b/torch-2.10.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:233aed0659a2503b831d8a67e9da66a62c996204c0bba4f4c442ccc0c68a3f60", size = 146018567, upload-time = "2026-01-21T16:22:23.393Z" }, + { url = "https://files.pythonhosted.org/packages/5e/cd/4b95ef7f293b927c283db0b136c42be91c8ec6845c44de0238c8c23bdc80/torch-2.10.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:682497e16bdfa6efeec8cde66531bc8d1fbbbb4d8788ec6173c089ed3cc2bfe5", size = 915721646, upload-time = "2026-01-21T16:21:16.983Z" }, + { url = "https://files.pythonhosted.org/packages/56/97/078a007208f8056d88ae43198833469e61a0a355abc0b070edd2c085eb9a/torch-2.10.0-cp314-cp314-win_amd64.whl", hash = "sha256:6528f13d2a8593a1a412ea07a99812495bec07e9224c28b2a25c0a30c7da025c", size = 113752373, upload-time = "2026-01-21T16:22:13.471Z" }, + { url = "https://files.pythonhosted.org/packages/d8/94/71994e7d0d5238393df9732fdab607e37e2b56d26a746cb59fdb415f8966/torch-2.10.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f5ab4ba32383061be0fb74bda772d470140a12c1c3b58a0cfbf3dae94d164c28", size = 79850324, upload-time = "2026-01-21T16:22:09.494Z" }, + { url = "https://files.pythonhosted.org/packages/e2/65/1a05346b418ea8ccd10360eef4b3e0ce688fba544e76edec26913a8d0ee0/torch-2.10.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:716b01a176c2a5659c98f6b01bf868244abdd896526f1c692712ab36dbaf9b63", size = 146006482, upload-time = "2026-01-21T16:22:18.42Z" }, + { url = "https://files.pythonhosted.org/packages/1d/b9/5f6f9d9e859fc3235f60578fa64f52c9c6e9b4327f0fe0defb6de5c0de31/torch-2.10.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:d8f5912ba938233f86361e891789595ff35ca4b4e2ac8fe3670895e5976731d6", size = 915613050, upload-time = "2026-01-21T16:20:49.035Z" }, + { url = "https://files.pythonhosted.org/packages/66/4d/35352043ee0eaffdeff154fad67cd4a31dbed7ff8e3be1cc4549717d6d51/torch-2.10.0-cp314-cp314t-win_amd64.whl", hash = "sha256:71283a373f0ee2c89e0f0d5f446039bdabe8dbc3c9ccf35f0f784908b0acd185", size = 113995816, upload-time = "2026-01-21T16:22:05.312Z" }, +] + +[[package]] +name = "torch-c-dlpack-ext" +version = "0.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/37/de/921b6491efce5c389a5ef9bbed3d2d6660005840dae488124173180859ab/torch_c_dlpack_ext-0.1.5.tar.gz", hash = "sha256:d06f0357d575d22a168cc77acb9020fc4bae30968ceb6718a055dcbe92bacabe", size = 12913, upload-time = "2026-01-12T11:25:08.484Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/49/67a66932ab2fcdda3c5a4dcf606e713d86883a4a9a99a3bb832815b52b8e/torch_c_dlpack_ext-0.1.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:e0f6c197d5293884898b9ebf13d07501de39cb94799b374ed43f91731087d557", size = 7056755, upload-time = "2026-01-12T11:24:31.817Z" }, + { url = "https://files.pythonhosted.org/packages/ae/28/d2d6bf90e01a1f4da3277c9a56d9ecac648b6d6adaa8e20c17f802deb7fb/torch_c_dlpack_ext-0.1.5-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba3d88f0f7d5e1d9c3d4a3179037fc8e261c3b77ac1fad23edc0d3a9214ef193", size = 432066, upload-time = "2026-01-12T11:24:33.619Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e9/a1f9584a3af4ac6ae5ad5cf86927d8c3a9b6bb50d54e54d19313411216a0/torch_c_dlpack_ext-0.1.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7468df84ec152d930fbc3acf460c44a60b3462b95af3d3a676d133629c7e176", size = 879488, upload-time = "2026-01-12T11:24:34.837Z" }, + { url = "https://files.pythonhosted.org/packages/6c/08/478cfcb5814e29f9b720111bdef315fc2fbc8b276e4b1183c8b9c9414a4f/torch_c_dlpack_ext-0.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:78dd4904bd26170a2dd7c0eab56367756ee0a15672ce9b84146169e68f0c6ddc", size = 1461437, upload-time = "2026-01-12T11:24:36.385Z" }, + { url = "https://files.pythonhosted.org/packages/65/66/c12a9bb3a5ddc0962c00467891bf1ffdda39a4d4780bf0fbbf54523ff34e/torch_c_dlpack_ext-0.1.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:56bd25a2af19280bf8a06aa62cff5510106f43235b9327d8561b3e9a659c4d84", size = 5076782, upload-time = "2026-01-12T11:24:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/64e1e579d107064785549e70758e38a42376ab7e73d86897ed4beab10e74/torch_c_dlpack_ext-0.1.5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fba674110e1fab0b176bb5a28223e157db65c90767d4ba74abdbee9f537b0e9d", size = 440949, upload-time = "2026-01-12T11:24:39.716Z" }, + { url = "https://files.pythonhosted.org/packages/64/5c/3e1382a620824f92920ab3fae132d8fb4e85898284c99e0c6a7764e452ce/torch_c_dlpack_ext-0.1.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3448c4f0d64104d0b2e58080a7efa72304a04960c18f338024b80b13cd3eca26", size = 897768, upload-time = "2026-01-12T11:24:41.209Z" }, + { url = "https://files.pythonhosted.org/packages/54/4f/76ea1006b9038b496d01e916c91efd17cb782abde2491a261cf203f57e30/torch_c_dlpack_ext-0.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:74676474e0afa9a4216c4755ea7cf05e8158be1d168f6bda669ba91097c263f2", size = 1479088, upload-time = "2026-01-12T11:24:42.436Z" }, + { url = "https://files.pythonhosted.org/packages/b1/67/10d236698525d7b7db4d74ec0a4b01f5b2db33968995fdd9ac6b4635e327/torch_c_dlpack_ext-0.1.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:c0f2bd51fcd99c0e5b50314e1985f2728c4941bfa821f065e6c30951d1f995ca", size = 5291237, upload-time = "2026-01-12T11:24:44.011Z" }, + { url = "https://files.pythonhosted.org/packages/87/06/8d760997307a5c3be4384424667bf31aae0a42060838c532c7d846516175/torch_c_dlpack_ext-0.1.5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3562ee411258676f9c38b8ad39306d1c8d027b6a86f6a87c920d2d009a9d1510", size = 443069, upload-time = "2026-01-12T11:24:45.451Z" }, + { url = "https://files.pythonhosted.org/packages/e2/79/a914539b4785f3e44f891aa012a886edb8bc10fe081c440981c57543ce21/torch_c_dlpack_ext-0.1.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e6f9da4bb9af70e27facc777458be62e10dbbbddda7672d16138db0553c5a524", size = 897846, upload-time = "2026-01-12T11:24:48.168Z" }, + { url = "https://files.pythonhosted.org/packages/3a/e6/7d7a97a3953208d6d6ce749180c34d1dab48464ded9a76cecabe9d021ce6/torch_c_dlpack_ext-0.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:670fbbab70123cc228bed41693a3720757af57a0ad22669063c9db25321e8f55", size = 1482855, upload-time = "2026-01-12T11:24:49.581Z" }, + { url = "https://files.pythonhosted.org/packages/ca/c6/65346a201d921b616731311fc9941f15137672b444cebdad702cb52ccee0/torch_c_dlpack_ext-0.1.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:74acea2ed395cadda63342845b9e9ee7cd4537846223dacfb4431b4610109265", size = 1993243, upload-time = "2026-01-12T11:24:51.079Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ec/faf10be09a5812b1c5ec9922b53fb5def5fc4080b81a653b9347bb169ebb/torch_c_dlpack_ext-0.1.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49f1e99d13c64e22dac0a34a1560e9e5a398a49a9fa81df83053e04fde6ec5bd", size = 443798, upload-time = "2026-01-12T11:24:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/2d/68/f434b48700f3e04f33882f54d8d3910327b935f55e14ec49da7d607bf470/torch_c_dlpack_ext-0.1.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:debe62e5ef93e631065d6b9f6e60d3d39bae6b89fa1b25d9523f40b3efbf8aba", size = 755004, upload-time = "2026-01-12T11:24:54.004Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/cc64e563f05ea99bd79bdb43f71f0f46452d3acd734da4843ede5fc73a35/torch_c_dlpack_ext-0.1.5-cp313-cp313-win_amd64.whl", hash = "sha256:30e3eab616dbc81dfdb7492aca557be551a9163ba9b585f97394a42b336b113a", size = 999126, upload-time = "2026-01-12T11:24:55.44Z" }, + { url = "https://files.pythonhosted.org/packages/96/5e/449324ca8e81573e650b6851fc31c1038f750d1de85d0b185d788e1c7a3a/torch_c_dlpack_ext-0.1.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:cac94a4905d391889e679a8da31e46dc325af5d55d13b7c70c0ce3d71d1ced6d", size = 1982154, upload-time = "2026-01-12T11:24:58.038Z" }, + { url = "https://files.pythonhosted.org/packages/20/62/11c05b99f69aa5152bca0313e0dfa6d125a020cf890dc888ef009aa7891c/torch_c_dlpack_ext-0.1.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a58fdf45fb0bda7bc459632cec891570f31c11636d5851c825cf308ec8b73c2", size = 163825, upload-time = "2026-01-12T11:24:59.474Z" }, + { url = "https://files.pythonhosted.org/packages/15/b5/be613cd8e71c9982bd07af530f86c5a7f30df7831d14cec5414857af7149/torch_c_dlpack_ext-0.1.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b985a324c68241cf83a9474b28015524b66775b12a91930dd4c0760aa628d01", size = 171740, upload-time = "2026-01-12T11:25:00.776Z" }, + { url = "https://files.pythonhosted.org/packages/5c/11/52e291f1659e2ec70a09f5ca4ad27e015eb4f0a1371ae68d23a9fbd1c704/torch_c_dlpack_ext-0.1.5-cp314-cp314-win_amd64.whl", hash = "sha256:d794e19fa3f330ab7a29987c07e031fc08e4953aec516d35701d0827863e356b", size = 277086, upload-time = "2026-01-12T11:25:01.901Z" }, +] + +[[package]] +name = "torchao" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/fe/a4036a8e80fa800c92dbcbf75f541cd4c106248b6b579db6dab1800f616a/torchao-0.17.0-cp310-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:87a418ce0ec064a821ceab83c921b501acef0ce9a6ccd1be358fcd16c3ae8c58", size = 3206172, upload-time = "2026-03-30T22:25:52.974Z" }, + { url = "https://files.pythonhosted.org/packages/c9/37/ef37ca885265e5f79a168616767dd416a3cea1cc3b28bb6b503ce4a5b652/torchao-0.17.0-py3-none-any.whl", hash = "sha256:02eba449036715b9ae784fbaa1a6f97994bb7b0421ce92d1d5d1c08e5bd6d349", size = 1200680, upload-time = "2026-03-30T22:25:54.457Z" }, +] + +[[package]] +name = "torchaudio" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/59/88ab8ebff9d91f1f1365088b30f1b9ccce07c5eeac666038a5dee5e2f9b1/torchaudio-2.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cde383582a6240c1315443df5c5638863e96b03acf1cb44a298aff07a72d373", size = 734944, upload-time = "2026-01-21T16:28:49.535Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d6/41f25f9ae9b37c191bed4cd474e403626685d2be8f7d20d011e6601fede1/torchaudio-2.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:cfb2ad4b7847d81931989127d803487263c8284f21156e9000daec1ac16c0831", size = 390449, upload-time = "2026-01-21T16:28:48.585Z" }, + { url = "https://files.pythonhosted.org/packages/43/ac/a14425fddd1cf56bb052a3bfd38880258008f8c3cd17f37bba55b3a88ce7/torchaudio-2.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:316cdb15fb37290fca89894b095d97b4dc14a90c4c61148ae5c96bb334d962cd", size = 1891070, upload-time = "2026-01-21T16:28:47.323Z" }, + { url = "https://files.pythonhosted.org/packages/6e/03/d1898db1bf7ecd47ca9b4e1b70927597d236cf721e3736d953d555901832/torchaudio-2.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:013079d1ba2a652184703e671b8339cbc7991f17e4ed927071fe7635f908a4a1", size = 474045, upload-time = "2026-01-21T16:28:46.191Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e7/401fe1d024bf9352371d854be6f339ad9928669e6bc8a5ba08e9dbce81cf/torchaudio-2.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bcab0e39eb18da84cba1a0c87f600abb6ce97c882200cb46e841caea106f037f", size = 736373, upload-time = "2026-01-21T16:28:41.589Z" }, + { url = "https://files.pythonhosted.org/packages/6f/b7/c66dc34a27441d78997e20d0ffe2f5ad73db9f7b1267511be255bb94ac9b/torchaudio-2.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:87c841a21e82703ebd4a29170c4e60c25a2b47312dc212930087ad58965ac0c8", size = 391843, upload-time = "2026-01-21T16:28:43.093Z" }, + { url = "https://files.pythonhosted.org/packages/13/ae/a2a34a64947c4fa4a61b4c86d8f36fbcb4ebfec30fdde140267db260f96c/torchaudio-2.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:b2c77fb9114dd463dc805560bf55a1ac2a52e219794cc32b7b32cf2aeffd2826", size = 1894140, upload-time = "2026-01-21T16:28:35.892Z" }, + { url = "https://files.pythonhosted.org/packages/69/26/cd2aec609b4f8918e4e85e5c6a3f569bc7b5f72a7ecba3f784077102749c/torchaudio-2.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:4c6e9609046143b30a30183893d23ff1ce5de603dbe914b3cce5cc29f5aa5a9c", size = 474792, upload-time = "2026-01-21T16:28:45.254Z" }, + { url = "https://files.pythonhosted.org/packages/0f/36/28a6f3e857616cf7576bdbf8170e483b8c5d0a1f8d349ecb2b75921236aa/torchaudio-2.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9d0fbdbfd2f621c51d28571050d6d0c7287791034e5c7303b31480af1258f33f", size = 737144, upload-time = "2026-01-21T16:28:44.189Z" }, + { url = "https://files.pythonhosted.org/packages/ea/3f/df620439a76ece170472d41438d11a1545d5db5dc9f1eaeab8c6e055a328/torchaudio-2.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:42b148a0921a3721abd1f6ae098b1ec9f89703e555c4f7a0d44da87b8decbcb9", size = 391973, upload-time = "2026-01-21T16:28:39.732Z" }, + { url = "https://files.pythonhosted.org/packages/98/25/e55a30d7138f8fe56ed006df25b0a3c27681f0ec7bc9989e1778e6d559c3/torchaudio-2.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0e77b2956448d63790a99beed0b74ac8b8cd3a94dcdd9ad01974411078f46278", size = 1895234, upload-time = "2026-01-21T16:28:37.034Z" }, + { url = "https://files.pythonhosted.org/packages/be/a0/da53c7d20fac15f66f8838653b91162de1bf21fb40fee88cf839e4ef5174/torchaudio-2.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f76a01ecebf1869e1f2c50a261f1cf07e5fccb24402b4e9bbb82d6725b9c7dd", size = 475470, upload-time = "2026-01-21T16:28:40.615Z" }, + { url = "https://files.pythonhosted.org/packages/b6/02/341e7bd588355f82c5180103cb2f8070a72ab1be920ab27553a1135d4aa6/torchaudio-2.10.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:8fd38d28ee150c584d3ee3b05f39e021f0ad8a8ec8fec1f26dfe150c9db9b2f5", size = 737164, upload-time = "2026-01-21T16:28:38.354Z" }, + { url = "https://files.pythonhosted.org/packages/49/fd/831c2595c81b17141180ca11ab3c0836cc544ef13e15aa0e7b2cb619e582/torchaudio-2.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5bc39ff3ea341097ce1ab023dd88c9dd8ca5f96ebf48821e7d23766137bb55d7", size = 392757, upload-time = "2026-01-21T16:28:33.631Z" }, + { url = "https://files.pythonhosted.org/packages/8e/d8/405c80c57dc68ca5855bddfaae57c3d84ea7397bf1eb2aa5d59c9fa1d3a9/torchaudio-2.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3057c4286db5673d266124a2a10ca54e19f516772e9057f44573a7da5b85e328", size = 1897099, upload-time = "2026-01-21T16:28:24.793Z" }, + { url = "https://files.pythonhosted.org/packages/73/cf/0e48d67788c935e3b3d00e6f55a930a54a67f432e04c33ef80a38cb764fd/torchaudio-2.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:99e74d1901742bc10961d807fe75c0dd9496f4a4a4ff4bb317c5de4a0b6f24e6", size = 475476, upload-time = "2026-01-21T16:28:28.249Z" }, + { url = "https://files.pythonhosted.org/packages/48/29/30bcce0f17a8279b051b09250993691a828f89a03278306b23571c18df04/torchaudio-2.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6cfe98ef0ea9bee6d6297493ce67ce0c54a38d80caf6535a3ae48900fd5f3769", size = 742449, upload-time = "2026-01-21T16:28:29.556Z" }, + { url = "https://files.pythonhosted.org/packages/43/8c/653e7f67855424bf3b7cbb48335f8316f7fb02bb01a6cab38f6bf9555676/torchaudio-2.10.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:b41b254d958632dc00dc7768431cadda516c91641d798775cbb19bcd4f0d2be4", size = 393430, upload-time = "2026-01-21T16:28:34.855Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1f/f91fcb9dd47a19b720fb48042a2f6f023651948e73726e98fff60d5ed5c7/torchaudio-2.10.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:da1081d1018a1e95f5a13947402aeb037cf5ac8861219a6164df004898a96bb1", size = 1897271, upload-time = "2026-01-21T16:28:23.519Z" }, + { url = "https://files.pythonhosted.org/packages/57/27/270c26890f43838e8faa5d3e52f079bd9d9d09f9a535a11cf6b94e20ed21/torchaudio-2.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f1afa53146a5655258d3a86e689c6879dfe78581d9bee9ef611ace98722f86bb", size = 478966, upload-time = "2026-01-21T16:28:32.491Z" }, + { url = "https://files.pythonhosted.org/packages/cc/5c/0e54b162bd0d1ec2f87b545553af839f906b940888d0122cdef04b965385/torchaudio-2.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1f2897fbf776d55afcb5f6d9b7bdfaea850ca7a129c8f5e4b3a4b025c431130d", size = 739544, upload-time = "2026-01-21T16:28:26.947Z" }, + { url = "https://files.pythonhosted.org/packages/57/a1/ef5571406858f4ea89c18d6ad844d21cb9858708149e6bbd9a789ee30ea5/torchaudio-2.10.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:b2d5e11a2bec08f02a4f5fb7d1902ff82d48c533a27ceedc21e6ade650cf65b3", size = 393061, upload-time = "2026-01-21T16:28:25.802Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0f/a0cf0ebc6f71b1868ea056dd4cd4f1a2244b8da8bc38372a1adc984a7c1f/torchaudio-2.10.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:77f6cf11a3b61af1b0967cd642368ecd30a86d70f622b22410ae6cb42d980b72", size = 1897137, upload-time = "2026-01-21T16:28:15.366Z" }, + { url = "https://files.pythonhosted.org/packages/7f/48/98e6710a4601e190bc923c3683629c29d41fb18a818a9328515541f023ed/torchaudio-2.10.0-cp314-cp314-win_amd64.whl", hash = "sha256:4711c2a86a005685ca3b5da135b2f370d81ac354e3dcb142ef45fe2c78b9c9c4", size = 475154, upload-time = "2026-01-21T16:28:22.438Z" }, + { url = "https://files.pythonhosted.org/packages/c1/9b/cd02f8add38bd98761548b0821a5e54c564117a9bbeafaf95f665ab0fd72/torchaudio-2.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13bdc1bde0c88e999699d1503304a56fc9dea6401b76bc08a5f268368129d46c", size = 742453, upload-time = "2026-01-21T16:28:20.989Z" }, + { url = "https://files.pythonhosted.org/packages/53/8a/946aa07393845b918d318b5e34b3bd0359fd27fc9fac10a85fae2bb86382/torchaudio-2.10.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:ed912de8ec1b400e17a5172badcfcddc601a9cd4e02d200f3a9504fc8e54961c", size = 393434, upload-time = "2026-01-21T16:28:18.668Z" }, + { url = "https://files.pythonhosted.org/packages/e1/68/e37e8fbbae986afa80f8851e08fc017eb8ae5f7b398ee28ed92303da163e/torchaudio-2.10.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:f7aa33a8198e87949896e16ea245ea731906445becdf10130e8823c68494a94a", size = 1897289, upload-time = "2026-01-21T16:28:17.059Z" }, + { url = "https://files.pythonhosted.org/packages/5d/61/0e1f464463b85bc677036faffdfd23493aa17e8c3fc3a649abca8c019701/torchaudio-2.10.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e49f6a18a8552620c4394f8529b7551eda9312d46dfdd3500bd2be459c86aea4", size = 478968, upload-time = "2026-01-21T16:28:19.542Z" }, +] + +[[package]] +name = "torchvision" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pillow" }, + { name = "torch" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/ae/cbf727421eb73f1cf907fbe5788326a08f111b3f6b6ddca15426b53fec9a/torchvision-0.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a95c47abb817d4e90ea1a8e57bd0d728e3e6b533b3495ae77d84d883c4d11f56", size = 1874919, upload-time = "2026-01-21T16:27:47.617Z" }, + { url = "https://files.pythonhosted.org/packages/64/68/dc7a224f606d53ea09f9a85196a3921ec3a801b0b1d17e84c73392f0c029/torchvision-0.25.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:acc339aba4a858192998c2b91f635827e40d9c469d9cf1455bafdda6e4c28ea4", size = 2343220, upload-time = "2026-01-21T16:27:44.26Z" }, + { url = "https://files.pythonhosted.org/packages/f9/fa/8cce5ca7ffd4da95193232493703d20aa06303f37b119fd23a65df4f239a/torchvision-0.25.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0d9a3f925a081dd2ebb0b791249b687c2ef2c2717d027946654607494b9b64b6", size = 8068106, upload-time = "2026-01-21T16:27:37.805Z" }, + { url = "https://files.pythonhosted.org/packages/8b/b9/a53bcf8f78f2cd89215e9ded70041765d50ef13bf301f9884ec6041a9421/torchvision-0.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:b57430fbe9e9b697418a395041bb615124d9c007710a2712fda6e35fb310f264", size = 3697295, upload-time = "2026-01-21T16:27:36.574Z" }, + { url = "https://files.pythonhosted.org/packages/3e/be/c704bceaf11c4f6b19d64337a34a877fcdfe3bd68160a8c9ae9bea4a35a3/torchvision-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db74a551946b75d19f9996c419a799ffdf6a223ecf17c656f90da011f1d75b20", size = 1874923, upload-time = "2026-01-21T16:27:46.574Z" }, + { url = "https://files.pythonhosted.org/packages/ae/e9/f143cd71232430de1f547ceab840f68c55e127d72558b1061a71d0b193cd/torchvision-0.25.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f49964f96644dbac2506dffe1a0a7ec0f2bf8cf7a588c3319fed26e6329ffdf3", size = 2344808, upload-time = "2026-01-21T16:27:43.191Z" }, + { url = "https://files.pythonhosted.org/packages/43/ae/ad5d6165797de234c9658752acb4fce65b78a6a18d82efdf8367c940d8da/torchvision-0.25.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:153c0d2cbc34b7cf2da19d73450f24ba36d2b75ec9211b9962b5022fb9e4ecee", size = 8070752, upload-time = "2026-01-21T16:27:33.748Z" }, + { url = "https://files.pythonhosted.org/packages/23/19/55b28aecdc7f38df57b8eb55eb0b14a62b470ed8efeb22cdc74224df1d6a/torchvision-0.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:ea580ffd6094cc01914ad32f8c8118174f18974629af905cea08cb6d5d48c7b7", size = 4038722, upload-time = "2026-01-21T16:27:41.355Z" }, + { url = "https://files.pythonhosted.org/packages/56/3a/6ea0d73f49a9bef38a1b3a92e8dd455cea58470985d25635beab93841748/torchvision-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2abe430c90b1d5e552680037d68da4eb80a5852ebb1c811b2b89d299b10573b", size = 1874920, upload-time = "2026-01-21T16:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/51/f8/c0e1ef27c66e15406fece94930e7d6feee4cb6374bbc02d945a630d6426e/torchvision-0.25.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:b75deafa2dfea3e2c2a525559b04783515e3463f6e830cb71de0fb7ea36fe233", size = 2344556, upload-time = "2026-01-21T16:27:40.125Z" }, + { url = "https://files.pythonhosted.org/packages/68/2f/f24b039169db474e8688f649377de082a965fbf85daf4e46c44412f1d15a/torchvision-0.25.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f25aa9e380865b11ea6e9d99d84df86b9cc959f1a007cd966fc6f1ab2ed0e248", size = 8072351, upload-time = "2026-01-21T16:27:21.074Z" }, + { url = "https://files.pythonhosted.org/packages/ad/16/8f650c2e288977cf0f8f85184b90ee56ed170a4919347fc74ee99286ed6f/torchvision-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:f9c55ae8d673ab493325d1267cbd285bb94d56f99626c00ac4644de32a59ede3", size = 4303059, upload-time = "2026-01-21T16:27:11.08Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5b/1562a04a6a5a4cf8cf40016a0cdeda91ede75d6962cff7f809a85ae966a5/torchvision-0.25.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:24e11199e4d84ba9c5ee7825ebdf1cd37ce8deec225117f10243cae984ced3ec", size = 1874918, upload-time = "2026-01-21T16:27:39.02Z" }, + { url = "https://files.pythonhosted.org/packages/36/b1/3d6c42f62c272ce34fcce609bb8939bdf873dab5f1b798fd4e880255f129/torchvision-0.25.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f271136d2d2c0b7a24c5671795c6e4fd8da4e0ea98aeb1041f62bc04c4370ef", size = 2309106, upload-time = "2026-01-21T16:27:30.624Z" }, + { url = "https://files.pythonhosted.org/packages/c7/60/59bb9c8b67cce356daeed4cb96a717caa4f69c9822f72e223a0eae7a9bd9/torchvision-0.25.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:855c0dc6d37f462482da7531c6788518baedca1e0847f3df42a911713acdfe52", size = 8071522, upload-time = "2026-01-21T16:27:29.392Z" }, + { url = "https://files.pythonhosted.org/packages/32/a5/9a9b1de0720f884ea50dbf9acb22cbe5312e51d7b8c4ac6ba9b51efd9bba/torchvision-0.25.0-cp313-cp313-win_amd64.whl", hash = "sha256:cef0196be31be421f6f462d1e9da1101be7332d91984caa6f8022e6c78a5877f", size = 4321911, upload-time = "2026-01-21T16:27:35.195Z" }, + { url = "https://files.pythonhosted.org/packages/52/99/dca81ed21ebaeff2b67cc9f815a20fdaa418b69f5f9ea4c6ed71721470db/torchvision-0.25.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a8f8061284395ce31bcd460f2169013382ccf411148ceb2ee38e718e9860f5a7", size = 1896209, upload-time = "2026-01-21T16:27:32.159Z" }, + { url = "https://files.pythonhosted.org/packages/28/cc/2103149761fdb4eaed58a53e8437b2d716d48f05174fab1d9fcf1e2a2244/torchvision-0.25.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:146d02c9876858420adf41f3189fe90e3d6a409cbfa65454c09f25fb33bf7266", size = 2310735, upload-time = "2026-01-21T16:27:22.327Z" }, + { url = "https://files.pythonhosted.org/packages/76/ad/f4c985ad52ddd3b22711c588501be1b330adaeaf6850317f66751711b78c/torchvision-0.25.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:c4d395cb2c4a2712f6eb93a34476cdf7aae74bb6ea2ea1917f858e96344b00aa", size = 8089557, upload-time = "2026-01-21T16:27:27.666Z" }, + { url = "https://files.pythonhosted.org/packages/63/cc/0ea68b5802e5e3c31f44b307e74947bad5a38cc655231d845534ed50ddb8/torchvision-0.25.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5e6b449e9fa7d642142c0e27c41e5a43b508d57ed8e79b7c0a0c28652da8678c", size = 4344260, upload-time = "2026-01-21T16:27:17.018Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1f/fa839532660e2602b7e704d65010787c5bb296258b44fa8b9c1cd6175e7d/torchvision-0.25.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:620a236288d594dcec7634c754484542dc0a5c1b0e0b83a34bda5e91e9b7c3a1", size = 1896193, upload-time = "2026-01-21T16:27:24.785Z" }, + { url = "https://files.pythonhosted.org/packages/80/ed/d51889da7ceaf5ff7a0574fb28f9b6b223df19667265395891f81b364ab3/torchvision-0.25.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b5e7f50002a8145a98c5694a018e738c50e2972608310c7e88e1bd4c058f6ce", size = 2309331, upload-time = "2026-01-21T16:27:19.97Z" }, + { url = "https://files.pythonhosted.org/packages/90/a5/f93fcffaddd8f12f9e812256830ec9c9ca65abbf1bc369379f9c364d1ff4/torchvision-0.25.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:632db02300e83793812eee4f61ae6a2686dab10b4cfd628b620dc47747aa9d03", size = 8088713, upload-time = "2026-01-21T16:27:15.281Z" }, + { url = "https://files.pythonhosted.org/packages/1f/eb/d0096eed5690d962853213f2ee00d91478dfcb586b62dbbb449fb8abc3a6/torchvision-0.25.0-cp314-cp314-win_amd64.whl", hash = "sha256:d1abd5ed030c708f5dbf4812ad5f6fbe9384b63c40d6bd79f8df41a4a759a917", size = 4325058, upload-time = "2026-01-21T16:27:26.165Z" }, + { url = "https://files.pythonhosted.org/packages/97/36/96374a4c7ab50dea9787ce987815614ccfe988a42e10ac1a2e3e5b60319a/torchvision-0.25.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ad9a8a5877782944d99186e4502a614770fe906626d76e9cd32446a0ac3075f2", size = 1896207, upload-time = "2026-01-21T16:27:23.383Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e2/7abb10a867db79b226b41da419b63b69c0bd5b82438c4a4ed50e084c552f/torchvision-0.25.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:40a122c3cf4d14b651f095e0f672b688dde78632783fc5cd3d4d5e4f6a828563", size = 2310741, upload-time = "2026-01-21T16:27:18.712Z" }, + { url = "https://files.pythonhosted.org/packages/08/e6/0927784e6ffc340b6676befde1c60260bd51641c9c574b9298d791a9cda4/torchvision-0.25.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:846890161b825b38aa85fc37fb3ba5eea74e7091ff28bab378287111483b6443", size = 8089772, upload-time = "2026-01-21T16:27:14.048Z" }, + { url = "https://files.pythonhosted.org/packages/b6/37/e7ca4ec820d434c0f23f824eb29f0676a0c3e7a118f1514f5b949c3356da/torchvision-0.25.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f07f01d27375ad89d72aa2b3f2180f07da95dd9d2e4c758e015c0acb2da72977", size = 4425879, upload-time = "2026-01-21T16:27:12.579Z" }, +] + +[[package]] +name = "tqdm" +version = "4.67.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" }, +] + +[[package]] +name = "transformers" +version = "4.57.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "regex" }, + { name = "requests" }, + { name = "safetensors" }, + { name = "tokenizers" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/35/67252acc1b929dc88b6602e8c4a982e64f31e733b804c14bc24b47da35e6/transformers-4.57.6.tar.gz", hash = "sha256:55e44126ece9dc0a291521b7e5492b572e6ef2766338a610b9ab5afbb70689d3", size = 10134912, upload-time = "2026-01-16T10:38:39.284Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/b8/e484ef633af3887baeeb4b6ad12743363af7cce68ae51e938e00aaa0529d/transformers-4.57.6-py3-none-any.whl", hash = "sha256:4c9e9de11333ddfe5114bc872c9f370509198acf0b87a832a0ab9458e2bd0550", size = 11993498, upload-time = "2026-01-16T10:38:31.289Z" }, +] + +[[package]] +name = "triton" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/ba/b1b04f4b291a3205d95ebd24465de0e5bf010a2df27a4e58a9b5f039d8f2/triton-3.6.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c723cfb12f6842a0ae94ac307dba7e7a44741d720a40cf0e270ed4a4e3be781", size = 175972180, upload-time = "2026-01-20T16:15:53.664Z" }, + { url = "https://files.pythonhosted.org/packages/8c/f7/f1c9d3424ab199ac53c2da567b859bcddbb9c9e7154805119f8bd95ec36f/triton-3.6.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a6550fae429e0667e397e5de64b332d1e5695b73650ee75a6146e2e902770bea", size = 188105201, upload-time = "2026-01-20T16:00:29.272Z" }, + { url = "https://files.pythonhosted.org/packages/0f/2c/96f92f3c60387e14cc45aed49487f3486f89ea27106c1b1376913c62abe4/triton-3.6.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49df5ef37379c0c2b5c0012286f80174fcf0e073e5ade1ca9a86c36814553651", size = 176081190, upload-time = "2026-01-20T16:16:00.523Z" }, + { url = "https://files.pythonhosted.org/packages/e0/12/b05ba554d2c623bffa59922b94b0775673de251f468a9609bc9e45de95e9/triton-3.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8e323d608e3a9bfcc2d9efcc90ceefb764a82b99dea12a86d643c72539ad5d3", size = 188214640, upload-time = "2026-01-20T16:00:35.869Z" }, + { url = "https://files.pythonhosted.org/packages/17/5d/08201db32823bdf77a0e2b9039540080b2e5c23a20706ddba942924ebcd6/triton-3.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:374f52c11a711fd062b4bfbb201fd9ac0a5febd28a96fb41b4a0f51dde3157f4", size = 176128243, upload-time = "2026-01-20T16:16:07.857Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a8/cdf8b3e4c98132f965f88c2313a4b493266832ad47fb52f23d14d4f86bb5/triton-3.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74caf5e34b66d9f3a429af689c1c7128daba1d8208df60e81106b115c00d6fca", size = 188266850, upload-time = "2026-01-20T16:00:43.041Z" }, + { url = "https://files.pythonhosted.org/packages/3c/12/34d71b350e89a204c2c7777a9bba0dcf2f19a5bfdd70b57c4dbc5ffd7154/triton-3.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448e02fe6dc898e9e5aa89cf0ee5c371e99df5aa5e8ad976a80b93334f3494fd", size = 176133521, upload-time = "2026-01-20T16:16:13.321Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0b/37d991d8c130ce81a8728ae3c25b6e60935838e9be1b58791f5997b24a54/triton-3.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10c7f76c6e72d2ef08df639e3d0d30729112f47a56b0c81672edc05ee5116ac9", size = 188289450, upload-time = "2026-01-20T16:00:49.136Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4e/41b0c8033b503fd3cfcd12392cdd256945026a91ff02452bef40ec34bee7/triton-3.6.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1722e172d34e32abc3eb7711d0025bb69d7959ebea84e3b7f7a341cd7ed694d6", size = 176276087, upload-time = "2026-01-20T16:16:18.989Z" }, + { url = "https://files.pythonhosted.org/packages/35/f8/9c66bfc55361ec6d0e4040a0337fb5924ceb23de4648b8a81ae9d33b2b38/triton-3.6.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d002e07d7180fd65e622134fbd980c9a3d4211fb85224b56a0a0efbd422ab72f", size = 188400296, upload-time = "2026-01-20T16:00:56.042Z" }, + { url = "https://files.pythonhosted.org/packages/49/55/5ecf0dcaa0f2fbbd4420f7ef227ee3cb172e91e5fede9d0ecaddc43363b4/triton-3.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5523241e7d1abca00f1d240949eebdd7c673b005edbbce0aca95b8191f1d43", size = 176138577, upload-time = "2026-01-20T16:16:25.426Z" }, + { url = "https://files.pythonhosted.org/packages/df/3d/9e7eee57b37c80cec63322c0231bb6da3cfe535a91d7a4d64896fcb89357/triton-3.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a17a5d5985f0ac494ed8a8e54568f092f7057ef60e1b0fa09d3fd1512064e803", size = 188273063, upload-time = "2026-01-20T16:01:07.278Z" }, + { url = "https://files.pythonhosted.org/packages/48/db/56ee649cab5eaff4757541325aca81f52d02d4a7cd3506776cad2451e060/triton-3.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b3a97e8ed304dfa9bd23bb41ca04cdf6b2e617d5e782a8653d616037a5d537d", size = 176274804, upload-time = "2026-01-20T16:16:31.528Z" }, + { url = "https://files.pythonhosted.org/packages/f6/56/6113c23ff46c00aae423333eb58b3e60bdfe9179d542781955a5e1514cb3/triton-3.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46bd1c1af4b6704e554cad2eeb3b0a6513a980d470ccfa63189737340c7746a7", size = 188397994, upload-time = "2026-01-20T16:01:14.236Z" }, +] + +[[package]] +name = "triton-windows" +version = "3.6.0.post26" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/56/1028998fbad2eaff607ad682cedbcd006ddd326bb0f19ddf18461155b900/triton_windows-3.6.0.post26-cp310-cp310-win_amd64.whl", hash = "sha256:7a2ad7e8414a581c9d3c58991f86fa49af70d9f7ef464d9349e6c0e8e23af9f5", size = 47399782, upload-time = "2026-03-10T02:51:26.808Z" }, + { url = "https://files.pythonhosted.org/packages/5e/20/acab7b4f50abe68d93f632b2e29cfb9e76284eaf9b4041a6eabbbd4afdc7/triton_windows-3.6.0.post26-cp311-cp311-win_amd64.whl", hash = "sha256:369a47ed3ca25f6d405387a058b8fbc62e6ff4592bbf87b0c5f6de372ab68931", size = 47401354, upload-time = "2026-03-10T02:51:33.9Z" }, + { url = "https://files.pythonhosted.org/packages/62/1e/8d9814e67ba3f20094cf3c69e7815a491f20beb86469a647550ba86728b0/triton_windows-3.6.0.post26-cp312-cp312-win_amd64.whl", hash = "sha256:189d8c57911aa9d2ff983a715e5c967b325f576307db60924cab22b501a36515", size = 47402104, upload-time = "2026-03-10T02:51:40.997Z" }, + { url = "https://files.pythonhosted.org/packages/2e/69/7579a5da5d8c5372711bb4b99a185ad35eae6c7549d85b9f75171e06832b/triton_windows-3.6.0.post26-cp313-cp313-win_amd64.whl", hash = "sha256:033f3d50c6a0e4539a3ccfa042304dbf76bf79155f382f9c09d010323d5a9a32", size = 47402101, upload-time = "2026-03-10T02:51:47.669Z" }, + { url = "https://files.pythonhosted.org/packages/7e/27/3d272c154c00c044e0f113d053650d6faf56258789dcdc1e5e3e4a91d86d/triton_windows-3.6.0.post26-cp314-cp314-win_amd64.whl", hash = "sha256:c8029386813d6df4ec700bbff050c1e308fd24d66be3d8848274fc5d97bad396", size = 48580269, upload-time = "2026-03-10T02:51:54.665Z" }, +] + +[[package]] +name = "trl" +version = "0.24.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accelerate" }, + { name = "datasets" }, + { name = "transformers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e8/2e/30ece0055eee5763126e2d52f6e04aec294bcae34b46d9ca16c53c4b5852/trl-0.24.0.tar.gz", hash = "sha256:eee495223725d3da0596be2607581969db89ba0f7c00b075802addc31e61eac9", size = 368447, upload-time = "2025-10-16T00:10:37.65Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/5f/c647fedde9d59ae35ee189cc49e419da5ac1d9ad9933cb69401a7eac4705/trl-0.24.0-py3-none-any.whl", hash = "sha256:a9145b7d4a4a33778de117bda48530f0cf5b2ac25acc07db80ad04836f490dfc", size = 423143, upload-time = "2025-10-16T00:10:35.809Z" }, +] + +[[package]] +name = "typeguard" +version = "4.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2b/e8/66e25efcc18542d58706ce4e50415710593721aae26e794ab1dec34fb66f/typeguard-4.5.1.tar.gz", hash = "sha256:f6f8ecbbc819c9bc749983cc67c02391e16a9b43b8b27f15dc70ed7c4a007274", size = 80121, upload-time = "2026-02-19T16:09:03.392Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/88/b55b3117287a8540b76dbdd87733808d4d01c8067a3b339408c250bb3600/typeguard-4.5.1-py3-none-any.whl", hash = "sha256:44d2bf329d49a244110a090b55f5f91aa82d9a9834ebfd30bcc73651e4a8cc40", size = 36745, upload-time = "2026-02-19T16:09:01.6Z" }, +] + +[[package]] +name = "typer" +version = "0.23.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/07/b822e1b307d40e263e8253d2384cf98c51aa2368cc7ba9a07e523a1d964b/typer-0.23.1.tar.gz", hash = "sha256:2070374e4d31c83e7b61362fd859aa683576432fd5b026b060ad6b4cd3b86134", size = 120047, upload-time = "2026-02-13T10:04:30.984Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/91/9b286ab899c008c2cb05e8be99814807e7fbbd33f0c0c960470826e5ac82/typer-0.23.1-py3-none-any.whl", hash = "sha256:3291ad0d3c701cbf522012faccfbb29352ff16ad262db2139e6b01f15781f14e", size = 56813, upload-time = "2026-02-13T10:04:32.008Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "tyro" +version = "1.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docstring-parser" }, + { name = "typeguard" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/aa/3e/96397637152a9ce368a575e88e1782a9fe4640a3950e26805ec9cca569c1/tyro-1.0.12.tar.gz", hash = "sha256:b49177ab9668e0c9255025d3936b6647cc07537ca04a4ed34362099907508ba2", size = 489159, upload-time = "2026-04-02T09:48:58.294Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/8e/fa21200c7fcebdbc5a1f7ebe2d437d69b0723bfaeea843c846b99248b2ba/tyro-1.0.12-py3-none-any.whl", hash = "sha256:d9c7b65e05c1b6760204bcb4d0b1ef76f235b16f1423d056a0d36814c2df902d", size = 185245, upload-time = "2026-04-02T09:48:56.808Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/f5/cd531b2d15a671a40c0f66cf06bc3570a12cd56eef98960068ebbad1bf5a/tzdata-2026.1.tar.gz", hash = "sha256:67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98", size = 197639, upload-time = "2026-04-03T11:25:22.002Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl", hash = "sha256:4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9", size = 348952, upload-time = "2026-04-03T11:25:20.313Z" }, +] + +[[package]] +name = "unsloth" +version = "2026.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accelerate" }, + { name = "bitsandbytes" }, + { name = "datasets" }, + { name = "diffusers" }, + { name = "hf-transfer" }, + { name = "huggingface-hub" }, + { name = "nest-asyncio" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "peft" }, + { name = "protobuf" }, + { name = "psutil" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "sentencepiece" }, + { name = "torch" }, + { name = "torchvision" }, + { name = "tqdm" }, + { name = "transformers" }, + { name = "triton", marker = "'linux' in sys_platform" }, + { name = "triton-windows", marker = "(platform_machine == 'AMD64' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'win32')" }, + { name = "trl" }, + { name = "typer" }, + { name = "tyro" }, + { name = "unsloth-zoo" }, + { name = "wheel" }, + { name = "xformers", marker = "(platform_machine == 'AMD64' and 'linux' in sys_platform) or (platform_machine == 'x86_64' and 'linux' in sys_platform) or (platform_machine == 'AMD64' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/54/52822f5ecec70d8ce4733164df302eee55b4aba1cb3860e47c58d809dcd9/unsloth-2026.4.4.tar.gz", hash = "sha256:5d5c0c1d5bd48886927e34c2d9b59ee610c882e917ba1362fe6209a7c3eea97d", size = 66783124, upload-time = "2026-04-06T16:40:57.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/80/f5246519a22f9b962f8d6364e980c83ca666b03aba693ef4223c70597000/unsloth-2026.4.4-py3-none-any.whl", hash = "sha256:da9d80a6f1a50b53ee641fbff254716945921c6ffc05d3bdbb676865a04cd27f", size = 62599611, upload-time = "2026-04-06T16:40:53.546Z" }, +] + +[[package]] +name = "unsloth-zoo" +version = "2026.4.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accelerate" }, + { name = "cut-cross-entropy" }, + { name = "datasets" }, + { name = "filelock" }, + { name = "hf-transfer" }, + { name = "huggingface-hub" }, + { name = "msgspec" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "peft" }, + { name = "pillow" }, + { name = "protobuf" }, + { name = "psutil" }, + { name = "regex" }, + { name = "sentencepiece" }, + { name = "torch" }, + { name = "torchao" }, + { name = "tqdm" }, + { name = "transformers" }, + { name = "triton", marker = "'linux' in sys_platform" }, + { name = "trl" }, + { name = "typing-extensions" }, + { name = "tyro" }, + { name = "wheel" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a4/ea/a0b38fc3977526513905b1135f4dcde994b2f5a5c712ed83121c8d4af1a1/unsloth_zoo-2026.4.6.tar.gz", hash = "sha256:78083d47774ef7efee8e9cb3e211a6a70c2746b3080c6cd1f0b2ba1c08199a0e", size = 385361, upload-time = "2026-04-09T14:45:59.712Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/23/bb59f2c00e25dbfefe65d636429658769c8e5fac8069dcaccd22a03238ce/unsloth_zoo-2026.4.6-py3-none-any.whl", hash = "sha256:326651efcb60d6124f702dd07cde3bfb85ad196ee6293a0deda9b76c4b3ee4ff", size = 418416, upload-time = "2026-04-09T14:45:58.387Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/da/6eee1ff8b6cbeed47eeb5229749168e81eb4b7b999a1a15a7176e51410c9/uvicorn-0.44.0.tar.gz", hash = "sha256:6c942071b68f07e178264b9152f1f16dfac5da85880c4ce06366a96d70d4f31e", size = 86947, upload-time = "2026-04-06T09:23:22.826Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/23/a5bbd9600dd607411fa644c06ff4951bec3a4d82c4b852374024359c19c0/uvicorn-0.44.0-py3-none-any.whl", hash = "sha256:ce937c99a2cc70279556967274414c087888e8cec9f9c94644dfca11bd3ced89", size = 69425, upload-time = "2026-04-06T09:23:21.524Z" }, +] + +[package.optional-dependencies] +standard = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "httptools" }, + { name = "python-dotenv" }, + { name = "pyyaml" }, + { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, + { name = "watchfiles" }, + { name = "websockets" }, +] + +[[package]] +name = "uvloop" +version = "0.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/f0/18d39dbd1971d6d62c4629cc7fa67f74821b0dc1f5a77af43719de7936a7/uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f", size = 2443250, upload-time = "2025-10-16T22:17:19.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/14/ecceb239b65adaaf7fde510aa8bd534075695d1e5f8dadfa32b5723d9cfb/uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c", size = 1343335, upload-time = "2025-10-16T22:16:11.43Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ae/6f6f9af7f590b319c94532b9567409ba11f4fa71af1148cab1bf48a07048/uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792", size = 742903, upload-time = "2025-10-16T22:16:12.979Z" }, + { url = "https://files.pythonhosted.org/packages/09/bd/3667151ad0702282a1f4d5d29288fce8a13c8b6858bf0978c219cd52b231/uvloop-0.22.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac33ed96229b7790eb729702751c0e93ac5bc3bcf52ae9eccbff30da09194b86", size = 3648499, upload-time = "2025-10-16T22:16:14.451Z" }, + { url = "https://files.pythonhosted.org/packages/b3/f6/21657bb3beb5f8c57ce8be3b83f653dd7933c2fd00545ed1b092d464799a/uvloop-0.22.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:481c990a7abe2c6f4fc3d98781cc9426ebd7f03a9aaa7eb03d3bfc68ac2a46bd", size = 3700133, upload-time = "2025-10-16T22:16:16.272Z" }, + { url = "https://files.pythonhosted.org/packages/09/e0/604f61d004ded805f24974c87ddd8374ef675644f476f01f1df90e4cdf72/uvloop-0.22.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a592b043a47ad17911add5fbd087c76716d7c9ccc1d64ec9249ceafd735f03c2", size = 3512681, upload-time = "2025-10-16T22:16:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ce/8491fd370b0230deb5eac69c7aae35b3be527e25a911c0acdffb922dc1cd/uvloop-0.22.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1489cf791aa7b6e8c8be1c5a080bae3a672791fcb4e9e12249b05862a2ca9cec", size = 3615261, upload-time = "2025-10-16T22:16:19.596Z" }, + { url = "https://files.pythonhosted.org/packages/c7/d5/69900f7883235562f1f50d8184bb7dd84a2fb61e9ec63f3782546fdbd057/uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9", size = 1352420, upload-time = "2025-10-16T22:16:21.187Z" }, + { url = "https://files.pythonhosted.org/packages/a8/73/c4e271b3bce59724e291465cc936c37758886a4868787da0278b3b56b905/uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77", size = 748677, upload-time = "2025-10-16T22:16:22.558Z" }, + { url = "https://files.pythonhosted.org/packages/86/94/9fb7fad2f824d25f8ecac0d70b94d0d48107ad5ece03769a9c543444f78a/uvloop-0.22.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53c85520781d84a4b8b230e24a5af5b0778efdb39142b424990ff1ef7c48ba21", size = 3753819, upload-time = "2025-10-16T22:16:23.903Z" }, + { url = "https://files.pythonhosted.org/packages/74/4f/256aca690709e9b008b7108bc85fba619a2bc37c6d80743d18abad16ee09/uvloop-0.22.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56a2d1fae65fd82197cb8c53c367310b3eabe1bbb9fb5a04d28e3e3520e4f702", size = 3804529, upload-time = "2025-10-16T22:16:25.246Z" }, + { url = "https://files.pythonhosted.org/packages/7f/74/03c05ae4737e871923d21a76fe28b6aad57f5c03b6e6bfcfa5ad616013e4/uvloop-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40631b049d5972c6755b06d0bfe8233b1bd9a8a6392d9d1c45c10b6f9e9b2733", size = 3621267, upload-time = "2025-10-16T22:16:26.819Z" }, + { url = "https://files.pythonhosted.org/packages/75/be/f8e590fe61d18b4a92070905497aec4c0e64ae1761498cad09023f3f4b3e/uvloop-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:535cc37b3a04f6cd2c1ef65fa1d370c9a35b6695df735fcff5427323f2cd5473", size = 3723105, upload-time = "2025-10-16T22:16:28.252Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ff/7f72e8170be527b4977b033239a83a68d5c881cc4775fca255c677f7ac5d/uvloop-0.22.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fe94b4564e865d968414598eea1a6de60adba0c040ba4ed05ac1300de402cd42", size = 1359936, upload-time = "2025-10-16T22:16:29.436Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c6/e5d433f88fd54d81ef4be58b2b7b0cea13c442454a1db703a1eea0db1a59/uvloop-0.22.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:51eb9bd88391483410daad430813d982010f9c9c89512321f5b60e2cddbdddd6", size = 752769, upload-time = "2025-10-16T22:16:30.493Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/a6ac446820273e71aa762fa21cdcc09861edd3536ff47c5cd3b7afb10eeb/uvloop-0.22.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:700e674a166ca5778255e0e1dc4e9d79ab2acc57b9171b79e65feba7184b3370", size = 4317413, upload-time = "2025-10-16T22:16:31.644Z" }, + { url = "https://files.pythonhosted.org/packages/5f/6f/e62b4dfc7ad6518e7eff2516f680d02a0f6eb62c0c212e152ca708a0085e/uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b5b1ac819a3f946d3b2ee07f09149578ae76066d70b44df3fa990add49a82e4", size = 4426307, upload-time = "2025-10-16T22:16:32.917Z" }, + { url = "https://files.pythonhosted.org/packages/90/60/97362554ac21e20e81bcef1150cb2a7e4ffdaf8ea1e5b2e8bf7a053caa18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e047cc068570bac9866237739607d1313b9253c3051ad84738cbb095be0537b2", size = 4131970, upload-time = "2025-10-16T22:16:34.015Z" }, + { url = "https://files.pythonhosted.org/packages/99/39/6b3f7d234ba3964c428a6e40006340f53ba37993f46ed6e111c6e9141d18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:512fec6815e2dd45161054592441ef76c830eddaad55c8aa30952e6fe1ed07c0", size = 4296343, upload-time = "2025-10-16T22:16:35.149Z" }, + { url = "https://files.pythonhosted.org/packages/89/8c/182a2a593195bfd39842ea68ebc084e20c850806117213f5a299dfc513d9/uvloop-0.22.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:561577354eb94200d75aca23fbde86ee11be36b00e52a4eaf8f50fb0c86b7705", size = 1358611, upload-time = "2025-10-16T22:16:36.833Z" }, + { url = "https://files.pythonhosted.org/packages/d2/14/e301ee96a6dc95224b6f1162cd3312f6d1217be3907b79173b06785f2fe7/uvloop-0.22.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cdf5192ab3e674ca26da2eada35b288d2fa49fdd0f357a19f0e7c4e7d5077c8", size = 751811, upload-time = "2025-10-16T22:16:38.275Z" }, + { url = "https://files.pythonhosted.org/packages/b7/02/654426ce265ac19e2980bfd9ea6590ca96a56f10c76e63801a2df01c0486/uvloop-0.22.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e2ea3d6190a2968f4a14a23019d3b16870dd2190cd69c8180f7c632d21de68d", size = 4288562, upload-time = "2025-10-16T22:16:39.375Z" }, + { url = "https://files.pythonhosted.org/packages/15/c0/0be24758891ef825f2065cd5db8741aaddabe3e248ee6acc5e8a80f04005/uvloop-0.22.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0530a5fbad9c9e4ee3f2b33b148c6a64d47bbad8000ea63704fa8260f4cf728e", size = 4366890, upload-time = "2025-10-16T22:16:40.547Z" }, + { url = "https://files.pythonhosted.org/packages/d2/53/8369e5219a5855869bcee5f4d317f6da0e2c669aecf0ef7d371e3d084449/uvloop-0.22.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bc5ef13bbc10b5335792360623cc378d52d7e62c2de64660616478c32cd0598e", size = 4119472, upload-time = "2025-10-16T22:16:41.694Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ba/d69adbe699b768f6b29a5eec7b47dd610bd17a69de51b251126a801369ea/uvloop-0.22.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1f38ec5e3f18c8a10ded09742f7fb8de0108796eb673f30ce7762ce1b8550cad", size = 4239051, upload-time = "2025-10-16T22:16:43.224Z" }, + { url = "https://files.pythonhosted.org/packages/90/cd/b62bdeaa429758aee8de8b00ac0dd26593a9de93d302bff3d21439e9791d/uvloop-0.22.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3879b88423ec7e97cd4eba2a443aa26ed4e59b45e6b76aabf13fe2f27023a142", size = 1362067, upload-time = "2025-10-16T22:16:44.503Z" }, + { url = "https://files.pythonhosted.org/packages/0d/f8/a132124dfda0777e489ca86732e85e69afcd1ff7686647000050ba670689/uvloop-0.22.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4baa86acedf1d62115c1dc6ad1e17134476688f08c6efd8a2ab076e815665c74", size = 752423, upload-time = "2025-10-16T22:16:45.968Z" }, + { url = "https://files.pythonhosted.org/packages/a3/94/94af78c156f88da4b3a733773ad5ba0b164393e357cc4bd0ab2e2677a7d6/uvloop-0.22.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:297c27d8003520596236bdb2335e6b3f649480bd09e00d1e3a99144b691d2a35", size = 4272437, upload-time = "2025-10-16T22:16:47.451Z" }, + { url = "https://files.pythonhosted.org/packages/b5/35/60249e9fd07b32c665192cec7af29e06c7cd96fa1d08b84f012a56a0b38e/uvloop-0.22.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1955d5a1dd43198244d47664a5858082a3239766a839b2102a269aaff7a4e25", size = 4292101, upload-time = "2025-10-16T22:16:49.318Z" }, + { url = "https://files.pythonhosted.org/packages/02/62/67d382dfcb25d0a98ce73c11ed1a6fba5037a1a1d533dcbb7cab033a2636/uvloop-0.22.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b31dc2fccbd42adc73bc4e7cdbae4fc5086cf378979e53ca5d0301838c5682c6", size = 4114158, upload-time = "2025-10-16T22:16:50.517Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/f1171b4a882a5d13c8b7576f348acfe6074d72eaf52cccef752f748d4a9f/uvloop-0.22.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:93f617675b2d03af4e72a5333ef89450dfaa5321303ede6e67ba9c9d26878079", size = 4177360, upload-time = "2025-10-16T22:16:52.646Z" }, + { url = "https://files.pythonhosted.org/packages/79/7b/b01414f31546caf0919da80ad57cbfe24c56b151d12af68cee1b04922ca8/uvloop-0.22.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:37554f70528f60cad66945b885eb01f1bb514f132d92b6eeed1c90fd54ed6289", size = 1454790, upload-time = "2025-10-16T22:16:54.355Z" }, + { url = "https://files.pythonhosted.org/packages/d4/31/0bb232318dd838cad3fa8fb0c68c8b40e1145b32025581975e18b11fab40/uvloop-0.22.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b76324e2dc033a0b2f435f33eb88ff9913c156ef78e153fb210e03c13da746b3", size = 796783, upload-time = "2025-10-16T22:16:55.906Z" }, + { url = "https://files.pythonhosted.org/packages/42/38/c9b09f3271a7a723a5de69f8e237ab8e7803183131bc57c890db0b6bb872/uvloop-0.22.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:badb4d8e58ee08dad957002027830d5c3b06aea446a6a3744483c2b3b745345c", size = 4647548, upload-time = "2025-10-16T22:16:57.008Z" }, + { url = "https://files.pythonhosted.org/packages/c1/37/945b4ca0ac27e3dc4952642d4c900edd030b3da6c9634875af6e13ae80e5/uvloop-0.22.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b91328c72635f6f9e0282e4a57da7470c7350ab1c9f48546c0f2866205349d21", size = 4467065, upload-time = "2025-10-16T22:16:58.206Z" }, + { url = "https://files.pythonhosted.org/packages/97/cc/48d232f33d60e2e2e0b42f4e73455b146b76ebe216487e862700457fbf3c/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:daf620c2995d193449393d6c62131b3fbd40a63bf7b307a1527856ace637fe88", size = 4328384, upload-time = "2025-10-16T22:16:59.36Z" }, + { url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" }, +] + +[[package]] +name = "vllm" +version = "0.19.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "anthropic" }, + { name = "blake3" }, + { name = "cachetools" }, + { name = "cbor2" }, + { name = "cloudpickle" }, + { name = "compressed-tensors" }, + { name = "depyf" }, + { name = "diskcache" }, + { name = "einops" }, + { name = "fastapi", extra = ["standard"] }, + { name = "filelock" }, + { name = "flashinfer-cubin" }, + { name = "flashinfer-python" }, + { name = "gguf" }, + { name = "ijson" }, + { name = "lark" }, + { name = "llguidance", marker = "platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'ppc64le' or platform_machine == 's390x' or platform_machine == 'x86_64'" }, + { name = "lm-format-enforcer" }, + { name = "mcp" }, + { name = "mistral-common", extra = ["image"] }, + { name = "model-hosting-container-standards" }, + { name = "msgspec" }, + { name = "ninja" }, + { name = "numba" }, + { name = "numpy" }, + { name = "nvidia-cudnn-frontend" }, + { name = "nvidia-cutlass-dsl" }, + { name = "openai" }, + { name = "openai-harmony" }, + { name = "opencv-python-headless" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp" }, + { name = "opentelemetry-sdk" }, + { name = "opentelemetry-semantic-conventions-ai" }, + { name = "outlines-core" }, + { name = "partial-json-parser" }, + { name = "pillow" }, + { name = "prometheus-client" }, + { name = "prometheus-fastapi-instrumentator" }, + { name = "protobuf" }, + { name = "psutil" }, + { name = "py-cpuinfo" }, + { name = "pybase64" }, + { name = "pydantic" }, + { name = "python-json-logger" }, + { name = "pyyaml" }, + { name = "pyzmq" }, + { name = "quack-kernels" }, + { name = "regex" }, + { name = "requests" }, + { name = "sentencepiece" }, + { name = "setproctitle" }, + { name = "setuptools", version = "80.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "six", marker = "python_full_version >= '3.12'" }, + { name = "tiktoken" }, + { name = "tokenizers" }, + { name = "torch" }, + { name = "torchaudio" }, + { name = "torchvision" }, + { name = "tqdm" }, + { name = "transformers" }, + { name = "typing-extensions" }, + { name = "watchfiles" }, + { name = "xgrammar", marker = "platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'ppc64le' or platform_machine == 's390x' or platform_machine == 'x86_64'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/03/14/c330a72309051f762b357a2e41d5015bedbb106ad1e16a231bdfda2e2163/vllm-0.19.0.tar.gz", hash = "sha256:81e59cf87175e7a62eb8d9acf5989484bbd17089d5eface353f89067bda282d9", size = 31071745, upload-time = "2026-04-03T04:04:52.833Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/51/467e7a8cb4838022daa731b7f8b34c228691e36f938e1803c3a702c7bd69/vllm-0.19.0-cp38-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:6ab90ccca5d7ca3bd2c8f90133f0fac85e8f4af582a1c67c6cc3f63c615521e3", size = 384650557, upload-time = "2026-04-03T04:05:52.513Z" }, + { url = "https://files.pythonhosted.org/packages/b7/08/6a431731e4c163bc1fab85b63e269d84104aad0fba98dac1af34fdc5077f/vllm-0.19.0-cp38-abi3-manylinux_2_31_x86_64.whl", hash = "sha256:2d0e5fae45367bdbf111fcad68f4c0f8fdddd2f2fb643e52f0f2daebef7b41cf", size = 432281473, upload-time = "2026-04-03T04:05:22.07Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c2/c9/8869df9b2a2d6c59d79220a4db37679e74f807c559ffe5265e08b227a210/watchfiles-1.1.1.tar.gz", hash = "sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2", size = 94440, upload-time = "2025-10-14T15:06:21.08Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/1a/206e8cf2dd86fddf939165a57b4df61607a1e0add2785f170a3f616b7d9f/watchfiles-1.1.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c", size = 407318, upload-time = "2025-10-14T15:04:18.753Z" }, + { url = "https://files.pythonhosted.org/packages/b3/0f/abaf5262b9c496b5dad4ed3c0e799cbecb1f8ea512ecb6ddd46646a9fca3/watchfiles-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43", size = 394478, upload-time = "2025-10-14T15:04:20.297Z" }, + { url = "https://files.pythonhosted.org/packages/b1/04/9cc0ba88697b34b755371f5ace8d3a4d9a15719c07bdc7bd13d7d8c6a341/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31", size = 449894, upload-time = "2025-10-14T15:04:21.527Z" }, + { url = "https://files.pythonhosted.org/packages/d2/9c/eda4615863cd8621e89aed4df680d8c3ec3da6a4cf1da113c17decd87c7f/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac", size = 459065, upload-time = "2025-10-14T15:04:22.795Z" }, + { url = "https://files.pythonhosted.org/packages/84/13/f28b3f340157d03cbc8197629bc109d1098764abe1e60874622a0be5c112/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d", size = 488377, upload-time = "2025-10-14T15:04:24.138Z" }, + { url = "https://files.pythonhosted.org/packages/86/93/cfa597fa9389e122488f7ffdbd6db505b3b915ca7435ecd7542e855898c2/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d", size = 595837, upload-time = "2025-10-14T15:04:25.057Z" }, + { url = "https://files.pythonhosted.org/packages/57/1e/68c1ed5652b48d89fc24d6af905d88ee4f82fa8bc491e2666004e307ded1/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863", size = 473456, upload-time = "2025-10-14T15:04:26.497Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dc/1a680b7458ffa3b14bb64878112aefc8f2e4f73c5af763cbf0bd43100658/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab", size = 455614, upload-time = "2025-10-14T15:04:27.539Z" }, + { url = "https://files.pythonhosted.org/packages/61/a5/3d782a666512e01eaa6541a72ebac1d3aae191ff4a31274a66b8dd85760c/watchfiles-1.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82", size = 630690, upload-time = "2025-10-14T15:04:28.495Z" }, + { url = "https://files.pythonhosted.org/packages/9b/73/bb5f38590e34687b2a9c47a244aa4dd50c56a825969c92c9c5fc7387cea1/watchfiles-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4", size = 622459, upload-time = "2025-10-14T15:04:29.491Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ac/c9bb0ec696e07a20bd58af5399aeadaef195fb2c73d26baf55180fe4a942/watchfiles-1.1.1-cp310-cp310-win32.whl", hash = "sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844", size = 272663, upload-time = "2025-10-14T15:04:30.435Z" }, + { url = "https://files.pythonhosted.org/packages/11/a0/a60c5a7c2ec59fa062d9a9c61d02e3b6abd94d32aac2d8344c4bdd033326/watchfiles-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e", size = 287453, upload-time = "2025-10-14T15:04:31.53Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/2c5f479fb531ce2f0564eda479faecf253d886b1ab3630a39b7bf7362d46/watchfiles-1.1.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5", size = 406529, upload-time = "2025-10-14T15:04:32.899Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cd/f515660b1f32f65df671ddf6f85bfaca621aee177712874dc30a97397977/watchfiles-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741", size = 394384, upload-time = "2025-10-14T15:04:33.761Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c3/28b7dc99733eab43fca2d10f55c86e03bd6ab11ca31b802abac26b23d161/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6", size = 448789, upload-time = "2025-10-14T15:04:34.679Z" }, + { url = "https://files.pythonhosted.org/packages/4a/24/33e71113b320030011c8e4316ccca04194bf0cbbaeee207f00cbc7d6b9f5/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b", size = 460521, upload-time = "2025-10-14T15:04:35.963Z" }, + { url = "https://files.pythonhosted.org/packages/f4/c3/3c9a55f255aa57b91579ae9e98c88704955fa9dac3e5614fb378291155df/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14", size = 488722, upload-time = "2025-10-14T15:04:37.091Z" }, + { url = "https://files.pythonhosted.org/packages/49/36/506447b73eb46c120169dc1717fe2eff07c234bb3232a7200b5f5bd816e9/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d", size = 596088, upload-time = "2025-10-14T15:04:38.39Z" }, + { url = "https://files.pythonhosted.org/packages/82/ab/5f39e752a9838ec4d52e9b87c1e80f1ee3ccdbe92e183c15b6577ab9de16/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff", size = 472923, upload-time = "2025-10-14T15:04:39.666Z" }, + { url = "https://files.pythonhosted.org/packages/af/b9/a419292f05e302dea372fa7e6fda5178a92998411f8581b9830d28fb9edb/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606", size = 456080, upload-time = "2025-10-14T15:04:40.643Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c3/d5932fd62bde1a30c36e10c409dc5d54506726f08cb3e1d8d0ba5e2bc8db/watchfiles-1.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701", size = 629432, upload-time = "2025-10-14T15:04:41.789Z" }, + { url = "https://files.pythonhosted.org/packages/f7/77/16bddd9779fafb795f1a94319dc965209c5641db5bf1edbbccace6d1b3c0/watchfiles-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10", size = 623046, upload-time = "2025-10-14T15:04:42.718Z" }, + { url = "https://files.pythonhosted.org/packages/46/ef/f2ecb9a0f342b4bfad13a2787155c6ee7ce792140eac63a34676a2feeef2/watchfiles-1.1.1-cp311-cp311-win32.whl", hash = "sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849", size = 271473, upload-time = "2025-10-14T15:04:43.624Z" }, + { url = "https://files.pythonhosted.org/packages/94/bc/f42d71125f19731ea435c3948cad148d31a64fccde3867e5ba4edee901f9/watchfiles-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4", size = 287598, upload-time = "2025-10-14T15:04:44.516Z" }, + { url = "https://files.pythonhosted.org/packages/57/c9/a30f897351f95bbbfb6abcadafbaca711ce1162f4db95fc908c98a9165f3/watchfiles-1.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e", size = 277210, upload-time = "2025-10-14T15:04:45.883Z" }, + { url = "https://files.pythonhosted.org/packages/74/d5/f039e7e3c639d9b1d09b07ea412a6806d38123f0508e5f9b48a87b0a76cc/watchfiles-1.1.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d", size = 404745, upload-time = "2025-10-14T15:04:46.731Z" }, + { url = "https://files.pythonhosted.org/packages/a5/96/a881a13aa1349827490dab2d363c8039527060cfcc2c92cc6d13d1b1049e/watchfiles-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610", size = 391769, upload-time = "2025-10-14T15:04:48.003Z" }, + { url = "https://files.pythonhosted.org/packages/4b/5b/d3b460364aeb8da471c1989238ea0e56bec24b6042a68046adf3d9ddb01c/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af", size = 449374, upload-time = "2025-10-14T15:04:49.179Z" }, + { url = "https://files.pythonhosted.org/packages/b9/44/5769cb62d4ed055cb17417c0a109a92f007114a4e07f30812a73a4efdb11/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6", size = 459485, upload-time = "2025-10-14T15:04:50.155Z" }, + { url = "https://files.pythonhosted.org/packages/19/0c/286b6301ded2eccd4ffd0041a1b726afda999926cf720aab63adb68a1e36/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce", size = 488813, upload-time = "2025-10-14T15:04:51.059Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2b/8530ed41112dd4a22f4dcfdb5ccf6a1baad1ff6eed8dc5a5f09e7e8c41c7/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa", size = 594816, upload-time = "2025-10-14T15:04:52.031Z" }, + { url = "https://files.pythonhosted.org/packages/ce/d2/f5f9fb49489f184f18470d4f99f4e862a4b3e9ac2865688eb2099e3d837a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb", size = 475186, upload-time = "2025-10-14T15:04:53.064Z" }, + { url = "https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803", size = 456812, upload-time = "2025-10-14T15:04:55.174Z" }, + { url = "https://files.pythonhosted.org/packages/66/ab/3cbb8756323e8f9b6f9acb9ef4ec26d42b2109bce830cc1f3468df20511d/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94", size = 630196, upload-time = "2025-10-14T15:04:56.22Z" }, + { url = "https://files.pythonhosted.org/packages/78/46/7152ec29b8335f80167928944a94955015a345440f524d2dfe63fc2f437b/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43", size = 622657, upload-time = "2025-10-14T15:04:57.521Z" }, + { url = "https://files.pythonhosted.org/packages/0a/bf/95895e78dd75efe9a7f31733607f384b42eb5feb54bd2eb6ed57cc2e94f4/watchfiles-1.1.1-cp312-cp312-win32.whl", hash = "sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9", size = 272042, upload-time = "2025-10-14T15:04:59.046Z" }, + { url = "https://files.pythonhosted.org/packages/87/0a/90eb755f568de2688cb220171c4191df932232c20946966c27a59c400850/watchfiles-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9", size = 288410, upload-time = "2025-10-14T15:05:00.081Z" }, + { url = "https://files.pythonhosted.org/packages/36/76/f322701530586922fbd6723c4f91ace21364924822a8772c549483abed13/watchfiles-1.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404", size = 278209, upload-time = "2025-10-14T15:05:01.168Z" }, + { url = "https://files.pythonhosted.org/packages/bb/f4/f750b29225fe77139f7ae5de89d4949f5a99f934c65a1f1c0b248f26f747/watchfiles-1.1.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18", size = 404321, upload-time = "2025-10-14T15:05:02.063Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f9/f07a295cde762644aa4c4bb0f88921d2d141af45e735b965fb2e87858328/watchfiles-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a", size = 391783, upload-time = "2025-10-14T15:05:03.052Z" }, + { url = "https://files.pythonhosted.org/packages/bc/11/fc2502457e0bea39a5c958d86d2cb69e407a4d00b85735ca724bfa6e0d1a/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219", size = 449279, upload-time = "2025-10-14T15:05:04.004Z" }, + { url = "https://files.pythonhosted.org/packages/e3/1f/d66bc15ea0b728df3ed96a539c777acfcad0eb78555ad9efcaa1274688f0/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428", size = 459405, upload-time = "2025-10-14T15:05:04.942Z" }, + { url = "https://files.pythonhosted.org/packages/be/90/9f4a65c0aec3ccf032703e6db02d89a157462fbb2cf20dd415128251cac0/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0", size = 488976, upload-time = "2025-10-14T15:05:05.905Z" }, + { url = "https://files.pythonhosted.org/packages/37/57/ee347af605d867f712be7029bb94c8c071732a4b44792e3176fa3c612d39/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150", size = 595506, upload-time = "2025-10-14T15:05:06.906Z" }, + { url = "https://files.pythonhosted.org/packages/a8/78/cc5ab0b86c122047f75e8fc471c67a04dee395daf847d3e59381996c8707/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae", size = 474936, upload-time = "2025-10-14T15:05:07.906Z" }, + { url = "https://files.pythonhosted.org/packages/62/da/def65b170a3815af7bd40a3e7010bf6ab53089ef1b75d05dd5385b87cf08/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d", size = 456147, upload-time = "2025-10-14T15:05:09.138Z" }, + { url = "https://files.pythonhosted.org/packages/57/99/da6573ba71166e82d288d4df0839128004c67d2778d3b566c138695f5c0b/watchfiles-1.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b", size = 630007, upload-time = "2025-10-14T15:05:10.117Z" }, + { url = "https://files.pythonhosted.org/packages/a8/51/7439c4dd39511368849eb1e53279cd3454b4a4dbace80bab88feeb83c6b5/watchfiles-1.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374", size = 622280, upload-time = "2025-10-14T15:05:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/95/9c/8ed97d4bba5db6fdcdb2b298d3898f2dd5c20f6b73aee04eabe56c59677e/watchfiles-1.1.1-cp313-cp313-win32.whl", hash = "sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0", size = 272056, upload-time = "2025-10-14T15:05:12.156Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/c14e28429f744a260d8ceae18bf58c1d5fa56b50d006a7a9f80e1882cb0d/watchfiles-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42", size = 288162, upload-time = "2025-10-14T15:05:13.208Z" }, + { url = "https://files.pythonhosted.org/packages/dc/61/fe0e56c40d5cd29523e398d31153218718c5786b5e636d9ae8ae79453d27/watchfiles-1.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18", size = 277909, upload-time = "2025-10-14T15:05:14.49Z" }, + { url = "https://files.pythonhosted.org/packages/79/42/e0a7d749626f1e28c7108a99fb9bf524b501bbbeb9b261ceecde644d5a07/watchfiles-1.1.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da", size = 403389, upload-time = "2025-10-14T15:05:15.777Z" }, + { url = "https://files.pythonhosted.org/packages/15/49/08732f90ce0fbbc13913f9f215c689cfc9ced345fb1bcd8829a50007cc8d/watchfiles-1.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051", size = 389964, upload-time = "2025-10-14T15:05:16.85Z" }, + { url = "https://files.pythonhosted.org/packages/27/0d/7c315d4bd5f2538910491a0393c56bf70d333d51bc5b34bee8e68e8cea19/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e", size = 448114, upload-time = "2025-10-14T15:05:17.876Z" }, + { url = "https://files.pythonhosted.org/packages/c3/24/9e096de47a4d11bc4df41e9d1e61776393eac4cb6eb11b3e23315b78b2cc/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70", size = 460264, upload-time = "2025-10-14T15:05:18.962Z" }, + { url = "https://files.pythonhosted.org/packages/cc/0f/e8dea6375f1d3ba5fcb0b3583e2b493e77379834c74fd5a22d66d85d6540/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261", size = 487877, upload-time = "2025-10-14T15:05:20.094Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/df24cfc6424a12deb41503b64d42fbea6b8cb357ec62ca84a5a3476f654a/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620", size = 595176, upload-time = "2025-10-14T15:05:21.134Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b5/853b6757f7347de4e9b37e8cc3289283fb983cba1ab4d2d7144694871d9c/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04", size = 473577, upload-time = "2025-10-14T15:05:22.306Z" }, + { url = "https://files.pythonhosted.org/packages/e1/f7/0a4467be0a56e80447c8529c9fce5b38eab4f513cb3d9bf82e7392a5696b/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77", size = 455425, upload-time = "2025-10-14T15:05:23.348Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e0/82583485ea00137ddf69bc84a2db88bd92ab4a6e3c405e5fb878ead8d0e7/watchfiles-1.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef", size = 628826, upload-time = "2025-10-14T15:05:24.398Z" }, + { url = "https://files.pythonhosted.org/packages/28/9a/a785356fccf9fae84c0cc90570f11702ae9571036fb25932f1242c82191c/watchfiles-1.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf", size = 622208, upload-time = "2025-10-14T15:05:25.45Z" }, + { url = "https://files.pythonhosted.org/packages/c3/f4/0872229324ef69b2c3edec35e84bd57a1289e7d3fe74588048ed8947a323/watchfiles-1.1.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5", size = 404315, upload-time = "2025-10-14T15:05:26.501Z" }, + { url = "https://files.pythonhosted.org/packages/7b/22/16d5331eaed1cb107b873f6ae1b69e9ced582fcf0c59a50cd84f403b1c32/watchfiles-1.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd", size = 390869, upload-time = "2025-10-14T15:05:27.649Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7e/5643bfff5acb6539b18483128fdc0ef2cccc94a5b8fbda130c823e8ed636/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb", size = 449919, upload-time = "2025-10-14T15:05:28.701Z" }, + { url = "https://files.pythonhosted.org/packages/51/2e/c410993ba5025a9f9357c376f48976ef0e1b1aefb73b97a5ae01a5972755/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5", size = 460845, upload-time = "2025-10-14T15:05:30.064Z" }, + { url = "https://files.pythonhosted.org/packages/8e/a4/2df3b404469122e8680f0fcd06079317e48db58a2da2950fb45020947734/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3", size = 489027, upload-time = "2025-10-14T15:05:31.064Z" }, + { url = "https://files.pythonhosted.org/packages/ea/84/4587ba5b1f267167ee715b7f66e6382cca6938e0a4b870adad93e44747e6/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33", size = 595615, upload-time = "2025-10-14T15:05:32.074Z" }, + { url = "https://files.pythonhosted.org/packages/6a/0f/c6988c91d06e93cd0bb3d4a808bcf32375ca1904609835c3031799e3ecae/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510", size = 474836, upload-time = "2025-10-14T15:05:33.209Z" }, + { url = "https://files.pythonhosted.org/packages/b4/36/ded8aebea91919485b7bbabbd14f5f359326cb5ec218cd67074d1e426d74/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05", size = 455099, upload-time = "2025-10-14T15:05:34.189Z" }, + { url = "https://files.pythonhosted.org/packages/98/e0/8c9bdba88af756a2fce230dd365fab2baf927ba42cd47521ee7498fd5211/watchfiles-1.1.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6", size = 630626, upload-time = "2025-10-14T15:05:35.216Z" }, + { url = "https://files.pythonhosted.org/packages/2a/84/a95db05354bf2d19e438520d92a8ca475e578c647f78f53197f5a2f17aaf/watchfiles-1.1.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81", size = 622519, upload-time = "2025-10-14T15:05:36.259Z" }, + { url = "https://files.pythonhosted.org/packages/1d/ce/d8acdc8de545de995c339be67711e474c77d643555a9bb74a9334252bd55/watchfiles-1.1.1-cp314-cp314-win32.whl", hash = "sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b", size = 272078, upload-time = "2025-10-14T15:05:37.63Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c9/a74487f72d0451524be827e8edec251da0cc1fcf111646a511ae752e1a3d/watchfiles-1.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a", size = 287664, upload-time = "2025-10-14T15:05:38.95Z" }, + { url = "https://files.pythonhosted.org/packages/df/b8/8ac000702cdd496cdce998c6f4ee0ca1f15977bba51bdf07d872ebdfc34c/watchfiles-1.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02", size = 277154, upload-time = "2025-10-14T15:05:39.954Z" }, + { url = "https://files.pythonhosted.org/packages/47/a8/e3af2184707c29f0f14b1963c0aace6529f9d1b8582d5b99f31bbf42f59e/watchfiles-1.1.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21", size = 403820, upload-time = "2025-10-14T15:05:40.932Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ec/e47e307c2f4bd75f9f9e8afbe3876679b18e1bcec449beca132a1c5ffb2d/watchfiles-1.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5", size = 390510, upload-time = "2025-10-14T15:05:41.945Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a0/ad235642118090f66e7b2f18fd5c42082418404a79205cdfca50b6309c13/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7", size = 448408, upload-time = "2025-10-14T15:05:43.385Z" }, + { url = "https://files.pythonhosted.org/packages/df/85/97fa10fd5ff3332ae17e7e40e20784e419e28521549780869f1413742e9d/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101", size = 458968, upload-time = "2025-10-14T15:05:44.404Z" }, + { url = "https://files.pythonhosted.org/packages/47/c2/9059c2e8966ea5ce678166617a7f75ecba6164375f3b288e50a40dc6d489/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44", size = 488096, upload-time = "2025-10-14T15:05:45.398Z" }, + { url = "https://files.pythonhosted.org/packages/94/44/d90a9ec8ac309bc26db808a13e7bfc0e4e78b6fc051078a554e132e80160/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c", size = 596040, upload-time = "2025-10-14T15:05:46.502Z" }, + { url = "https://files.pythonhosted.org/packages/95/68/4e3479b20ca305cfc561db3ed207a8a1c745ee32bf24f2026a129d0ddb6e/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc", size = 473847, upload-time = "2025-10-14T15:05:47.484Z" }, + { url = "https://files.pythonhosted.org/packages/4f/55/2af26693fd15165c4ff7857e38330e1b61ab8c37d15dc79118cdba115b7a/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c", size = 455072, upload-time = "2025-10-14T15:05:48.928Z" }, + { url = "https://files.pythonhosted.org/packages/66/1d/d0d200b10c9311ec25d2273f8aad8c3ef7cc7ea11808022501811208a750/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099", size = 629104, upload-time = "2025-10-14T15:05:49.908Z" }, + { url = "https://files.pythonhosted.org/packages/e3/bd/fa9bb053192491b3867ba07d2343d9f2252e00811567d30ae8d0f78136fe/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01", size = 622112, upload-time = "2025-10-14T15:05:50.941Z" }, + { url = "https://files.pythonhosted.org/packages/ba/4c/a888c91e2e326872fa4705095d64acd8aa2fb9c1f7b9bd0588f33850516c/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3", size = 409611, upload-time = "2025-10-14T15:06:05.809Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c7/5420d1943c8e3ce1a21c0a9330bcf7edafb6aa65d26b21dbb3267c9e8112/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2", size = 396889, upload-time = "2025-10-14T15:06:07.035Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e5/0072cef3804ce8d3aaddbfe7788aadff6b3d3f98a286fdbee9fd74ca59a7/watchfiles-1.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d", size = 451616, upload-time = "2025-10-14T15:06:08.072Z" }, + { url = "https://files.pythonhosted.org/packages/83/4e/b87b71cbdfad81ad7e83358b3e447fedd281b880a03d64a760fe0a11fc2e/watchfiles-1.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b", size = 458413, upload-time = "2025-10-14T15:06:09.209Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8e/e500f8b0b77be4ff753ac94dc06b33d8f0d839377fee1b78e8c8d8f031bf/watchfiles-1.1.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88", size = 408250, upload-time = "2025-10-14T15:06:10.264Z" }, + { url = "https://files.pythonhosted.org/packages/bd/95/615e72cd27b85b61eec764a5ca51bd94d40b5adea5ff47567d9ebc4d275a/watchfiles-1.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336", size = 396117, upload-time = "2025-10-14T15:06:11.28Z" }, + { url = "https://files.pythonhosted.org/packages/c9/81/e7fe958ce8a7fb5c73cc9fb07f5aeaf755e6aa72498c57d760af760c91f8/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24", size = 450493, upload-time = "2025-10-14T15:06:12.321Z" }, + { url = "https://files.pythonhosted.org/packages/6e/d4/ed38dd3b1767193de971e694aa544356e63353c33a85d948166b5ff58b9e/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49", size = 457546, upload-time = "2025-10-14T15:06:13.372Z" }, +] + +[[package]] +name = "websocket-client" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576, upload-time = "2025-10-07T21:16:36.495Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, +] + +[[package]] +name = "websockets" +version = "16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size = 179346, upload-time = "2026-01-10T09:23:47.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/74/221f58decd852f4b59cc3354cccaf87e8ef695fede361d03dc9a7396573b/websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a", size = 177343, upload-time = "2026-01-10T09:22:21.28Z" }, + { url = "https://files.pythonhosted.org/packages/19/0f/22ef6107ee52ab7f0b710d55d36f5a5d3ef19e8a205541a6d7ffa7994e5a/websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0", size = 175021, upload-time = "2026-01-10T09:22:22.696Z" }, + { url = "https://files.pythonhosted.org/packages/10/40/904a4cb30d9b61c0e278899bf36342e9b0208eb3c470324a9ecbaac2a30f/websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957", size = 175320, upload-time = "2026-01-10T09:22:23.94Z" }, + { url = "https://files.pythonhosted.org/packages/9d/2f/4b3ca7e106bc608744b1cdae041e005e446124bebb037b18799c2d356864/websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72", size = 183815, upload-time = "2026-01-10T09:22:25.469Z" }, + { url = "https://files.pythonhosted.org/packages/86/26/d40eaa2a46d4302becec8d15b0fc5e45bdde05191e7628405a19cf491ccd/websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde", size = 185054, upload-time = "2026-01-10T09:22:27.101Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ba/6500a0efc94f7373ee8fefa8c271acdfd4dca8bd49a90d4be7ccabfc397e/websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3", size = 184565, upload-time = "2026-01-10T09:22:28.293Z" }, + { url = "https://files.pythonhosted.org/packages/04/b4/96bf2cee7c8d8102389374a2616200574f5f01128d1082f44102140344cc/websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3", size = 183848, upload-time = "2026-01-10T09:22:30.394Z" }, + { url = "https://files.pythonhosted.org/packages/02/8e/81f40fb00fd125357814e8c3025738fc4ffc3da4b6b4a4472a82ba304b41/websockets-16.0-cp310-cp310-win32.whl", hash = "sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9", size = 178249, upload-time = "2026-01-10T09:22:32.083Z" }, + { url = "https://files.pythonhosted.org/packages/b4/5f/7e40efe8df57db9b91c88a43690ac66f7b7aa73a11aa6a66b927e44f26fa/websockets-16.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35", size = 178685, upload-time = "2026-01-10T09:22:33.345Z" }, + { url = "https://files.pythonhosted.org/packages/f2/db/de907251b4ff46ae804ad0409809504153b3f30984daf82a1d84a9875830/websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8", size = 177340, upload-time = "2026-01-10T09:22:34.539Z" }, + { url = "https://files.pythonhosted.org/packages/f3/fa/abe89019d8d8815c8781e90d697dec52523fb8ebe308bf11664e8de1877e/websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad", size = 175022, upload-time = "2026-01-10T09:22:36.332Z" }, + { url = "https://files.pythonhosted.org/packages/58/5d/88ea17ed1ded2079358b40d31d48abe90a73c9e5819dbcde1606e991e2ad/websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d", size = 175319, upload-time = "2026-01-10T09:22:37.602Z" }, + { url = "https://files.pythonhosted.org/packages/d2/ae/0ee92b33087a33632f37a635e11e1d99d429d3d323329675a6022312aac2/websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe", size = 184631, upload-time = "2026-01-10T09:22:38.789Z" }, + { url = "https://files.pythonhosted.org/packages/c8/c5/27178df583b6c5b31b29f526ba2da5e2f864ecc79c99dae630a85d68c304/websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b", size = 185870, upload-time = "2026-01-10T09:22:39.893Z" }, + { url = "https://files.pythonhosted.org/packages/87/05/536652aa84ddc1c018dbb7e2c4cbcd0db884580bf8e95aece7593fde526f/websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5", size = 185361, upload-time = "2026-01-10T09:22:41.016Z" }, + { url = "https://files.pythonhosted.org/packages/6d/e2/d5332c90da12b1e01f06fb1b85c50cfc489783076547415bf9f0a659ec19/websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64", size = 184615, upload-time = "2026-01-10T09:22:42.442Z" }, + { url = "https://files.pythonhosted.org/packages/77/fb/d3f9576691cae9253b51555f841bc6600bf0a983a461c79500ace5a5b364/websockets-16.0-cp311-cp311-win32.whl", hash = "sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6", size = 178246, upload-time = "2026-01-10T09:22:43.654Z" }, + { url = "https://files.pythonhosted.org/packages/54/67/eaff76b3dbaf18dcddabc3b8c1dba50b483761cccff67793897945b37408/websockets-16.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac", size = 178684, upload-time = "2026-01-10T09:22:44.941Z" }, + { url = "https://files.pythonhosted.org/packages/84/7b/bac442e6b96c9d25092695578dda82403c77936104b5682307bd4deb1ad4/websockets-16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00", size = 177365, upload-time = "2026-01-10T09:22:46.787Z" }, + { url = "https://files.pythonhosted.org/packages/b0/fe/136ccece61bd690d9c1f715baaeefd953bb2360134de73519d5df19d29ca/websockets-16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79", size = 175038, upload-time = "2026-01-10T09:22:47.999Z" }, + { url = "https://files.pythonhosted.org/packages/40/1e/9771421ac2286eaab95b8575b0cb701ae3663abf8b5e1f64f1fd90d0a673/websockets-16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39", size = 175328, upload-time = "2026-01-10T09:22:49.809Z" }, + { url = "https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c", size = 184915, upload-time = "2026-01-10T09:22:51.071Z" }, + { url = "https://files.pythonhosted.org/packages/97/bb/21c36b7dbbafc85d2d480cd65df02a1dc93bf76d97147605a8e27ff9409d/websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f", size = 186152, upload-time = "2026-01-10T09:22:52.224Z" }, + { url = "https://files.pythonhosted.org/packages/4a/34/9bf8df0c0cf88fa7bfe36678dc7b02970c9a7d5e065a3099292db87b1be2/websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1", size = 185583, upload-time = "2026-01-10T09:22:53.443Z" }, + { url = "https://files.pythonhosted.org/packages/47/88/4dd516068e1a3d6ab3c7c183288404cd424a9a02d585efbac226cb61ff2d/websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2", size = 184880, upload-time = "2026-01-10T09:22:55.033Z" }, + { url = "https://files.pythonhosted.org/packages/91/d6/7d4553ad4bf1c0421e1ebd4b18de5d9098383b5caa1d937b63df8d04b565/websockets-16.0-cp312-cp312-win32.whl", hash = "sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89", size = 178261, upload-time = "2026-01-10T09:22:56.251Z" }, + { url = "https://files.pythonhosted.org/packages/c3/f0/f3a17365441ed1c27f850a80b2bc680a0fa9505d733fe152fdf5e98c1c0b/websockets-16.0-cp312-cp312-win_amd64.whl", hash = "sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea", size = 178693, upload-time = "2026-01-10T09:22:57.478Z" }, + { url = "https://files.pythonhosted.org/packages/cc/9c/baa8456050d1c1b08dd0ec7346026668cbc6f145ab4e314d707bb845bf0d/websockets-16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9", size = 177364, upload-time = "2026-01-10T09:22:59.333Z" }, + { url = "https://files.pythonhosted.org/packages/7e/0c/8811fc53e9bcff68fe7de2bcbe75116a8d959ac699a3200f4847a8925210/websockets-16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230", size = 175039, upload-time = "2026-01-10T09:23:01.171Z" }, + { url = "https://files.pythonhosted.org/packages/aa/82/39a5f910cb99ec0b59e482971238c845af9220d3ab9fa76dd9162cda9d62/websockets-16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c", size = 175323, upload-time = "2026-01-10T09:23:02.341Z" }, + { url = "https://files.pythonhosted.org/packages/bd/28/0a25ee5342eb5d5f297d992a77e56892ecb65e7854c7898fb7d35e9b33bd/websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5", size = 184975, upload-time = "2026-01-10T09:23:03.756Z" }, + { url = "https://files.pythonhosted.org/packages/f9/66/27ea52741752f5107c2e41fda05e8395a682a1e11c4e592a809a90c6a506/websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82", size = 186203, upload-time = "2026-01-10T09:23:05.01Z" }, + { url = "https://files.pythonhosted.org/packages/37/e5/8e32857371406a757816a2b471939d51c463509be73fa538216ea52b792a/websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8", size = 185653, upload-time = "2026-01-10T09:23:06.301Z" }, + { url = "https://files.pythonhosted.org/packages/9b/67/f926bac29882894669368dc73f4da900fcdf47955d0a0185d60103df5737/websockets-16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f", size = 184920, upload-time = "2026-01-10T09:23:07.492Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a1/3d6ccdcd125b0a42a311bcd15a7f705d688f73b2a22d8cf1c0875d35d34a/websockets-16.0-cp313-cp313-win32.whl", hash = "sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a", size = 178255, upload-time = "2026-01-10T09:23:09.245Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ae/90366304d7c2ce80f9b826096a9e9048b4bb760e44d3b873bb272cba696b/websockets-16.0-cp313-cp313-win_amd64.whl", hash = "sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156", size = 178689, upload-time = "2026-01-10T09:23:10.483Z" }, + { url = "https://files.pythonhosted.org/packages/f3/1d/e88022630271f5bd349ed82417136281931e558d628dd52c4d8621b4a0b2/websockets-16.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0", size = 177406, upload-time = "2026-01-10T09:23:12.178Z" }, + { url = "https://files.pythonhosted.org/packages/f2/78/e63be1bf0724eeb4616efb1ae1c9044f7c3953b7957799abb5915bffd38e/websockets-16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904", size = 175085, upload-time = "2026-01-10T09:23:13.511Z" }, + { url = "https://files.pythonhosted.org/packages/bb/f4/d3c9220d818ee955ae390cf319a7c7a467beceb24f05ee7aaaa2414345ba/websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4", size = 175328, upload-time = "2026-01-10T09:23:14.727Z" }, + { url = "https://files.pythonhosted.org/packages/63/bc/d3e208028de777087e6fb2b122051a6ff7bbcca0d6df9d9c2bf1dd869ae9/websockets-16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e", size = 185044, upload-time = "2026-01-10T09:23:15.939Z" }, + { url = "https://files.pythonhosted.org/packages/ad/6e/9a0927ac24bd33a0a9af834d89e0abc7cfd8e13bed17a86407a66773cc0e/websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4", size = 186279, upload-time = "2026-01-10T09:23:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/b9/ca/bf1c68440d7a868180e11be653c85959502efd3a709323230314fda6e0b3/websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1", size = 185711, upload-time = "2026-01-10T09:23:18.372Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f8/fdc34643a989561f217bb477cbc47a3a07212cbda91c0e4389c43c296ebf/websockets-16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3", size = 184982, upload-time = "2026-01-10T09:23:19.652Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d1/574fa27e233764dbac9c52730d63fcf2823b16f0856b3329fc6268d6ae4f/websockets-16.0-cp314-cp314-win32.whl", hash = "sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8", size = 177915, upload-time = "2026-01-10T09:23:21.458Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f1/ae6b937bf3126b5134ce1f482365fde31a357c784ac51852978768b5eff4/websockets-16.0-cp314-cp314-win_amd64.whl", hash = "sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d", size = 178381, upload-time = "2026-01-10T09:23:22.715Z" }, + { url = "https://files.pythonhosted.org/packages/06/9b/f791d1db48403e1f0a27577a6beb37afae94254a8c6f08be4a23e4930bc0/websockets-16.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244", size = 177737, upload-time = "2026-01-10T09:23:24.523Z" }, + { url = "https://files.pythonhosted.org/packages/bd/40/53ad02341fa33b3ce489023f635367a4ac98b73570102ad2cdd770dacc9a/websockets-16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e", size = 175268, upload-time = "2026-01-10T09:23:25.781Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/6158d4e459b984f949dcbbb0c5d270154c7618e11c01029b9bbd1bb4c4f9/websockets-16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641", size = 175486, upload-time = "2026-01-10T09:23:27.033Z" }, + { url = "https://files.pythonhosted.org/packages/e5/2d/7583b30208b639c8090206f95073646c2c9ffd66f44df967981a64f849ad/websockets-16.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8", size = 185331, upload-time = "2026-01-10T09:23:28.259Z" }, + { url = "https://files.pythonhosted.org/packages/45/b0/cce3784eb519b7b5ad680d14b9673a31ab8dcb7aad8b64d81709d2430aa8/websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e", size = 186501, upload-time = "2026-01-10T09:23:29.449Z" }, + { url = "https://files.pythonhosted.org/packages/19/60/b8ebe4c7e89fb5f6cdf080623c9d92789a53636950f7abacfc33fe2b3135/websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944", size = 186062, upload-time = "2026-01-10T09:23:31.368Z" }, + { url = "https://files.pythonhosted.org/packages/88/a8/a080593f89b0138b6cba1b28f8df5673b5506f72879322288b031337c0b8/websockets-16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206", size = 185356, upload-time = "2026-01-10T09:23:32.627Z" }, + { url = "https://files.pythonhosted.org/packages/c2/b6/b9afed2afadddaf5ebb2afa801abf4b0868f42f8539bfe4b071b5266c9fe/websockets-16.0-cp314-cp314t-win32.whl", hash = "sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6", size = 178085, upload-time = "2026-01-10T09:23:33.816Z" }, + { url = "https://files.pythonhosted.org/packages/9f/3e/28135a24e384493fa804216b79a6a6759a38cc4ff59118787b9fb693df93/websockets-16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd", size = 178531, upload-time = "2026-01-10T09:23:35.016Z" }, + { url = "https://files.pythonhosted.org/packages/72/07/c98a68571dcf256e74f1f816b8cc5eae6eb2d3d5cfa44d37f801619d9166/websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d", size = 174947, upload-time = "2026-01-10T09:23:36.166Z" }, + { url = "https://files.pythonhosted.org/packages/7e/52/93e166a81e0305b33fe416338be92ae863563fe7bce446b0f687b9df5aea/websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03", size = 175260, upload-time = "2026-01-10T09:23:37.409Z" }, + { url = "https://files.pythonhosted.org/packages/56/0c/2dbf513bafd24889d33de2ff0368190a0e69f37bcfa19009ef819fe4d507/websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da", size = 176071, upload-time = "2026-01-10T09:23:39.158Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8f/aea9c71cc92bf9b6cc0f7f70df8f0b420636b6c96ef4feee1e16f80f75dd/websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c", size = 176968, upload-time = "2026-01-10T09:23:41.031Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3f/f70e03f40ffc9a30d817eef7da1be72ee4956ba8d7255c399a01b135902a/websockets-16.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767", size = 178735, upload-time = "2026-01-10T09:23:42.259Z" }, + { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, +] + +[[package]] +name = "wheel" +version = "0.46.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/24/a2eb353a6edac9a0303977c4cb048134959dd2a51b48a269dfc9dde00c8a/wheel-0.46.3.tar.gz", hash = "sha256:e3e79874b07d776c40bd6033f8ddf76a7dad46a7b8aa1b2787a83083519a1803", size = 60605, upload-time = "2026-01-22T12:39:49.136Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl", hash = "sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d", size = 30557, upload-time = "2026-01-22T12:39:48.099Z" }, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, +] + +[[package]] +name = "xformers" +version = "0.0.35" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "torch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/5a/6e27734bd793adc44d0b8d294e67cfacf4ec590572c1aef51d683fc7a791/xformers-0.0.35.tar.gz", hash = "sha256:f7fc183a58e4bf0e2ae339a18fb1b1d4a37854c0f2545b4f360fef001646ab76", size = 4258182, upload-time = "2026-02-20T20:33:05.417Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/85/6d71f9b16f2ac647877e66ed4af723b3fbd477806ab8b8a89d39a362b85f/xformers-0.0.35-py39-none-manylinux_2_28_x86_64.whl", hash = "sha256:ccc73c7db9890224ab05f5fb60e2034f9e6c8672a10be0cf00e95cbbae3eda7c", size = 3264751, upload-time = "2026-02-20T20:33:02.444Z" }, + { url = "https://files.pythonhosted.org/packages/49/0b/88c39c128a05d5b553a67cb9c4c3fc32eefb91f836f838befab9e78f8364/xformers-0.0.35-py39-none-win_amd64.whl", hash = "sha256:57381ce3cbb79b593e6b62cb20a937885345fad2796de2aa6fbb66c033601179", size = 2638618, upload-time = "2026-02-20T20:33:04.104Z" }, +] + +[[package]] +name = "xgrammar" +version = "0.1.33" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pydantic" }, + { name = "torch" }, + { name = "transformers" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/43/e5dfddb1d2a4fccf3e3a88f103e88698cdefc3182f4e169a359ffe1c1794/xgrammar-0.1.33.tar.gz", hash = "sha256:8dbe5fc3d76651ab1fac7a68fc2a118b885fa0ec7189927fb6e0dce0081aea99", size = 2398956, upload-time = "2026-03-27T10:16:36.582Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/ad/ac47eaa00e10877a74171b2290e599bb7b3002ebe89dc58f8e400619c3be/xgrammar-0.1.33-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:6cdb24f917b104cdd3f4f8ec9c8ef79223d2865622e9bf4da8835776c81409d8", size = 22766493, upload-time = "2026-03-27T10:14:32.628Z" }, + { url = "https://files.pythonhosted.org/packages/d1/2a/7eb0a1a94f4634899c4e7d4cf56b1aa7cb37177b31b3d2d5c552baebf7b0/xgrammar-0.1.33-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a38aee7a91f1b062b045e2c3e57279aef9155a84fa898bf9a9ae7820090465ce", size = 22703593, upload-time = "2026-03-27T10:14:35.993Z" }, + { url = "https://files.pythonhosted.org/packages/a3/7f/61485241556663db7cabefd1ffc6039ec42145821c8c8008996b6d96c3aa/xgrammar-0.1.33-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bb61a21f44f0c3bd4884426b2d18479622202e2fd0928b63c10a0168972c502e", size = 42131816, upload-time = "2026-03-27T10:14:39.76Z" }, + { url = "https://files.pythonhosted.org/packages/62/a9/69fbbcde74ac0ccc914e0eb222ac0916688fe291f9f234852dc77912a1bf/xgrammar-0.1.33-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b8aad12a149e3b689b5c4aef8ff529e58e55aee1406bd372c850b504131a8b7", size = 42204408, upload-time = "2026-03-27T10:14:43.692Z" }, + { url = "https://files.pythonhosted.org/packages/63/2a/1ba21492fe956a2a284d037e2035e585c170107cd522e888a865659fb8a2/xgrammar-0.1.33-cp310-cp310-win_amd64.whl", hash = "sha256:19299330f8b04242eaefc37967edd317d044b024c2d509363ba7dd4d483532ab", size = 7222752, upload-time = "2026-03-27T10:14:46.553Z" }, + { url = "https://files.pythonhosted.org/packages/7d/df/695172c6e16e3145ebeffadf7045d1b43d874990da19c7519b01c49ef45a/xgrammar-0.1.33-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:b5f0bbabe128ff5c985b77b4315d25f19a3c7247a0847708a4a484ae6214041a", size = 22766437, upload-time = "2026-03-27T10:14:49.587Z" }, + { url = "https://files.pythonhosted.org/packages/a0/de/14ab62bfa6035d0ad276f10f0795fb957cfafb0e3ebc77e87ef36befc461/xgrammar-0.1.33-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:08c7befefb38c89bf368c26a8e75d00204f03fc303eed61ca570dd3f568d9ead", size = 22703373, upload-time = "2026-03-27T10:14:53.501Z" }, + { url = "https://files.pythonhosted.org/packages/4b/16/f8297e0e3b468636d8e0190002badfe4a6d8d1c2af295fea2d164e7b5a8a/xgrammar-0.1.33-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5f561e676df8c9e941c7a2f6df9612bbf645bf1fc714b4a9282cf75cff532f8", size = 42132308, upload-time = "2026-03-27T10:14:58.545Z" }, + { url = "https://files.pythonhosted.org/packages/12/e0/629b892a3810446097635dd1be7e4d977107c42232efb229d70e5c827227/xgrammar-0.1.33-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3bc9151d9f0d05862c253998c533f04c000273f57180fb6a4e3623e321fd47db", size = 42204526, upload-time = "2026-03-27T10:15:03.299Z" }, + { url = "https://files.pythonhosted.org/packages/29/f5/aee458b54919ef989ca21d4a39721a51b8a3cba37614148b863968ef5c8c/xgrammar-0.1.33-cp311-cp311-win_amd64.whl", hash = "sha256:27f0cf751b9130805c7db745a7abb86f05228d58523d8388b0b970cada6dee0a", size = 7222644, upload-time = "2026-03-27T10:15:06.366Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5f/9a1ebc9505392ff626b9ba8fca54d46bdba454af80551169676ee5cd27d4/xgrammar-0.1.33-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:16d05f8f9df9852f2055e112adf2ce22440062979bc3dc66869a0b7c2f93eb0a", size = 22765695, upload-time = "2026-03-27T10:15:09.38Z" }, + { url = "https://files.pythonhosted.org/packages/82/82/7081feb505873238583a003f790b10ce84d66ab3a8e8e244e8c1c4729d70/xgrammar-0.1.33-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bb9e0ed6748b8e82d4569be4ebc8c9e60694369295c4fed0ebaa4bab4aa4eb4", size = 22702262, upload-time = "2026-03-27T10:15:12.9Z" }, + { url = "https://files.pythonhosted.org/packages/4e/04/43d4baca876f5ae1b45897ec30a59801a2da37f16da1fcd85f9555e4c125/xgrammar-0.1.33-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c803e60d791854c5d1f271ece7e1f34d73c82dd4a8b2a06b7af5331482a78ac", size = 42133168, upload-time = "2026-03-27T10:15:16.994Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a8/672833a3cff027253793aa999401d8364896ebf396967e475c7a878b895f/xgrammar-0.1.33-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52b8eaa533282a0efb0835db6998ae72e7b3c7875d7a52e360ffebff9b78c30a", size = 42205803, upload-time = "2026-03-27T10:15:21.599Z" }, + { url = "https://files.pythonhosted.org/packages/04/38/3fd9f21b101871b4b7f86ee2e15fe6d0cb61a3753f18b391bdee22c74810/xgrammar-0.1.33-cp312-cp312-win_amd64.whl", hash = "sha256:94fea66b41feb28be7e91f95f078986cbc850f42f7adb2d8987634eadf1fb94b", size = 7222161, upload-time = "2026-03-27T10:15:24.636Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b1/cce9f6d12b9de0db8b86401ea739fe79ac555f3da56e47faa5b874d41e42/xgrammar-0.1.33-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e5b46b922fb04fd1848198da5273ddc20f16693fba5871bac1837f1c90f59584", size = 22702353, upload-time = "2026-03-27T10:15:27.203Z" }, + { url = "https://files.pythonhosted.org/packages/6b/55/4d186d4065f645a051be992919c51aaf96cfa8a32f7ecc8512a6e41f969f/xgrammar-0.1.33-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7eec984a20fd54d4c79536d99e2515bac54bd4e1380162fa047f5ff45bdf6d8", size = 42133430, upload-time = "2026-03-27T10:15:31.409Z" }, + { url = "https://files.pythonhosted.org/packages/2b/ca/db765035b3bb1854bdb833c118e0f09dacc623ce5e867466d63610d635fa/xgrammar-0.1.33-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d705f62d91a3675997a81d09aa371c375d7793ce1021aff7b7ed5a92021c7379", size = 42206830, upload-time = "2026-03-27T10:15:35.574Z" }, + { url = "https://files.pythonhosted.org/packages/f5/17/635fc8933b35f24d0749fe177209abb5b526c99a2d098abb71c0e601f356/xgrammar-0.1.33-cp313-cp313-win_amd64.whl", hash = "sha256:2c626de8f503858efa28cab099cbb1719c4926af4250e8dea8efddfa2c6b6c91", size = 7222102, upload-time = "2026-03-27T10:15:38.617Z" }, + { url = "https://files.pythonhosted.org/packages/0e/fd/ec456e86c2d3f1c01addac8123765ee3b77c1aa1c62298f0f0fdf57d5499/xgrammar-0.1.33-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:59b9c3bb8cc0c5c82155cdc4ff0fd9f7b82348346d9e11307d5df2d3cc81eb3b", size = 22765922, upload-time = "2026-03-27T10:15:41.617Z" }, + { url = "https://files.pythonhosted.org/packages/ac/24/8afe2a6dd42f1d1ac2f702c9fdc757e724f4af4c6eae5508e063acfb70a9/xgrammar-0.1.33-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a55912a1d7dcd3d2134617083c28cffe97ba4eaafff39bd41ca28a5ffda66073", size = 22702579, upload-time = "2026-03-27T10:15:45.14Z" }, + { url = "https://files.pythonhosted.org/packages/b0/79/8fbd675aa49b180d0912aeb90fa72dca9bb1f476724f76d3097561cca161/xgrammar-0.1.33-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bba458ffe06b3774be3a24eaf58dc217eec3a781ba41340c2eecf76aa9347aa3", size = 42133038, upload-time = "2026-03-27T10:15:48.98Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c5/64558fd11130624267f788be5d665f898f627b87c6916b523c6e0d4cebf9/xgrammar-0.1.33-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:776a15eaadda463987fba97d8a07b60c262c96353d800fc8639efedb57b7cbbb", size = 42206382, upload-time = "2026-03-27T10:15:53.458Z" }, + { url = "https://files.pythonhosted.org/packages/9c/37/921445f60d8e8cba7caa006d7583e8a059b07e6d7eb5c9dc150c2219415a/xgrammar-0.1.33-cp314-cp314-win_amd64.whl", hash = "sha256:247dec78e11f5c361f7f3f2bc571574c118fc88045bf13fc792b6432fc32bc68", size = 7312992, upload-time = "2026-03-27T10:15:56.274Z" }, + { url = "https://files.pythonhosted.org/packages/a2/31/fb51cd12733e53c3832f6cfadf5f958414102c80c477beb8b233bd4324f4/xgrammar-0.1.33-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:915451b9c86c840e44500782696650ef5535eab87662d748d649f0569d84c322", size = 22768311, upload-time = "2026-03-27T10:15:59.231Z" }, + { url = "https://files.pythonhosted.org/packages/6e/1e/f3de2066ac889a8b4f4589b617364a07a46aea40097c8e0abd62b61f72a4/xgrammar-0.1.33-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c98e2c89bb5efa31e5f3648159dc3477dde51bbf3da8138d6b6fdc49c8fddd44", size = 22705773, upload-time = "2026-03-27T10:16:02.918Z" }, + { url = "https://files.pythonhosted.org/packages/70/fb/523113e066b74428b843e66baed815671faa1dd366a2967b687498aa8cba/xgrammar-0.1.33-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51e52aef50c2d91122a23ce67f7b187fc6caffa620b7412fd3a5eebb00a29377", size = 42134611, upload-time = "2026-03-27T10:16:07.459Z" }, + { url = "https://files.pythonhosted.org/packages/c5/07/6ea6bf8efff3c29c07f594f1e8665dc3ed43abdad86a6a27da9a3ddcbbef/xgrammar-0.1.33-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24cbb91580da8ac6c86de0464339c1ca1899fb0032d604175bdb384c1a13b9b7", size = 42197758, upload-time = "2026-03-27T10:16:12.504Z" }, + { url = "https://files.pythonhosted.org/packages/e3/05/813842e384723c636ad61b6902117dd689d8c04a8d34e0da91b35fbb9f8b/xgrammar-0.1.33-cp314-cp314t-win_amd64.whl", hash = "sha256:ae8877dc35cbdf07b23ce5584e093cca36ed72ad35798d4ce6ed858cd3b19fea", size = 7317563, upload-time = "2026-03-27T10:16:15.774Z" }, +] + +[[package]] +name = "xxhash" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz", hash = "sha256:f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6", size = 85160, upload-time = "2025-10-02T14:37:08.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/ee/f9f1d656ad168681bb0f6b092372c1e533c4416b8069b1896a175c46e484/xxhash-3.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:87ff03d7e35c61435976554477a7f4cd1704c3596a89a8300d5ce7fc83874a71", size = 32845, upload-time = "2025-10-02T14:33:51.573Z" }, + { url = "https://files.pythonhosted.org/packages/a3/b1/93508d9460b292c74a09b83d16750c52a0ead89c51eea9951cb97a60d959/xxhash-3.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f572dfd3d0e2eb1a57511831cf6341242f5a9f8298a45862d085f5b93394a27d", size = 30807, upload-time = "2025-10-02T14:33:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/07/55/28c93a3662f2d200c70704efe74aab9640e824f8ce330d8d3943bf7c9b3c/xxhash-3.6.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:89952ea539566b9fed2bbd94e589672794b4286f342254fad28b149f9615fef8", size = 193786, upload-time = "2025-10-02T14:33:54.272Z" }, + { url = "https://files.pythonhosted.org/packages/c1/96/fec0be9bb4b8f5d9c57d76380a366f31a1781fb802f76fc7cda6c84893c7/xxhash-3.6.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e6f2ffb07a50b52465a1032c3cf1f4a5683f944acaca8a134a2f23674c2058", size = 212830, upload-time = "2025-10-02T14:33:55.706Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a0/c706845ba77b9611f81fd2e93fad9859346b026e8445e76f8c6fd057cc6d/xxhash-3.6.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b5b848ad6c16d308c3ac7ad4ba6bede80ed5df2ba8ed382f8932df63158dd4b2", size = 211606, upload-time = "2025-10-02T14:33:57.133Z" }, + { url = "https://files.pythonhosted.org/packages/67/1e/164126a2999e5045f04a69257eea946c0dc3e86541b400d4385d646b53d7/xxhash-3.6.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a034590a727b44dd8ac5914236a7b8504144447a9682586c3327e935f33ec8cc", size = 444872, upload-time = "2025-10-02T14:33:58.446Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4b/55ab404c56cd70a2cf5ecfe484838865d0fea5627365c6c8ca156bd09c8f/xxhash-3.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a8f1972e75ebdd161d7896743122834fe87378160c20e97f8b09166213bf8cc", size = 193217, upload-time = "2025-10-02T14:33:59.724Z" }, + { url = "https://files.pythonhosted.org/packages/45/e6/52abf06bac316db33aa269091ae7311bd53cfc6f4b120ae77bac1b348091/xxhash-3.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ee34327b187f002a596d7b167ebc59a1b729e963ce645964bbc050d2f1b73d07", size = 210139, upload-time = "2025-10-02T14:34:02.041Z" }, + { url = "https://files.pythonhosted.org/packages/34/37/db94d490b8691236d356bc249c08819cbcef9273a1a30acf1254ff9ce157/xxhash-3.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:339f518c3c7a850dd033ab416ea25a692759dc7478a71131fe8869010d2b75e4", size = 197669, upload-time = "2025-10-02T14:34:03.664Z" }, + { url = "https://files.pythonhosted.org/packages/b7/36/c4f219ef4a17a4f7a64ed3569bc2b5a9c8311abdb22249ac96093625b1a4/xxhash-3.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:bf48889c9630542d4709192578aebbd836177c9f7a4a2778a7d6340107c65f06", size = 210018, upload-time = "2025-10-02T14:34:05.325Z" }, + { url = "https://files.pythonhosted.org/packages/fd/06/bfac889a374fc2fc439a69223d1750eed2e18a7db8514737ab630534fa08/xxhash-3.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:5576b002a56207f640636056b4160a378fe36a58db73ae5c27a7ec8db35f71d4", size = 413058, upload-time = "2025-10-02T14:34:06.925Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d1/555d8447e0dd32ad0930a249a522bb2e289f0d08b6b16204cfa42c1f5a0c/xxhash-3.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af1f3278bd02814d6dedc5dec397993b549d6f16c19379721e5a1d31e132c49b", size = 190628, upload-time = "2025-10-02T14:34:08.669Z" }, + { url = "https://files.pythonhosted.org/packages/d1/15/8751330b5186cedc4ed4b597989882ea05e0408b53fa47bcb46a6125bfc6/xxhash-3.6.0-cp310-cp310-win32.whl", hash = "sha256:aed058764db109dc9052720da65fafe84873b05eb8b07e5e653597951af57c3b", size = 30577, upload-time = "2025-10-02T14:34:10.234Z" }, + { url = "https://files.pythonhosted.org/packages/bb/cc/53f87e8b5871a6eb2ff7e89c48c66093bda2be52315a8161ddc54ea550c4/xxhash-3.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:e82da5670f2d0d98950317f82a0e4a0197150ff19a6df2ba40399c2a3b9ae5fb", size = 31487, upload-time = "2025-10-02T14:34:11.618Z" }, + { url = "https://files.pythonhosted.org/packages/9f/00/60f9ea3bb697667a14314d7269956f58bf56bb73864f8f8d52a3c2535e9a/xxhash-3.6.0-cp310-cp310-win_arm64.whl", hash = "sha256:4a082ffff8c6ac07707fb6b671caf7c6e020c75226c561830b73d862060f281d", size = 27863, upload-time = "2025-10-02T14:34:12.619Z" }, + { url = "https://files.pythonhosted.org/packages/17/d4/cc2f0400e9154df4b9964249da78ebd72f318e35ccc425e9f403c392f22a/xxhash-3.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b47bbd8cf2d72797f3c2772eaaac0ded3d3af26481a26d7d7d41dc2d3c46b04a", size = 32844, upload-time = "2025-10-02T14:34:14.037Z" }, + { url = "https://files.pythonhosted.org/packages/5e/ec/1cc11cd13e26ea8bc3cb4af4eaadd8d46d5014aebb67be3f71fb0b68802a/xxhash-3.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2b6821e94346f96db75abaa6e255706fb06ebd530899ed76d32cd99f20dc52fa", size = 30809, upload-time = "2025-10-02T14:34:15.484Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/19fe357ea348d98ca22f456f75a30ac0916b51c753e1f8b2e0e6fb884cce/xxhash-3.6.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d0a9751f71a1a65ce3584e9cae4467651c7e70c9d31017fa57574583a4540248", size = 194665, upload-time = "2025-10-02T14:34:16.541Z" }, + { url = "https://files.pythonhosted.org/packages/90/3b/d1f1a8f5442a5fd8beedae110c5af7604dc37349a8e16519c13c19a9a2de/xxhash-3.6.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b29ee68625ab37b04c0b40c3fafdf24d2f75ccd778333cfb698f65f6c463f62", size = 213550, upload-time = "2025-10-02T14:34:17.878Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ef/3a9b05eb527457d5db13a135a2ae1a26c80fecd624d20f3e8dcc4cb170f3/xxhash-3.6.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6812c25fe0d6c36a46ccb002f40f27ac903bf18af9f6dd8f9669cb4d176ab18f", size = 212384, upload-time = "2025-10-02T14:34:19.182Z" }, + { url = "https://files.pythonhosted.org/packages/0f/18/ccc194ee698c6c623acbf0f8c2969811a8a4b6185af5e824cd27b9e4fd3e/xxhash-3.6.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4ccbff013972390b51a18ef1255ef5ac125c92dc9143b2d1909f59abc765540e", size = 445749, upload-time = "2025-10-02T14:34:20.659Z" }, + { url = "https://files.pythonhosted.org/packages/a5/86/cf2c0321dc3940a7aa73076f4fd677a0fb3e405cb297ead7d864fd90847e/xxhash-3.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:297b7fbf86c82c550e12e8fb71968b3f033d27b874276ba3624ea868c11165a8", size = 193880, upload-time = "2025-10-02T14:34:22.431Z" }, + { url = "https://files.pythonhosted.org/packages/82/fb/96213c8560e6f948a1ecc9a7613f8032b19ee45f747f4fca4eb31bb6d6ed/xxhash-3.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dea26ae1eb293db089798d3973a5fc928a18fdd97cc8801226fae705b02b14b0", size = 210912, upload-time = "2025-10-02T14:34:23.937Z" }, + { url = "https://files.pythonhosted.org/packages/40/aa/4395e669b0606a096d6788f40dbdf2b819d6773aa290c19e6e83cbfc312f/xxhash-3.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7a0b169aafb98f4284f73635a8e93f0735f9cbde17bd5ec332480484241aaa77", size = 198654, upload-time = "2025-10-02T14:34:25.644Z" }, + { url = "https://files.pythonhosted.org/packages/67/74/b044fcd6b3d89e9b1b665924d85d3f400636c23590226feb1eb09e1176ce/xxhash-3.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:08d45aef063a4531b785cd72de4887766d01dc8f362a515693df349fdb825e0c", size = 210867, upload-time = "2025-10-02T14:34:27.203Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fd/3ce73bf753b08cb19daee1eb14aa0d7fe331f8da9c02dd95316ddfe5275e/xxhash-3.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:929142361a48ee07f09121fe9e96a84950e8d4df3bb298ca5d88061969f34d7b", size = 414012, upload-time = "2025-10-02T14:34:28.409Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b3/5a4241309217c5c876f156b10778f3ab3af7ba7e3259e6d5f5c7d0129eb2/xxhash-3.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:51312c768403d8540487dbbfb557454cfc55589bbde6424456951f7fcd4facb3", size = 191409, upload-time = "2025-10-02T14:34:29.696Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/99bfbc15fb9abb9a72b088c1d95219fc4782b7d01fc835bd5744d66dd0b8/xxhash-3.6.0-cp311-cp311-win32.whl", hash = "sha256:d1927a69feddc24c987b337ce81ac15c4720955b667fe9b588e02254b80446fd", size = 30574, upload-time = "2025-10-02T14:34:31.028Z" }, + { url = "https://files.pythonhosted.org/packages/65/79/9d24d7f53819fe301b231044ea362ce64e86c74f6e8c8e51320de248b3e5/xxhash-3.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:26734cdc2d4ffe449b41d186bbeac416f704a482ed835d375a5c0cb02bc63fef", size = 31481, upload-time = "2025-10-02T14:34:32.062Z" }, + { url = "https://files.pythonhosted.org/packages/30/4e/15cd0e3e8772071344eab2961ce83f6e485111fed8beb491a3f1ce100270/xxhash-3.6.0-cp311-cp311-win_arm64.whl", hash = "sha256:d72f67ef8bf36e05f5b6c65e8524f265bd61071471cd4cf1d36743ebeeeb06b7", size = 27861, upload-time = "2025-10-02T14:34:33.555Z" }, + { url = "https://files.pythonhosted.org/packages/9a/07/d9412f3d7d462347e4511181dea65e47e0d0e16e26fbee2ea86a2aefb657/xxhash-3.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:01362c4331775398e7bb34e3ab403bc9ee9f7c497bc7dee6272114055277dd3c", size = 32744, upload-time = "2025-10-02T14:34:34.622Z" }, + { url = "https://files.pythonhosted.org/packages/79/35/0429ee11d035fc33abe32dca1b2b69e8c18d236547b9a9b72c1929189b9a/xxhash-3.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b7b2df81a23f8cb99656378e72501b2cb41b1827c0f5a86f87d6b06b69f9f204", size = 30816, upload-time = "2025-10-02T14:34:36.043Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f2/57eb99aa0f7d98624c0932c5b9a170e1806406cdbcdb510546634a1359e0/xxhash-3.6.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:dc94790144e66b14f67b10ac8ed75b39ca47536bf8800eb7c24b50271ea0c490", size = 194035, upload-time = "2025-10-02T14:34:37.354Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ed/6224ba353690d73af7a3f1c7cdb1fc1b002e38f783cb991ae338e1eb3d79/xxhash-3.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93f107c673bccf0d592cdba077dedaf52fe7f42dcd7676eba1f6d6f0c3efffd2", size = 212914, upload-time = "2025-10-02T14:34:38.6Z" }, + { url = "https://files.pythonhosted.org/packages/38/86/fb6b6130d8dd6b8942cc17ab4d90e223653a89aa32ad2776f8af7064ed13/xxhash-3.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aa5ee3444c25b69813663c9f8067dcfaa2e126dc55e8dddf40f4d1c25d7effa", size = 212163, upload-time = "2025-10-02T14:34:39.872Z" }, + { url = "https://files.pythonhosted.org/packages/ee/dc/e84875682b0593e884ad73b2d40767b5790d417bde603cceb6878901d647/xxhash-3.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7f99123f0e1194fa59cc69ad46dbae2e07becec5df50a0509a808f90a0f03f0", size = 445411, upload-time = "2025-10-02T14:34:41.569Z" }, + { url = "https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49e03e6fe2cac4a1bc64952dd250cf0dbc5ef4ebb7b8d96bce82e2de163c82a2", size = 193883, upload-time = "2025-10-02T14:34:43.249Z" }, + { url = "https://files.pythonhosted.org/packages/53/5a/ddbb83eee8e28b778eacfc5a85c969673e4023cdeedcfcef61f36731610b/xxhash-3.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bd17fede52a17a4f9a7bc4472a5867cb0b160deeb431795c0e4abe158bc784e9", size = 210392, upload-time = "2025-10-02T14:34:45.042Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c2/ff69efd07c8c074ccdf0a4f36fcdd3d27363665bcdf4ba399abebe643465/xxhash-3.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6fb5f5476bef678f69db04f2bd1efbed3030d2aba305b0fc1773645f187d6a4e", size = 197898, upload-time = "2025-10-02T14:34:46.302Z" }, + { url = "https://files.pythonhosted.org/packages/58/ca/faa05ac19b3b622c7c9317ac3e23954187516298a091eb02c976d0d3dd45/xxhash-3.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:843b52f6d88071f87eba1631b684fcb4b2068cd2180a0224122fe4ef011a9374", size = 210655, upload-time = "2025-10-02T14:34:47.571Z" }, + { url = "https://files.pythonhosted.org/packages/d4/7a/06aa7482345480cc0cb597f5c875b11a82c3953f534394f620b0be2f700c/xxhash-3.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7d14a6cfaf03b1b6f5f9790f76880601ccc7896aff7ab9cd8978a939c1eb7e0d", size = 414001, upload-time = "2025-10-02T14:34:49.273Z" }, + { url = "https://files.pythonhosted.org/packages/23/07/63ffb386cd47029aa2916b3d2f454e6cc5b9f5c5ada3790377d5430084e7/xxhash-3.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:418daf3db71e1413cfe211c2f9a528456936645c17f46b5204705581a45390ae", size = 191431, upload-time = "2025-10-02T14:34:50.798Z" }, + { url = "https://files.pythonhosted.org/packages/0f/93/14fde614cadb4ddf5e7cebf8918b7e8fac5ae7861c1875964f17e678205c/xxhash-3.6.0-cp312-cp312-win32.whl", hash = "sha256:50fc255f39428a27299c20e280d6193d8b63b8ef8028995323bf834a026b4fbb", size = 30617, upload-time = "2025-10-02T14:34:51.954Z" }, + { url = "https://files.pythonhosted.org/packages/13/5d/0d125536cbe7565a83d06e43783389ecae0c0f2ed037b48ede185de477c0/xxhash-3.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:c0f2ab8c715630565ab8991b536ecded9416d615538be8ecddce43ccf26cbc7c", size = 31534, upload-time = "2025-10-02T14:34:53.276Z" }, + { url = "https://files.pythonhosted.org/packages/54/85/6ec269b0952ec7e36ba019125982cf11d91256a778c7c3f98a4c5043d283/xxhash-3.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:eae5c13f3bc455a3bbb68bdc513912dc7356de7e2280363ea235f71f54064829", size = 27876, upload-time = "2025-10-02T14:34:54.371Z" }, + { url = "https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:599e64ba7f67472481ceb6ee80fa3bd828fd61ba59fb11475572cc5ee52b89ec", size = 32738, upload-time = "2025-10-02T14:34:55.839Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/3fbce1cd96534a95e35d5120637bf29b0d7f5d8fa2f6374e31b4156dd419/xxhash-3.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d8b8aaa30fca4f16f0c84a5c8d7ddee0e25250ec2796c973775373257dde8f1", size = 30821, upload-time = "2025-10-02T14:34:57.219Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ea/d387530ca7ecfa183cb358027f1833297c6ac6098223fd14f9782cd0015c/xxhash-3.6.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d597acf8506d6e7101a4a44a5e428977a51c0fadbbfd3c39650cca9253f6e5a6", size = 194127, upload-time = "2025-10-02T14:34:59.21Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0c/71435dcb99874b09a43b8d7c54071e600a7481e42b3e3ce1eb5226a5711a/xxhash-3.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:858dc935963a33bc33490128edc1c12b0c14d9c7ebaa4e387a7869ecc4f3e263", size = 212975, upload-time = "2025-10-02T14:35:00.816Z" }, + { url = "https://files.pythonhosted.org/packages/84/7a/c2b3d071e4bb4a90b7057228a99b10d51744878f4a8a6dd643c8bd897620/xxhash-3.6.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba284920194615cb8edf73bf52236ce2e1664ccd4a38fdb543506413529cc546", size = 212241, upload-time = "2025-10-02T14:35:02.207Z" }, + { url = "https://files.pythonhosted.org/packages/81/5f/640b6eac0128e215f177df99eadcd0f1b7c42c274ab6a394a05059694c5a/xxhash-3.6.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b54219177f6c6674d5378bd862c6aedf64725f70dd29c472eaae154df1a2e89", size = 445471, upload-time = "2025-10-02T14:35:03.61Z" }, + { url = "https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42c36dd7dbad2f5238950c377fcbf6811b1cdb1c444fab447960030cea60504d", size = 193936, upload-time = "2025-10-02T14:35:05.013Z" }, + { url = "https://files.pythonhosted.org/packages/2c/bd/4a5f68381939219abfe1c22a9e3a5854a4f6f6f3c4983a87d255f21f2e5d/xxhash-3.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f22927652cba98c44639ffdc7aaf35828dccf679b10b31c4ad72a5b530a18eb7", size = 210440, upload-time = "2025-10-02T14:35:06.239Z" }, + { url = "https://files.pythonhosted.org/packages/eb/37/b80fe3d5cfb9faff01a02121a0f4d565eb7237e9e5fc66e73017e74dcd36/xxhash-3.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b45fad44d9c5c119e9c6fbf2e1c656a46dc68e280275007bbfd3d572b21426db", size = 197990, upload-time = "2025-10-02T14:35:07.735Z" }, + { url = "https://files.pythonhosted.org/packages/d7/fd/2c0a00c97b9e18f72e1f240ad4e8f8a90fd9d408289ba9c7c495ed7dc05c/xxhash-3.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6f2580ffab1a8b68ef2b901cde7e55fa8da5e4be0977c68f78fc80f3c143de42", size = 210689, upload-time = "2025-10-02T14:35:09.438Z" }, + { url = "https://files.pythonhosted.org/packages/93/86/5dd8076a926b9a95db3206aba20d89a7fc14dd5aac16e5c4de4b56033140/xxhash-3.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40c391dd3cd041ebc3ffe6f2c862f402e306eb571422e0aa918d8070ba31da11", size = 414068, upload-time = "2025-10-02T14:35:11.162Z" }, + { url = "https://files.pythonhosted.org/packages/af/3c/0bb129170ee8f3650f08e993baee550a09593462a5cddd8e44d0011102b1/xxhash-3.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f205badabde7aafd1a31e8ca2a3e5a763107a71c397c4481d6a804eb5063d8bd", size = 191495, upload-time = "2025-10-02T14:35:12.971Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3a/6797e0114c21d1725e2577508e24006fd7ff1d8c0c502d3b52e45c1771d8/xxhash-3.6.0-cp313-cp313-win32.whl", hash = "sha256:2577b276e060b73b73a53042ea5bd5203d3e6347ce0d09f98500f418a9fcf799", size = 30620, upload-time = "2025-10-02T14:35:14.129Z" }, + { url = "https://files.pythonhosted.org/packages/86/15/9bc32671e9a38b413a76d24722a2bf8784a132c043063a8f5152d390b0f9/xxhash-3.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:757320d45d2fbcce8f30c42a6b2f47862967aea7bf458b9625b4bbe7ee390392", size = 31542, upload-time = "2025-10-02T14:35:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/39/c5/cc01e4f6188656e56112d6a8e0dfe298a16934b8c47a247236549a3f7695/xxhash-3.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:457b8f85dec5825eed7b69c11ae86834a018b8e3df5e77783c999663da2f96d6", size = 27880, upload-time = "2025-10-02T14:35:16.315Z" }, + { url = "https://files.pythonhosted.org/packages/f3/30/25e5321c8732759e930c555176d37e24ab84365482d257c3b16362235212/xxhash-3.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a42e633d75cdad6d625434e3468126c73f13f7584545a9cf34e883aa1710e702", size = 32956, upload-time = "2025-10-02T14:35:17.413Z" }, + { url = "https://files.pythonhosted.org/packages/9f/3c/0573299560d7d9f8ab1838f1efc021a280b5ae5ae2e849034ef3dee18810/xxhash-3.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:568a6d743219e717b07b4e03b0a828ce593833e498c3b64752e0f5df6bfe84db", size = 31072, upload-time = "2025-10-02T14:35:18.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1c/52d83a06e417cd9d4137722693424885cc9878249beb3a7c829e74bf7ce9/xxhash-3.6.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bec91b562d8012dae276af8025a55811b875baace6af510412a5e58e3121bc54", size = 196409, upload-time = "2025-10-02T14:35:20.31Z" }, + { url = "https://files.pythonhosted.org/packages/e3/8e/c6d158d12a79bbd0b878f8355432075fc82759e356ab5a111463422a239b/xxhash-3.6.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78e7f2f4c521c30ad5e786fdd6bae89d47a32672a80195467b5de0480aa97b1f", size = 215736, upload-time = "2025-10-02T14:35:21.616Z" }, + { url = "https://files.pythonhosted.org/packages/bc/68/c4c80614716345d55071a396cf03d06e34b5f4917a467faf43083c995155/xxhash-3.6.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3ed0df1b11a79856df5ffcab572cbd6b9627034c1c748c5566fa79df9048a7c5", size = 214833, upload-time = "2025-10-02T14:35:23.32Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e9/ae27c8ffec8b953efa84c7c4a6c6802c263d587b9fc0d6e7cea64e08c3af/xxhash-3.6.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0e4edbfc7d420925b0dd5e792478ed393d6e75ff8fc219a6546fb446b6a417b1", size = 448348, upload-time = "2025-10-02T14:35:25.111Z" }, + { url = "https://files.pythonhosted.org/packages/d7/6b/33e21afb1b5b3f46b74b6bd1913639066af218d704cc0941404ca717fc57/xxhash-3.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fba27a198363a7ef87f8c0f6b171ec36b674fe9053742c58dd7e3201c1ab30ee", size = 196070, upload-time = "2025-10-02T14:35:26.586Z" }, + { url = "https://files.pythonhosted.org/packages/96/b6/fcabd337bc5fa624e7203aa0fa7d0c49eed22f72e93229431752bddc83d9/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:794fe9145fe60191c6532fa95063765529770edcdd67b3d537793e8004cabbfd", size = 212907, upload-time = "2025-10-02T14:35:28.087Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d3/9ee6160e644d660fcf176c5825e61411c7f62648728f69c79ba237250143/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6105ef7e62b5ac73a837778efc331a591d8442f8ef5c7e102376506cb4ae2729", size = 200839, upload-time = "2025-10-02T14:35:29.857Z" }, + { url = "https://files.pythonhosted.org/packages/0d/98/e8de5baa5109394baf5118f5e72ab21a86387c4f89b0e77ef3e2f6b0327b/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f01375c0e55395b814a679b3eea205db7919ac2af213f4a6682e01220e5fe292", size = 213304, upload-time = "2025-10-02T14:35:31.222Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1d/71056535dec5c3177eeb53e38e3d367dd1d16e024e63b1cee208d572a033/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d706dca2d24d834a4661619dcacf51a75c16d65985718d6a7d73c1eeeb903ddf", size = 416930, upload-time = "2025-10-02T14:35:32.517Z" }, + { url = "https://files.pythonhosted.org/packages/dc/6c/5cbde9de2cd967c322e651c65c543700b19e7ae3e0aae8ece3469bf9683d/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f059d9faeacd49c0215d66f4056e1326c80503f51a1532ca336a385edadd033", size = 193787, upload-time = "2025-10-02T14:35:33.827Z" }, + { url = "https://files.pythonhosted.org/packages/19/fa/0172e350361d61febcea941b0cc541d6e6c8d65d153e85f850a7b256ff8a/xxhash-3.6.0-cp313-cp313t-win32.whl", hash = "sha256:1244460adc3a9be84731d72b8e80625788e5815b68da3da8b83f78115a40a7ec", size = 30916, upload-time = "2025-10-02T14:35:35.107Z" }, + { url = "https://files.pythonhosted.org/packages/ad/e6/e8cf858a2b19d6d45820f072eff1bea413910592ff17157cabc5f1227a16/xxhash-3.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b1e420ef35c503869c4064f4a2f2b08ad6431ab7b229a05cce39d74268bca6b8", size = 31799, upload-time = "2025-10-02T14:35:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/56/15/064b197e855bfb7b343210e82490ae672f8bc7cdf3ddb02e92f64304ee8a/xxhash-3.6.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ec44b73a4220623235f67a996c862049f375df3b1052d9899f40a6382c32d746", size = 28044, upload-time = "2025-10-02T14:35:37.195Z" }, + { url = "https://files.pythonhosted.org/packages/7e/5e/0138bc4484ea9b897864d59fce9be9086030825bc778b76cb5a33a906d37/xxhash-3.6.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a40a3d35b204b7cc7643cbcf8c9976d818cb47befcfac8bbefec8038ac363f3e", size = 32754, upload-time = "2025-10-02T14:35:38.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/d7/5dac2eb2ec75fd771957a13e5dda560efb2176d5203f39502a5fc571f899/xxhash-3.6.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a54844be970d3fc22630b32d515e79a90d0a3ddb2644d8d7402e3c4c8da61405", size = 30846, upload-time = "2025-10-02T14:35:39.6Z" }, + { url = "https://files.pythonhosted.org/packages/fe/71/8bc5be2bb00deb5682e92e8da955ebe5fa982da13a69da5a40a4c8db12fb/xxhash-3.6.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:016e9190af8f0a4e3741343777710e3d5717427f175adfdc3e72508f59e2a7f3", size = 194343, upload-time = "2025-10-02T14:35:40.69Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/52badfb2aecec2c377ddf1ae75f55db3ba2d321c5e164f14461c90837ef3/xxhash-3.6.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f6f72232f849eb9d0141e2ebe2677ece15adfd0fa599bc058aad83c714bb2c6", size = 213074, upload-time = "2025-10-02T14:35:42.29Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2b/ae46b4e9b92e537fa30d03dbc19cdae57ed407e9c26d163895e968e3de85/xxhash-3.6.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:63275a8aba7865e44b1813d2177e0f5ea7eadad3dd063a21f7cf9afdc7054063", size = 212388, upload-time = "2025-10-02T14:35:43.929Z" }, + { url = "https://files.pythonhosted.org/packages/f5/80/49f88d3afc724b4ac7fbd664c8452d6db51b49915be48c6982659e0e7942/xxhash-3.6.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cd01fa2aa00d8b017c97eb46b9a794fbdca53fc14f845f5a328c71254b0abb7", size = 445614, upload-time = "2025-10-02T14:35:45.216Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ba/603ce3961e339413543d8cd44f21f2c80e2a7c5cfe692a7b1f2cccf58f3c/xxhash-3.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0226aa89035b62b6a86d3c68df4d7c1f47a342b8683da2b60cedcddb46c4d95b", size = 194024, upload-time = "2025-10-02T14:35:46.959Z" }, + { url = "https://files.pythonhosted.org/packages/78/d1/8e225ff7113bf81545cfdcd79eef124a7b7064a0bba53605ff39590b95c2/xxhash-3.6.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c6e193e9f56e4ca4923c61238cdaced324f0feac782544eb4c6d55ad5cc99ddd", size = 210541, upload-time = "2025-10-02T14:35:48.301Z" }, + { url = "https://files.pythonhosted.org/packages/6f/58/0f89d149f0bad89def1a8dd38feb50ccdeb643d9797ec84707091d4cb494/xxhash-3.6.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9176dcaddf4ca963d4deb93866d739a343c01c969231dbe21680e13a5d1a5bf0", size = 198305, upload-time = "2025-10-02T14:35:49.584Z" }, + { url = "https://files.pythonhosted.org/packages/11/38/5eab81580703c4df93feb5f32ff8fa7fe1e2c51c1f183ee4e48d4bb9d3d7/xxhash-3.6.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c1ce4009c97a752e682b897aa99aef84191077a9433eb237774689f14f8ec152", size = 210848, upload-time = "2025-10-02T14:35:50.877Z" }, + { url = "https://files.pythonhosted.org/packages/5e/6b/953dc4b05c3ce678abca756416e4c130d2382f877a9c30a20d08ee6a77c0/xxhash-3.6.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:8cb2f4f679b01513b7adbb9b1b2f0f9cdc31b70007eaf9d59d0878809f385b11", size = 414142, upload-time = "2025-10-02T14:35:52.15Z" }, + { url = "https://files.pythonhosted.org/packages/08/a9/238ec0d4e81a10eb5026d4a6972677cbc898ba6c8b9dbaec12ae001b1b35/xxhash-3.6.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:653a91d7c2ab54a92c19ccf43508b6a555440b9be1bc8be553376778be7f20b5", size = 191547, upload-time = "2025-10-02T14:35:53.547Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ee/3cf8589e06c2164ac77c3bf0aa127012801128f1feebf2a079272da5737c/xxhash-3.6.0-cp314-cp314-win32.whl", hash = "sha256:a756fe893389483ee8c394d06b5ab765d96e68fbbfe6fde7aa17e11f5720559f", size = 31214, upload-time = "2025-10-02T14:35:54.746Z" }, + { url = "https://files.pythonhosted.org/packages/02/5d/a19552fbc6ad4cb54ff953c3908bbc095f4a921bc569433d791f755186f1/xxhash-3.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:39be8e4e142550ef69629c9cd71b88c90e9a5db703fecbcf265546d9536ca4ad", size = 32290, upload-time = "2025-10-02T14:35:55.791Z" }, + { url = "https://files.pythonhosted.org/packages/b1/11/dafa0643bc30442c887b55baf8e73353a344ee89c1901b5a5c54a6c17d39/xxhash-3.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:25915e6000338999236f1eb68a02a32c3275ac338628a7eaa5a269c401995679", size = 28795, upload-time = "2025-10-02T14:35:57.162Z" }, + { url = "https://files.pythonhosted.org/packages/2c/db/0e99732ed7f64182aef4a6fb145e1a295558deec2a746265dcdec12d191e/xxhash-3.6.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c5294f596a9017ca5a3e3f8884c00b91ab2ad2933cf288f4923c3fd4346cf3d4", size = 32955, upload-time = "2025-10-02T14:35:58.267Z" }, + { url = "https://files.pythonhosted.org/packages/55/f4/2a7c3c68e564a099becfa44bb3d398810cc0ff6749b0d3cb8ccb93f23c14/xxhash-3.6.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1cf9dcc4ab9cff01dfbba78544297a3a01dafd60f3bde4e2bfd016cf7e4ddc67", size = 31072, upload-time = "2025-10-02T14:35:59.382Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d9/72a29cddc7250e8a5819dad5d466facb5dc4c802ce120645630149127e73/xxhash-3.6.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:01262da8798422d0685f7cef03b2bd3f4f46511b02830861df548d7def4402ad", size = 196579, upload-time = "2025-10-02T14:36:00.838Z" }, + { url = "https://files.pythonhosted.org/packages/63/93/b21590e1e381040e2ca305a884d89e1c345b347404f7780f07f2cdd47ef4/xxhash-3.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51a73fb7cb3a3ead9f7a8b583ffd9b8038e277cdb8cb87cf890e88b3456afa0b", size = 215854, upload-time = "2025-10-02T14:36:02.207Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b8/edab8a7d4fa14e924b29be877d54155dcbd8b80be85ea00d2be3413a9ed4/xxhash-3.6.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b9c6df83594f7df8f7f708ce5ebeacfc69f72c9fbaaababf6cf4758eaada0c9b", size = 214965, upload-time = "2025-10-02T14:36:03.507Z" }, + { url = "https://files.pythonhosted.org/packages/27/67/dfa980ac7f0d509d54ea0d5a486d2bb4b80c3f1bb22b66e6a05d3efaf6c0/xxhash-3.6.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:627f0af069b0ea56f312fd5189001c24578868643203bca1abbc2c52d3a6f3ca", size = 448484, upload-time = "2025-10-02T14:36:04.828Z" }, + { url = "https://files.pythonhosted.org/packages/8c/63/8ffc2cc97e811c0ca5d00ab36604b3ea6f4254f20b7bc658ca825ce6c954/xxhash-3.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa912c62f842dfd013c5f21a642c9c10cd9f4c4e943e0af83618b4a404d9091a", size = 196162, upload-time = "2025-10-02T14:36:06.182Z" }, + { url = "https://files.pythonhosted.org/packages/4b/77/07f0e7a3edd11a6097e990f6e5b815b6592459cb16dae990d967693e6ea9/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b465afd7909db30168ab62afe40b2fcf79eedc0b89a6c0ab3123515dc0df8b99", size = 213007, upload-time = "2025-10-02T14:36:07.733Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d8/bc5fa0d152837117eb0bef6f83f956c509332ce133c91c63ce07ee7c4873/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a881851cf38b0a70e7c4d3ce81fc7afd86fbc2a024f4cfb2a97cf49ce04b75d3", size = 200956, upload-time = "2025-10-02T14:36:09.106Z" }, + { url = "https://files.pythonhosted.org/packages/26/a5/d749334130de9411783873e9b98ecc46688dad5db64ca6e04b02acc8b473/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9b3222c686a919a0f3253cfc12bb118b8b103506612253b5baeaac10d8027cf6", size = 213401, upload-time = "2025-10-02T14:36:10.585Z" }, + { url = "https://files.pythonhosted.org/packages/89/72/abed959c956a4bfc72b58c0384bb7940663c678127538634d896b1195c10/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:c5aa639bc113e9286137cec8fadc20e9cd732b2cc385c0b7fa673b84fc1f2a93", size = 417083, upload-time = "2025-10-02T14:36:12.276Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b3/62fd2b586283b7d7d665fb98e266decadf31f058f1cf6c478741f68af0cb/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5c1343d49ac102799905e115aee590183c3921d475356cb24b4de29a4bc56518", size = 193913, upload-time = "2025-10-02T14:36:14.025Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/c19c42c5b3f5a4aad748a6d5b4f23df3bed7ee5445accc65a0fb3ff03953/xxhash-3.6.0-cp314-cp314t-win32.whl", hash = "sha256:5851f033c3030dd95c086b4a36a2683c2ff4a799b23af60977188b057e467119", size = 31586, upload-time = "2025-10-02T14:36:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/4cc450345be9924fd5dc8c590ceda1db5b43a0a889587b0ae81a95511360/xxhash-3.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0444e7967dac37569052d2409b00a8860c2135cff05502df4da80267d384849f", size = 32526, upload-time = "2025-10-02T14:36:16.708Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c9/7243eb3f9eaabd1a88a5a5acadf06df2d83b100c62684b7425c6a11bcaa8/xxhash-3.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:bb79b1e63f6fd84ec778a4b1916dfe0a7c3fdb986c06addd5db3a0d413819d95", size = 28898, upload-time = "2025-10-02T14:36:17.843Z" }, + { url = "https://files.pythonhosted.org/packages/93/1e/8aec23647a34a249f62e2398c42955acd9b4c6ed5cf08cbea94dc46f78d2/xxhash-3.6.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0f7b7e2ec26c1666ad5fc9dbfa426a6a3367ceaf79db5dd76264659d509d73b0", size = 30662, upload-time = "2025-10-02T14:37:01.743Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/b14510b38ba91caf43006209db846a696ceea6a847a0c9ba0a5b1adc53d6/xxhash-3.6.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5dc1e14d14fa0f5789ec29a7062004b5933964bb9b02aae6622b8f530dc40296", size = 41056, upload-time = "2025-10-02T14:37:02.879Z" }, + { url = "https://files.pythonhosted.org/packages/50/55/15a7b8a56590e66ccd374bbfa3f9ffc45b810886c8c3b614e3f90bd2367c/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:881b47fc47e051b37d94d13e7455131054b56749b91b508b0907eb07900d1c13", size = 36251, upload-time = "2025-10-02T14:37:04.44Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/5ac99a041a29e58e95f907876b04f7067a0242cb85b5f39e726153981503/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6dc31591899f5e5666f04cc2e529e69b4072827085c1ef15294d91a004bc1bd", size = 32481, upload-time = "2025-10-02T14:37:05.869Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d9/8d95e906764a386a3d3b596f3c68bb63687dfca806373509f51ce8eea81f/xxhash-3.6.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:15e0dac10eb9309508bfc41f7f9deaa7755c69e35af835db9cb10751adebc35d", size = 31565, upload-time = "2025-10-02T14:37:06.966Z" }, +] + +[[package]] +name = "yarl" +version = "1.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/23/6e/beb1beec874a72f23815c1434518bfc4ed2175065173fb138c3705f658d4/yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5", size = 194676, upload-time = "2026-03-01T22:07:53.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/0d/9cc638702f6fc3c7a3685bcc8cf2a9ed7d6206e932a49f5242658047ef51/yarl-1.23.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cff6d44cb13d39db2663a22b22305d10855efa0fa8015ddeacc40bc59b9d8107", size = 123764, upload-time = "2026-03-01T22:04:09.7Z" }, + { url = "https://files.pythonhosted.org/packages/7a/35/5a553687c5793df5429cd1db45909d4f3af7eee90014888c208d086a44f0/yarl-1.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c53f8347cd4200f0d70a48ad059cabaf24f5adc6ba08622a23423bc7efa10d", size = 86282, upload-time = "2026-03-01T22:04:11.892Z" }, + { url = "https://files.pythonhosted.org/packages/68/2e/c5a2234238f8ce37a8312b52801ee74117f576b1539eec8404a480434acc/yarl-1.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a6940a074fb3c48356ed0158a3ca5699c955ee4185b4d7d619be3c327143e05", size = 86053, upload-time = "2026-03-01T22:04:13.292Z" }, + { url = "https://files.pythonhosted.org/packages/74/3f/bbd8ff36fb038622797ffbaf7db314918bb4d76f1cc8a4f9ca7a55fe5195/yarl-1.23.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed5f69ce7be7902e5c70ea19eb72d20abf7d725ab5d49777d696e32d4fc1811d", size = 99395, upload-time = "2026-03-01T22:04:15.133Z" }, + { url = "https://files.pythonhosted.org/packages/77/04/9516bc4e269d2a3ec9c6779fcdeac51ce5b3a9b0156f06ac7152e5bba864/yarl-1.23.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:389871e65468400d6283c0308e791a640b5ab5c83bcee02a2f51295f95e09748", size = 92143, upload-time = "2026-03-01T22:04:16.829Z" }, + { url = "https://files.pythonhosted.org/packages/c7/63/88802d1f6b1cb1fc67d67a58cd0cf8a1790de4ce7946e434240f1d60ab4a/yarl-1.23.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dda608c88cf709b1d406bdfcd84d8d63cff7c9e577a403c6108ce8ce9dcc8764", size = 107643, upload-time = "2026-03-01T22:04:18.519Z" }, + { url = "https://files.pythonhosted.org/packages/8e/db/4f9b838f4d8bdd6f0f385aed8bbf21c71ed11a0b9983305c302cbd557815/yarl-1.23.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8c4fe09e0780c6c3bf2b7d4af02ee2394439d11a523bbcf095cf4747c2932007", size = 108700, upload-time = "2026-03-01T22:04:20.373Z" }, + { url = "https://files.pythonhosted.org/packages/50/12/95a1d33f04a79c402664070d43b8b9f72dc18914e135b345b611b0b1f8cc/yarl-1.23.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31c9921eb8bd12633b41ad27686bbb0b1a2a9b8452bfdf221e34f311e9942ed4", size = 102769, upload-time = "2026-03-01T22:04:23.055Z" }, + { url = "https://files.pythonhosted.org/packages/86/65/91a0285f51321369fd1a8308aa19207520c5f0587772cfc2e03fc2467e90/yarl-1.23.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5f10fd85e4b75967468af655228fbfd212bdf66db1c0d135065ce288982eda26", size = 101114, upload-time = "2026-03-01T22:04:25.031Z" }, + { url = "https://files.pythonhosted.org/packages/58/80/c7c8244fc3e5bc483dc71a09560f43b619fab29301a0f0a8f936e42865c7/yarl-1.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dbf507e9ef5688bada447a24d68b4b58dd389ba93b7afc065a2ba892bea54769", size = 98883, upload-time = "2026-03-01T22:04:27.281Z" }, + { url = "https://files.pythonhosted.org/packages/86/e7/71ca9cc9ca79c0b7d491216177d1aed559d632947b8ffb0ee60f7d8b23e3/yarl-1.23.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:85e9beda1f591bc73e77ea1c51965c68e98dafd0fec72cdd745f77d727466716", size = 94172, upload-time = "2026-03-01T22:04:28.554Z" }, + { url = "https://files.pythonhosted.org/packages/6a/3f/6c6c8a0fe29c26fb2db2e8d32195bb84ec1bfb8f1d32e7f73b787fcf349b/yarl-1.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0e1fdaa14ef51366d7757b45bde294e95f6c8c049194e793eedb8387c86d5993", size = 107010, upload-time = "2026-03-01T22:04:30.385Z" }, + { url = "https://files.pythonhosted.org/packages/56/38/12730c05e5ad40a76374d440ed8b0899729a96c250516d91c620a6e38fc2/yarl-1.23.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:75e3026ab649bf48f9a10c0134512638725b521340293f202a69b567518d94e0", size = 100285, upload-time = "2026-03-01T22:04:31.752Z" }, + { url = "https://files.pythonhosted.org/packages/34/92/6a7be9239f2347234e027284e7a5f74b1140cc86575e7b469d13fba1ebfe/yarl-1.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:80e6d33a3d42a7549b409f199857b4fb54e2103fc44fb87605b6663b7a7ff750", size = 108230, upload-time = "2026-03-01T22:04:33.844Z" }, + { url = "https://files.pythonhosted.org/packages/5e/81/4aebccfa9376bd98b9d8bfad20621a57d3e8cfc5b8631c1fa5f62cdd03f4/yarl-1.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ec2f42d41ccbd5df0270d7df31618a8ee267bfa50997f5d720ddba86c4a83a6", size = 103008, upload-time = "2026-03-01T22:04:35.856Z" }, + { url = "https://files.pythonhosted.org/packages/38/0f/0b4e3edcec794a86b853b0c6396c0a888d72dfce19b2d88c02ac289fb6c1/yarl-1.23.0-cp310-cp310-win32.whl", hash = "sha256:debe9c4f41c32990771be5c22b56f810659f9ddf3d63f67abfdcaa2c6c9c5c1d", size = 83073, upload-time = "2026-03-01T22:04:38.268Z" }, + { url = "https://files.pythonhosted.org/packages/a0/71/ad95c33da18897e4c636528bbc24a1dd23fe16797de8bc4ec667b8db0ba4/yarl-1.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:ab5f043cb8a2d71c981c09c510da013bc79fd661f5c60139f00dd3c3cc4f2ffb", size = 87328, upload-time = "2026-03-01T22:04:39.558Z" }, + { url = "https://files.pythonhosted.org/packages/e2/14/dfa369523c79bccf9c9c746b0a63eb31f65db9418ac01275f7950962e504/yarl-1.23.0-cp310-cp310-win_arm64.whl", hash = "sha256:263cd4f47159c09b8b685890af949195b51d1aa82ba451c5847ca9bc6413c220", size = 82463, upload-time = "2026-03-01T22:04:41.454Z" }, + { url = "https://files.pythonhosted.org/packages/a2/aa/60da938b8f0997ba3a911263c40d82b6f645a67902a490b46f3355e10fae/yarl-1.23.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b35d13d549077713e4414f927cdc388d62e543987c572baee613bf82f11a4b99", size = 123641, upload-time = "2026-03-01T22:04:42.841Z" }, + { url = "https://files.pythonhosted.org/packages/24/84/e237607faf4e099dbb8a4f511cfd5efcb5f75918baad200ff7380635631b/yarl-1.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbb0fef01f0c6b38cb0f39b1f78fc90b807e0e3c86a7ff3ce74ad77ce5c7880c", size = 86248, upload-time = "2026-03-01T22:04:44.757Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0d/71ceabc14c146ba8ee3804ca7b3d42b1664c8440439de5214d366fec7d3a/yarl-1.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc52310451fc7c629e13c4e061cbe2dd01684d91f2f8ee2821b083c58bd72432", size = 85988, upload-time = "2026-03-01T22:04:46.365Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6c/4a90d59c572e46b270ca132aca66954f1175abd691f74c1ef4c6711828e2/yarl-1.23.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2c6b50c7b0464165472b56b42d4c76a7b864597007d9c085e8b63e185cf4a7a", size = 100566, upload-time = "2026-03-01T22:04:47.639Z" }, + { url = "https://files.pythonhosted.org/packages/49/fb/c438fb5108047e629f6282a371e6e91cf3f97ee087c4fb748a1f32ceef55/yarl-1.23.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:aafe5dcfda86c8af00386d7781d4c2181b5011b7be3f2add5e99899ea925df05", size = 92079, upload-time = "2026-03-01T22:04:48.925Z" }, + { url = "https://files.pythonhosted.org/packages/d9/13/d269aa1aed3e4f50a5a103f96327210cc5fa5dd2d50882778f13c7a14606/yarl-1.23.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ee33b875f0b390564c1fb7bc528abf18c8ee6073b201c6ae8524aca778e2d83", size = 108741, upload-time = "2026-03-01T22:04:50.838Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/115b16f22c37ea4437d323e472945bea97301c8ec6089868fa560abab590/yarl-1.23.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c41e021bc6d7affb3364dc1e1e5fa9582b470f283748784bd6ea0558f87f42c", size = 108099, upload-time = "2026-03-01T22:04:52.499Z" }, + { url = "https://files.pythonhosted.org/packages/9a/64/c53487d9f4968045b8afa51aed7ca44f58b2589e772f32745f3744476c82/yarl-1.23.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99c8a9ed30f4164bc4c14b37a90208836cbf50d4ce2a57c71d0f52c7fb4f7598", size = 102678, upload-time = "2026-03-01T22:04:55.176Z" }, + { url = "https://files.pythonhosted.org/packages/85/59/cd98e556fbb2bf8fab29c1a722f67ad45c5f3447cac798ab85620d1e70af/yarl-1.23.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2af5c81a1f124609d5f33507082fc3f739959d4719b56877ab1ee7e7b3d602b", size = 100803, upload-time = "2026-03-01T22:04:56.588Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c0/b39770b56d4a9f0bb5f77e2f1763cd2d75cc2f6c0131e3b4c360348fcd65/yarl-1.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6b41389c19b07c760c7e427a3462e8ab83c4bb087d127f0e854c706ce1b9215c", size = 100163, upload-time = "2026-03-01T22:04:58.492Z" }, + { url = "https://files.pythonhosted.org/packages/e7/64/6980f99ab00e1f0ff67cb84766c93d595b067eed07439cfccfc8fb28c1a6/yarl-1.23.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1dc702e42d0684f42d6519c8d581e49c96cefaaab16691f03566d30658ee8788", size = 93859, upload-time = "2026-03-01T22:05:00.268Z" }, + { url = "https://files.pythonhosted.org/packages/38/69/912e6c5e146793e5d4b5fe39ff5b00f4d22463dfd5a162bec565ac757673/yarl-1.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0e40111274f340d32ebcc0a5668d54d2b552a6cca84c9475859d364b380e3222", size = 108202, upload-time = "2026-03-01T22:05:02.273Z" }, + { url = "https://files.pythonhosted.org/packages/59/97/35ca6767524687ad64e5f5c31ad54bc76d585585a9fcb40f649e7e82ffed/yarl-1.23.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:4764a6a7588561a9aef92f65bda2c4fb58fe7c675c0883862e6df97559de0bfb", size = 99866, upload-time = "2026-03-01T22:05:03.597Z" }, + { url = "https://files.pythonhosted.org/packages/d3/1c/1a3387ee6d73589f6f2a220ae06f2984f6c20b40c734989b0a44f5987308/yarl-1.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:03214408cfa590df47728b84c679ae4ef00be2428e11630277be0727eba2d7cc", size = 107852, upload-time = "2026-03-01T22:05:04.986Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b8/35c0750fcd5a3f781058bfd954515dd4b1eab45e218cbb85cf11132215f1/yarl-1.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:170e26584b060879e29fac213e4228ef063f39128723807a312e5c7fec28eff2", size = 102919, upload-time = "2026-03-01T22:05:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1c/9a1979aec4a81896d597bcb2177827f2dbee3f5b7cc48b2d0dadb644b41d/yarl-1.23.0-cp311-cp311-win32.whl", hash = "sha256:51430653db848d258336cfa0244427b17d12db63d42603a55f0d4546f50f25b5", size = 82602, upload-time = "2026-03-01T22:05:08.444Z" }, + { url = "https://files.pythonhosted.org/packages/93/22/b85eca6fa2ad9491af48c973e4c8cf6b103a73dbb271fe3346949449fca0/yarl-1.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf49a3ae946a87083ef3a34c8f677ae4243f5b824bfc4c69672e72b3d6719d46", size = 87461, upload-time = "2026-03-01T22:05:10.145Z" }, + { url = "https://files.pythonhosted.org/packages/93/95/07e3553fe6f113e6864a20bdc53a78113cda3b9ced8784ee52a52c9f80d8/yarl-1.23.0-cp311-cp311-win_arm64.whl", hash = "sha256:b39cb32a6582750b6cc77bfb3c49c0f8760dc18dc96ec9fb55fbb0f04e08b928", size = 82336, upload-time = "2026-03-01T22:05:11.554Z" }, + { url = "https://files.pythonhosted.org/packages/88/8a/94615bc31022f711add374097ad4144d569e95ff3c38d39215d07ac153a0/yarl-1.23.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1932b6b8bba8d0160a9d1078aae5838a66039e8832d41d2992daa9a3a08f7860", size = 124737, upload-time = "2026-03-01T22:05:12.897Z" }, + { url = "https://files.pythonhosted.org/packages/e3/6f/c6554045d59d64052698add01226bc867b52fe4a12373415d7991fdca95d/yarl-1.23.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:411225bae281f114067578891bc75534cfb3d92a3b4dfef7a6ca78ba354e6069", size = 87029, upload-time = "2026-03-01T22:05:14.376Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/725ecc166d53438bc88f76822ed4b1e3b10756e790bafd7b523fe97c322d/yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13a563739ae600a631c36ce096615fe307f131344588b0bc0daec108cdb47b25", size = 86310, upload-time = "2026-03-01T22:05:15.71Z" }, + { url = "https://files.pythonhosted.org/packages/99/30/58260ed98e6ff7f90ba84442c1ddd758c9170d70327394a6227b310cd60f/yarl-1.23.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cbf44c5cb4a7633d078788e1b56387e3d3cf2b8139a3be38040b22d6c3221c8", size = 97587, upload-time = "2026-03-01T22:05:17.384Z" }, + { url = "https://files.pythonhosted.org/packages/76/0a/8b08aac08b50682e65759f7f8dde98ae8168f72487e7357a5d684c581ef9/yarl-1.23.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53ad387048f6f09a8969631e4de3f1bf70c50e93545d64af4f751b2498755072", size = 92528, upload-time = "2026-03-01T22:05:18.804Z" }, + { url = "https://files.pythonhosted.org/packages/52/07/0b7179101fe5f8385ec6c6bb5d0cb9f76bd9fb4a769591ab6fb5cdbfc69a/yarl-1.23.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4a59ba56f340334766f3a4442e0efd0af895fae9e2b204741ef885c446b3a1a8", size = 105339, upload-time = "2026-03-01T22:05:20.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8a/36d82869ab5ec829ca8574dfcb92b51286fcfb1e9c7a73659616362dc880/yarl-1.23.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:803a3c3ce4acc62eaf01eaca1208dcf0783025ef27572c3336502b9c232005e7", size = 105061, upload-time = "2026-03-01T22:05:22.268Z" }, + { url = "https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3d2bff8f37f8d0f96c7ec554d16945050d54462d6e95414babaa18bfafc7f51", size = 100132, upload-time = "2026-03-01T22:05:23.638Z" }, + { url = "https://files.pythonhosted.org/packages/cf/26/9c89acf82f08a52cb52d6d39454f8d18af15f9d386a23795389d1d423823/yarl-1.23.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c75eb09e8d55bceb4367e83496ff8ef2bc7ea6960efb38e978e8073ea59ecb67", size = 99289, upload-time = "2026-03-01T22:05:25.749Z" }, + { url = "https://files.pythonhosted.org/packages/6f/54/5b0db00d2cb056922356104468019c0a132e89c8d3ab67d8ede9f4483d2a/yarl-1.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877b0738624280e34c55680d6054a307aa94f7d52fa0e3034a9cc6e790871da7", size = 96950, upload-time = "2026-03-01T22:05:27.318Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/10fa93811fd439341fad7e0718a86aca0de9548023bbb403668d6555acab/yarl-1.23.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b5405bb8f0e783a988172993cfc627e4d9d00432d6bbac65a923041edacf997d", size = 93960, upload-time = "2026-03-01T22:05:28.738Z" }, + { url = "https://files.pythonhosted.org/packages/bc/d2/8ae2e6cd77d0805f4526e30ec43b6f9a3dfc542d401ac4990d178e4bf0cf/yarl-1.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c3a3598a832590c5a3ce56ab5576361b5688c12cb1d39429cf5dba30b510760", size = 104703, upload-time = "2026-03-01T22:05:30.438Z" }, + { url = "https://files.pythonhosted.org/packages/2f/0c/b3ceacf82c3fe21183ce35fa2acf5320af003d52bc1fcf5915077681142e/yarl-1.23.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8419ebd326430d1cbb7efb5292330a2cf39114e82df5cc3d83c9a0d5ebeaf2f2", size = 98325, upload-time = "2026-03-01T22:05:31.835Z" }, + { url = "https://files.pythonhosted.org/packages/9d/e0/12900edd28bdab91a69bd2554b85ad7b151f64e8b521fe16f9ad2f56477a/yarl-1.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:be61f6fff406ca40e3b1d84716fde398fc08bc63dd96d15f3a14230a0973ed86", size = 105067, upload-time = "2026-03-01T22:05:33.358Z" }, + { url = "https://files.pythonhosted.org/packages/15/61/74bb1182cf79c9bbe4eb6b1f14a57a22d7a0be5e9cedf8e2d5c2086474c3/yarl-1.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ceb13c5c858d01321b5d9bb65e4cf37a92169ea470b70fec6f236b2c9dd7e34", size = 100285, upload-time = "2026-03-01T22:05:35.4Z" }, + { url = "https://files.pythonhosted.org/packages/69/7f/cd5ef733f2550de6241bd8bd8c3febc78158b9d75f197d9c7baa113436af/yarl-1.23.0-cp312-cp312-win32.whl", hash = "sha256:fffc45637bcd6538de8b85f51e3df3223e4ad89bccbfca0481c08c7fc8b7ed7d", size = 82359, upload-time = "2026-03-01T22:05:36.811Z" }, + { url = "https://files.pythonhosted.org/packages/f5/be/25216a49daeeb7af2bec0db22d5e7df08ed1d7c9f65d78b14f3b74fd72fc/yarl-1.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:f69f57305656a4852f2a7203efc661d8c042e6cc67f7acd97d8667fb448a426e", size = 87674, upload-time = "2026-03-01T22:05:38.171Z" }, + { url = "https://files.pythonhosted.org/packages/d2/35/aeab955d6c425b227d5b7247eafb24f2653fedc32f95373a001af5dfeb9e/yarl-1.23.0-cp312-cp312-win_arm64.whl", hash = "sha256:6e87a6e8735b44816e7db0b2fbc9686932df473c826b0d9743148432e10bb9b9", size = 81879, upload-time = "2026-03-01T22:05:40.006Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4b/a0a6e5d0ee8a2f3a373ddef8a4097d74ac901ac363eea1440464ccbe0898/yarl-1.23.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:16c6994ac35c3e74fb0ae93323bf8b9c2a9088d55946109489667c510a7d010e", size = 123796, upload-time = "2026-03-01T22:05:41.412Z" }, + { url = "https://files.pythonhosted.org/packages/67/b6/8925d68af039b835ae876db5838e82e76ec87b9782ecc97e192b809c4831/yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a42e651629dafb64fd5b0286a3580613702b5809ad3f24934ea87595804f2c5", size = 86547, upload-time = "2026-03-01T22:05:42.841Z" }, + { url = "https://files.pythonhosted.org/packages/ae/50/06d511cc4b8e0360d3c94af051a768e84b755c5eb031b12adaaab6dec6e5/yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c6b9461a2a8b47c65eef63bb1c76a4f1c119618ffa99ea79bc5bb1e46c5821b", size = 85854, upload-time = "2026-03-01T22:05:44.85Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f4/4e30b250927ffdab4db70da08b9b8d2194d7c7b400167b8fbeca1e4701ca/yarl-1.23.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2569b67d616eab450d262ca7cb9f9e19d2f718c70a8b88712859359d0ab17035", size = 98351, upload-time = "2026-03-01T22:05:46.836Z" }, + { url = "https://files.pythonhosted.org/packages/86/fc/4118c5671ea948208bdb1492d8b76bdf1453d3e73df051f939f563e7dcc5/yarl-1.23.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e9d9a4d06d3481eab79803beb4d9bd6f6a8e781ec078ac70d7ef2dcc29d1bea5", size = 92711, upload-time = "2026-03-01T22:05:48.316Z" }, + { url = "https://files.pythonhosted.org/packages/56/11/1ed91d42bd9e73c13dc9e7eb0dd92298d75e7ac4dd7f046ad0c472e231cd/yarl-1.23.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f514f6474e04179d3d33175ed3f3e31434d3130d42ec153540d5b157deefd735", size = 106014, upload-time = "2026-03-01T22:05:50.028Z" }, + { url = "https://files.pythonhosted.org/packages/ce/c9/74e44e056a23fbc33aca71779ef450ca648a5bc472bdad7a82339918f818/yarl-1.23.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fda207c815b253e34f7e1909840fd14299567b1c0eb4908f8c2ce01a41265401", size = 105557, upload-time = "2026-03-01T22:05:51.416Z" }, + { url = "https://files.pythonhosted.org/packages/66/fe/b1e10b08d287f518994f1e2ff9b6d26f0adeecd8dd7d533b01bab29a3eda/yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34b6cf500e61c90f305094911f9acc9c86da1a05a7a3f5be9f68817043f486e4", size = 101559, upload-time = "2026-03-01T22:05:52.872Z" }, + { url = "https://files.pythonhosted.org/packages/72/59/c5b8d94b14e3d3c2a9c20cb100119fd534ab5a14b93673ab4cc4a4141ea5/yarl-1.23.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d7504f2b476d21653e4d143f44a175f7f751cd41233525312696c76aa3dbb23f", size = 100502, upload-time = "2026-03-01T22:05:54.954Z" }, + { url = "https://files.pythonhosted.org/packages/77/4f/96976cb54cbfc5c9fd73ed4c51804f92f209481d1fb190981c0f8a07a1d7/yarl-1.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:578110dd426f0d209d1509244e6d4a3f1a3e9077655d98c5f22583d63252a08a", size = 98027, upload-time = "2026-03-01T22:05:56.409Z" }, + { url = "https://files.pythonhosted.org/packages/63/6e/904c4f476471afdbad6b7e5b70362fb5810e35cd7466529a97322b6f5556/yarl-1.23.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:609d3614d78d74ebe35f54953c5bbd2ac647a7ddb9c30a5d877580f5e86b22f2", size = 95369, upload-time = "2026-03-01T22:05:58.141Z" }, + { url = "https://files.pythonhosted.org/packages/9d/40/acfcdb3b5f9d68ef499e39e04d25e141fe90661f9d54114556cf83be8353/yarl-1.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4966242ec68afc74c122f8459abd597afd7d8a60dc93d695c1334c5fd25f762f", size = 105565, upload-time = "2026-03-01T22:06:00.286Z" }, + { url = "https://files.pythonhosted.org/packages/5e/c6/31e28f3a6ba2869c43d124f37ea5260cac9c9281df803c354b31f4dd1f3c/yarl-1.23.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e0fd068364a6759bc794459f0a735ab151d11304346332489c7972bacbe9e72b", size = 99813, upload-time = "2026-03-01T22:06:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/08/1f/6f65f59e72d54aa467119b63fc0b0b1762eff0232db1f4720cd89e2f4a17/yarl-1.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:39004f0ad156da43e86aa71f44e033de68a44e5a31fc53507b36dd253970054a", size = 105632, upload-time = "2026-03-01T22:06:03.188Z" }, + { url = "https://files.pythonhosted.org/packages/a3/c4/18b178a69935f9e7a338127d5b77d868fdc0f0e49becd286d51b3a18c61d/yarl-1.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5723c01a56c5028c807c701aa66722916d2747ad737a046853f6c46f4875543", size = 101895, upload-time = "2026-03-01T22:06:04.651Z" }, + { url = "https://files.pythonhosted.org/packages/8f/54/f5b870b5505663911dba950a8e4776a0dbd51c9c54c0ae88e823e4b874a0/yarl-1.23.0-cp313-cp313-win32.whl", hash = "sha256:1b6b572edd95b4fa8df75de10b04bc81acc87c1c7d16bcdd2035b09d30acc957", size = 82356, upload-time = "2026-03-01T22:06:06.04Z" }, + { url = "https://files.pythonhosted.org/packages/7a/84/266e8da36879c6edcd37b02b547e2d9ecdfea776be49598e75696e3316e1/yarl-1.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:baaf55442359053c7d62f6f8413a62adba3205119bcb6f49594894d8be47e5e3", size = 87515, upload-time = "2026-03-01T22:06:08.107Z" }, + { url = "https://files.pythonhosted.org/packages/00/fd/7e1c66efad35e1649114fa13f17485f62881ad58edeeb7f49f8c5e748bf9/yarl-1.23.0-cp313-cp313-win_arm64.whl", hash = "sha256:fb4948814a2a98e3912505f09c9e7493b1506226afb1f881825368d6fb776ee3", size = 81785, upload-time = "2026-03-01T22:06:10.181Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fc/119dd07004f17ea43bb91e3ece6587759edd7519d6b086d16bfbd3319982/yarl-1.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:aecfed0b41aa72b7881712c65cf764e39ce2ec352324f5e0837c7048d9e6daaa", size = 130719, upload-time = "2026-03-01T22:06:11.708Z" }, + { url = "https://files.pythonhosted.org/packages/e6/0d/9f2348502fbb3af409e8f47730282cd6bc80dec6630c1e06374d882d6eb2/yarl-1.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a41bcf68efd19073376eb8cf948b8d9be0af26256403e512bb18f3966f1f9120", size = 89690, upload-time = "2026-03-01T22:06:13.429Z" }, + { url = "https://files.pythonhosted.org/packages/50/93/e88f3c80971b42cfc83f50a51b9d165a1dbf154b97005f2994a79f212a07/yarl-1.23.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cde9a2ecd91668bcb7f077c4966d8ceddb60af01b52e6e3e2680e4cf00ad1a59", size = 89851, upload-time = "2026-03-01T22:06:15.53Z" }, + { url = "https://files.pythonhosted.org/packages/1c/07/61c9dd8ba8f86473263b4036f70fb594c09e99c0d9737a799dfd8bc85651/yarl-1.23.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5023346c4ee7992febc0068e7593de5fa2bf611848c08404b35ebbb76b1b0512", size = 95874, upload-time = "2026-03-01T22:06:17.553Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e9/f9ff8ceefba599eac6abddcfb0b3bee9b9e636e96dbf54342a8577252379/yarl-1.23.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1009abedb49ae95b136a8904a3f71b342f849ffeced2d3747bf29caeda218c4", size = 88710, upload-time = "2026-03-01T22:06:19.004Z" }, + { url = "https://files.pythonhosted.org/packages/eb/78/0231bfcc5d4c8eec220bc2f9ef82cb4566192ea867a7c5b4148f44f6cbcd/yarl-1.23.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a8d00f29b42f534cc8aa3931cfe773b13b23e561e10d2b26f27a8d309b0e82a1", size = 101033, upload-time = "2026-03-01T22:06:21.203Z" }, + { url = "https://files.pythonhosted.org/packages/cd/9b/30ea5239a61786f18fd25797151a17fbb3be176977187a48d541b5447dd4/yarl-1.23.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:95451e6ce06c3e104556d73b559f5da6c34a069b6b62946d3ad66afcd51642ea", size = 100817, upload-time = "2026-03-01T22:06:22.738Z" }, + { url = "https://files.pythonhosted.org/packages/62/e2/a4980481071791bc83bce2b7a1a1f7adcabfa366007518b4b845e92eeee3/yarl-1.23.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531ef597132086b6cf96faa7c6c1dcd0361dd5f1694e5cc30375907b9b7d3ea9", size = 97482, upload-time = "2026-03-01T22:06:24.21Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1e/304a00cf5f6100414c4b5a01fc7ff9ee724b62158a08df2f8170dfc72a2d/yarl-1.23.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88f9fb0116fbfcefcab70f85cf4b74a2b6ce5d199c41345296f49d974ddb4123", size = 95949, upload-time = "2026-03-01T22:06:25.697Z" }, + { url = "https://files.pythonhosted.org/packages/68/03/093f4055ed4cae649ac53bca3d180bd37102e9e11d048588e9ab0c0108d0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e7b0460976dc75cb87ad9cc1f9899a4b97751e7d4e77ab840fc9b6d377b8fd24", size = 95839, upload-time = "2026-03-01T22:06:27.309Z" }, + { url = "https://files.pythonhosted.org/packages/b9/28/4c75ebb108f322aa8f917ae10a8ffa4f07cae10a8a627b64e578617df6a0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:115136c4a426f9da976187d238e84139ff6b51a20839aa6e3720cd1026d768de", size = 90696, upload-time = "2026-03-01T22:06:29.048Z" }, + { url = "https://files.pythonhosted.org/packages/23/9c/42c2e2dd91c1a570402f51bdf066bfdb1241c2240ba001967bad778e77b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ead11956716a940c1abc816b7df3fa2b84d06eaed8832ca32f5c5e058c65506b", size = 100865, upload-time = "2026-03-01T22:06:30.525Z" }, + { url = "https://files.pythonhosted.org/packages/74/05/1bcd60a8a0a914d462c305137246b6f9d167628d73568505fce3f1cb2e65/yarl-1.23.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:fe8f8f5e70e6dbdfca9882cd9deaac058729bcf323cf7a58660901e55c9c94f6", size = 96234, upload-time = "2026-03-01T22:06:32.692Z" }, + { url = "https://files.pythonhosted.org/packages/90/b2/f52381aac396d6778ce516b7bc149c79e65bfc068b5de2857ab69eeea3b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:a0e317df055958a0c1e79e5d2aa5a5eaa4a6d05a20d4b0c9c3f48918139c9fc6", size = 100295, upload-time = "2026-03-01T22:06:34.268Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/638bae5bbf1113a659b2435d8895474598afe38b4a837103764f603aba56/yarl-1.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f0fd84de0c957b2d280143522c4f91a73aada1923caee763e24a2b3fda9f8a5", size = 97784, upload-time = "2026-03-01T22:06:35.864Z" }, + { url = "https://files.pythonhosted.org/packages/80/25/a3892b46182c586c202629fc2159aa13975d3741d52ebd7347fd501d48d5/yarl-1.23.0-cp313-cp313t-win32.whl", hash = "sha256:93a784271881035ab4406a172edb0faecb6e7d00f4b53dc2f55919d6c9688595", size = 88313, upload-time = "2026-03-01T22:06:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/43/68/8c5b36aa5178900b37387937bc2c2fe0e9505537f713495472dcf6f6fccc/yarl-1.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dd00607bffbf30250fe108065f07453ec124dbf223420f57f5e749b04295e090", size = 94932, upload-time = "2026-03-01T22:06:39.579Z" }, + { url = "https://files.pythonhosted.org/packages/c6/cc/d79ba8292f51f81f4dc533a8ccfb9fc6992cabf0998ed3245de7589dc07c/yarl-1.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ac09d42f48f80c9ee1635b2fcaa819496a44502737660d3c0f2ade7526d29144", size = 84786, upload-time = "2026-03-01T22:06:41.988Z" }, + { url = "https://files.pythonhosted.org/packages/90/98/b85a038d65d1b92c3903ab89444f48d3cee490a883477b716d7a24b1a78c/yarl-1.23.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:21d1b7305a71a15b4794b5ff22e8eef96ff4a6d7f9657155e5aa419444b28912", size = 124455, upload-time = "2026-03-01T22:06:43.615Z" }, + { url = "https://files.pythonhosted.org/packages/39/54/bc2b45559f86543d163b6e294417a107bb87557609007c007ad889afec18/yarl-1.23.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:85610b4f27f69984932a7abbe52703688de3724d9f72bceb1cca667deff27474", size = 86752, upload-time = "2026-03-01T22:06:45.425Z" }, + { url = "https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23f371bd662cf44a7630d4d113101eafc0cfa7518a2760d20760b26021454719", size = 86291, upload-time = "2026-03-01T22:06:46.974Z" }, + { url = "https://files.pythonhosted.org/packages/ea/d8/d1cb2378c81dd729e98c716582b1ccb08357e8488e4c24714658cc6630e8/yarl-1.23.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a80f77dc1acaaa61f0934176fccca7096d9b1ff08c8ba9cddf5ae034a24319", size = 99026, upload-time = "2026-03-01T22:06:48.459Z" }, + { url = "https://files.pythonhosted.org/packages/0a/ff/7196790538f31debe3341283b5b0707e7feb947620fc5e8236ef28d44f72/yarl-1.23.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:bd654fad46d8d9e823afbb4f87c79160b5a374ed1ff5bde24e542e6ba8f41434", size = 92355, upload-time = "2026-03-01T22:06:50.306Z" }, + { url = "https://files.pythonhosted.org/packages/c1/56/25d58c3eddde825890a5fe6aa1866228377354a3c39262235234ab5f616b/yarl-1.23.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:682bae25f0a0dd23a056739f23a134db9f52a63e2afd6bfb37ddc76292bbd723", size = 106417, upload-time = "2026-03-01T22:06:52.1Z" }, + { url = "https://files.pythonhosted.org/packages/51/8a/882c0e7bc8277eb895b31bce0138f51a1ba551fc2e1ec6753ffc1e7c1377/yarl-1.23.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a82836cab5f197a0514235aaf7ffccdc886ccdaa2324bc0aafdd4ae898103039", size = 106422, upload-time = "2026-03-01T22:06:54.424Z" }, + { url = "https://files.pythonhosted.org/packages/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c57676bdedc94cd3bc37724cf6f8cd2779f02f6aba48de45feca073e714fe52", size = 101915, upload-time = "2026-03-01T22:06:55.895Z" }, + { url = "https://files.pythonhosted.org/packages/18/6a/530e16aebce27c5937920f3431c628a29a4b6b430fab3fd1c117b26ff3f6/yarl-1.23.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c7f8dc16c498ff06497c015642333219871effba93e4a2e8604a06264aca5c5c", size = 100690, upload-time = "2026-03-01T22:06:58.21Z" }, + { url = "https://files.pythonhosted.org/packages/88/08/93749219179a45e27b036e03260fda05190b911de8e18225c294ac95bbc9/yarl-1.23.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5ee586fb17ff8f90c91cf73c6108a434b02d69925f44f5f8e0d7f2f260607eae", size = 98750, upload-time = "2026-03-01T22:06:59.794Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cf/ea424a004969f5d81a362110a6ac1496d79efdc6d50c2c4b2e3ea0fc2519/yarl-1.23.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:17235362f580149742739cc3828b80e24029d08cbb9c4bda0242c7b5bc610a8e", size = 94685, upload-time = "2026-03-01T22:07:01.375Z" }, + { url = "https://files.pythonhosted.org/packages/e2/b7/14341481fe568e2b0408bcf1484c652accafe06a0ade9387b5d3fd9df446/yarl-1.23.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0793e2bd0cf14234983bbb371591e6bea9e876ddf6896cdcc93450996b0b5c85", size = 106009, upload-time = "2026-03-01T22:07:03.151Z" }, + { url = "https://files.pythonhosted.org/packages/0a/e6/5c744a9b54f4e8007ad35bce96fbc9218338e84812d36f3390cea616881a/yarl-1.23.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3650dc2480f94f7116c364096bc84b1d602f44224ef7d5c7208425915c0475dd", size = 100033, upload-time = "2026-03-01T22:07:04.701Z" }, + { url = "https://files.pythonhosted.org/packages/0c/23/e3bfc188d0b400f025bc49d99793d02c9abe15752138dcc27e4eaf0c4a9e/yarl-1.23.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f40e782d49630ad384db66d4d8b73ff4f1b8955dc12e26b09a3e3af064b3b9d6", size = 106483, upload-time = "2026-03-01T22:07:06.231Z" }, + { url = "https://files.pythonhosted.org/packages/72/42/f0505f949a90b3f8b7a363d6cbdf398f6e6c58946d85c6d3a3bc70595b26/yarl-1.23.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94f8575fbdf81749008d980c17796097e645574a3b8c28ee313931068dad14fe", size = 102175, upload-time = "2026-03-01T22:07:08.4Z" }, + { url = "https://files.pythonhosted.org/packages/aa/65/b39290f1d892a9dd671d1c722014ca062a9c35d60885d57e5375db0404b5/yarl-1.23.0-cp314-cp314-win32.whl", hash = "sha256:c8aa34a5c864db1087d911a0b902d60d203ea3607d91f615acd3f3108ac32169", size = 83871, upload-time = "2026-03-01T22:07:09.968Z" }, + { url = "https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.whl", hash = "sha256:63e92247f383c85ab00dd0091e8c3fa331a96e865459f5ee80353c70a4a42d70", size = 89093, upload-time = "2026-03-01T22:07:11.501Z" }, + { url = "https://files.pythonhosted.org/packages/e0/7d/8a84dc9381fd4412d5e7ff04926f9865f6372b4c2fd91e10092e65d29eb8/yarl-1.23.0-cp314-cp314-win_arm64.whl", hash = "sha256:70efd20be968c76ece7baa8dafe04c5be06abc57f754d6f36f3741f7aa7a208e", size = 83384, upload-time = "2026-03-01T22:07:13.069Z" }, + { url = "https://files.pythonhosted.org/packages/dd/8d/d2fad34b1c08aa161b74394183daa7d800141aaaee207317e82c790b418d/yarl-1.23.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9a18d6f9359e45722c064c97464ec883eb0e0366d33eda61cb19a244bf222679", size = 131019, upload-time = "2026-03-01T22:07:14.903Z" }, + { url = "https://files.pythonhosted.org/packages/19/ff/33009a39d3ccf4b94d7d7880dfe17fb5816c5a4fe0096d9b56abceea9ac7/yarl-1.23.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2803ed8b21ca47a43da80a6fd1ed3019d30061f7061daa35ac54f63933409412", size = 89894, upload-time = "2026-03-01T22:07:17.372Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f1/dab7ac5e7306fb79c0190766a3c00b4cb8d09a1f390ded68c85a5934faf5/yarl-1.23.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:394906945aa8b19fc14a61cf69743a868bb8c465efe85eee687109cc540b98f4", size = 89979, upload-time = "2026-03-01T22:07:19.361Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b1/08e95f3caee1fad6e65017b9f26c1d79877b502622d60e517de01e72f95d/yarl-1.23.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71d006bee8397a4a89f469b8deb22469fe7508132d3c17fa6ed871e79832691c", size = 95943, upload-time = "2026-03-01T22:07:21.266Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cc/6409f9018864a6aa186c61175b977131f373f1988e198e031236916e87e4/yarl-1.23.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:62694e275c93d54f7ccedcfef57d42761b2aad5234b6be1f3e3026cae4001cd4", size = 88786, upload-time = "2026-03-01T22:07:23.129Z" }, + { url = "https://files.pythonhosted.org/packages/76/40/cc22d1d7714b717fde2006fad2ced5efe5580606cb059ae42117542122f3/yarl-1.23.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31de1613658308efdb21ada98cbc86a97c181aa050ba22a808120bb5be3ab94", size = 101307, upload-time = "2026-03-01T22:07:24.689Z" }, + { url = "https://files.pythonhosted.org/packages/8f/0d/476c38e85ddb4c6ec6b20b815bdd779aa386a013f3d8b85516feee55c8dc/yarl-1.23.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb1e8b8d66c278b21d13b0a7ca22c41dd757a7c209c6b12c313e445c31dd3b28", size = 100904, upload-time = "2026-03-01T22:07:26.287Z" }, + { url = "https://files.pythonhosted.org/packages/72/32/0abe4a76d59adf2081dcb0397168553ece4616ada1c54d1c49d8936c74f8/yarl-1.23.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50f9d8d531dfb767c565f348f33dd5139a6c43f5cbdf3f67da40d54241df93f6", size = 97728, upload-time = "2026-03-01T22:07:27.906Z" }, + { url = "https://files.pythonhosted.org/packages/b7/35/7b30f4810fba112f60f5a43237545867504e15b1c7647a785fbaf588fac2/yarl-1.23.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575aa4405a656e61a540f4a80eaa5260f2a38fff7bfdc4b5f611840d76e9e277", size = 95964, upload-time = "2026-03-01T22:07:30.198Z" }, + { url = "https://files.pythonhosted.org/packages/2d/86/ed7a73ab85ef00e8bb70b0cb5421d8a2a625b81a333941a469a6f4022828/yarl-1.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:041b1a4cefacf65840b4e295c6985f334ba83c30607441ae3cf206a0eed1a2e4", size = 95882, upload-time = "2026-03-01T22:07:32.132Z" }, + { url = "https://files.pythonhosted.org/packages/19/90/d56967f61a29d8498efb7afb651e0b2b422a1e9b47b0ab5f4e40a19b699b/yarl-1.23.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d38c1e8231722c4ce40d7593f28d92b5fc72f3e9774fe73d7e800ec32299f63a", size = 90797, upload-time = "2026-03-01T22:07:34.404Z" }, + { url = "https://files.pythonhosted.org/packages/72/00/8b8f76909259f56647adb1011d7ed8b321bcf97e464515c65016a47ecdf0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d53834e23c015ee83a99377db6e5e37d8484f333edb03bd15b4bc312cc7254fb", size = 101023, upload-time = "2026-03-01T22:07:35.953Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e2/cab11b126fb7d440281b7df8e9ddbe4851e70a4dde47a202b6642586b8d9/yarl-1.23.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:2e27c8841126e017dd2a054a95771569e6070b9ee1b133366d8b31beb5018a41", size = 96227, upload-time = "2026-03-01T22:07:37.594Z" }, + { url = "https://files.pythonhosted.org/packages/c2/9b/2c893e16bfc50e6b2edf76c1a9eb6cb0c744346197e74c65e99ad8d634d0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:76855800ac56f878847a09ce6dba727c93ca2d89c9e9d63002d26b916810b0a2", size = 100302, upload-time = "2026-03-01T22:07:39.334Z" }, + { url = "https://files.pythonhosted.org/packages/28/ec/5498c4e3a6d5f1003beb23405671c2eb9cdbf3067d1c80f15eeafe301010/yarl-1.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e09fd068c2e169a7070d83d3bde728a4d48de0549f975290be3c108c02e499b4", size = 98202, upload-time = "2026-03-01T22:07:41.717Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c3/cd737e2d45e70717907f83e146f6949f20cc23cd4bf7b2688727763aa458/yarl-1.23.0-cp314-cp314t-win32.whl", hash = "sha256:73309162a6a571d4cbd3b6a1dcc703c7311843ae0d1578df6f09be4e98df38d4", size = 90558, upload-time = "2026-03-01T22:07:43.433Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/3774d162f6732d1cfb0b47b4140a942a35ca82bb19b6db1f80e9e7bdc8f8/yarl-1.23.0-cp314-cp314t-win_amd64.whl", hash = "sha256:4503053d296bc6e4cbd1fad61cf3b6e33b939886c4f249ba7c78b602214fabe2", size = 97610, upload-time = "2026-03-01T22:07:45.773Z" }, + { url = "https://files.pythonhosted.org/packages/51/47/3fa2286c3cb162c71cdb34c4224d5745a1ceceb391b2bd9b19b668a8d724/yarl-1.23.0-cp314-cp314t-win_arm64.whl", hash = "sha256:44bb7bef4ea409384e3f8bc36c063d77ea1b8d4a5b2706956c0d6695f07dcc25", size = 86041, upload-time = "2026-03-01T22:07:49.026Z" }, + { url = "https://files.pythonhosted.org/packages/69/68/c8739671f5699c7dc470580a4f821ef37c32c4cb0b047ce223a7f115757f/yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f", size = 48288, upload-time = "2026-03-01T22:07:51.388Z" }, +] + +[[package]] +name = "zipp" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, +]