diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..05400092c3a3384e506b13e2514226e79f1669fd --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +__pycache__/ +venv/ \ No newline at end of file diff --git a/.dvc/.gitignore b/.dvc/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..528f30c71c687de473bbb506c071e902beba6cd9 --- /dev/null +++ b/.dvc/.gitignore @@ -0,0 +1,3 @@ +/config.local +/tmp +/cache diff --git a/.dvc/config b/.dvc/config new file mode 100644 index 0000000000000000000000000000000000000000..5c1489301accad2b558f5423b6a1472d78d395dd --- /dev/null +++ b/.dvc/config @@ -0,0 +1,6 @@ +[core] + remote = origin + +[remote "origin"] + url = s3://dvc + endpointurl = https://dagshub.com/se4ai2526-uniba/CardioTrack.s3 diff --git a/.dvcignore b/.dvcignore new file mode 100644 index 0000000000000000000000000000000000000000..51973055237895f2d23e65e015793fd302f4b9da --- /dev/null +++ b/.dvcignore @@ -0,0 +1,3 @@ +# Add patterns of files dvc should ignore, which could improve +# the performance. Learn more at +# https://dvc.org/doc/user-guide/dvcignore diff --git a/.github/workflows/pynblint.yml b/.github/workflows/pynblint.yml new file mode 100644 index 0000000000000000000000000000000000000000..a6e977fbb288e239c46028dd43238b8bb7d0e076 --- /dev/null +++ b/.github/workflows/pynblint.yml @@ -0,0 +1,67 @@ +name: Lint Notebooks (Pynblint) + +on: + pull_request: + paths: + - 'notebooks/**/*.ipynb' + + +permissions: + contents: read + + +jobs: + pynblint: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install uv (for uvx) + uses: astral-sh/setup-uv@v3 + + - name: Cache uv + uses: actions/cache@v4 + with: + path: ~/.cache/uv + key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml','uv.lock') }} + restore-keys: | + uv-${{ runner.os }}- + + - name: Run pynblint on notebooks directory + id: pynblint + run: | + set -e + echo "Running pynblint via uvx (isolated & pinned)..." + uvx --from pynblint \ + --with "click<8.2" \ + --with "typer<0.12" \ + --with "lxml[html_clean]" \ + pynblint notebooks/ > pynblint_report.txt 2>&1 || true + cat pynblint_report.txt + + - name: Check for violations + run: | + if grep -qiE "Traceback|ImportError|ModuleNotFoundError" pynblint_report.txt; then + echo "❌ pynblint error." + cat pynblint_report.txt + exit 1 + elif grep -q "LINTING RESULTS" pynblint_report.txt; then + echo "⚠️ Pynblint found violations in notebooks" + echo "violations=true" >> $GITHUB_ENV + cat pynblint_report.txt + exit 1 + else + echo "✅ No violations found" + echo "violations=false" >> $GITHUB_ENV + fi + + - name: Upload pynblint report + if: always() + uses: actions/upload-artifact@v4 + with: + name: pynblint-report + path: pynblint_report.txt + retention-days: 30 diff --git a/.github/workflows/pytestAndGX.yml b/.github/workflows/pytestAndGX.yml new file mode 100644 index 0000000000000000000000000000000000000000..5e49766255c4cde58868578470ea8b41af51128f --- /dev/null +++ b/.github/workflows/pytestAndGX.yml @@ -0,0 +1,60 @@ +name: Pytest and GX Validation +on: + pull_request: + branches-ignore: + - main + +permissions: + contents: read + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Install uv and activate cache + - uses: astral-sh/setup-uv@v3 + + - name: Cache uv + uses: actions/cache@v4 + with: + path: ~/.cache/uv + key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }} + + # Install all dependencies + - name: Sync dependencies + run: uv sync + + #Install dvc + - name: Install DVC + run: | + uv pip install "dvc-s3" "boto3>=1.36.0" "botocore>=1.36.0" + + + + - name: Configure DVC credentials + run: | + uv run dvc remote modify origin --local access_key_id ${{ secrets.DAGSHUB_TOKEN }} + uv run dvc remote modify origin --local secret_access_key ${{ secrets.DAGSHUB_TOKEN }} + + - name: Download data and models from DagsHub + run: uv run dvc pull + + # Run pytest tests + - name: Run pytest tests + run: | + set -euo pipefail + echo "Running pytest tests..." + uv run pytest tests/ -v --tb=short + + # Run GX validation scripts + - name: Run GX validation scripts + run: | + set -euo pipefail + echo "Running GX validation scripts..." + uv run python tests/test_heart_data/raw_test.py + uv run python tests/test_heart_data/processed_test.py diff --git a/.github/workflows/ruff-linter.yml b/.github/workflows/ruff-linter.yml new file mode 100644 index 0000000000000000000000000000000000000000..acf98aba090a990bf55c47d4fbdb2ea5da6338e6 --- /dev/null +++ b/.github/workflows/ruff-linter.yml @@ -0,0 +1,108 @@ +name: Lint (Ruff) +on: + pull_request: + + +permissions: + contents: write + +jobs: + ruff-check: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.head_ref }} + + # Install uv and activate cache + - uses: astral-sh/setup-uv@v3 + - name: Cache uv + uses: actions/cache@v4 + with: + path: ~/.cache/uv + key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml', 'uv.lock') }} + + # Install dev deps + - name: Sync dev deps + run: uv sync --dev + + # find changed .py files + - name: Ruff on changed files (format then check) + id: ruff_check_changed_files + run: | + set -euo pipefail + BASE_REF="${{ github.base_ref }}" + git fetch --no-tags origin "$BASE_REF" --prune + + git diff --name-only --diff-filter=ACMRT "origin/$BASE_REF...HEAD" > /tmp/changed_all.txt + + CHANGED=$(grep -E '\.py$' /tmp/changed_all.txt || true) + if [ -z "$CHANGED" ]; then + echo "Any Modified file .py: skip Ruff." + echo "has_py_changes=false" >> $GITHUB_OUTPUT + exit 0 + fi + + echo "Modified Python Files:" + echo "$CHANGED" | sed 's/^/ - /' + + + echo "$CHANGED" > /tmp/changed_py.txt + echo "has_py_changes=true" >> $GITHUB_OUTPUT + + # Autofix + - name: Ruff autofix on changed files + if: steps.ruff_check_changed_files.outputs.has_py_changes == 'true' + id: ruff_autofix + run: | + set -euo pipefail + + CHANGED=$(cat /tmp/changed_py.txt) + + echo "Ruff autofix on these files:" + echo "$CHANGED" | sed 's/^/ - /' + + # --- FIX --- + uv run ruff format $CHANGED || true + + # Lint con fix + uv run ruff check --fix $CHANGED || true + + if uv run ruff check $CHANGED 2>&1 | tee /tmp/ruff_check_result.txt; then + echo "No remaining issues" + echo "has_remaining_issues=false" >> $GITHUB_OUTPUT + else + echo "Found remaining issues that cannot be auto-fixed" + echo "has_remaining_issues=true" >> $GITHUB_OUTPUT + fi + + + # Commit on pull request + - name: Commit and push changes + if: steps.ruff_check_changed_files.outputs.has_py_changes == 'true' + run: | + set -euo pipefail + + + if [ -z "$(git status --porcelain)" ]; then + echo "No changes to commit after Ruff autofix." + exit 0 + fi + + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + + git add . + git commit -m "chore: apply ruff check and format auto-fix" + git push origin HEAD:${{ github.head_ref }} + + + # Fail if there are remaining issues + - name: Fail if remaining issues + if: steps.ruff_check_changed_files.outputs.has_py_changes == 'true' && steps.ruff_autofix.outputs.has_remaining_issues == 'true' + run: | + echo "Found errors that cannot be auto-fixed:" + cat /tmp/ruff_check_result.txt + exit 1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..7ae6140a218cc09b9b578fce33968c714a127765 --- /dev/null +++ b/.gitignore @@ -0,0 +1,191 @@ +# Data +/data/raw/heart.csv + +# Mac OS-specific storage files +.DS_Store + +# vim +*.swp +*.swo + +## https://github.com/github/gitignore/blob/e8554d85bf62e38d6db966a50d2064ac025fd82a/Python.gitignore + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# MkDocs documentation +docs/site/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# UV +# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +#uv.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# pixi +# pixi.lock should be committed to version control for reproducibility +# .pixi/ contains the environments and should not be committed +.pixi/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +# Ruff stuff: +.ruff_cache/ + +# PyPI configuration file +.pypirc \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..40fb857ce13ebac2f24dc5822cb3df959f966410 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +FROM python:3.11.9-slim-bookworm + +# avoid creating unnecessary .pyc, buffers, and pip caches +ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PIP_NO_CACHE_DIR=1 +ENV PIP_DISABLE_PIP_VERSION_CHECK=1 + +# install curl and certificates needed to install uv +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# create a non-root user for added security +RUN useradd -m -u 1000 user +USER user +ENV PATH="/home/user/.local/bin:$PATH" + +WORKDIR /cardioTrack + +# install uv as user +RUN curl -LsSf https://astral.sh/uv/install.sh | sh + +# copy the project files and do uv sync +COPY --chown=user pyproject.toml uv.lock ./ +RUN uv sync --locked --no-install-project + +# copy the rest of the files needed for inference +COPY --chown=user predicting_outcomes_in_heart_failure ./predicting_outcomes_in_heart_failure +COPY --chown=user models/nosex/random_forest.joblib ./models/nosex/random_forest.joblib +COPY --chown=user reports/nosex/random_forest/cv_parameters.json ./reports/nosex/random_forest/cv_parameters.json +COPY --chown=user data/interim/preprocess_artifacts/scaler.joblib ./data/interim/preprocess_artifacts/scaler.joblib +COPY --chown=user metrics/test/nosex/random_forest.json ./metrics/test/nosex/random_forest.json +COPY --chown=user README.md ./README.md +COPY --chown=user models/README.md ./models/README.md +COPY --chown=user data/README.md ./data/README.md + + +EXPOSE 7860 + +CMD ["uv", "run", "uvicorn", "predicting_outcomes_in_heart_failure.app.main:app", "--host", "0.0.0.0", "--port", "7860"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b60368107aef5f85de52e8bb97b2b2400af15432 --- /dev/null +++ b/Makefile @@ -0,0 +1,87 @@ +################################################################################# +# GLOBALS # +################################################################################# + +PROJECT_NAME = CardioTrack +PYTHON_VERSION = 3.11 +PYTHON_INTERPRETER = python + +################################################################################# +# COMMANDS # +################################################################################# + + +## Install Python dependencies +.PHONY: requirements +requirements: + uv sync + + + + +## Delete all compiled Python files +.PHONY: clean +clean: + find . -type f -name "*.py[co]" -delete + find . -type d -name "__pycache__" -delete + + +## Lint using ruff (use `make format` to do formatting) +.PHONY: lint +lint: + ruff format --check + ruff check + +## Format source code with ruff +.PHONY: format +format: + ruff check --fix + ruff format + + + +## Run tests +.PHONY: test +test: + python -m pytest tests + + +## Set up Python interpreter environment +.PHONY: create_environment +create_environment: + uv venv --python $(PYTHON_VERSION) + @echo ">>> New uv virtual environment created. Activate with:" + @echo ">>> Windows: .\\\\.venv\\\\Scripts\\\\activate" + @echo ">>> Unix/macOS: source ./.venv/bin/activate" + + + + +################################################################################# +# PROJECT RULES # +################################################################################# + + +## Make dataset +.PHONY: data +data: requirements + $(PYTHON_INTERPRETER) predicting_outcomes_in_heart_failure/dataset.py + + +################################################################################# +# Self Documenting Commands # +################################################################################# + +.DEFAULT_GOAL := help + +define PRINT_HELP_PYSCRIPT +import re, sys; \ +lines = '\n'.join([line for line in sys.stdin]); \ +matches = re.findall(r'\n## (.*)\n[\s\S]+?\n([a-zA-Z_-]+):', lines); \ +print('Available rules:\n'); \ +print('\n'.join(['{:25}{}'.format(*reversed(match)) for match in matches])) +endef +export PRINT_HELP_PYSCRIPT + +help: + @$(PYTHON_INTERPRETER) -c "${PRINT_HELP_PYSCRIPT}" < $(MAKEFILE_LIST) diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2e2cba22b67b2b09ae21a44993e32719e96a3cf1 --- /dev/null +++ b/README.md @@ -0,0 +1,239 @@ +--- +title: CardioTrack API +emoji: ❤️ +colorFrom: purple +colorTo: gray +sdk: docker +app_port: 7860 +--- +# Predicting Outcomes in Heart Failure + +## Table of Contents +1. [Project Overview](#project-overview) +2. [Project Organization](#project-organization) +3. [DVC Pipeline Defined](#dvc-pipeline-defined) +4. [Milestones Summary](#milestones-summary) + - [Milestone 1 - Inception](#milestone-1---inception) + - [Milestone 2 - Reproducibility](#milestone-2---reproducibility) + - [Milestone 3 - Quality Assurance](#milestone-3---quality-assurance) + - [Milestone 4 - API Integration](#milestone-4---API-Integration) + +## Project Overview + + + + +This project develops a predictive pipeline for patient outcome prediction in heart failure, using a publicly available dataset of clinical records. The goal is to design and evaluate machine learning models within a reproducible workflow that can be integrated into larger systems for clinical decision support. The workflow addresses data heterogeneity, defines consistent preprocessing and feature engineering strategies, and explores alternative modeling approaches with systematic evaluation using clinically relevant metrics. It also emphasizes model transparency and auditability, ensuring that the resulting pipeline can be deployed as a reliable, adaptable software component in healthcare applications. The project aims not only to improve baseline predictive performance but also to demonstrate how data-driven models can be effectively integrated into end-to-end AI-enabled healthcare systems. + +## Project Organization + +``` +├── LICENSE <- Open-source license if one is chosen +├── Makefile <- Makefile with convenience commands like `make data` or `make train` +├── README.md <- The top-level README for developers using this project. +├── data +│ ├── external <- Data from third party sources. +│ ├── interim <- Intermediate data that has been transformed. +│ ├── processed <- The final, canonical data sets for modeling. +│ └── raw <- The original, immutable data dump. +│ +├── docs <- A default mkdocs project; see www.mkdocs.org for details +│ +├── models <- Trained and serialized models, model predictions, or model summaries +│ +├── notebooks <- Jupyter notebooks. Naming convention is a number (for ordering), +│ the creator's initials, and a short `-` delimited description, e.g. +│ `1.0-jqp-initial-data-exploration`. +│ +├── pyproject.toml <- Project configuration file with package metadata for +│ predicting_outcomes_in_heart_failure and configuration for tools like black +│ +├── references <- Data dictionaries, manuals, and all other explanatory materials. +│ +├── reports <- Generated analysis as HTML, PDF, LaTeX, etc. +│ └── figures <- Generated graphics and figures to be used in reporting +│ +├── requirements.txt <- The requirements file for reproducing the analysis environment, e.g. +│ generated with `pip freeze > requirements.txt` +│ +├── setup.cfg <- Configuration file for flake8 +│ +└── predicting_outcomes_in_heart_failure <- Source code for use in this project. + │ + ├── __init__.py <- Makes predicting_outcomes_in_heart_failure a Python module + │ + ├── config.py <- Store useful variables and configuration + │ + ├── data + │ ├── __init__.py + │ ├── dataset.py <- Scripts to download or generate data + | ├── preprocess.py <- Data preprocessing code + │ └── split_data.py <- Split dataset into train and test code + │ + ├── features.py <- Code to create features for modeling + │ + ├── modeling + │ ├── __init__.py + │ ├── predict.py <- Code to run model inference with trained models + │ └── train.py <- Code to train models + │ + └── plots.py <- Code to create visualizations +``` + +## DVC Pipeline defined +``` + +---------------+ + | download_data | + +---------------+ + * + * + * + +---------------+ + | preprocessing | + +---------------+ + * + * + * + +------------+ + | split_data | + +------------+ + *** *** + * * + ** *** ++----------+ * +| training | *** ++----------+ * + *** *** + * * + ** ** + +------------+ + | evaluation | + +------------+ +``` + +## Milestones Summary + +### Milestone 1 - Inception +During this milestone, the **CCDS Project Template** was used as the foundation for organizing the project. +The main conceptual and structural components of the system were defined, following the template guidelines to ensure consistency and traceability. + +Additionally, a **Machine Learning Canvas** has been added in the [`docs/`](./docs) folder. +It outlines the model objectives, the data to be used, and the key methodological aspects planned for the next phases of the project. + +### Milestone 2 - Reproducibility +Milestone-2 introduces **reproducibility**, from **data management** to **model training and evaluation**. This includes a fully automated pipeline, experiment tracking, and model registry integration, ensuring every step can be consistently reproduced and monitored. + +#### Exploratory Data Analysis (EDA) +As part of the early steps, we added and refined an **Exploratory Data Analysis** to better understand the dataset, its distribution, and relationships between variables. This helped define the preprocessing and modeling strategies used later. + +#### DVC Initialization and Pipeline Setup +We initialized **DVC** and configured a full pipeline to automate the main steps of the ML workflow: +- Automatic data **download** +- **Preprocessing** +- **Data splitting** +- **Training** and **evaluation** + +The pipeline is fully reproducible and version-controlled through DVC. + +#### Model Training and Experiment Tracking +We implemented the **training scripts** and integrated **MLflow** for experiment tracking. +Three models are trained and evaluated within this workflow: +- Decision Tree +- Random Forest +- Logistic Regression + +Each experiment is logged to MLflow. + +#### Model Registry and Thresholds +Models that reach or exceed the predefined **performance thresholds** (as defined in the ML Canvas) are automatically **saved to the model registry**. + +### Milestone 3 – Quality Assurance + +In this milestone, we introduced **Quality Assurance** layer to the system. + +#### Static Linters +Two static linters were added to improve code style and consistency: + +- **Ruff** for Python files in the `predicting_outcomes_in_heart_failure` and `tests` folders. + It checks formatting, syntax, and common anti-patterns, and is integrated into the GitHub workflow via an *action*. +- **Pynblint** for Jupyter notebooks, also integrated into the GitHub workflow through a dedicated *action*. + +#### Data Quality +We implemented **data quality checks** on both raw and processed data using **Great Expectations**. +These validations help to: + +- detect anomalies or invalid values at the data source +- prevent the propagation of data issues into downstream processes + +#### Code Quality +We added automated **unit and integration tests** using **pytest**, covering the main modules and functionalities of the system. + + +#### ML Pipeline Enhancements + we applied the following enhancements to the ML pipeline: + +- Refactored preprocessing with gender-based dataset variants. +- Added validation (e.g., error on single-row datasets). +- Saved StandardScaler as preprocessing artifact. +- Updated split logic and DVC pipeline. +- Training now creates variant-specific MLflow experiments. +- Added RandomOverSampler to address class imbalance. +- Updated evaluation and inference to align with the new structure. + +#### Explainability +We applied an explainability module: + +- Added SHAP explainability module. +- Added tests for explainability functionality. + + +#### Risk Classification +We added a **Risk Classification** analysis for the system in accordance with **IMDRF** and **AI Act** regulations. +The documentation is available in the [`docs/`](./docs) folder. + +Ecco la versione finale **in Markdown puro**, già formattata correttamente: + + +### Milestone 4 - API Integration + +During Milestone 4, we implemented a fully functional API and Dataset Card and Model card for the champion model and the following used dataset. +APIs are structured into four main routers: + + +#### **General Router** +- **GET /** + Returns a welcome message and confirms that the API is running. + + +#### **Prediction Router** +- **POST /predictions** + Generates a binary prediction (0/1) for a single patient sample. + +- **POST /predict-batch** + Accepts a list of patient samples and returns a prediction for each element in the batch. + +- **POST /explanations** + Produces SHAP-based explanations for a single input and returns the URL of the generated SHAP waterfall plot. + + +#### **Model Info Router** +- **GET /model/hyperparameters** + Returns the hyperparameters and cross-validation results of the model defined in `MODEL_PATH`. + +- **GET /model/metrics** + Returns the test-set metrics stored during the model evaluation stage. + + +#### **Cards Router** +- **GET /card/{card_type}** + Returns the content of a “card” file (dataset card or model card). + + +### **Cards** + +During this milestone, we also created: + +- a **dataset card** describing the dataset used by the champion model +- a **model card** documenting the champion model itself + + diff --git a/data/.gitignore b/data/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b3b21a92f9afa69137badc680e0f13bbead7b4fd --- /dev/null +++ b/data/.gitignore @@ -0,0 +1,3 @@ +/processed +/interim +/raw \ No newline at end of file diff --git a/data/README.md b/data/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d7f52c020f8304256d182b04233edcdc3dbbda98 --- /dev/null +++ b/data/README.md @@ -0,0 +1,176 @@ +# Dataset Card + +## Table of Contents +- [Dataset Description](#dataset-description) + - [Dataset Summary](#dataset-summary) + - [Supported Tasks](#supported-tasks) + - [Languages](#languages) +- [Dataset Structure](#dataset-structure) + - [Data Instances](#data-instances) + - [Data Fields](#data-fields) +- [Dataset Creation](#dataset-creation) + - [Source Data](#source-data) + - [Annotations](#annotations) + - [Personal and Sensitive Information](#personal-and-sensitive-information) +- [Considerations for Using the Data](#considerations-for-using-the-data) + - [Social Impact of Dataset](#social-impact-of-dataset) + - [Discussion of Biases](#discussion-of-biases) +- [Additional Information](#additional-information) + - [Dataset Curators](#dataset-curators) + - [Citation Information](#citation-information) + + + +## Dataset Description + +- **Homepage:** https://www.kaggle.com/datasets/fedesoriano/heart-failure-prediction + + +### Dataset Summary + +This dataset contains anonymized clinical data used to predict the risk of heart failure. +It includes **918 patient records**, **11 clinical features**, and **one target variable**. +The original dataset was downloaded from Kaggle and was created by merging five well-known cardiology datasets. + +The version used in this project underwent additional preprocessing steps, including standardization, normalization, categorical encoding, and removal of the Sex feature. The resulting dataset is used for experimentation and model development. + + + +### Supported Tasks + +This dataset can be used for a variety of machine learning tasks, including: + +- **Binary Classification** + + Predicting whether a patient has heart disease. +- **Risk Scoring / Clinical Risk Stratification** + + Estimating cardiac risk based on clinical variables. +- **Explainable AI (XAI)** + + Useful for feature-importance analysis and interpretability. + + +### Languages + +English **(en)** + + +## Dataset Structure + +### Data Instances + +Each instance represents one patient. Example: + +| Age |Sex | ChestPainType | RestingBP | Cholesterol | FastingBS | RestingECG | MaxHR | ExerciseAngina | Oldpeak | ST_Slope | HeartDisease | +|-----|----|---------------|-----------|-------------|-----------|------------|-------|----------------|---------|----------|--------------| +| 54 | M | ASY | 140 | 239 | 0 | Normal | 160 | N | 1.2 | Flat | 1 | + + + +### Data Fields + +| Field | Type | Description | +|----------------|-----------|---------------------------------------------------------------| +| Age | int | Patient age in years | +| Sex | binary | Patient sex (M = male, F = female) | +| ChestPainType | category | Chest pain type (TA, ATA, NAP, ASY) | +| RestingBP | int | Resting blood pressure (mm Hg) | +| Cholesterol | int | Serum cholesterol (mg/dL) | +| FastingBS | binary | Fasting blood sugar (1 if >120 mg/dL, 0 otherwise) | +| RestingECG | category | Resting ECG results (Normal, ST, LVH) | +| MaxHR | int | Maximum heart rate achieved | +| ExerciseAngina | binary | Exercise-induced angina (Y/N) | +| Oldpeak | float | ST depression relative to rest | +| ST_Slope | category | Slope of the ST segment (Up, Flat, Down) | +| HeartDisease | binary | Target variable (1 = disease, 0 = no disease) | + + + +## Dataset Creation + +### Source Data + +The preprocessed dataset used in this project originates from the Kaggle dataset *“Heart Failure Prediction Dataset”*. + +The raw dataset was created by merging five widely-used cardiology datasets: + +- Cleveland (303 samples) +- Hungarian (294 samples) +- Switzerland (123 samples) +- Long Beach VA (200 samples) +- Stalog (270 samples) + +The Kaggle author selected the 11 common features and merged the datasets into a unified collection of **1,190 records**, then removed **272 duplicates**, resulting in **918 unique samples**. + +All initial merging and normalization steps were performed by the dataset author on Kaggle. + + + +### Annotations + +No manual annotations were added. +The target variable `HeartDisease` is already included in the original dataset. + + + +### Personal and Sensitive Information + +Although the dataset contains clinical information (sensitive under GDPR), it is fully anonymized: + +- No personal identifiers (name, address, contact details, IDs). +- All sources were already anonymized before publication. +- No biometric or genetic data are included. + +Thus, while clinically sensitive, the dataset does **not** pose identifiable privacy risks. + + + +## Considerations for Using the Data + +### Social Impact of Dataset + +The dataset can support research and development of models for cardiac risk prediction and early detection. + +However: + +- Models trained on this dataset **must not be used as standalone diagnostic tools**. +- They should **not** be the sole basis for clinical decisions. +- Misuse in healthcare contexts may lead to incorrect risk assessment. + + + +### Discussion of Biases + + +This dataset may contain several sources of bias that can affect model performance and fairness: + +- The data comes from multiple hospitals and countries, each with different patient profiles and clinical protocols. Some groups may be underrepresented. +- Source datasets used different diagnostic practices and measurement standards, which may introduce noise or inconsistency in labels and clinical values. +- Only 11 features are included, omitting other relevant clinical variables. This can cause proxy bias or oversimplification of cardiac risk. +- Some datasets are older and may not reflect current medical practices or population characteristics. + + + +## Additional Information + +### Dataset Curators + +The original dataset was created and published by **[fedesoriano](https://www.kaggle.com/fedesoriano)** on Kaggle. + +The preprocessed dataset was curated by the **CardioTrack** team: + +- [Fabrizio Rosmarino](https://github.com/Fabrizio250) +- [Martina Capone](https://github.com/Martycap) +- [Donato Boccuzzi](https://github.com/donatooooooo) + +Work carried out as part of the *Software Engineering for AI-Enabled Systems* program at the University of Bari. + +### Citation Information + +If you use this datasets, please cite: + +**Original Dataset** +Soriano, F. (2021). *Heart Failure Prediction Dataset*. Kaggle. +https://www.kaggle.com/datasets/fedesoriano/heart-failure-prediction + diff --git a/docs/.gitkeep b/docs/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/CardioTrack_ML_Canvas.md b/docs/CardioTrack_ML_Canvas.md new file mode 100644 index 0000000000000000000000000000000000000000..ffe60e75528e3fe294dcc29647bf981ab6671b96 --- /dev/null +++ b/docs/CardioTrack_ML_Canvas.md @@ -0,0 +1,98 @@ +# **CARDIO TRACK - MACHINE LEARNING CANVAS** + +**Designed for:** Giulio Mallardi +**Designed by:** D. Boccuzzi, M. Capone, F. Rosmarino +**Date:** 17/10/2025 +**Iteration:** 2 + +--- + +## **1. Prediction Task** + +Cardio Track ML system performs a **binary classification** task based on clinical data from individual patients, with the goal of predicting the presence or absence of heart disease. +Specifically, the model analyzes each patient’s clinical features and risk factors to estimate the likelihood of developing heart failure. + +There are two possible prediction outcomes: +- **Positive:** when the patient shows indicators of heart failure. +- **Negative:** when no signs of disease are detected. + +--- + +## **2. Decisions** + +The system’s predictions support **cardiologists** and **public health institutions (ASL)**. +For positive cases, cardiologists can order further tests, start monitoring, and define personalized treatments. +Aggregated results help public health institutions plan resources, prioritize facilities, and promote prevention and lifestyle improvements for long-term cardiovascular health. + +--- + +## **3. Value Proposition** + +The main end users are **cardiologists** and **local health authorities (ASL)**. +For cardiologists, the system provides a reliable tool to assist in the early diagnosis of heart failure. +For health authorities, it enables more efficient management of healthcare resources by optimizing the distribution of diagnostic and therapeutic services. + +Overall, Cardio Track ML system aims to support **prevention** and **early detection** of heart failure, improving patient outcomes and reducing mortality rates. + +--- + +## **4. Data Collection** + +Data collection will be a **continuous and evolving process**. +Real and high quality clinical data will be carefully labeled and verified by domain experts, ensuring data quality and consistency. +New patient data collected through standardized clinical protocols will periodically update and improve the model, allowing it to adapt and learn over time. + +--- + +## **5. Data Sources** + +Cardio Track ML system will rely on a **publicly available dataset** that includes clinical parameters from both healthy individuals and patients diagnosed with heart failure. +The reference dataset is the [Heart Failure Prediction Dataset](https://www.kaggle.com/datasets/fedesoriano/heart-failure-prediction). + +--- + +## **6. Impact Simulation** + +Before release, the model will undergo rigorous validation on an independent test set. + +As a baseline, minimum thresholds are defined for the key evaluation metrics: **F1-score**, **recall** and **accuracy** ≥ 0.80 and **ROC-AUC** ≥ 0.85. These values ensure that the model maintains high discriminative capability while minimizing the risk of undetected clinical cases. + +We will assess potential bias across demographic subgroups to ensure fairness and consistent model performance. +Any detected bias will be mitigated through rebalancing techniques or threshold adjustment to guarantee equitable treatment across all patient categories. + +--- + +## **7. Making Predictions** + +Predictions will be made on-demand, triggered whenever new or updated clinical data becomes available in the hospital database. +Real-time processing is not required, but timely inference will support the decision-making workflow. +All computations will be executed **on-premises**, using the existing hospital IT infrastructure to ensure **data privacy** and **security**. + +--- + +## **8. Building Models** + +Cardio Track ML system will use a **single main model** in production. +Model updates will occur periodically as new data is integrated, or when a new version demonstrates statistically significant improvements in key metrics: **F1-score**, **recall**, **accuracy**, and **ROC-AUC**. + +Model explainability will be ensured through the analysis of feature importance. Feature impact will be quantified by observing charts, allowing medical experts to interpret and validate the relevance of clinical factors used in the decision process. + +--- + +## **9. Features** + +The Heart Failure Prediction Dataset already provides a complete set of clinical features, so there is no need to extract them directly from medical exams or diagnostic reports. + +**Included features:** +Age, Sex, ChestPainType, RestingBP, Cholesterol, FastingBS, RestingECG, MaxHR, ExerciseAngina, Oldpeak, and ST_Slope. + +These features capture key cardiovascular risk factors such as hypertension, diabetes, hyperlipidemia, obesity, and other pre-existing heart conditions, making the dataset suitable for early heart failure diagnosis. + +--- + +## **10. Monitoring** + +After deployment, system performance will be continuously **monitored** to detect potential drifts or degradations over time. +Key metrics include **F1-score**, **recall**, **accuracy**, and **ROC-AUC**, reviewed at regular intervals. + +Clinician feedback will also be collected to assess **usability** and **clinical relevance**, ensuring continuous model improvement and alignment with real-world medical needs. diff --git a/docs/Risk_Classification.md b/docs/Risk_Classification.md new file mode 100644 index 0000000000000000000000000000000000000000..78e70f78480bf42a575025333b9afbfcd6b35eae --- /dev/null +++ b/docs/Risk_Classification.md @@ -0,0 +1,101 @@ +# **Risk Classification** + +## **1. Purpose** + +This document describes the risk classification of a Software as a Medical Device (SaMD) designed to identify the presence or absence of signs of heart failure through a **binary classification based on clinical data**. +The classification is developed using the **IMDRF SaMD Risk Categorization** framework and additional European regulatory references (AI Act, MDR). + +--- + +## **2. Intended Use** + +The system performs a **binary classification** task based on clinical data from individual patients, aiming to predict the presence or absence of heart disease. Specifically, the model analyzes each patient’s clinical features and risk factors to identify the potential presence of heart failure. + +The model outputs two possible classification results: + +* **Positive:** when the patient shows indicators compatible with heart failure. +* **Negative:** when no signs of the condition are detected. + +### **2.1 Clinical Role** + +* The software output is intended as a **Clinical Decision Support (CDS)** tool. +* The intended user is a **qualified medical professional**. +* The software **does not perform diagnosis**, **does not make autonomous therapeutic decisions**, and **is not intended for use in emergency settings**. +* The information provided supports—but does not replace—clinical judgement. + +--- + +## **3. IMDRF SaMD Risk Categorization** + +The IMDRF framework evaluates two key dimensions: + +1. **The significance of the information provided by the software** +2. **The severity of the clinical condition addressed** + +### **3.1 Significance of the Information – *Treat/Diagnose*** + +**Rationale:** + +* The software provides a **binary risk classification** that may influence clinical decisions such as follow-up, diagnostic investigation, or changes in patient management. +* The output goes beyond merely describing clinical status (“inform” level), contributing instead to medical decision-making. +* As the system supports decisions relevant to diagnosis and treatment, it falls within the **Treat/Diagnose** category of the IMDRF framework. + +### **3.2 Severity of the Clinical Condition – *Serious*** + +**Rationale:** + +* Heart failure is a serious medical condition with potentially significant complications. +* The system is not intended for emergency use, does not initiate immediate life-saving actions, and operates within routine or preventive clinical care. +* The presence of a medical professional mitigates the risk of immediate harm due to software errors. +* In the intended use context, the condition is therefore appropriately classified as **Serious**, not “Critical”. + +### **3.3 IMDRF Classification Result** + +| Significance | Condition | IMDRF Category | +| -------------- | --------- | -------------- | +| Treat/Diagnose | Serious | **III** | + +--- + +## **4. AI Act – Probable Classification as High-Risk AI** + +According to the **Regulation (EU) 2024/1689 (AI Act)**, artificial intelligence systems used as medical devices or as components of medical devices regulated under the MDR/IVDR are included among **High-Risk AI Systems**, as listed in Annex III. + +For the system under consideration: + +* it meets the MDR definition of **SaMD**; +* it supports clinically relevant decisions; +* it may influence patient management concerning a serious medical condition. + +Therefore, the system can be **reasonably considered a High-Risk AI System** under the AI Act. +This is not a definitive classification—the formal designation will depend on MDR processes and final technical documentation—but it represents a consistent regulatory interpretation based on the software’s intended purpose and domain. + +--- + +## **5. Conclusion** + +The software is classified as: + +* **SaMD, IMDRF Category III**, based on: + + * information of the **Treat/Diagnose** type; + * management of a condition categorized as **Serious**. + +This classification does not represent the final MDR class but provides a robust basis for risk assessment and regulatory positioning, including the likely classification as **High-Risk AI** under the AI Act. + +--- + +## **6. MDR (EU) – Additional Note** + +IMDRF categorization does not directly determine the MDR class but offers a helpful conceptual framework. + +The European MDR classification will be established through: + +* **MDR 2017/745**, Annex VIII +* **Rule 11**, specific to medical device software +* **MDCG 2019-11**, interpretative guidance + +Based on the system’s functionality (clinical classification supporting diagnosis/prognosis), an assignment of at least **Class IIa** is likely. +However, the final class will depend on the risk evaluation and the risk-control measures implemented. + + diff --git a/dvc.lock b/dvc.lock new file mode 100644 index 0000000000000000000000000000000000000000..51c681e6b1dd519788e1ecd9142a861087eba80e --- /dev/null +++ b/dvc.lock @@ -0,0 +1,754 @@ +schema: '2.0' +stages: + download_data: + cmd: uv run predicting_outcomes_in_heart_failure/data/dataset.py + deps: + - path: predicting_outcomes_in_heart_failure/data/dataset.py + hash: md5 + md5: 2896ae3ebb48acbbfa118415494c70ef + size: 559 + outs: + - path: data/raw/heart.csv + hash: md5 + md5: ab21f2524241ed14b321bcaf40c8b86e + size: 35921 + preprocessing: + cmd: uv run predicting_outcomes_in_heart_failure/data/preprocess.py + deps: + - path: data/raw/heart.csv + hash: md5 + md5: ab21f2524241ed14b321bcaf40c8b86e + size: 35921 + - path: predicting_outcomes_in_heart_failure/data/preprocess.py + hash: md5 + md5: a3586b10fae9eed2183fb516b2298273 + size: 4328 + outs: + - path: data/interim/preprocess_artifacts/scaler.joblib + hash: md5 + md5: 224537cb262510335c5515d6156952d6 + size: 1023 + - path: data/interim/preprocessed.csv + hash: md5 + md5: aeb0353e39e219cf0b574ab72b08ac26 + size: 151228 + - path: data/interim/preprocessed_female_only.csv + hash: md5 + md5: 337b3e1dd4f47911997eded603ab3f4b + size: 31966 + - path: data/interim/preprocessed_male_only.csv + hash: md5 + md5: 9fa26adfc62e4ccd77089627dbe01f5d + size: 119503 + - path: data/interim/preprocessed_no_sex_column.csv + hash: md5 + md5: 95d3064bbfef4c8f09d45fe4e1c915d4 + size: 149390 + split_data: + cmd: uv run predicting_outcomes_in_heart_failure/data/split_data.py + deps: + - path: data/interim/preprocessed.csv + hash: md5 + md5: aeb0353e39e219cf0b574ab72b08ac26 + size: 151228 + - path: predicting_outcomes_in_heart_failure/data/split_data.py + hash: md5 + md5: 068ee60f2ab294944d3392ef6aa033e5 + size: 2262 + outs: + - path: data/processed + hash: md5 + md5: 7809f68c8d582ea4f49135f432bab71f.dir + size: 149721 + nfiles: 2 + training: + cmd: uv run predicting_outcomes_in_heart_failure/modeling/train.py + deps: + - path: data/processed/train.csv + hash: md5 + md5: c7af893630cff97ccd3ce364ed1ee6eb + size: 104547 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: 6e81f5b43ee6b2698cf3d582a9712c46 + size: 4811 + outs: + - path: models/decision_tree.joblib + hash: md5 + md5: 2277d8f53277419bf3594d2b2dd6c8b5 + size: 5561 + - path: models/logreg.joblib + hash: md5 + md5: bf500ad9a04a83594316bd2571584dc4 + size: 1519 + - path: models/random_forest.joblib + hash: md5 + md5: da8670002f66b3fcb7e27ea32c33f14d + size: 9919545 + - path: reports/decision_tree + hash: md5 + md5: 60beca0dca76c93ee85a1874eb68a1e9.dir + size: 838814 + nfiles: 2 + - path: reports/logreg + hash: md5 + md5: a6b3653e15d6d1b1472d1faeb11bd3cb.dir + size: 41389 + nfiles: 2 + - path: reports/random_forest + hash: md5 + md5: 06127fd0761a967d67577c88fc428426.dir + size: 175536 + nfiles: 2 + evaluation: + cmd: uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py + deps: + - path: data/processed/test.csv + hash: md5 + md5: d06bcd540eff4a5c8e6dd668a2b148ed + size: 45174 + - path: models + hash: md5 + md5: f8d5e9622b5c447a4ed7b66ad4608927.dir + size: 9926687 + nfiles: 5 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: ee20dc257b9ac063d61a815401341836 + size: 3256 + split_data@all: + cmd: "uv run predicting_outcomes_in_heart_failure/data/split_data.py --variant + all\n" + deps: + - path: data/interim/preprocessed.csv + hash: md5 + md5: aeb0353e39e219cf0b574ab72b08ac26 + size: 151228 + - path: data/interim/preprocessed_female_only.csv + hash: md5 + md5: 337b3e1dd4f47911997eded603ab3f4b + size: 31966 + - path: data/interim/preprocessed_male_only.csv + hash: md5 + md5: 9fa26adfc62e4ccd77089627dbe01f5d + size: 119503 + - path: data/interim/preprocessed_no_sex_column.csv + hash: md5 + md5: 95d3064bbfef4c8f09d45fe4e1c915d4 + size: 149390 + - path: predicting_outcomes_in_heart_failure/data/split_data.py + hash: md5 + md5: 63484f5b1cbe60115d922b0c68012a66 + size: 3616 + outs: + - path: data/processed/all + hash: md5 + md5: 7809f68c8d582ea4f49135f432bab71f.dir + size: 149721 + nfiles: 2 + split_data@female: + cmd: "uv run predicting_outcomes_in_heart_failure/data/split_data.py --variant + female\n" + deps: + - path: data/interim/preprocessed.csv + hash: md5 + md5: aeb0353e39e219cf0b574ab72b08ac26 + size: 151228 + - path: data/interim/preprocessed_female_only.csv + hash: md5 + md5: 337b3e1dd4f47911997eded603ab3f4b + size: 31966 + - path: data/interim/preprocessed_male_only.csv + hash: md5 + md5: 9fa26adfc62e4ccd77089627dbe01f5d + size: 119503 + - path: data/interim/preprocessed_no_sex_column.csv + hash: md5 + md5: 95d3064bbfef4c8f09d45fe4e1c915d4 + size: 149390 + - path: predicting_outcomes_in_heart_failure/data/split_data.py + hash: md5 + md5: 63484f5b1cbe60115d922b0c68012a66 + size: 3616 + outs: + - path: data/processed/female + hash: md5 + md5: d873e58476d480ce41edfc7806cbde86.dir + size: 31872 + nfiles: 2 + split_data@male: + cmd: "uv run predicting_outcomes_in_heart_failure/data/split_data.py --variant + male\n" + deps: + - path: data/interim/preprocessed.csv + hash: md5 + md5: aeb0353e39e219cf0b574ab72b08ac26 + size: 151228 + - path: data/interim/preprocessed_female_only.csv + hash: md5 + md5: 337b3e1dd4f47911997eded603ab3f4b + size: 31966 + - path: data/interim/preprocessed_male_only.csv + hash: md5 + md5: 9fa26adfc62e4ccd77089627dbe01f5d + size: 119503 + - path: data/interim/preprocessed_no_sex_column.csv + hash: md5 + md5: 95d3064bbfef4c8f09d45fe4e1c915d4 + size: 149390 + - path: predicting_outcomes_in_heart_failure/data/split_data.py + hash: md5 + md5: 63484f5b1cbe60115d922b0c68012a66 + size: 3616 + outs: + - path: data/processed/male + hash: md5 + md5: 248b95ea1cff032fcea0092636795342.dir + size: 118331 + nfiles: 2 + split_data@nosex: + cmd: "uv run predicting_outcomes_in_heart_failure/data/split_data.py --variant + nosex\n" + deps: + - path: data/interim/preprocessed.csv + hash: md5 + md5: aeb0353e39e219cf0b574ab72b08ac26 + size: 151228 + - path: data/interim/preprocessed_female_only.csv + hash: md5 + md5: 337b3e1dd4f47911997eded603ab3f4b + size: 31966 + - path: data/interim/preprocessed_male_only.csv + hash: md5 + md5: 9fa26adfc62e4ccd77089627dbe01f5d + size: 119503 + - path: data/interim/preprocessed_no_sex_column.csv + hash: md5 + md5: 95d3064bbfef4c8f09d45fe4e1c915d4 + size: 149390 + - path: predicting_outcomes_in_heart_failure/data/split_data.py + hash: md5 + md5: 63484f5b1cbe60115d922b0c68012a66 + size: 3616 + outs: + - path: data/processed/nosex + hash: md5 + md5: d6f6cbb3681cea6a652efef8141ef546.dir + size: 147879 + nfiles: 2 + training@0: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + all --model logreg\n" + deps: + - path: data/processed/all/train.csv + hash: md5 + md5: c7af893630cff97ccd3ce364ed1ee6eb + size: 104547 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/all/logreg.joblib + hash: md5 + md5: 44595213dc6024d0c3f043d080145c29 + size: 1519 + - path: reports/all/logreg + hash: md5 + md5: c3345c2b9f17869574dd78e20e9c5829.dir + size: 11970 + nfiles: 2 + training@1: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + all --model random_forest\n" + deps: + - path: data/processed/all/train.csv + hash: md5 + md5: c7af893630cff97ccd3ce364ed1ee6eb + size: 104547 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/all/random_forest.joblib + hash: md5 + md5: 93d7fcec110a443bd85ef6579c2a5c2e + size: 3441465 + - path: reports/all/random_forest + hash: md5 + md5: b929c6714dd61f762452554919b9b5e8.dir + size: 19446 + nfiles: 2 + training@2: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + all --model decision_tree\n" + deps: + - path: data/processed/all/train.csv + hash: md5 + md5: c7af893630cff97ccd3ce364ed1ee6eb + size: 104547 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/all/decision_tree.joblib + hash: md5 + md5: aedace81fc3fca71a5cbdb80f9cb5b28 + size: 2521 + - path: reports/all/decision_tree + hash: md5 + md5: ee869eabad22f17701ddd17ddb2f5474.dir + size: 7025256 + nfiles: 2 + training@3: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + female --model logreg\n" + deps: + - path: data/processed/female/train.csv + hash: md5 + md5: b37819cf2f8e1a53a7e715a46299dab0 + size: 22207 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/female/logreg.joblib + hash: md5 + md5: 3b8764d1ac710c8a250074bf2d8be1ea + size: 1519 + - path: reports/female/logreg + hash: md5 + md5: 4b14fe2da9a58fc5ed3e0f7587efe7a7.dir + size: 8706 + nfiles: 2 + training@4: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + female --model random_forest\n" + deps: + - path: data/processed/female/train.csv + hash: md5 + md5: b37819cf2f8e1a53a7e715a46299dab0 + size: 22207 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/female/random_forest.joblib + hash: md5 + md5: 343a3a957a3a505be860c350cebd2af8 + size: 880185 + - path: reports/female/random_forest + hash: md5 + md5: 23c999394e9140be73cb6db2ee039d2f.dir + size: 13839 + nfiles: 2 + training@5: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + female --model decision_tree\n" + deps: + - path: data/processed/female/train.csv + hash: md5 + md5: b37819cf2f8e1a53a7e715a46299dab0 + size: 22207 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/female/decision_tree.joblib + hash: md5 + md5: 432ddc9ffd54955ca752fc6b7da9a312 + size: 7161 + - path: reports/female/decision_tree + hash: md5 + md5: 8675acf1093c63f8758331c9aef72484.dir + size: 5042622 + nfiles: 2 + training@6: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + male --model logreg\n" + deps: + - path: data/processed/male/train.csv + hash: md5 + md5: 377755a75869ae39a64b39120c09aa5b + size: 82611 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/male/logreg.joblib + hash: md5 + md5: 703f955be56bea513500f9bdf1b541b3 + size: 1535 + - path: reports/male/logreg + hash: md5 + md5: fc5c9fda539597ab95b47e3cef544ae4.dir + size: 11191 + nfiles: 2 + training@7: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + male --model random_forest\n" + deps: + - path: data/processed/male/train.csv + hash: md5 + md5: 377755a75869ae39a64b39120c09aa5b + size: 82611 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/male/random_forest.joblib + hash: md5 + md5: a0b69f9da0287b8f8cc06f65ee0aa994 + size: 2747049 + - path: reports/male/random_forest + hash: md5 + md5: 89011934a73df9bc579839a96f4e24eb.dir + size: 17913 + nfiles: 2 + training@8: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + male --model decision_tree\n" + deps: + - path: data/processed/male/train.csv + hash: md5 + md5: 377755a75869ae39a64b39120c09aa5b + size: 82611 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/male/decision_tree.joblib + hash: md5 + md5: 440f308bbd3226e7fbcee4f16dbefe65 + size: 15177 + - path: reports/male/decision_tree + hash: md5 + md5: da1c41a5584c71b6a016d97c9a2d45a1.dir + size: 6493113 + nfiles: 2 + training@9: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + nosex --model logreg\n" + deps: + - path: data/processed/nosex/train.csv + hash: md5 + md5: c17c9ac3520d3f8ce46eb97f1c03b664 + size: 103261 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/nosex/logreg.joblib + hash: md5 + md5: 43e4b952e67bc6956c8fe3bd66e6fb39 + size: 1503 + - path: reports/nosex/logreg + hash: md5 + md5: ce5b23988c9364c9ecbd288ca1cfb77b.dir + size: 11959 + nfiles: 2 + training@10: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + nosex --model random_forest\n" + deps: + - path: data/processed/nosex/train.csv + hash: md5 + md5: c17c9ac3520d3f8ce46eb97f1c03b664 + size: 103261 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/nosex/random_forest.joblib + hash: md5 + md5: 5e94c1ecb14e0e6174af94b5f928daac + size: 13471369 + - path: reports/nosex/random_forest + hash: md5 + md5: 11dfa343b1ba9daa394b071ee340292a.dir + size: 19280 + nfiles: 2 + training@11: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/train.py --variant + nosex --model decision_tree\n" + deps: + - path: data/processed/nosex/train.csv + hash: md5 + md5: c17c9ac3520d3f8ce46eb97f1c03b664 + size: 103261 + - path: predicting_outcomes_in_heart_failure/modeling/train.py + hash: md5 + md5: e2ae238f0d45e8032e3944a24d0c27e3 + size: 7931 + outs: + - path: models/nosex/decision_tree.joblib + hash: md5 + md5: 72129c6d52da6da3b6108c8f8490950d + size: 2985 + - path: reports/nosex/decision_tree + hash: md5 + md5: 9b1e7f06634b537c9291dea1ac0d98d7.dir + size: 7002873 + nfiles: 2 + evaluation@0: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + all --model logreg\n" + deps: + - path: data/processed/all/test.csv + hash: md5 + md5: d06bcd540eff4a5c8e6dd668a2b148ed + size: 45174 + - path: models/all/logreg.joblib + hash: md5 + md5: 44595213dc6024d0c3f043d080145c29 + size: 1519 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/all/logreg.json + hash: md5 + md5: 17425d74cc062c83f054b6e7559ff7fd + size: 255 + evaluation@1: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + all --model random_forest\n" + deps: + - path: data/processed/all/test.csv + hash: md5 + md5: d06bcd540eff4a5c8e6dd668a2b148ed + size: 45174 + - path: models/all/random_forest.joblib + hash: md5 + md5: 93d7fcec110a443bd85ef6579c2a5c2e + size: 3441465 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/all/random_forest.json + hash: md5 + md5: 88b271ac93b466730d4edc6bba0f2eb6 + size: 261 + evaluation@2: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + all --model decision_tree\n" + deps: + - path: data/processed/all/test.csv + hash: md5 + md5: d06bcd540eff4a5c8e6dd668a2b148ed + size: 45174 + - path: models/all/decision_tree.joblib + hash: md5 + md5: aedace81fc3fca71a5cbdb80f9cb5b28 + size: 2521 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/all/decision_tree.json + hash: md5 + md5: 3a493b39b23186e90b649df8eeeacb47 + size: 262 + evaluation@3: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + female --model logreg\n" + deps: + - path: data/processed/female/test.csv + hash: md5 + md5: 6aa472fd41a51bea05b7d2b105f40d85 + size: 9665 + - path: models/female/logreg.joblib + hash: md5 + md5: 3b8764d1ac710c8a250074bf2d8be1ea + size: 1519 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/female/logreg.json + hash: md5 + md5: 0aeb472460b0188feb2a11770cb2c96f + size: 258 + evaluation@4: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + female --model random_forest\n" + deps: + - path: data/processed/female/test.csv + hash: md5 + md5: 6aa472fd41a51bea05b7d2b105f40d85 + size: 9665 + - path: models/female/random_forest.joblib + hash: md5 + md5: 343a3a957a3a505be860c350cebd2af8 + size: 880185 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/female/random_forest.json + hash: md5 + md5: abe473afdd356ec9d3915749b1b1ce98 + size: 265 + evaluation@5: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + female --model decision_tree\n" + deps: + - path: data/processed/female/test.csv + hash: md5 + md5: 6aa472fd41a51bea05b7d2b105f40d85 + size: 9665 + - path: models/female/decision_tree.joblib + hash: md5 + md5: 432ddc9ffd54955ca752fc6b7da9a312 + size: 7161 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/female/decision_tree.json + hash: md5 + md5: b8bb78497457625c190ab0e391c98c15 + size: 263 + evaluation@6: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + male --model logreg\n" + deps: + - path: data/processed/male/test.csv + hash: md5 + md5: 7c8ccfdb9557e357265780a1f504cee3 + size: 35720 + - path: models/male/logreg.joblib + hash: md5 + md5: 703f955be56bea513500f9bdf1b541b3 + size: 1535 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/male/logreg.json + hash: md5 + md5: 3ea9b47f01e8f1b52c1a27b46623aa9e + size: 256 + evaluation@7: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + male --model random_forest\n" + deps: + - path: data/processed/male/test.csv + hash: md5 + md5: 7c8ccfdb9557e357265780a1f504cee3 + size: 35720 + - path: models/male/random_forest.joblib + hash: md5 + md5: a0b69f9da0287b8f8cc06f65ee0aa994 + size: 2747049 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/male/random_forest.json + hash: md5 + md5: d25cd10633b8514e23aeb95c31cc7fb4 + size: 263 + evaluation@8: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + male --model decision_tree\n" + deps: + - path: data/processed/male/test.csv + hash: md5 + md5: 7c8ccfdb9557e357265780a1f504cee3 + size: 35720 + - path: models/male/decision_tree.joblib + hash: md5 + md5: 440f308bbd3226e7fbcee4f16dbefe65 + size: 15177 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/male/decision_tree.json + hash: md5 + md5: 4646c2963e50087a6b237c7b557e0628 + size: 263 + evaluation@9: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + nosex --model logreg\n" + deps: + - path: data/processed/nosex/test.csv + hash: md5 + md5: d79d369fb709d0f0eb9d3c9096488118 + size: 44618 + - path: models/nosex/logreg.joblib + hash: md5 + md5: 43e4b952e67bc6956c8fe3bd66e6fb39 + size: 1503 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/nosex/logreg.json + hash: md5 + md5: 570687d930d6363d89908ea20838c8d6 + size: 257 + evaluation@10: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + nosex --model random_forest\n" + deps: + - path: data/processed/nosex/test.csv + hash: md5 + md5: d79d369fb709d0f0eb9d3c9096488118 + size: 44618 + - path: models/nosex/random_forest.joblib + hash: md5 + md5: 5e94c1ecb14e0e6174af94b5f928daac + size: 13471369 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/nosex/random_forest.json + hash: md5 + md5: 6a135f593534616b51858c7f6f251d36 + size: 264 + evaluation@11: + cmd: "uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py --variant + nosex --model decision_tree\n" + deps: + - path: data/processed/nosex/test.csv + hash: md5 + md5: d79d369fb709d0f0eb9d3c9096488118 + size: 44618 + - path: models/nosex/decision_tree.joblib + hash: md5 + md5: 72129c6d52da6da3b6108c8f8490950d + size: 2985 + - path: predicting_outcomes_in_heart_failure/modeling/evaluate.py + hash: md5 + md5: 90ecfc732599b4427b3d585d27a47b60 + size: 6262 + outs: + - path: metrics/test/nosex/decision_tree.json + hash: md5 + md5: dca85bcdc4b67a21cee91b31f45d6225 + size: 264 diff --git a/dvc.yaml b/dvc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e230fe54d7847d3599b52a550ecccf0b0a9c4917 --- /dev/null +++ b/dvc.yaml @@ -0,0 +1,86 @@ +stages: + download_data: + cmd: uv run predicting_outcomes_in_heart_failure/data/dataset.py + deps: + - predicting_outcomes_in_heart_failure/data/dataset.py + outs: + - data/raw/heart.csv + + preprocessing: + cmd: uv run predicting_outcomes_in_heart_failure/data/preprocess.py + deps: + - predicting_outcomes_in_heart_failure/data/preprocess.py + - data/raw/heart.csv + outs: + - data/interim/preprocessed.csv + - data/interim/preprocessed_female_only.csv + - data/interim/preprocessed_male_only.csv + - data/interim/preprocessed_no_sex_column.csv + - data/interim/preprocess_artifacts/scaler.joblib + + split_data: + foreach: [all, female, male, nosex] + do: + cmd: > + uv run predicting_outcomes_in_heart_failure/data/split_data.py + --variant ${item} + deps: + - predicting_outcomes_in_heart_failure/data/split_data.py + - data/interim/preprocessed.csv + - data/interim/preprocessed_female_only.csv + - data/interim/preprocessed_male_only.csv + - data/interim/preprocessed_no_sex_column.csv + outs: + - data/processed/${item} + + training: + foreach: + - { variant: all, model: logreg } + - { variant: all, model: random_forest } + - { variant: all, model: decision_tree } + - { variant: female, model: logreg } + - { variant: female, model: random_forest } + - { variant: female, model: decision_tree } + - { variant: male, model: logreg } + - { variant: male, model: random_forest } + - { variant: male, model: decision_tree } + - { variant: nosex, model: logreg } + - { variant: nosex, model: random_forest } + - { variant: nosex, model: decision_tree } + do: + cmd: > + uv run predicting_outcomes_in_heart_failure/modeling/train.py + --variant ${item.variant} + --model ${item.model} + deps: + - predicting_outcomes_in_heart_failure/modeling/train.py + - data/processed/${item.variant}/train.csv + outs: + - models/${item.variant}/${item.model}.joblib + - reports/${item.variant}/${item.model} + + evaluation: + foreach: + - { variant: all, model: logreg } + - { variant: all, model: random_forest } + - { variant: all, model: decision_tree } + - { variant: female, model: logreg } + - { variant: female, model: random_forest } + - { variant: female, model: decision_tree } + - { variant: male, model: logreg } + - { variant: male, model: random_forest } + - { variant: male, model: decision_tree } + - { variant: nosex, model: logreg } + - { variant: nosex, model: random_forest } + - { variant: nosex, model: decision_tree } + do: + cmd: > + uv run predicting_outcomes_in_heart_failure/modeling/evaluate.py + --variant ${item.variant} + --model ${item.model} + deps: + - predicting_outcomes_in_heart_failure/modeling/evaluate.py + - models/${item.variant}/${item.model}.joblib + - data/processed/${item.variant}/test.csv + outs: + - metrics/test/${item.variant}/${item.model}.json diff --git a/metrics/test/all/.gitignore b/metrics/test/all/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..884cbbc7eeaf13597e4e4e2d0a9981f7fbf6becb --- /dev/null +++ b/metrics/test/all/.gitignore @@ -0,0 +1,3 @@ +/logreg.json +/random_forest.json +/decision_tree.json diff --git a/metrics/test/female/.gitignore b/metrics/test/female/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..884cbbc7eeaf13597e4e4e2d0a9981f7fbf6becb --- /dev/null +++ b/metrics/test/female/.gitignore @@ -0,0 +1,3 @@ +/logreg.json +/random_forest.json +/decision_tree.json diff --git a/metrics/test/male/.gitignore b/metrics/test/male/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..884cbbc7eeaf13597e4e4e2d0a9981f7fbf6becb --- /dev/null +++ b/metrics/test/male/.gitignore @@ -0,0 +1,3 @@ +/logreg.json +/random_forest.json +/decision_tree.json diff --git a/metrics/test/nosex/.gitignore b/metrics/test/nosex/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..884cbbc7eeaf13597e4e4e2d0a9981f7fbf6becb --- /dev/null +++ b/metrics/test/nosex/.gitignore @@ -0,0 +1,3 @@ +/logreg.json +/random_forest.json +/decision_tree.json diff --git a/models/.gitignore b/models/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..be1686e70901e5deb1d9ac6014efff45f70cb07f --- /dev/null +++ b/models/.gitignore @@ -0,0 +1,3 @@ +/decision_tree.joblib +/random_forest.joblib +/logreg.joblib diff --git a/models/README.md b/models/README.md new file mode 100644 index 0000000000000000000000000000000000000000..26411e8a15451d45a0e866980c44345caece5ac4 --- /dev/null +++ b/models/README.md @@ -0,0 +1,110 @@ +# Model Card + +## Table of Contents + +- [Model Details](#model-details) + - [Training Information](#training-information) +- [Intended Use](#intended-use) + - [Primary Intended Uses](#primary-intended-uses) + - [Primary Intended Users](#primary-intended-users) + - [Out-of-scope Use Cases](#out-of-scope-use-cases) +- [Factors](#factors) + - [Relevant Factors](#relevant-factors) + - [Evaluation Factors](#evaluation-factors) + +- [Metrics](#metrics) + - [Model Performance](#model-performance) + - [Variation Approaches](#variation-approaches) + +- [Evaluation Data](#evaluation-data) + - [Datasets](#datasets) + - [Motivation](#motivation) + - [Preprocessing](#preprocessing) + +- [Training Data](#training-data) + - [Datasets](#datasets-1) + - [Preprocessing](#preprocessing-1) + +- [Ethical Considerations](#ethical-considerations) + +- [Caveats and Recommendations](#caveats-and-recommendations) + +## Model Details +- Developed by: D. Boccuzzi, M. Capone, F. Rosmarino +- Model Date: November 11th, 2025 +- Model Version: 6 - nosex +- Model Type: RandomForestClassifier +### Training information +- Best hyperparameters tuned with a 5-fold cross validation: + - `max_depth` 12 + - `n_estimators` 800 + - `class_weight` balanced +- Applied approaches: +During training, oversampling technique was applied to balance the dataset and reduce bias toward the majority class. This ensured that the model learned equally from positive and negative cases, improving prediction performance for the minority class. +- Training started at: 11:26:59 2025-11-12 +- Training ended at: 11:34:29 2025-11-12 + +## Intended Use +### Primary intended uses +The CardioTrack ML system is designed to support early detection of heart failure by analyzing clinical features and identifying patients who may be at risk. Its purpose is to assist cardiologists in deciding when further diagnostic tests, monitoring, or preventive treatments are needed. The system is also intended for local public health authorities, who can use aggregated predictions to plan healthcare resources and implement prevention strategies within the population. +### Primary intended users +The primary users of the model are cardiologists and other qualified medical professionals who rely on clinical decision support tools. They are responsible for interpreting the model’s predictions in conjunction with the patient’s medical history and additional clinical information. Public health authorities may also use aggregated, non-individual results to support long-term planning and policy development. +### Out-of-scope use cases +The model should not be used without access to complete and reliable clinical features, and it is not suitable for real-time emergency triage or for predictive tasks not directly related to heart failure. + +## Factors +### Relevant factors +Model performance may vary depending on patient characteristics that influence heart disease risk, as reflected in the contributions of individual clinical features. Age remains a relevant factor because it strongly correlates with cardiovascular conditions. In addition, features such as ST_Slope, ChestPainType, MaxHR, and ExerciseAngina have the largest impact on individual predictions, as highlighted by SHAP module for XAI. These features capture meaningful physiological and clinical differences among patients and explain why the model predicts higher or lower risk for specific individuals. Instrumentation and environmental factors are not relevant because the model operates on structured clinical data rather than on signals or images affected by measurement devices or environmental conditions. +### Evaluation Factors +The evaluation focuses on key clinical features that the model heavily relies on. The Relevant factors were chosen because they are both present in the dataset and have the largest impact on the model’s outputs, allowing clear interpretation of how predictions are made. + +## Metrics +### Model Performance +- `F1 Score` 0.8990 +- `Recall` 0.9019 +- `Accuracy` 0.8876 +- `ROC-AUC` 0.9399 +### Variation approaches +The reported metrics were computed using the best model selected during cross validation for hyperparameter tuning, and evaluated on a completely independent test set. This setup was chosen because it provides a cleaner estimate of real-world performance, reduces the risk of overfitting to validation folds, and ensures that the results reflect the model’s generalization ability. + +## Evaluation Data +### Datasets +The evaluation was performed using 276 of 918 (30%) observations of the Kaggle's [Heart Failure Prediction Dataset](https://www.kaggle.com/datasets/fedesoriano/heart-failure-prediction), which contains clinical data from both healthy individuals and patients diagnosed with heart failure. +### Motivation +This dataset was chosen because it provides a comprehensive set of relevant clinical features that capture key cardiovascular risk factors, enabling the model to perform early detection of heart failure in individual patients. Its publicly available nature ensures transparency. +### Preprocessing +Before evaluation, the data was preprocessed as follows: + +- **Cleaning of invalid values** + Rows with impossible clinical values (e.g., `RestingBP = 0`) were removed. + Zero cholesterol values were treated as missing and replaced using a central-tendency statistic. + +- **Encoding of categorical variables** + Binary categories were converted to numerical format, while multi-class fields (`ChestPainType`, `RestingECG`, `ST_Slope`) were one-hot encoded. + +- **Scaling of numerical features** + Continuous variables were standardized to have mean 0 and unit variance. + +- **Removal of the `Sex` feature** + The Sex feature was removed to reduce potential fairness concerns and because it was not required for the planned experiments. + + - The processed dataset is versioned on Dagshub at following [link](https://dagshub.com/se4ai2526-uniba/CardioTrack) + +## Training Data +### Datasets +The training data mirrors the evaluation dataset, using 642 of 918 (70%) of the same Kaggle Heart Failure Prediction Dataset. +### Preprocessing +The training data underwent the same preprocessing steps as the evaluation data. Additionally, RandomOversampler technique was applied to balance the classes, ensuring that the model learned equally from positive (heart failure) and negative cases. + +## Ethical Considerations +The Cardio Track ML system is intended to support clinical decision-making but not replace professional judgment. Ethical considerations include: +- **Privacy and security**: All patient data is processed on-premises, in accordance with hospital IT protocols, protecting sensitive health information. +- **Transparency**: Feature importance with SHAP visualizations allow clinicians to interpret predictions. +- **Clinical responsibility**: Diagnosis must be combined with patient history, exams, and expert judgment. Misuse in isolation could lead to incorrect interventions. + +## Caveats and Recommendations +- **Inference time**: The model’s inference time is about 0.2 seconds, but it can varies with computing power where inference is run. +- **Limitations**: The model is trained on a specific public dataset and may not capture rare cardiovascular conditions or population-specific variations. +- **Data quality**: Accurate predictions depend on complete and correctly measured clinical features. Erroneous data can reduce performance. Missing data is not allowed. +- **Not for emergency triage**: Predictions are intended for early detection and planning, not for immediate emergency decision-making. +- **Periodic retraining**: To maintain accuracy, the model should be updated with newly collected clinical data to account for shifts in patient population or disease prevalence. diff --git a/models/all/.gitignore b/models/all/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c62296332f6b01b0ac4a7f7f353bc9109eb3555c --- /dev/null +++ b/models/all/.gitignore @@ -0,0 +1,3 @@ +/logreg.joblib +/random_forest.joblib +/decision_tree.joblib diff --git a/models/female/.gitignore b/models/female/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c62296332f6b01b0ac4a7f7f353bc9109eb3555c --- /dev/null +++ b/models/female/.gitignore @@ -0,0 +1,3 @@ +/logreg.joblib +/random_forest.joblib +/decision_tree.joblib diff --git a/models/male/.gitignore b/models/male/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c62296332f6b01b0ac4a7f7f353bc9109eb3555c --- /dev/null +++ b/models/male/.gitignore @@ -0,0 +1,3 @@ +/logreg.joblib +/random_forest.joblib +/decision_tree.joblib diff --git a/models/nosex/.gitignore b/models/nosex/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c62296332f6b01b0ac4a7f7f353bc9109eb3555c --- /dev/null +++ b/models/nosex/.gitignore @@ -0,0 +1,3 @@ +/logreg.joblib +/random_forest.joblib +/decision_tree.joblib diff --git a/notebooks/.gitkeep b/notebooks/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/notebooks/1.0-mc-initial-data-exploration.ipynb b/notebooks/1.0-mc-initial-data-exploration.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..1680fd282c1b03230f6a637d72dbc5b4a28167c1 --- /dev/null +++ b/notebooks/1.0-mc-initial-data-exploration.ipynb @@ -0,0 +1,1554 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "67ad7afe", + "metadata": {}, + "source": [ + "# EDA — Heart Failure Prediction\n", + "\n", + "This notebook presents a comprehensive **Exploratory Data Analysis (EDA)** on the *Heart Failure Prediction* dataset. \n", + "The goal is to explore and understand the key patterns, distributions, and relationships among patient health features that may influence the presence of heart disease.\n", + "\n", + "Through statistical summaries and visual insights, we will:\n", + "- Examine the structure and quality of the dataset.\n", + "- Explore distributions of numerical and categorical variables.\n", + "- Analyze correlations between features and the target variable.\n", + "- Identify potential trends and anomalies relevant for further modeling.\n", + "\n", + "> Dataset: `heart.csv`\n" + ] + }, + { + "cell_type": "markdown", + "id": "01e79558", + "metadata": {}, + "source": [ + "## 1. Setup\n", + "Import core libraries (pandas, numpy, matplotlib) and set basic display options." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "2698258d", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "pd.set_option('display.max_columns', None)\n", + "pd.set_option('display.width', 120)" + ] + }, + { + "cell_type": "markdown", + "id": "8e1eb1a3", + "metadata": {}, + "source": [ + "## 2. Load dataset\n", + "Load `heart.csv`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f86bb3a0", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Age", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Sex", + "rawType": "object", + "type": "string" + }, + { + "name": "ChestPainType", + "rawType": "object", + "type": "string" + }, + { + "name": "RestingBP", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Cholesterol", + "rawType": "int64", + "type": "integer" + }, + { + "name": "FastingBS", + "rawType": "int64", + "type": "integer" + }, + { + "name": "RestingECG", + "rawType": "object", + "type": "string" + }, + { + "name": "MaxHR", + "rawType": "int64", + "type": "integer" + }, + { + "name": "ExerciseAngina", + "rawType": "object", + "type": "string" + }, + { + "name": "Oldpeak", + "rawType": "float64", + "type": "float" + }, + { + "name": "ST_Slope", + "rawType": "object", + "type": "string" + }, + { + "name": "HeartDisease", + "rawType": "int64", + "type": "integer" + } + ], + "ref": "ab5a428b-37fe-49dd-86f7-fa6f767a97e3", + "rows": [ + [ + "0", + "40", + "M", + "ATA", + "140", + "289", + "0", + "Normal", + "172", + "N", + "0.0", + "Up", + "0" + ], + [ + "1", + "49", + "F", + "NAP", + "160", + "180", + "0", + "Normal", + "156", + "N", + "1.0", + "Flat", + "1" + ], + [ + "2", + "37", + "M", + "ATA", + "130", + "283", + "0", + "ST", + "98", + "N", + "0.0", + "Up", + "0" + ], + [ + "3", + "48", + "F", + "ASY", + "138", + "214", + "0", + "Normal", + "108", + "Y", + "1.5", + "Flat", + "1" + ], + [ + "4", + "54", + "M", + "NAP", + "150", + "195", + "0", + "Normal", + "122", + "N", + "0.0", + "Up", + "0" + ] + ], + "shape": { + "columns": 12, + "rows": 5 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AgeSexChestPainTypeRestingBPCholesterolFastingBSRestingECGMaxHRExerciseAnginaOldpeakST_SlopeHeartDisease
040MATA1402890Normal172N0.0Up0
149FNAP1601800Normal156N1.0Flat1
237MATA1302830ST98N0.0Up0
348FASY1382140Normal108Y1.5Flat1
454MNAP1501950Normal122N0.0Up0
\n", + "
" + ], + "text/plain": [ + " Age Sex ChestPainType RestingBP Cholesterol FastingBS RestingECG MaxHR ExerciseAngina Oldpeak ST_Slope \\\n", + "0 40 M ATA 140 289 0 Normal 172 N 0.0 Up \n", + "1 49 F NAP 160 180 0 Normal 156 N 1.0 Flat \n", + "2 37 M ATA 130 283 0 ST 98 N 0.0 Up \n", + "3 48 F ASY 138 214 0 Normal 108 Y 1.5 Flat \n", + "4 54 M NAP 150 195 0 Normal 122 N 0.0 Up \n", + "\n", + " HeartDisease \n", + "0 0 \n", + "1 1 \n", + "2 0 \n", + "3 1 \n", + "4 0 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pathlib import Path\n", + "\n", + "DATA_PATH = Path(\"../data/raw/heart.csv\")\n", + "\n", + "df = pd.read_csv(DATA_PATH)\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "id": "318b4b98", + "metadata": {}, + "source": [ + "## 3. Initial overview\n", + "Quick check of shape, column names, data types, and missing values to understand the raw structure." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6d1d7b40", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape: (918, 12)\n", + "\n", + "Columns: ['Age', 'Sex', 'ChestPainType', 'RestingBP', 'Cholesterol', 'FastingBS', 'RestingECG', 'MaxHR', 'ExerciseAngina', 'Oldpeak', 'ST_Slope', 'HeartDisease']\n", + "\n", + "Data types:\n", + "Age int64\n", + "Sex object\n", + "ChestPainType object\n", + "RestingBP int64\n", + "Cholesterol int64\n", + "FastingBS int64\n", + "RestingECG object\n", + "MaxHR int64\n", + "ExerciseAngina object\n", + "Oldpeak float64\n", + "ST_Slope object\n", + "HeartDisease int64\n", + "dtype: object\n", + "\n", + "Missing values ​​per column:\n", + "Age 0\n", + "Sex 0\n", + "ChestPainType 0\n", + "RestingBP 0\n", + "Cholesterol 0\n", + "FastingBS 0\n", + "RestingECG 0\n", + "MaxHR 0\n", + "ExerciseAngina 0\n", + "Oldpeak 0\n", + "ST_Slope 0\n", + "HeartDisease 0\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "print(\"Shape:\", df.shape)\n", + "print(\"\\nColumns:\", df.columns.tolist())\n", + "print(\"\\nData types:\")\n", + "print(df.dtypes)\n", + "print(\"\\nMissing values ​​per column:\")\n", + "print(df.isnull().sum())" + ] + }, + { + "cell_type": "markdown", + "id": "68ea3ace", + "metadata": {}, + "source": [ + "## 4. Descriptive statistics\n", + "View summary statistics for numerical and categorical columns to understand central tendency and spread." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c9945a09", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "object", + "type": "string" + }, + { + "name": "count", + "rawType": "object", + "type": "unknown" + }, + { + "name": "unique", + "rawType": "object", + "type": "unknown" + }, + { + "name": "top", + "rawType": "object", + "type": "unknown" + }, + { + "name": "freq", + "rawType": "object", + "type": "unknown" + }, + { + "name": "mean", + "rawType": "object", + "type": "unknown" + }, + { + "name": "std", + "rawType": "object", + "type": "unknown" + }, + { + "name": "min", + "rawType": "object", + "type": "unknown" + }, + { + "name": "25%", + "rawType": "object", + "type": "unknown" + }, + { + "name": "50%", + "rawType": "object", + "type": "unknown" + }, + { + "name": "75%", + "rawType": "object", + "type": "unknown" + }, + { + "name": "max", + "rawType": "object", + "type": "unknown" + } + ], + "ref": "3dbebe0d-54cc-49fb-a7d7-962ab2aef7f1", + "rows": [ + [ + "Age", + "918.0", + null, + null, + null, + "53.510893246187365", + "9.43261650673201", + "28.0", + "47.0", + "54.0", + "60.0", + "77.0" + ], + [ + "Sex", + "918", + "2", + "M", + "725", + null, + null, + null, + null, + null, + null, + null + ], + [ + "ChestPainType", + "918", + "4", + "ASY", + "496", + null, + null, + null, + null, + null, + null, + null + ], + [ + "RestingBP", + "918.0", + null, + null, + null, + "132.39651416122004", + "18.5141541199078", + "0.0", + "120.0", + "130.0", + "140.0", + "200.0" + ], + [ + "Cholesterol", + "918.0", + null, + null, + null, + "198.7995642701525", + "109.38414455220348", + "0.0", + "173.25", + "223.0", + "267.0", + "603.0" + ], + [ + "FastingBS", + "918.0", + null, + null, + null, + "0.23311546840958605", + "0.423045624739303", + "0.0", + "0.0", + "0.0", + "0.0", + "1.0" + ], + [ + "RestingECG", + "918", + "3", + "Normal", + "552", + null, + null, + null, + null, + null, + null, + null + ], + [ + "MaxHR", + "918.0", + null, + null, + null, + "136.80936819172112", + "25.4603341382503", + "60.0", + "120.0", + "138.0", + "156.0", + "202.0" + ], + [ + "ExerciseAngina", + "918", + "2", + "N", + "547", + null, + null, + null, + null, + null, + null, + null + ], + [ + "Oldpeak", + "918.0", + null, + null, + null, + "0.8873638344226579", + "1.0665701510493257", + "-2.6", + "0.0", + "0.6", + "1.5", + "6.2" + ], + [ + "ST_Slope", + "918", + "3", + "Flat", + "460", + null, + null, + null, + null, + null, + null, + null + ], + [ + "HeartDisease", + "918.0", + null, + null, + null, + "0.5533769063180828", + "0.4974137382845968", + "0.0", + "0.0", + "1.0", + "1.0", + "1.0" + ] + ], + "shape": { + "columns": 11, + "rows": 12 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countuniquetopfreqmeanstdmin25%50%75%max
Age918.0NaNNaNNaN53.5108939.43261728.047.054.060.077.0
Sex9182M725NaNNaNNaNNaNNaNNaNNaN
ChestPainType9184ASY496NaNNaNNaNNaNNaNNaNNaN
RestingBP918.0NaNNaNNaN132.39651418.5141540.0120.0130.0140.0200.0
Cholesterol918.0NaNNaNNaN198.799564109.3841450.0173.25223.0267.0603.0
FastingBS918.0NaNNaNNaN0.2331150.4230460.00.00.00.01.0
RestingECG9183Normal552NaNNaNNaNNaNNaNNaNNaN
MaxHR918.0NaNNaNNaN136.80936825.46033460.0120.0138.0156.0202.0
ExerciseAngina9182N547NaNNaNNaNNaNNaNNaNNaN
Oldpeak918.0NaNNaNNaN0.8873641.06657-2.60.00.61.56.2
ST_Slope9183Flat460NaNNaNNaNNaNNaNNaNNaN
HeartDisease918.0NaNNaNNaN0.5533770.4974140.00.01.01.01.0
\n", + "
" + ], + "text/plain": [ + " count unique top freq mean std min 25% 50% 75% max\n", + "Age 918.0 NaN NaN NaN 53.510893 9.432617 28.0 47.0 54.0 60.0 77.0\n", + "Sex 918 2 M 725 NaN NaN NaN NaN NaN NaN NaN\n", + "ChestPainType 918 4 ASY 496 NaN NaN NaN NaN NaN NaN NaN\n", + "RestingBP 918.0 NaN NaN NaN 132.396514 18.514154 0.0 120.0 130.0 140.0 200.0\n", + "Cholesterol 918.0 NaN NaN NaN 198.799564 109.384145 0.0 173.25 223.0 267.0 603.0\n", + "FastingBS 918.0 NaN NaN NaN 0.233115 0.423046 0.0 0.0 0.0 0.0 1.0\n", + "RestingECG 918 3 Normal 552 NaN NaN NaN NaN NaN NaN NaN\n", + "MaxHR 918.0 NaN NaN NaN 136.809368 25.460334 60.0 120.0 138.0 156.0 202.0\n", + "ExerciseAngina 918 2 N 547 NaN NaN NaN NaN NaN NaN NaN\n", + "Oldpeak 918.0 NaN NaN NaN 0.887364 1.06657 -2.6 0.0 0.6 1.5 6.2\n", + "ST_Slope 918 3 Flat 460 NaN NaN NaN NaN NaN NaN NaN\n", + "HeartDisease 918.0 NaN NaN NaN 0.553377 0.497414 0.0 0.0 1.0 1.0 1.0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe(include='all').T" + ] + }, + { + "cell_type": "markdown", + "id": "222838b9", + "metadata": {}, + "source": [ + "## 5. Target distribution (HeartDisease)\n", + "Visualize the balance between the two classes (0 = Healthy, 1 = Disease)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "10735609", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc8AAAGJCAYAAADsebhaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAORRJREFUeJzt3Qm8TfX+//GPY56njGWqZCgiCqXJLHUVFSWpK5WLQrmce0VRKRVKJN2iScqvSJQyphsZjgYhpRIlQ5nJvP6P9/d/137sfc4+x1nHOfYZXs/HYzn2WmuvvebP+k7rm8vzPM8AAECqxaV+VgAAQPAEACANSHkCABAQwRMAgIAIngAABETwBAAgIIInAAABETwBAAiI4AkAQEAET2RbV111lRt8GzdutFy5ctnkyZMz/Lf1G/ot/aavatWqdu2119rpsGjRIvf7+hsLJ06csAsuuMAee+wxy4livf8zwqBBg6xRo0axXo1Mg+CZjeniTc2Q2S7wJUuW2MMPP2y7d++2zGD8+PGnJeBmp3V76623bPPmzda7d+8kDxQrV66M+h096CjgxsqUKVNszJgxScb7D13+kDdvXjvjjDPs0ksvtX/961+2adMmywn69u1rX3/9tc2cOTPWq5Ip5OLdttnXG2+8EfH5tddes7lz59rrr78eMb5ly5ZWrlw5yyyefvppGzBggP38888utZZWfqrTfzjQa5wPHz7sbn65c+dO9XJ0Q9fNMshDxvHjx+3o0aOWP39+d8MVbYuWNWvWrMDbEnTdlPI7cuSI5cuXz+LiTv8zcr169Vwq5cUXX4wInnfeeaetWLHCGjZsGPV4/fHHH/btt99aLChXQL8dnlsg+lytWjW75ZZb7JprrnH7dteuXW473nvvPXd8X375ZevcuXOm2f8ZpVOnTvb777/b4sWLLafLE+sVQMa57bbbIj5/8cUXLngmHp8WCkSHDh2yggULWlahm1yBAgUy9DcOHDhghQsXdsE5SIBOb7phZ/S2JufLL790KZRnnnnGsgL/mJ3MRRddlOTa+eWXX6xVq1bWrVs3q1Wrll144YUx3/8Z6eabb7abbrrJfvrpJzv77LMtJ8s+j0RIk0mTJlmzZs2sbNmyLpVUu3Zte+GFF5LM55fXffzxxy7VoKDppyp0A/nb3/7mbkBaTr9+/dx80bKEly1bZm3atLHixYtboUKF7Morr7TPP/88NF3ZtUp1ip72/ayyxKmBxCZOnGjnnHOOW69LLrnEPvvssyTzRCvz3Lp1q0sNnXXWWW77K1SoYO3btw/9nrZ7zZo19umnn4bWxU/R+tmQmvaPf/zDbbuWEz4t2np/8sknLmWmm6v2t1Iv4bQP/NRquMTLTGndkitzmzZtmjVo0MDtJ6VYFQx+++23iHnuuOMOK1KkiBt//fXXu/+XKVPGHnzwQZeiPpkZM2a4FNcVV1xh6ZWD4q9zqVKlXApPWcLhdLx1U69cubI7jpUqVXLn4V9//RV123788UeXiixatKh16dLF7bfZs2e7c9nfl6nJ9ahSpYo7Lkpljhw5MjQ+2v7/4YcfrGPHjla+fHl37HWuaFv27NmTYdt7svPb99FHH9nll1/urmHtk3bt2rlzK7EWLVq4v++//77ldKQ8czgFyvPPP98Fvzx58tgHH3zgAoGynXr16hUx7/r1613W1T333GM9evSwGjVquKd2BV9l5dx///3uxqCyo4ULFyb5rQULFljbtm3djWHo0KHu6dwP3roZKOh16NDBvv/+e1dmNnr0aHeDF928k6MsM62TyqBULqOnYm2Pbjy6qaRENzPdJPr06eNultu3b3epc5Vj6bPKwDRNN9x///vf7juJs7i1v7R+Q4YMcfsjJbqBKuvr3nvvdakVbb9ugnPmzHHZ50GkZt3C+dmmF198sY0YMcK2bdtmzz77rHt4UWqxRIkSoXkVJFu3bu2yXpWNPm/ePJeS1ANKz549T1pmrexkZY9Ho2Ch7NnElM2dmCocPfTQQy7Fc9ddd9mOHTts7NixLjCHr7MeCg4ePOjWrXTp0rZ8+XI336+//uqmhTt27JjbtqZNm7pt00Oczlutl+bXeSfar6nRpEkTt1903iRHwVW/qWIDHTP9nh5OlIWvsn09TGbE9p7s/BYV4+hc1Po9+eSTbrm6L2j/6DfDHyK0ntrWzz//3AXrHE1lnsgZevXqpb5bI8YdPHgwyXytW7f2zj777IhxVapUcd+dM2dOxPhnnnnGjZ8xY0Zo3F9//eXVrFnTjV+4cKEbd+LECa969epu2fp/+O9Xq1bNa9myZWjcU0895b77888/n3Sbjhw54pUtW9arV6+ed/jw4dD4iRMnumVceeWVoXFansZNmjTJfd61a5f7rN9Lyfnnnx+xHJ+Wo+83bdrUO3bsWNRp4dvg78N33303NG7Pnj1ehQoVvPr164fGDR06NMlxSm6Zya2b9nv4/vf30wUXXOCOj2/WrFluviFDhoTGdevWzY0bNmxYxDK1jg0aNPBO5qyzzvI6duyY7PqnNGh7fBs3bvRy587tPfbYYxHLWb16tZcnT56I8dHO4xEjRni5cuXyfvnllyTbNmjQoCTzt2vXzh2jxPzzJqXzpH379m4eHc9o+//LL790n6dNm5bsMtJ7e1Nzfu/bt88rUaKE16NHj4jxW7du9YoXL55kvLRq1cqrVauWl9ORbZvDhZdZ+ikCZaUq9ZY4O0nZqHo6DacU05lnnulSej5lSSllGu6rr75yqa5bb73V/vzzT/c7GpRSa968uauAoNRuUKq5qadppeSUVRiePec/zae07fqOstZUASSttK2pLd+sWLGi3XDDDaHPxYoVs9tvv9094SuLLaP4+0mp5PCyOGXP1axZ02VZJqZ9Gk7ZejovTkbHt2TJkslOHzdunEv9JB7q1q0bMZ+ys3VOKBXmny8alGqrXr16RO5G+Hmsc0rzKSdCZfPat4mdLPUclJ9K3bdvX9Tp/rmo4gyl7KJJ7+1Nzfmt/a6Ur3KUwn9T57NyHaLlIOnY/hEl5yCnIds2h1P2i7JQly5dmuSiVvAMD0AKnompjEjZOInL6M4999yIzwqcouyh5Oj3UrrpRqPfF91cwinL8GQVGlQGpGyqBx54wGV3Nm7c2JXrKpjphpVa0fZLcrRfEu+r8847z/1VOVSQ303LflJWe2IKnv/9738jxinAJs4q17FJ7UOGbuLJUfZ8tNq2iW/KOme0nMTH1heeLaxsSGWbqxlF4nVM/BCo4gm/bDq97N+/3/1VeWFy50j//v1t1KhR9uabb7oHET1wqszZv8bSe3tTc37716WKTqLRw11iWsdcUcrkcxqCZw6mShNK9enmqYta5YN6Uv3www9duU/ilOCp1Kz1l/XUU0+5yjLRpLaMKT2pjPS6665zlVyUKlB5k8oDVT5bv379VC0jvWscJ3djSk1lnfRyKjWFVQZ3Kin58HNG+0KVWaKtj3++aL+ovHjnzp02cOBAdz6r4ovKFJUDkfg8VlBJ7+YjauKiCmPRgo1PZcZaH1W2UaWx++67z51rqgWvYJ4R23uy89ufV+We0R7c9KCRmI7tGf+ri5CTETxzMFUOUgUGPb2q1p4vWlZNSrUN165dm+RpdMOGDRHzKXUqurn4NfaSE+SpVr/vP0GHPz2r8onaifpNB1KiddPTuQYtR8FdNzq/nWx6PmVrvyTeV6ogJX7FDD/1rey08Eo8fuoxXGrXzd9PqvSVOJWhcf709KCbufb9qdJx0b5Sqs1PnUezevVqtw9fffVVl6rypVSBJ5q0Hmfl2uhBNDVNwOrUqeOGwYMHu4pVl112mU2YMMEeffTRDNvelM5v/7pU4D/ZdelL7XWV3VHmmYP5T7fhWWzK8lEN0NRSGaieeMPfOqL2ny+99FLEfKphqwtVtRv9LK5wqlXo89vcpeYNQ8r+U/aibkCq0Rhes/Rk31c2tdY1nNZRWW96qAhfn/R629GWLVts+vTpoc979+51L6/QDc1/8vdvaOEN0VWupZtlYqldN+0n3SC1n8K3TamcdevWubLP9KLap0qJhf9OWqjmtc7RRx55JEk2sD6rbDW581j/V03iILQvE2fxnoweaJTaU46N38QqGh1n1fINpyCqFLC/n9J7e1Nzfuv61QPt448/HrW2c/h1Kdo/elC49NJLLacj5ZmDqXG3Lnpl66iph4Kagp5usmp6khr63vPPP+8qHKipitqRqUzHr5TiP83rJvGf//zHNVVR0xg1mVBFIwVepXR1ASsl7AdaUfMLtXFTWY/WMVpDdk3TU7vWQykqNQPRk7EeAE5W5qmnd2Vbq4KG2lsqi0qBTU04wt8Wo/VR1X39jsostX+SKyM6GaUounfv7t5Oo3KoV155xf1e+AOLjotyAjSfbsi6WWo+PSQkfhVcatdN+0nlX9rvqhCm4+U3VVGKNz2bHagd4fDhw137U21LWulGr+2Kj4935cFqc6obv46vjtPdd9/t2p4qpat59X+dTzqX3n333cBZx9qXb7/9tiubVHMeZZPqvPOtWrXKpdaU1akHFh1D/Y7OcWV7Jq7wFE7ZpHpVoZol6RxQINV3dGzVnCQjtjc157e+q/Ona9eu7iUQGu+fZ6pEppSxrm+fmiwpULdv3z7Qvs2WYl3dF7FtqjJz5kyvbt26XoECBbyqVat6Tz75pPfKK69EbWahqvzR/PTTT25awYIFvTJlyngPPPCAa46hZXzxxRcR86rKfocOHbzSpUt7+fPnd8u9+eabvfnz50fMN3z4cO/MM8/04uLiUtVsZfz48a7Ji5bZsGFDb/Hixa4JR0pNVf744w+3T9SspnDhwq5qfqNGjbx33nknSbV9bV/RokUjmr/4TS9WrFiRZH2Sa6qi5Xz88cdun2td9dvRmi8kJCS4dcmXL59XuXJlb9SoUVGXmdy6JW4q4Xv77bddkxP9dqlSpbwuXbp4v/76a8Q8as6h/ZFYck1ootH2de/ePeo+iba/ROse3lTFp3NJzYG0Thq0z3Tc1q9fH5pn7dq1XosWLbwiRYp4Z5xxhmti8fXXX0cc75S2Tfbv3+/deuutrumGvuc3W/HPG39QsxHtOx2f+Pj4iKYwvsT7X9fI3//+d++cc85x15q+f/XVV3vz5s3LsO1N7fntr6+akWkerZ/W84477vBWrlwZMV+nTp3cusHzeLctMoQa8Cs1o0bbSmEiZ1GqSi/ZUAomvNwWWZeaUqk8durUqaQ8eTE80oNeCRZe41TlLKrJp1qBfmUY5CzK2lQ2prKH/bcfIet3SabsZ73NCPSqgnSgckyV0anSiyoUqFxIrwRT2adeigAA2Q0VhnDKVGNPlYEULJXaVOUEZe2o8g4AZEeUeQIAEBDtPAEACIjgCQBAQJR5/q9moN78ogbJvPAYAHImz/Nczzjq/ehk7z8meP7vlWkn6zQZAJAzbN68+aQ97xA8w7oR0g5LqVcEAED2pXcQKyGVXNdy4QieYe9fVeAkeAJITw8//LB72Xs49av63XffhV4qoh5P1LxLL2xX06/x48e7dx/79B5dvaQgISHB3a/UJ+rIkSPp3SSDpKb4jgpDAJDB1BmCOlvwh/DOx/UaS3WKMG3aNPcyfRUjqYcVnzpsaNOmjXsRybJly9x3lTJSkI3WEwpOD1KeAJDRN9o8eaJ2Nq03cr388ss2ZcqUUG846mGnVq1arpPsxo0buxSqOr4eNmxYqG7G0KFD3esP1SWaetPB6UfKEwAymDqhVg1OdZPXpUuXUNdyyoZV6jG8I2p1OaZUpjrZ9rN4S5cu7YKs+qzVu6T1fwVYvwN1nH4ETwDIQI0aNXKds8+ZM8f1nan+OS+//HLXJEI9lahP3cQ9z6i8U9NEWbSLFi1y74xWBwzqZ1TLUkfmStEiNtjzAJDBHSf4lNWqYFqlShV75513InojSo5SmuoYXR1Tv/XWW+790U8//bS1a9fOVSRKzTKQ/gieAHAaKZV53nnn2YYNG6xly5YuK3b37t0Rqc9t27aFykhVHrpx40aXjes33Ne4kiVL2vvvv2+dO3fm+MUA2bYAcBqp9uyPP/5oFSpUsAYNGljevHlt/vz5oenr1693ZaJNmjRxnw8ePOiCZnjzCf+z3o6G2CB4AkAGevDBB10TFKUelyxZYjfccIPlzp3bdRRevHhxlyXbv39/W7hwoatAdOedd7rAqZq2otTprl27rFevXrZu3TrXV67mUXnn1VdfzbGLEbJtASAD/frrry5Q/vnnn1amTBlr2rSpa4ai/8vo0aNdSrJjx44RL0kIr32rdqB60YKCquatX7++qzSk1Ctig/48//dKJj0Bqs0VbxgCgJxpb4BYQLYtAAABkW0LIENUHTSbPYvTauMT7U7bb8XF+oXJqjEWPih/36cXJquQXG/XUMNglQmoCnc41UpTe6dChQpZ2bJlbcCAAXbs2LEYbA0AIKfIkxlemDxv3rzQ5/A3ZuiFybNnz3YvTFY+dO/evd0Lkz///HM3XY2FFTjVHkq12PTC5dtvv91V/X788cdjsj0AgOwvT1Z+YfInn3xia9eudcFXr7OqV6+eDR8+3AYOHOhStXrtFQAA6S0uK78wWX/r1KkT0e+dqnmrxpTaQiVH1cE1T/gAAECWCJ6n+sJk/Q0PnP50f1pyRowY4bKB/cHv5gcAgEyfbXuqL0xOq/j4ePdGD59SngRQAECWybZN7oXJKgf1X5gcLvyFyfqbuPat/zlaOaovf/78rgFs+AAAQJYMnkFfmKy/q1evtu3bt4fmmTt3rguGtWvXjsk2AACyvzyxfmHydddd57Jqt2zZYkOHDo36wuRSpUq5gNinT5+IFya3atXKBcmuXbvayJEjXTnn4MGDXdtQpS4BAMh2wfNUX5isQDtr1izr2bOnC6qFCxe2bt262bBhw2K4VQCA7I4Xw/NieCBD8Ho+ZLXX8/FieAAAckqFIQAAsgKCJwAAARE8AQAIiOAJAEBABE8AAAIieAIAEBDBEwCAgAieAAAERPAEACAggicAAAERPAEACIjgCQBAQARPAAACIngCABAQwRMAgIAIngAABETwBAAgIIInAAABETwBAAiI4AkAQEAETwAAAiJ4AgAQEMETAICACJ4AAARE8AQAICCCJwAAARE8AQAIiOAJAEBABE8AAAIieAIAEBDBEwCAgAieAAAERPBEhnviiScsV65c1rdv39C4iRMn2lVXXWXFihVz03bv3p3kezt37rQuXbq4eUqUKGHdu3e3/fv3c8QAxBzBExlqxYoV9uKLL1rdunUjxh88eNDatGlj//rXv5L9rgLnmjVrbO7cuTZr1ixbvHix3X333RwxADGXJ9YrgOxLqUQFwJdeeskeffTRiGl+KnTRokVRv7tu3TqbM2eOC74NGzZ048aOHWvXXHONPf3001axYsXTsAUAEB0pT2SYXr16Wbt27axFixaBv7t06VKXVesHTtFy4uLibNmyZem8pgAQDClPZIipU6faqlWrXMoxLbZu3Wply5aNGJcnTx4rVaqUmwYAsUTwRLrbvHmz3X///a6sskCBAuxhANkOwRPpLiEhwbZv324XXXRRaNzx48ddhZ/nn3/eDh8+bLlz505xGeXLl3fLCHfs2DFXA1fTACCWCJ5Id82bN7fVq1dHjLvzzjutZs2aNnDgwJMGTmnSpIlrvqJA3KBBAzduwYIFduLECWvUqBFHDUBMETyR7ooWLWoXXHBBxLjChQtb6dKlQ+NVbqlhw4YN7rOCrb5XuXJlV65Zq1Yt15SlR48eNmHCBDt69Kj17t3bOnfuTE1bADFHbVvEhAJi/fr1XXCUK664wn2eOXNmaJ4333zTpVaVklUTlaZNm7qXKwBArOXyPM+zHG7v3r1WvHhx27Nnj3ubDYBTV3XQbHYjTquNT7Q7bbGAlCcAAAFR5pmOeNJGVnvSBpA2pDwBAMiqwTNazxuHDh1yr3hTLc0iRYpYx44dbdu2bRHf27Rpk3sFXKFChdwbaQYMGODaAwIAkFHiMnPPG/369bMPPvjApk2bZp9++qlt2bLFOnToENHwXoHzyJEjtmTJEnv11Vdt8uTJNmTIkBhsBQAgp4jLTD1vlCxZMjRetZ1efvllGzVqlDVr1sw1lJ80aZILkl988YWb55NPPrG1a9faG2+8YfXq1bO2bdva8OHDbdy4cS6gAgCQLYNncj1v6M0yahgfPl5t/tSIXj1uiP7WqVPHypUrF5qndevWrrqx+oFMjl4Pp3nCBwAAskRt25R63tDbZ/Lly+e6pQqnQOn3qqG/4YHTn+5PS86IESPskUceSaetAADkNHGx7nlDb5E53T1vxMfHu2xhf9C6AACQ6YNneM8b6qdRgyoFPffcc+7/SkGq3FIvBw+n2rZ+rxr6m7j2rf85pZ438ufP794eET4AAJDpg6ff88ZXX30VGho2bOgqD/n/z5s3r82fPz/0nfXr17umKepxQ/RXywjvukp9SCoY1q5dOybbBQDI/vJk5p43unfvbv3793e9bCgg9unTxwXMxo0bu+mtWrVyQbJr1642cuRIV845ePBgVwlJqUsAAHLc6/lGjx5tcXFx7uUIqiGrmrTjx48PTVe/kLNmzbKePXu6oKrg261bNxs2bFhM1xsAkL1lquC5aNGiiM+qSKQ2mxqSU6VKFfvwww9Pw9oBAJBJ2nkCAJDVEDwBAAiI4AkAQEAETwAAAiJ4AgAQEMETAICACJ4AAARE8AQAICCCJwAAARE8AQAIiOAJAEBABE8AAAIieAIAEBDBEwCAgAieAAAERPAEACAggicAAAERPAEACIjgCQBAQARPAAACIngCABAQwRMAgIAIngAABETwBAAgIIInAAABETwBAAiI4AkAQEAETwAAAiJ4AgAQEMETAICACJ4AAARE8AQAICCCJwAAARE8AQAIiOAJAEBABE8AAAIieAIAEBDBEwCAgAieAAAERPAEACAggicAAAERPAEACIjgCQBAQARPAAACIngCABAQwRMAgIAIngAAZKXg+cILL1jdunWtWLFibmjSpIl99NFHoemHDh2yXr16WenSpa1IkSLWsWNH27ZtW8QyNm3aZO3atbNChQpZ2bJlbcCAAXbs2LEYbA0AIKeIafA866yz7IknnrCEhARbuXKlNWvWzNq3b29r1qxx0/v162cffPCBTZs2zT799FPbsmWLdejQIfT948ePu8B55MgRW7Jkib366qs2efJkGzJkSAy3CgCQ3eXyPM+zTKRUqVL21FNP2Y033mhlypSxKVOmuP/Ld999Z7Vq1bKlS5da48aNXSr12muvdUG1XLlybp4JEybYwIEDbceOHZYvX76ov3H48GE3+Pbu3WuVKlWyPXv2uBRwWlUdNDvN3wXSYuMT7TLtjuN6QFa7HhQLihcvnqpYkGnKPJWKnDp1qh04cMBl3yo1evToUWvRokVonpo1a1rlypVd8BT9rVOnTihwSuvWrd0O8FOv0YwYMcLtIH9Q4AQAILViHjxXr17tyjPz589v9957r02fPt1q165tW7dudSnHEiVKRMyvQKlpor/hgdOf7k9LTnx8vHuy8IfNmzdnyLYBALKnNAXPs88+2/78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AMhyKU/VVVLgnD59ui1YsMCqVasWMb1BgwaWN29emz9/fmicmrKoaUqTJk3cZ/1dvXq1bd++PTSPau6qsLd27dqncWsAADlFnlhn1aom7fvvv+/aevpllCqHLFiwoPvbvXt369+/v6tEpIDYp08fFzBV01bUtEVBsmvXrjZy5Ei3jMGDB7tlk7oEAGS74PnCCy+4v1dddVXE+EmTJtkdd9zh/j969GiLi4tzL0dQLVnVpB0/fnxo3ty5c7ss3549e7qgWrhwYevWrZsNGzbsNG8NACCniGnwTE0T0wIFCti4cePckJwqVarYhx9+mM5rBwBAJq9tCwBAVkHwBAAgIIInAAABETwBAAiI4AkAQEAETwAAAiJ4AgAQEMETAICACJ4AAARE8AQAICCCJwAAARE8AQAIiOAJAEBABE8AAAIieAIAEBDBEwCAgAieAAAERPAEACAggicAAAERPAEACIjgCQBAQARPAAACIngCABAQwRMAgIAIngAABETwBAAgIIInAAABETwBAAiI4AkAQEAETwAAAiJ4AgAQEMETAICACJ4AAARE8AQAICCCJwAAARE8AQAIiOAJAEBABE8AAAIieAIAEBDBEwCAgAieAAAERPAEACAggicAAAERPAEACIjgCQBAQARPAAACIngCAJCVgufixYvtuuuus4oVK1quXLlsxowZEdM9z7MhQ4ZYhQoVrGDBgtaiRQv74YcfIubZuXOndenSxYoVK2YlSpSw7t272/79+0/zlgAAcpKYBs8DBw7YhRdeaOPGjYs6feTIkfbcc8/ZhAkTbNmyZVa4cGFr3bq1HTp0KDSPAueaNWts7ty5NmvWLBeQ77777tO4FQCAnCZPLH+8bdu2bohGqc4xY8bY4MGDrX379m7ca6+9ZuXKlXMp1M6dO9u6detszpw5tmLFCmvYsKGbZ+zYsXbNNdfY008/7VK0AADkmDLPn3/+2bZu3eqyan3Fixe3Ro0a2dKlS91n/VVWrR84RfPHxcW5lGpyDh8+bHv37o0YAADI8sFTgVOU0gynz/40/S1btmzE9Dx58lipUqVC80QzYsQIF4j9oVKlShmyDQCA7CnTBs+MFB8fb3v27AkNmzdvjvUqAQCykEwbPMuXL+/+btu2LWK8PvvT9Hf79u0R048dO+Zq4PrzRJM/f35XOzd8AAAgywfPatWquQA4f/780DiVTaoss0mTJu6z/u7evdsSEhJC8yxYsMBOnDjhykYBAMh2tW3VHnPDhg0RlYS++uorV2ZZuXJl69u3rz366KNWvXp1F0wfeughV4P2+uuvd/PXqlXL2rRpYz169HDNWY4ePWq9e/d2NXGpaQsAyJbBc+XKlXb11VeHPvfv39/97datm02ePNn++c9/uragarepFGbTpk1d05QCBQqEvvPmm2+6gNm8eXNXy7Zjx46ubSgAABkll6cGlTmcsoNV61aVh06l/LPqoNnpul7AyWx8ol2m3UlcD8hq10OQWJBpyzwBAMisCJ4AAARE8AQAICCCJwAAARE8AQAIiOAJAEBABE8AAAIieAIAEBDBEwCAgAieAAAERPAEACAggicAAAERPAEACIjgCQBAQARPAAACIngCABAQwRMAgIAIngAABETwBAAgIIInAAABETwBAAiI4AkAQEAETwAAAiJ4AgAQEMETAICACJ4AAARE8AQAICCCJwAAARE8AQAIiOAJAEBABE8AAAIieAIAEBDBEwCAgAieAAAERPAEACAggicAAAERPAEACIjgCQBAQARPAAACIngCABAQwRMAgIAIngAABETwBAAgIIInAAABETwBAAiI4AkAQEAETwAAcmrwHDdunFWtWtUKFChgjRo1suXLl8d6lQAA2VS2CJ5vv/229e/f34YOHWqrVq2yCy+80Fq3bm3bt2+P9aoBALKhbBE8R40aZT169LA777zTateubRMmTLBChQrZK6+8EutVAwBkQ3ksizty5IglJCRYfHx8aFxcXJy1aNHCli5dGvU7hw8fdoNvz5497u/evXtPaV1OHD54St8HgjrVczYjcT0gq10P/vc9z8v+wfOPP/6w48ePW7ly5SLG6/N3330X9TsjRoywRx55JMn4SpUqZdh6Ahmh+Bj2K5De18O+ffusePHi2Tt4poVSqSoj9Z04ccJ27txppUuXtly5csV03XIiPe3pwWXz5s1WrFixWK8OEDNcC7GlFKcCZ8WKFU86b5YPnmeccYblzp3btm3bFjFen8uXLx/1O/nz53dDuBIlSmToeuLkFDgJngDXQiydLMWZbSoM5cuXzxo0aGDz58+PSEnqc5MmTWK6bgCA7CnLpzxFWbDdunWzhg0b2iWXXGJjxoyxAwcOuNq3AACkt2wRPDt16mQ7duywIUOG2NatW61evXo2Z86cJJWIkDkpC11tdBNnpQM5DddC1pHLS02dXAAAkH3KPAEAON0IngAABETwBAAgIIInAAABETwRU3QlB5gtXrzYrrvuOvdmG73lbMaMGeyWTI7giZihKzng/1O7dHWlqIdJZA00VUHMqNPyiy++2J5//vnQm6H0jts+ffrYoEGDODLIkZTynD59ul1//fWxXhWkgJQnYtqVnLqOS21XcgCQWRA8kem6ktNbogAgMyN4AgAQEMETWaYrOQDILAieiAm6kgOQlWWLXlWQNdGVHPD/7d+/3zZs2BDaHT///LN99dVXVqpUKatcuTK7KROiqQpiSs1UnnrqqVBXcs8995xrwgLkJIsWLbKrr746yXj1Uzx58uSYrBNSRvAEACAgyjwBAAiI4AkAQEAETwAAAiJ4AgAQEMETAICACJ4AAARE8AQAICCCJwAAARE8kanfuqKOgXfv3m1Z2csvv2ytWrWynETHbcaMGSnOc8cdd9Dhs5lVrVrVxowZY1mlK8GyZcvar7/+ajkdwTObSu7GdDoD0sMPP+xeuRftZqF10FCwYEH3+eabb7YFCxZEzHfppZfa77//bsWLF7es6tChQ/bQQw/Z0KFDI8ZPmzbNatasaQUKFLA6derYhx9+mKHroVe8lShRIs2B7lRs3LjR/Ybe1RoL7733nnt4KV269GlbD537/jmeJ08e14vQFVdc4YLk4cOHI+ZdsWKF3X333ZYVaDtuv/32JOdzTkTwRLrzPM+OHTuW4jzDhg1zgXH9+vX22muvuRt7ixYt7LHHHovoeUXdk+kGlFX93//9nxUrVswuu+yy0LglS5bYLbfcYt27d7cvv/zSPeRo+Pbbb2O6rtnVgQMHrGnTpvbkk0+e1t89//zz3Tm+adMmW7hwod100002YsQI91C4b9++0HxlypSxQoUKWVZx55132ptvvmk7d+60nIzgCfvvf/9rl19+uUsFVqpUye677z53w/G9/vrr1rBhQytatKgLZrfeeqtt3749SWr2o48+sgYNGlj+/PntjTfesEceecS+/vrr0BN4+Auu/WWpxwg9kU+cONGl0IYMGeICarRU8i+//GLXXXedlSxZ0goXLuxuTuEpNgWftm3bWpEiRaxcuXLWtWtXl83kmzNnjruJKlArFXLttdfajz/+GJp+5MgR6927t1WoUMGlCKtUqeJudj6tx1133eVudgqIzZo1c9uXkqlTp7p1Dvfss89amzZtbMCAAVarVi0bPny4XXTRRe4l+ZnB5s2bXU6A9pN69Wjfvr1LPYanlFq2bOlSIcoVuPLKK23VqlXJLq9atWrub/369d3xvOqqqyKmP/30026f65j06tXLjh49GnrAuuCCC5IsT7kZOldSS+eBzis9nJ1OSnHqHK9YsaLLXejTp499+umn7jwND+Th2bZ68FSqVdeFriN9V9ejT6nWBx980M4880x3DagTBV0nvj///NM9mGm6ArJ+96233kryQKfxut61z7Vfwq/3//znP+681DWg3JHx48dHfF/XXcWKFW369OmWkxE8czgFD93IO3bsaN988429/fbbLpgqiPh0M9MNXoFC2Xu6kSpbOLFBgwbZE088YevWrXM31wceeCD09K2hU6dOKa7L/fff724e77//ftTpurHq5rF48WJbvXq1uwEpUPqBTcFMN+iVK1e6QKmOtRUEfLpBqBs0TZ8/f77FxcXZDTfcYCdOnHDT1aPLzJkz7Z133nEBXE/XurH5lHLQQ4MeEhISElzAa968eYpP4NqXevAIt3Tp0iQ38tatW7vxyfnss8/ctqY0aH1PlY611kUPN/rNzz//3C1b54geLkSpJvX2oW374osvrHr16nbNNddEpKbCLV++3P2dN2+eOw+UjepTikznoP6++uqr7gHLf8j6+9//7s4lBWufUuo6T5X6yUjalyfb39o/QSkY6QEvfB+Ee/fdd2306NH24osv2g8//OCuNwU6n65LnSd6KNN+0DmpY6N5/WICPcDOnj3bBWllB+vhwT8G2v8Krv6+VeDt0KGDu+787daDhnKANP3xxx93Dyo6NuEuueSSNG1/tuIhW+rWrZuXO3dur3DhwhFDgQIFdJV4u3btcvN1797du/vuuyO++9lnn3lxcXHeX3/9FXXZK1ascMvYt2+f+7xw4UL3ecaMGRHzDR061LvwwguTfL9KlSre6NGjoy67XLlyXs+ePSOW669rnTp1vIcffjjq94YPH+61atUqYtzmzZvd99evXx/1Ozt27HDTV69e7T736dPHa9asmXfixIkk82qfFCtWzDt06FDE+HPOOcd78cUXoy5f663lL168OGJ83rx5vSlTpkSMGzdunFe2bFkvOQcPHvR++OGHFIe9e/cm+/1Jkya5dUl8PmjQ+OnTp7v5Xn/9da9GjRoR++Dw4cNewYIFvY8//jjqso8fP+4VLVrU++CDD0Ljwpf5888/u89ffvllknNU58KxY8dC42666SavU6dOoc9t27YNnQ/+Mbrqqqu8tEhuPaLRvjzZ/tYxSU5y574MHDjQ7c9o18MzzzzjnXfeed6RI0eSfO+XX35x1/Rvv/0WMb558+ZefHx8suvSrl0774EHHnD/T0hIcPtg48aNUefV+Zz43NS11aRJk4hx/fr1S/NxyC7oDDsbU/+AL7zwQsS4ZcuW2W233Rb6rNSknmDDUy269yk1pg55lX2jVJaykjTvrl27Qik1leXUrl079L3EKay00G8nV8ap7KuePXvaJ5984lJuSi3XrVs3tB1Kvfgp0XBK2Zx33nnu6VxP1doHys4N3w5lDyo1rRRzjRo13NO8snX9WrJavjosVjZXuL/++isi6zfxNFH216lSFtu55557SstQajJa9qpSjj5tpzpl1rzhlKLxt1Mp+sGDB7tUi1Lix48ft4MHD7r9GJRyJnLnzh36rOxb5Sr4evTo4VJJo0aNcjkFU6ZMcSmzjKbtT7wP0ktK57hSksrCPfvss905qBS9sv2VBaz9on2tczmccmP881LTlVpU7slvv/3mcgs03S9TvfDCC11uiVKzymHQ+X3jjTe6ohDlzOgYqyxe+92n+guJK+0VLFjQHfOcjOCZjalMJPENN3EVcwWEe+65J6JcxadyF11Qusg0KMCqvE83SX32s/HCf+9UqLxmx44doTKyxFTeqN9VlpQCqMojn3nmGVeWpO3QTSZapRDdkEXTVY750ksvuTIbBU8FTX87lA2rBwZlyyqLUVm+CtIqI9LytZzw8iVfcrVY/dqdeuAIp3IwBaBw+qzxyVEWmbL7UqKsvi5duiQ7XcHnZAFY26lsv2hZwDr2oixbHSuV3Wp/qmyuSZMmSc6H1MibN2/EZ+0v/6HGP2ZavsrXVIFM2cq62Wc0bb+ui5ToPFFdgaCUHZrcOa46Byoy0Pk3d+5c+8c//uE6i1dZqY6NHjT0MBv+wCH+Q6Pm1XFRAFaA1DXZt2/f0LHR97RcVVrTNTR27Fj797//7R4o/QCr6yNxh/SJf2/nzp2h8yGnInjmcAoYa9euTfamqqdd3ShVlqkLW1RmmBq62elJOLV00esGH62JjU/rcO+997ohPj7eXegKntoOlRepjFJP6YlpG3RT0vz+DU9ldompIpDKZjXoJq2nf90otPytW7e6ZYeXg55s+5Uy1/4Nb+epQKMyV93UfLqhaXxylKo/WRMLVZI6VdpOlXurLZ/2RTQqB1UlEqWK/ApG4RWzou0HCXIu+LS/FawnTZrkltO5c2eX6slof/vb35IEkMRUKSeo7777zpXH69xNjrZPDw0aVM6vclJdhyrP1z5Uaj+5oK1jowpefu6SHkS+//77iBwiPaCo9rcG5cToAUgPJ6oPoIfKn376KcWHMPn222+TVPzKaQieOdzAgQOtcePGriKCUnZ6UtXNXjdz1f5U6lM3LT2hKmDpolHlodRQkFFKTjf9s846y2WDKRUhqlyiYKSUhOZR7VzV8lNqMrlArmCj1JeyrZSaUzatspVFNxkFRlWG+Oc//+lqiSr7URUrtFxlSyklqFq9SkEq9awKTuGUNahpukkpiKstplKDfjMaBTcF9pEjR7p12LJli0sFq9JRclnWSikrSIcHSlWMUg1VpZrbtWvn1lEPJFq3jMy2TQ3dNJV60Q1YtV113FTLWRVctF/1Wdm8fg3svXv3ulrDKQU0BWJNV9DQ95WNHaTtrs5L/zgrOASlhx8dbx0v8Wtz69gml9pPj2xbZXfqHFcA08Obci0effRRV1tY+ywaVZZSgFTgVkpQ14X2nQKczl8dH7Wz1Lmj81Q5NXoQU/GFziUdG+WUKGWpc17ntHI1/OCpFKbm18Ocjos+axn+/lUNeeVC6fjowVFZvjo3db0puIqyaxMSElz2cI4W60JXZAxVxmjfvn2S8Ykr4cjy5cu9li1bekWKFHEVSOrWres99thjoemqQFC1alUvf/78ruLAzJkzIypeRFumqHJNx44dvRIlSrjpqrTiV5DQZw358uXzKleu7N18883eggULUlzX3r17uwoNWo8yZcp4Xbt29f7444/Q/N9//713ww03uN9ThYyaNWt6ffv2DVV+mTt3rlerVi33fW3jokWLIiq2TJw40atXr57bB6ocpIoYq1atiqhEogorFStWdJV+KlWq5HXp0sXbtGlTssdhzZo1bl12794dMf6dd95xFUO0/eeff743e/ZsLyNp3xcvXjzqtPB9IL///rt3++23e2eccYbbV2effbbXo0cPb8+ePW669knDhg1d5bPq1at706ZNS1IJLPEyX3rpJbe/VBHtyiuvTPYcvf/++0PTw11++eVuPyXmnyOqDJTStvvnW/igSj0ZRcv2f0eVfEqVKuU1bdrU7aPElc7C9532WaNGjdz5p/OwcePG3rx580LzqiLRkCFD3PWoc7BChQrunP/mm2/c9D///NPtU13LqoA2ePBgdyz9/bx27VqvdevW7vrRsdU5OHbs2Ij1efPNN911oHOzZMmS3hVXXOG99957EfeDGjVqeDldLv0T6wAOZGeqBKLs0JSy6pA83aKUolL5n5/68Sk7Vykg5ZYkLj9FxlBO1X333efae+dktPMEMpiyQaPVAsbJKUtRxQfK/ozWtlMvyVDwJHCeHirbVrvQW265xXI6Up4AMi1VbtGbjFSZLKendJC5UGEIQKZFqRIyK7JtAQAIiOAJAEBABE8AAAIieAIAQPAEACBjkfIEACAggicAAAERPAEAsGD+H9+2fghSGre/AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "counts = df['HeartDisease'].value_counts().sort_index()\n", + "fig = plt.figure(figsize=(5,4))\n", + "plt.bar(counts.index.astype(str), counts.values)\n", + "plt.title('Target distribution (HeartDisease)')\n", + "plt.xlabel('HeartDisease (0 = Healthy, 1 = Disease)')\n", + "plt.ylabel('Count')\n", + "for i, v in enumerate(counts.values):\n", + " plt.text(i, v, str(v), ha='center', va='bottom')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "e923a9d7", + "metadata": {}, + "source": [ + "## 6. Sex distribution\n", + "Inspect the distribution of the `Sex` feature." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "60d01225", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "counts = df['Sex'].value_counts()\n", + "fig = plt.figure(figsize=(5,4))\n", + "plt.bar(counts.index.astype(str), counts.values)\n", + "plt.title('Gender distribution')\n", + "plt.xlabel('Sex')\n", + "plt.ylabel('Count')\n", + "for i, v in enumerate(counts.values):\n", + " plt.text(i, v, str(v), ha='center', va='bottom')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "19fea442", + "metadata": {}, + "source": [ + "## 7. Age distribution\n", + "Histogram of patient age to assess its range and concentration." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a5c2495c", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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lAl0rk1r7QAAAArNWp+ZaZjSAQWZa9tyQ+dra9q0qbz88stmwMLgwYNNbVpul6gaP368nDlzxr0dOXLEa2UGAACwLqi5BhjowuzeoiM5dQqQjOrWrWvWGFUhISHm8eTJkx7n6HPXsawEBARI+fLlPTYAAIBC0UdN+45lpJ36jx8/Lm+99ZYZpektei1tUs1oz549UrNmTffAAg1kur5okyZN3P3NtmzZYppJAQAAilxQ69q1q8dzXZlAp85o166dmQzXW3SOtnvuucc0fT766KOydetW+cc//mE21/uOHDlSpkyZYppeXdNzVK1a9aoyAgAAFImgpn3H8sOdd94pK1asMH3K/v73v5sgptNx9O7d233Os88+K6mpqab/WnJyshnQsGbNGuZQAwAARXfC2/zy4IMPmi07WqumIU43AAAAKepBbfTo0dd97owZM3LyFgAAAEVejoKarumpm050e/vtt7s7+RcvXtxMp5GxtgsAAAD5GNS6dOki5cqVMxPPutbd1IlvH3/8cWnTpo2MGTMmh8UBAABAruZR05GdOrt/xsXR9WcdfenNUZ8AAABFWY6Cms5VdurUqav2676zZ896o1wAAABFXo6C2kMPPWSaOZcvXy5Hjx4128cffywDBw6Ubt26FfmbCgAA4LM+arrW5jPPPCOPPfaYGVBgLuTvb4Laq6++6pWCAQAAFHU5CmqlS5eWOXPmmFC2b98+s+/WW2+VMmXKeLt8AAAARVauFmXX9T110+WbNKTpmp8AAADwYVD79ddfpX379nLbbbdJp06dTFhT2vTJ1BwAAAA+DGq6WHqJEiXk8OHDphnUpUePHmadTQAAAPioj9oXX3wha9eulWrVqnns1ybQQ4cOeaFYAAAAyFGNWmpqqkdNmsvp06clICCAuwoAAOCrGjVdJmrRokXy4osvutf0TE9Pl2nTpknbtm29US4AAG5I2LjVeXrHDk7tnKfXB7wW1DSQ6WCC+Ph4uXjxojz77LOye/duU6O2efPmnFwSAAAA3mj6bNCggezZs0dat24tkZGRpilUVyT49ttvzXxqAAAA8EGNmq5E0LFjR7M6wXPPPcdnAAAAYEuNmk7L8d133+VNaQAAAJC7ps8+ffrI/Pnzc/JSAAAA5OVggsuXL8s777wj69atk2bNml21xueMGTNyclkAAADkNKjt379fwsLC5Icf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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(figsize=(7,4))\n", + "plt.hist(df['Age'].dropna(), bins=20)\n", + "plt.title('Age distribution')\n", + "plt.xlabel('Age')\n", + "plt.ylabel('Frequency')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "ee01afbc", + "metadata": {}, + "source": [ + "## 8. Correlation matrix (numerical features)\n", + "Compute and visualize correlations among numerical features to spot linear relationships." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "fefb3341", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3YAAAMWCAYAAAC9WRTXAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAectJREFUeJzt3QeYE2X38OGzS1vaAtJ7R0CagCAIItJBLC8iIr0KSkcFLBQREBUElCIIKgovWLEhSJWXojQBlSIdRGkqXdom33Ue/8m3WXaXhZ3M7CS/22sukskkM5nEbE7Oec4T4fV6vQIAAAAAcK1Ipw8AAAAAAJA8BHYAAAAA4HIEdgAAAADgcgR2AAAAAOByBHYAAAAA4HIEdgAAAADgcgR2AAAAAOByBHYAAAAA4HIEdgAAAADgcgR2AABLvfvuuxIRESEHDhyw7DH1sfQx9bERqEiRItKxY0dOCwCEOQI7AHCBvXv3yuOPPy7FihWTqKgoiY6OlrvuuksmTpwo//zzj4SKuXPnyoQJEyQcbd++XYYPH25pQAwACB+pnT4AAEDivv76a2nZsqWkS5dO2rdvL+XKlZPLly/L6tWr5emnn5ZffvlFpk+fHjKB3c8//yz9+vULWF+4cGETwKZJk0ZCObAbMWKE3HPPPSYLl1S7du2SyEh+pwWAcEdgBwAp2P79++XRRx81gc3y5cslb968/tuefPJJ2bNnjwn8ksvr9crFixclffr019ym69OmTeto8KBlmJqpxLWvlwb8AADwEx8ApGCvvPKKnDt3TmbOnBkQ1PmUKFFC+vbt679+9epVGTlypBQvXtx84dfMz7PPPiuXLl0KuJ+uv++++2Tx4sVStWpVEyC89dZbsnLlShNEzZs3T55//nnJnz+/ZMiQQc6cOWPu98MPP0jjxo0lS5YsZn2dOnVkzZo1130en3/+uTRr1kzy5ctnjkuPT48zJibGv41mqjRIPXjwoDkGXXyZq4TG2GmwW7t2bcmYMaNkzZpVHnjgAdmxY0fANlreqPfVIFjHoul2evydOnWSCxcuXPfY9bg0S7pt2zbzfPV563n/+OOPze3fffedVK9e3ZzDW2+9VZYuXRpwf30+TzzxhLlNt8mePbvJwMYuudTnpetU3bp1/c9fX4/EXq+4Y+w04NP758yZU44fP+5/fM3wli9f3pz38+fPX/c5AwDch4wdAKRgX375pRlXV7NmzSRt37VrV3nvvffk4YcfloEDB5pAbMyYMSbY+eyzz64p4WvdurUZu9etWzcTePho0KVZuqeeesoEhXpZg6gmTZpIlSpVZNiwYSaD984778i9994r//vf/6RatWoJHpcGLpkyZZIBAwaYf/Wxhg4dagLGV1991Wzz3HPPyenTp+W3336T119/3azTbROiAZQej54fDd60VPONN94wYw83b958TTnjI488IkWLFjXnQ29/++23JVeuXDJ27Njrnte///7bBFaaPdUAbOrUqebynDlzTNlojx495LHHHjPPRc/94cOHJXPmzOa+GzZskLVr15rtCxQoYAI6vb8GjFp+qYHi3XffLX369JFJkyaZQLxMmTLmvr5/r/d6+WgwOGvWLKlQoYI5pk8//dSs19dLS3Y1UNQgGAAQgrwAgBTp9OnTXv2YfuCBB5K0/ZYtW8z2Xbt2DVj/1FNPmfXLly/3rytcuLBZt2jRooBtV6xYYdYXK1bMe+HCBf96j8fjLVmypLdRo0bmso9uU7RoUW+DBg3869555x3zGPv37w/YLq7HH3/cmyFDBu/Fixf965o1a2aOLS59LH1MfWyfSpUqeXPlyuX9888//eu2bt3qjYyM9LZv396/btiwYea+nTt3DnjMhx56yJs9e3bv9dSpU8fcf+7cuf51O3fuNOt0X99//71//eLFi685zvie+7p168x2s2fP9q/76KOPzDp9DeJK6PXy3dahQ4eAdW+99ZbZ/oMPPjDHlypVKm+/fv2u+1wBAO5FKSYApFC+8kdf5ud6Fi5caP7VrFhsmrlTccfiafaqUaNG8T5Whw4dAsbbbdmyRXbv3m2yUn/++aecPHnSLFrWV69ePVm1apV4PJ4Ejy32Y509e9bcV0sotRRy586dcqP++OMPc0xagnjLLbf412umqkGDBv5zEZtmsGLT/etz8Z3nxGjmUDNuPpot05JOzahpGaaP7/K+ffvife5Xrlwx+9RSTr2/Zg6TKrHXK67u3bubbXv37i3t2rUzJZijR49O8r4AAO5DKSYApFA6pYEvEEoKHcul5ZEaNMSWJ08eE0To7XEDhYTEvU2DOl/AlxAto8yWLVu8t2kZoI7Z0xLMuIGU3u9G+Z5LfOWIGmzpWDQNOmOXHRYqVChgO9+xapml71wnREsotcwxNh2nV7Bg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AABguxjvv4sT+w1FZOwAAAAAwOXI2AEAAACwHdMdWIuMHQAAAAC4HIEdAAAAALgcpZgAAAAAbOeRCImRCEf2G4rI2AEAAACAy5GxAwAAAGA7j/ffxYn9hiIydgAAAADgcgR2AAAAAOBylGICAAAAsF2MQ81TYmiegrjWrVsnqVKlkmbNmnFyAAAAADiGUsxkmDlzpvTu3VtWrVolv//+u3WvCgAAABAmGTsnllBEYHeTzp07J/Pnz5eePXuajN27774bcPsXX3whJUuWlKioKKlbt6689957EhERIadOnfJvs3r1aqldu7akT59eChYsKH369JHz588n7xUFAAAAEHYI7G7Shx9+KKVLl5Zbb71V2rZtK7NmzRKv99/eqfv375eHH35YHnzwQdm6das8/vjj8txzzwXcf+/evdK4cWNp0aKFbNu2zQSJGuj16tUr0f1eunRJzpw5E7AAAAAACG8Edskow9SATmmAdvr0afnuu+/M9bfeessEfK+++qr599FHH5WOHTsG3H/MmDHSpk0b6devn8ns1axZUyZNmiSzZ8+WixcvJrhfvV+WLFn8i2b6AAAAALfxeCMcW0IRgd1N2LVrl6xfv15at25trqdOnVpatWplgj3f7XfccUfAfapVqxZwXTN5Wr6ZKVMm/9KoUSPxeDwm45eQIUOGmCDStxw+fPhmngIAAACAEMJ0BzdBA7irV69Kvnz5/Ou0DDNdunTy5ptvJnmMnpZo6ri6uAoVKpTg/XQfugAAAABuxnQH1iKwu0Ea0Gm55Lhx46Rhw4YBt+mYuv/+97+m/HLhwoUBt23YsCHgeuXKlWX79u1SokSJm33tAAAAAMAgsLtBX331lfz999/SpUsXM8YtNm2Eotk8bawyfvx4GTRokNluy5Yt/q6Z2hlT6W133nmnaZbStWtXyZgxown0lixZkuSsHwAAAAAoxtjdIA3c6tevf01Q5wvsNm7cKGfPnpWPP/5YPv30U6lQoYJMnTrV3xXTV0ap67XZyq+//mqmPLj99ttl6NChAeWdAAAAQKiKkUjHllBExu4Gffnllwnepg1SfFMeaOB2//33+28bNWqUFChQwMxr56MNVr799tsbf9UAAAAAIBYCuyCZMmWKCdyyZ88ua9asMVMfXG+OOgAAACBceB2aesAbotMdENgFye7du+Wll16Sv/76y3S5HDhw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krJly8qSJUviLZGcN2+e1KxZ02xXrlw5+e677wK2+/nnn83+MmXKJLlz55Z27drJyZMn/bcvWrRIatWqJVmzZpXs2bPLfffdJ3v37k3w+cTExJjsY+nSpeXQoUPJPj8AAABAShURay47WxcJTa4N7DQbt3jxYnniiSckffr0AbflyZNH2rRpI/PnzxevN7CI1uPxyH/+8x8TEP7www8mwzdo0KB49/H000/LwIED5ccffzQZwObNm/tLPE+dOiX33nuv3H777bJx40YTxB07dkweeeQR//3Pnz8vAwYMMLdrFjEyMlIeeughcwxxXbp0SVq2bGnG2/3vf/8zQSoAAAAAhPR0B5p106CtTJky8d6u6//++285ceJEwHrN5u3cudMEhTouT40ePdpk3uLq1auXtGjRwlyeOnWqCd5mzpwpzzzzjLz55psmqNP7+syaNUsKFiwov/76q5QqVcp/39i358yZU7Zv324ygD7nzp2TZs2ameBuxYoVkiVLlgSft26ji8+ZM2eScLYAAAAAhDLXZux84mbkrmfHjh0m+PIFdUqzcfGJvT516tRmPJ/eX23dutUEYVqG6Vu0hFL5yi01+GzdurUUK1ZMoqOjTXdOFbfMUrfR7J6WlCYW1KkxY8aYbXyLPhcAAADAdfR7vFNLCHJtYFeiRAkzDs4XaMWl67Nly2YyZMGgWTYtzdTSydiLb/ye0tu1ZHTGjBmm7FMXdfny5YDHatq0qWzbtk3WrVt33f0OGTJETp8+7V+0KygAAACA8ObawE6bkTRo0ECmTJki//zzT8BtR48elTlz5kirVq1M8Be3RFODoT/++MO/7vvvv493H7HXX716VTZt2uQv/axcubL88ssvJgunQWbsJWPGjGYs3q5du+T555+XevXq+UtD49OzZ095+eWX5f7777+mQUtc6dKlM9m/2AsAAADgNo40TvH+u4Qi1wZ2Sse56XizRo0ayapVq0zApuPgNODLnz+/jBo16pr71K9f34x/69Chgymn1EYlCXXPnDx5snz22WdmTJ524NTATLtWKr2u2Tgto9ywYYMpv9Rxe506dTLdLTVbqMHn9OnTzTQMy5cvN41UEtK7d2956aWXTOfM1atXW3iWAAAAAIQ6Vwd2JUuWNB0ndQybdqMsXry4dO/eXerWrWvKGm+55ZZr7qOdKTVY0yxftWrVpGvX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p0Y9/3Hf43369HHs2EKRjmXUTIZ+nmgbfq0I0DFguk7f63TFBABnEdgBIapu3boJ3qblO/plDNbRici1lKdIkSIyfPhwc1nHZGzevNkEezr3F6yl2aPE3uNkM6yVLVs2837W865ladoWXj9ndH47DawvXLhg8R7DyxdffJHkbbVMENZatGiR+RyvVauWv+pCGzTpxPB6Wd//QEpHV0wgRGmmCPbRRim+L7ZLly41cyIpbaaiUyLAelqKBntL1XRuLw3sqlevbpoz6ft++vTpjHO0wIMPPhhwPfY4Rt91H8bVWe/pp582VRdKqy50aglf1YVepuoCbsAYOwCwgP7Kq3/8taOalqhpeaD69ddfpUCBApxjuN7zzz/vnytQp/DQwLp27dpmrsaJEyc6fXiup+fWt+jYUR2j+80338ipU6fMoudZG3toZgnW0/ezZueUdjjWLq+jR4822Tp9HQA3IGMHhJD//Oc/8u6775pugXo5MZ9++qltxxUO3nzzTdN6X8svp06dKvnz5zfr9QtB48aNnT68kOELnjNmzGguJ4ZxpNZq1KiR/3LJkiVl586dpmOglqgxT6a1dML3adOm+csCfedfm9Z0797dNGuCtai6QCggsANCiDY08H3B0uCOL1v20akOvvrqq2vWv/766zYeRejTBh1XrlzxX0bwde7cOUnbzZo1K+jHEi503GLWrFnj/Yw/cOCAI8cULlUXd911l6m60LkEFVUXcBOapwCAhV/GdByG/qulably5TIZOw36brvtNs4zXDunmk7UfPvttweM+Yrrs88+s/W4Qtndd98tUVFR8v7770vu3LnNumPHjpmxuxcvXpTvvvvO6UMMOYcOHTJVF4cPHzYddbt06WLW9+/f34xpnDRpktOHCFwXgR0Qou69915Tbhn3V19t5KGD9OmKaS39otWkSRPza6/O7aWlUsWKFZOXX35ZNm7caEo0YX0mSQPozJkzB6w/f/689O7dmwySRZ588kn573//a4K7Tp06Sdu2bU1TIATPnj17zGTwmi0qWLCgWacBh5bALliwQEqUKMHpB3ANAjsghH9l1xb7mjWKTScX1vFfvnI2WKNGjRpmwmwt5dFAQ7sHamCnJT063vG3337jVFssVapU8scff1zzHj958qTkyZNHrl69yjm3yKVLl8wPRVpuuXbtWtMcSDMaDRs2pOQ7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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "object", + "type": "string" + }, + { + "name": "Age", + "rawType": "float64", + "type": "float" + }, + { + "name": "RestingBP", + "rawType": "float64", + "type": "float" + }, + { + "name": "Cholesterol", + "rawType": "float64", + "type": "float" + }, + { + "name": "FastingBS", + "rawType": "float64", + "type": "float" + }, + { + "name": "MaxHR", + "rawType": "float64", + "type": "float" + }, + { + "name": "Oldpeak", + "rawType": "float64", + "type": "float" + }, + { + "name": "HeartDisease", + "rawType": "float64", + "type": "float" + } + ], + "ref": "b9b4ad4e-5175-45dc-9a11-b4122e3b2981", + "rows": [ + [ + "Age", + "1.0", + "0.2543993561515428", + "-0.09528177118121824", + "0.19803906586674333", + "-0.3820446750319701", + "0.25861153601875636", + "0.2820385058189964" + ], + [ + "RestingBP", + "0.2543993561515428", + "1.0", + "0.10089294207709164", + "0.07019333570992349", + "-0.11213499711298038", + "0.16480304317138791", + "0.10758898037140385" + ], + [ + "Cholesterol", + "-0.09528177118121824", + "0.10089294207709164", + "1.0", + "-0.2609743277657631", + "0.23579240300238535", + "0.050148109140803906", + "-0.2327406389270114" + ], + [ + "FastingBS", + "0.19803906586674333", + "0.07019333570992349", + "-0.2609743277657631", + "1.0", + "-0.1314384913934405", + "0.05269786028732148", + "0.26729118611029784" + ], + [ + "MaxHR", + "-0.3820446750319701", + "-0.11213499711298038", + "0.23579240300238535", + "-0.1314384913934405", + "1.0", + "-0.1606905500499244", + "-0.4004207694631906" + ], + [ + "Oldpeak", + "0.25861153601875636", + "0.16480304317138791", + "0.050148109140803906", + "0.05269786028732148", + "-0.1606905500499244", + "1.0", + "0.40395072206288607" + ], + [ + "HeartDisease", + "0.2820385058189964", + "0.10758898037140385", + "-0.2327406389270114", + "0.26729118611029784", + "-0.4004207694631906", + "0.40395072206288607", + "1.0" + ] + ], + "shape": { + "columns": 7, + "rows": 7 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AgeRestingBPCholesterolFastingBSMaxHROldpeakHeartDisease
Age1.0000000.254399-0.0952820.198039-0.3820450.2586120.282039
RestingBP0.2543991.0000000.1008930.070193-0.1121350.1648030.107589
Cholesterol-0.0952820.1008931.000000-0.2609740.2357920.050148-0.232741
FastingBS0.1980390.070193-0.2609741.000000-0.1314380.0526980.267291
MaxHR-0.382045-0.1121350.235792-0.1314381.000000-0.160691-0.400421
Oldpeak0.2586120.1648030.0501480.052698-0.1606911.0000000.403951
HeartDisease0.2820390.107589-0.2327410.267291-0.4004210.4039511.000000
\n", + "
" + ], + "text/plain": [ + " Age RestingBP Cholesterol FastingBS MaxHR Oldpeak HeartDisease\n", + "Age 1.000000 0.254399 -0.095282 0.198039 -0.382045 0.258612 0.282039\n", + "RestingBP 0.254399 1.000000 0.100893 0.070193 -0.112135 0.164803 0.107589\n", + "Cholesterol -0.095282 0.100893 1.000000 -0.260974 0.235792 0.050148 -0.232741\n", + "FastingBS 0.198039 0.070193 -0.260974 1.000000 -0.131438 0.052698 0.267291\n", + "MaxHR -0.382045 -0.112135 0.235792 -0.131438 1.000000 -0.160691 -0.400421\n", + "Oldpeak 0.258612 0.164803 0.050148 0.052698 -0.160691 1.000000 0.403951\n", + "HeartDisease 0.282039 0.107589 -0.232741 0.267291 -0.400421 0.403951 1.000000" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "num_df = df.select_dtypes(include=[np.number])\n", + "\n", + "corr = num_df.corr(numeric_only=True)\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "plt.imshow(corr, interpolation='nearest')\n", + "plt.title('Correlation matrix')\n", + "plt.colorbar()\n", + "tick_marks = np.arange(len(corr.columns))\n", + "plt.xticks(tick_marks, corr.columns, rotation=90)\n", + "plt.yticks(tick_marks, corr.columns)\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "corr" + ] + }, + { + "cell_type": "markdown", + "id": "7de411ff", + "metadata": {}, + "source": [ + "## 9. Scatter matrix (selected numerical features)\n", + "Visual exploration of pairwise relations among a subset of important features (diagonal shows KDE)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4422f20e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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XwTBTenTp489duHdd9+l9PR0LlZZWVnJsW0oBurv709RUVHkSahxh2ochE6no+joaC5sedttt/H5e/I5onBleXm529xXxLCgeCriphD3pYKCiXq9njwVd+qf7R0rilu++uqr9NFHH3EM1YgRI8gV8IYxQOg+0D5QDPy3337j2EXECCG2BgVbPRlvPW+tVmuPI544cSJ//vnnn2nMmDFO26cGEpXTti4IgtPBQKEmBEGA+GeffcYTI0wsnDl4uArz58+nAwcOsIDx3nvveeSDwtPOERNzJOdBW+3Xrx95Mu7UP93pWD25f3QHqampnDgEr/aAMPr111/TWWed1WPHlZWVxQlONm3aRKNGjeqx/QreR2VlJSvwHn74YacrgsQyJQhuTm9oYVwBVQ+Um5vLD+ZPPvnE4yZRnnaOOJ///e9/9MADD9D777/v8YKUu/VPdzpWT+wfHQXni0kiLIrI5pmSksIWubKyst4+NEFwGcLCwujjjz/uEYu6zul7EAShRyZB0MIgdTZM+t4woVBdfJAiOTY21iMn5p54jkhfDUvHwIEDyVtwp/7pTsfqif3jaOzfv59TPw8YMIAnirDy7Nixg1NeL1q0iP766y+KiIjo7cMUBJegp8o4iGVKEDyEntTCuBKnnnoqx+V4Mp5yjpj8nnTSSV4lSLlj/3SnY/Wk/tERbrrpJrZGoX7b1KlTKTk5mWbNmkW//vor5efn03333dfm32VkZNCJJ55Ifn5+LCAvWbLkMPc79E9Y944//nheb9iwYfTHH3+0WA9177C/oKAgFmAvvfRSrg+nAkvmlClTuA1FRkbS6aefTpmZme2eD+qrwco2aNAgysnJOebrIwi9gQhTguBB9HYxTUEQPKN/utOxeguICVu8eDHdeOONnLzEkbi4OLr44ovp008/PawALdw1zznnHBbC1qxZQ6+99hrdc889be4DFq5//OMf7DYJC9gZZ5xhdx+ExfKUU06h0aNHc0FkCE4okHz++efb/x5FYGEpxO+wbMLSefbZZ7dZWNxoNNJ5553HxcdXrFjBgqEguCPi5icIgiAIguDiwLoEQWnw4MFt/o7lFRUVVFJS0mI5rFa7d+9mQQxxVgAJYGBhas3NN99M8+bN48/I5AiBCXGOd999N2ehhCCFv1V56623KCkpifbu3cuuh+rfOv6OTIs7d+5kS5dKbW0t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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from pandas.plotting import scatter_matrix\n", + "\n", + "cols = ['Age', 'RestingBP', 'Cholesterol', 'MaxHR', 'Oldpeak', 'HeartDisease']\n", + "use_cols = [c for c in cols if c in df.columns]\n", + "\n", + "fig = plt.figure(figsize=(10,10))\n", + "axes = scatter_matrix(df[use_cols], figsize=(10,10), diagonal='kde')\n", + "# Migliora spaziatura dei tick\n", + "for ax in axes.ravel():\n", + " ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right')\n", + "plt.suptitle('Scatter Matrix (subset)', y=1.02)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "efad0bfc", + "metadata": {}, + "source": [ + "## 10. Boxplots — continuous variables vs HeartDisease\n", + "Compare the distributions of continuous features across target classes to detect potential shifts/outliers." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "e86b0584", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhwAAAGJCAYAAADBveoRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPQhJREFUeJzt3QmcTfX/x/GPse+ibIVRyDaRqeykRJsIbVQqaUOFNi22LCXa0/5vo01JpVJIEQoj/exbRFmmzdjXuf/H+/v/nfu/dxbGmDN35s7r+XhcZ85yzz3n3jHnfb/byRcIBAIGAADgoxg/dw4AAEDgAAAA2YISDgAA4DsCBwAA8B2BAwAA+I7AAQAAfEfgAAAAviNwAAAA3xE4AACA7wgcgJnly5fP+vTpk2XvxXfffef2qWm0ygvnmNO8+eab7j3fsGFDpA8FOGYEDkS1devW2a233mqnnnqqFSlSxEqVKmXNmze3Z555xvbu3Wu51bvvvmtPP/10pA8jRxgyZIi7CP/1119pro+NjbVLL73UImXcuHEuKKQX2LxH4cKFrUKFCnbuuefayJEj7c8//4zI8QJ+KeDbnoEI++KLL+yKK65wf8ivv/56q1+/vh04cMB++OEHu/fee23ZsmX2yiuvWG4NHEuXLrW777470oeCDASOE0880W644YY0199555129tln2+HDh13ImDt3rg0ePNiefPJJ+/DDD+28884LbnvdddfZ1Vdf7X6ngdyGwIGotH79eveHuVq1avbtt99apUqVgut69+5ta9eudYEE/y85OdkFMpUE4fjt2bPHihUrdtTtWrZsaV27dg1b9ssvv1i7du2sS5cutnz58uDvb/78+d0DyI2oUkFUGj16tO3atctef/31sLDhqVGjht11112plk+ePNmVhOgbZL169Wzq1Kmptvn555/toosuctUzJUqUsPPPP99+/PHHDB3XTz/9ZBdeeKGVLl3aXYxat25tc+bMCdtm586druRCVQE6jvLly9sFF1xgixYtcutV5K6w9NtvvwWL47WtZ//+/e4bss5Rz69SpYrdd999bnla7VYmTJjgzlXbeud7POcY6qOPPnKv8/3336da9/LLL7t1KqmRrVu32o033minnHKKOxZ9bh07dvSlvYLClaqkdN4KWKrKUNXbv//+G7bdp59+apdccolVrlzZHdNpp51m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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhwAAAGJCAYAAADBveoRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOKZJREFUeJzt3QlcVOX+x/GfuCDiril6XbBc0DRLLMWlxEhck9TKXKKybFNzuZlYVpppGmZpLtUtvV21zZTKyjI0MSUXvLYYKhqkpahp7oAL83/9nv+diWETkMMMw+f9ek3jnHM4c+ZInu88z+95TimbzWYTAAAAC3lZuXMAAAACBwAAKBK0cAAAAMsROAAAgOUIHAAAwHIEDgAAYDkCBwAAsByBAwAAWI7AAQAALEfgAIAicN9994m/vz/nGiUWgQPIxeLFi6VUqVLm8d1332VZr3cGqF+/vlnfu3dvS8+lvseIESNyPc5t27Y5lj3//POOY9dH2bJlzQVv1KhRcuLECXEHXbp0kZYtW2a7LikpyRx3ZGSkuMK5c+fMOfz222+zrMt8bitUqCANGjSQPn36yKJFiyQtLc0lxwy4szKuPgCgOChfvrwsW7ZMOnXq5LR8/fr18vvvv4u3t7e4qwULFkjFihXl7NmzEh0dLXPnzpXt27dnG6DgHDgmT57sCEa5nVsNGH/88Yd89dVX8sADD8irr74qq1atMmHU7q233pL09HROMUosAgeQBz179pSPPvpI5syZI2XK/P2/jYaQwMBA+fPPP932PA4YMEBq1qxp/vzwww/LwIED5YMPPpAtW7bITTfd5OrDczsaCs6fP5/vc6ueffZZWbp0qdx7771y5513yvfff+9Ypy1MQElGlwqQB/fcc48cO3ZM1qxZ41imF6Xly5fLoEGDsv0Z7Qro0KGD1KhRQ3x8fEww0e0z0uZ3bZJ/5513nJZPmzbNLP/iiy8K/e+nc+fO5nnfvn25bqfdN/rtXb/pZ3c+/Pz85NKlS+a1duWEhoaai69+1kaNGplv+lbQ7qDRo0eb1gNtWWrcuLHMmDEjS+tBXs5/xq4qDQrXXnut2efChQvlqquuMuu1lcPedaJdKZczePBgefDBB2Xz5s1Ovy/Z1XC8//775rgqVaoklStXllatWslrr71m6efVY9KWuqpVq5q/32bNmsnEiROdttEWm+eee868l76nvvf48ePpKsIVoYUDyAO9UAQFBcl7770nPXr0MMu+/PJLOXnypGkx0JaPzPTCcfvtt5sLkIYTvbjot15tau/Vq5fZ5v7775cVK1bI2LFj5bbbbjP/sP/000/mIjds2DDTspJRampqtq0pZ86cyfPfo9ZGqGrVquW63d133y3z5s2Tzz//3By3nQaQzz77zFxAS5cuLUeOHJFu3bqZC/SECRPMhUzfQz9XXmhoye4z/fXXX1mW6XvfcsstpvtCW2u0bmLTpk0SEREhhw4dMl0Z+Tn/dmvXrpUPP/zQBA8NTa1btzbdJY8++qjccccd0q9fP7Pdddddl6fPNHToUHnzzTfl66+/Nn+v2dELvwa3W2+91QQIFR8fLxs3bpQnnnjCks+7c+dOU2ukn2PKlCkmTOzdu9e8p50GGd2PdrkNHz5cmjdvbn4nZ8+eLXv27JGoqKg8nQMgCxuAHC1atMim/5ts3brV9vrrr9sqVapkO3funFl355132oKDg82fGzZsaOvVq5fTz9q3szt//rytZcuWtq5duzotP3TokK169eq22267zZaWlma74YYbbA0aNLCdPHnSaTs9jss99DjtnnvuObNs9+7dtqNHj9qSkpJs77zzjs3Hx8d21VVX2c6ePZvr33x6errtH//4h61///5Oyz/88EOz35iYGPN65cqVWd47r2655ZbLfqaXX37Zsf0LL7xg8/X1te3Zs8dpPxMmTLCVLl3atn///nyff30PLy8v286dO52W6znTdXoeM7OfW90mO3/99ZdZf8cddziWhYeHm98TuyeeeMJWuXJl28WLF3M8P4X9eWfPnp3rcav//Oc/5nxs2LDBafnChQvNz27cuDHHnwVyQ5cKkEd33XWXpKSkmG+Mp0+fNs85dacobdbO+G1dW0O0O0MLNjPSrgltSdBvvLp+x44dpotFm9gz69u3r9ku8+PJJ5/M8Ti0yVxbH7SVRrs5tJlcW2d0ZEVutAtBvyFrt07GFhSt//jHP/7hKKDVFg2l5+PChQuSX3pc2X2mJUuWZNlW62j0HGnrjLaK2B8hISGmpSQmJibf519pK0KLFi2ksGhXhdLfk5zoedNC3ozdLlZ/Xvvf1SeffJJjAau+p7ZqBAQEOL1n165dzfp169bl61wAdnSpAHmkF239h14LRbWpW//B16LBnOgFeOrUqSZAZBwm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nvj7+0v58uWlXbt2smXLFlcfEgARiYmJkT59+pgZKXVW56ioKM5LCULggEf54IMPZOzYsWZY7Pbt26V169YSGhoqR44ccfWhASXe2bNnzf+T+qUAJQ/DYuFRtEXjxhtvlNdff91xnxy9r8rIkSNlwoQJrj48AP+jLRwrV66UsLAwzkkJQQsHPMb58+clLi5OQkJCnO6To69jY2NdemwAUNIROOAx/vzzT7l06ZLUrl3babm+Tk5OdtlxAQAIHAAAoAjQwgGPUbNmTSldurQcPnzYabm+9vPzc9lxAQAIHPAg5cqVk8DAQImOjnYs06JRfR0UFOTSYwOAkq6Mqw8AKEw6JDY8PFzatm0rN910k7z66qtmKN7999/PiQZc7MyZM7J3717H68TERNmxY4dUr15dGjRo4NJjg/UYFguPo0NiX375ZVMoev3118ucOXPMcFkArvXtt99KcHBwluX6JWHx4sUuOSYUHQIHAACwHEWjAADAcgQOAABgOQIHAACwHIEDAABYjsABAAAsR+AAAACWI3AAAADLETgAAIDlCBwAit1slaVKlZITJ064+lAA5AOBAyhh7rvvPgkLC3PZhfz55583U85n5u/vb95fHz4+Pub1XXfdJWvXrnXarkOHDnLo0CGpUqWKpccJoHAROAAUCZvNJhcvXsx1mylTppgwsXv3bnn33XelatWqEhISIi+++KLTXYH9/PxMMAFQfBA4AGTru+++k86dO5vWhvr168uoUaPMnXft/vOf/5i78laqVMkEgEGDBsmRI0eytJh8+eWXEhgYKN7e3rJkyRKZPHmy/PDDD47WjIw37bLvS+8cevPNN8ubb74pkyZNkmeffdaEkOxaYn777Tfp06ePVKtWTXx9feXaa6+VL774wrHPn3/+WXr06CEVK1aU2rVry9ChQ+XPP/90rF+9erV06tTJhJsaNWpI7969Zd++fY7158+flxEjRkidOnWkfPny0rBhQ5k+fbpjvR7Hgw8+KFdddZVUrlxZunbtaj4fAGcEDgBZ6AW3e/fu0r9/f/nxxx/lgw8+MAFEL7x2Fy5ckBdeeMFcXKOioiQpKcl012Q2YcIEeemllyQ+Pl5uu+02GTdunAkF2pKhj7vvvjvXv4EnnnjCtI588skn2a5//PHHJS0tTWJiYuSnn36SGTNmmHBhDwMaAG644QbZtm2bCReHDx82XTV2GqLGjh1r1kdHR4uXl5fccccdkp6ebtbr3YY//fRT+fDDD03oWbp0qenusbvzzjtN0NJgFRcXJ23atJFbb71Vjh8/zm8WkJENQIkSHh5uK126tM3X19fpUb58eZv+k/DXX3/Zhg0bZhs+fLjTz23YsMHm5eVlS0lJyXa/W7duNT9/+vRp83rdunXmdVRUlNN2zz33nK1169ZZfr5hw4a22bNnZ7vv2rVr2x599FGn/epxqlatWtmef/75bH/uhRdesHXr1s1p2YEDB8zP7969O9ufOXr0qFn/008/mdcjR460de3a1Zaenp5lWz0nlStXtqWmpjotv+aaa2xvvPFGtvsHSipaOIASKDg4WHbs2OH0+Ne//uVYr60W2tWhLQX2R2hoqPnWn5iYaLbRb/PalaHdH9oVcsstt5jl+/fvd3ov7Xa5UtrCkVPNhnb1TJ06VTp27CjPPfecaZHJ+DnWrVvn9DkCAgLMOnu3SUJCgtxzzz1y9dVXmy4Re+uF/XNoq42en2bNmpn3+vrrr532f+bMGdMVk/E99Bxl7JYBIFKGkwCUPFrr0LhxY6dlv//+u+PPehF9+OGHzQU2Mw0Y2g2hAUQf2sWg9Qt6gdbXWvOQ+b2uxLFjx+To0aPSqFGjbNdr/YS+7+eff27CgNZXzJo1S0aOHGk+h4Yi7WbJTGsylK7Xuoy33npL6tata0JVy5YtHZ9Du0g0QGiXyTfffGO6Y7SQdfny5Wb/uh+tK8lMa0IA/I3AASALvcj+8ssvWUKJndZKaBDQ2gwtKFVaA5EXOsrk0qVLeT7rr732mqmryG4or50ewyOPPGIeERERJjxo4NDP8fHHH5tWizJlsv5zp59B6zJ0ey2QVVqrkpm2fGitiT4GDBhg6lu0RkP3n5ycbPadsa4DQFZ0qQDI4qmnnpJNmzaZIlHtTtBuBy3atBeNaiuHBoe5c+fKr7/+aooqtYA0L/TCrC0Gul8dLaIFn3anT582F/ADBw6YItDhw4eb7hIdFptT+Bk9erR89dVXZp/bt283XSjNmzd3FJRqMNAuk61bt5puDt32/vvvN6FHR7Zod4iOhtm7d6+Z80MLSDN65ZVX5L333pNdu3bJnj175KOPPjIjaexDdoOCgkwY0tYVLZzV8/b000/nOYABJQWBA0AW1113naxfv95cYPWbv47y0KGp2uWgtAtFazz04tuiRQvT0hEZGZmnM6kjX7SFQOtIdD96MbfT99AuCg0XOnz15MmTZuSIBqCcaHDQYKEhQ/fbtGlTmT9/vlmnx7tx40azTbdu3aRVq1YmoGhY0FYTfbz//vumHkW7UcaMGSMvv/yy0/61PmXmzJmmFuXGG280oUKH3erPal2J/lmH8GqI0fceOHCgGaqrQ3AB/K2UVo5meA0AAFDoaOEAAACWI3AAAADLETgAAIDlCBwAAMByBA4AAGA5AgcAALAcgQMAAFiOwAEAACxH4AAAAJYjcAAAAMsROAAAgFjt/wDcbRZljuxrNQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAGJCAYAAADWn3rYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAANBRJREFUeJzt3Ql4VOW9x/F/EgSCsqssFUkUFRREE9xAlCiKrQuIuAEtUBWsoChcq8EFcAFlUauogLV6K6goQvTSum+gwhWDCim7JoqyqsgiCErmPr+396QzyWQhOcnkZL6f5xnHc+bk5J2FnN+8a0IoFAoZAACADxL9OAkAAADBAgAA+IoaCwAA4BuCBQAA8A3BAgAA+IZgAQAAfEOwAAAAviFYAAAA3xAsAACAbwgWQCmefvppS0hIsLy8vFJfq5SUFBs4cGC1eE3HjBnjyv3dd9/FuihxbX8+P0BNQLBAXPrXv/5l/fv3t9/85jdWp04da9mypfXr18/tR+xDjwLaBRdcELO34rHHHnOBoLD33nvPldu76bPTrFkz69atm40bN862bNkSk/IC1QnBAnFnzpw5lpaWZm+//bYNGjTIXUSuuuoqe/fdd93+uXPnxrqIiLHigoXnhhtusGeeecamT59uN998szVp0sRGjx5t7dq1s3feeSfi2N///ve2e/dua926dRWUHIi9WrEuAFCVvvjiC/eH/ogjjrD58+fbIYccUvDY8OHDrWvXru7xpUuXumMQX3bt2mX16tUr9Th9Tvr06ROx7/PPP7dzzz3XLrnkElu+fLm1aNHC7U9KSnI3IF5QY4G4MnHiRHfx0DfN8FAhBx98sE2bNs1++uknmzBhQonn0aLA99xzjx122GHuQpSRkRG1GcVrX1eIGTJkiDVt2tQaNGhgf/jDH2zr1q1Fjn/11VfdRevAAw+0+vXr2/nnn1/kvAo96seh4FO3bl1r3ry5/fGPf7Tvv/++1Of/1VdfWZs2bax9+/a2adOmqMfMnj3blfn9998v8pheHz2Wk5Pjtjdu3OhqffQ6qFlAF9OePXtWSn+C/Px8e+ihh+y4445zz1tNEHpNC7+OL7/8snvd1LylMh155JF299132759+yKOU/OFXofs7Gw744wz3Ps4atQo1wyj11zP32vy0LGl6dixoyvfjz/+aFOmTCmxj8Unn3xiPXr0cJ+55ORkS01Nde9hZT7fNWvWuNCjz4vOp/fsiiuusG3btkUcN2PGDEtPT3flUk2Mjlm3bl2pzx/wUGOBuPI///M/7sKhi3c0usDo8X/84x8lnufOO+90weJ3v/uduy1ZssR9W927d2/U44cNG2aNGjVyfQtWrVpljz/+uLvIe232oqr1AQMGuAvO/fff7wKQjjv99NPt008/deWSN99807788kt3QddFQhdBBSXdL1q0qOB80WprzjrrLHex0Dl0UYtGF6mDDjrIXnjhBTvzzDMjHps1a5a70OmCLLpQ6fdef/31rnybN2925/76668LyluSH374Iep+XVQL00VVF2k9bzVF5Obmugu4XpsPP/zQDjjgAHecjlH5R4wY4e7VNKH3a/v27S5YhlMY++1vf+sunupz4/WX0PPRz952223uOO0vC9ViqFntjTfesHvvvTfqMXqN9FlRsL311lvd50KhQ010lfV89bnU52rPnj3uuelz8+2339q8efNcEGrYsKE7TmW+44477LLLLrOrr77a9Rl55JFH3L8L/V6VFShVCIgTP/74Y0gf+Z49e5Z43EUXXeSO2759u9t+6qmn3HZubq7b3rx5c6h27dqh888/P5Sfn1/wc6NGjXLHDRgwoGCf97Pp6emhvXv3FuyfMGGC2//yyy+77R07doQaNWoUuuaaayLKsnHjxlDDhg0j9u/atatImZ977jl3vvnz5xfsGz16tNu3ZcuW0IoVK0ItW7YMnXTSSaEffvih1NfqyiuvDB166KGhX3/9tWDfhg0bQomJiaG77rrLbW/dutWdf+LEiaH95ZWtpJteX8+CBQvcvpkzZ0ac57XXXiuyP9rrM2TIkFC9evVCP//8c8G+M8880/3s1KlTixx/3HHHuccLe/fdd93PvPjii8U+t44dO4YaN25csF348zN37ly3vXjx4mLP4ffz/fTTT0std15eXigpKSl07733RuxftmxZqFatWkX2A8WhKQRxY8eOHe5eTQwl8R7XN75o3nrrLfcNUN/8wmsHbrzxxmLPOXjw4IJvmPKnP/3JatWqZf/85z/dtr7l65vjlVde6UZKeDe1zZ9yyimuY6lHVdSen3/+2R136qmnum3VnBSmZgvVPKgGQWVv3Lixlebyyy9336xVoxLeRKKaBD3mlaN27drumGjNOmXx0ksvuede+Fa4huDFF19036rP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AOAbggUAAPANwQIAAPiGYAEAAHxDsAAAAL4hWAAAAN/E1XBTAEDl27dvny1YsMA2bNhgLVq0sK5du1pSUhIvfZygxgIA4Js5c+ZYmzZtLCMjw/r27evuta39iA8ECwCALxQe+vTpYx06dLCFCxe6dSV0r23tJ1zEh4SQVhWJo+lIGzZsaNu2bWPmTQDwuflDNRMKEVlZWRGLVGkByF69ellOTo6tWbOGZpEafg2lxgIAUGHqU5GXl2ejRo0qsvKltjMzMy03N9cdh5qNYAEAqDB11JT27dtHfdzb7x2HmotgAQCoMI3+EDV3ROPt945DzRWoYPHtt99a//79rWnTppacnOza8j755JNYFwsA4p6GlKakpNi4ceNcn4pw2h4/frylpqa641CzBSZYbN261bp06WIHHHCAvfrqq7Z8+XKbPHmyNW7cONZFA4C4p3kq9Dd53rx5rqNm+KgQbWv/pEmT6LgZBwIzQdb9999vrVq1sqeeeqpgn9IvAKB66N27t82ePdtGjhxpnTt3jvhbrf16HDVfYIabHnvssdajRw/75ptv7P3337ff/OY3dt1119k111xT7M/s2bPH3cKHyiicMNwUACoPM2/G93DTwASLunXruvsRI0bYpZdeaosXL7bhw4fb1KlTbcCAAVF/ZsyYMTZ27Ngi+wkWAADEebCoXbu2derUyT766KOCfTfccIMLGGrDi4YaCwAA/FHjJsjSECU1h4Rr166dff3118X+TJ06ddyTD78BAIDKE5hgoREhq1atiti3evVqa926dczKBAAAAhosbrrpJlu0aJEbI7127Vp79tlnbfr06TZ06NBYFw0AAAQtWJx00kk2d+5ce+6559zUsHfffbc99NBD1q9fv1gXDQAABK3zph9Y3RQAgPKpcZ03AQBA9ReYmTcBAMHABFnxjRoLAIBv5syZY23atLGMjAzr27evu9e29iM+ECwAAL5QeOjTp49beTp8ETJtaz/hIj7QeRMA4Evzh2omFCKysrIsMTExYtl0rXCak5Nja9asYYXTgKLzJgCgyixYsMDy8vJs1KhREaFCtJ2ZmWm5ubnuONRsNIUAACpsw4YN7l7zDEXj7feOQ81FsAAA+LKek6i5Ixpvv3ccai6CBQCgwrp27WopKSlu2QX1qQin7fHjx1tqaqo7DjUbwQIAUGFJSUk2efJkmzdvnuuo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vG3QoEGxLhoAM9u5c6etXbu24LXIzc21zz77zJo0aWKHH344r1ENx3BTBJKGmk6cONF12DzhhBPs4YcfdsNQAcTee++9ZxkZGUX26wvB008/HZMyoeoQLAAAgG/oYwEAAHxDsAAAAL4hWAAAAN8QLAAAgG8IFgAAwDcECwAAQLAAAADVDzUWAADANwQLANV29saEhAT78ccfY10UAPuBYAHUUAMHDrRevXrF7II9ZswYN916YSkpKe7365acnOy2L7vsMnvnnXcijuvcubNt2LDBGjZsWKnlBOAvggUAX4VCIfv1119LPOauu+5yoWHVqlX297//3Ro1amTdu3e3e++9N2Il2+bNm7sAAiA4CBZAnPvggw+sa9eurvagVatWdsMNN7jVYj3PPPOMW0m2fv367kLft29f27x5c5EakFdffdUtaV+nTh2bMWOGjR071j7//POC2onwxae8c2mlyzPOOMOmT59ud9xxh915550ubESrWfnqq6/swgsvtMaNG9uBBx5oxx13nP3zn/8sOGdOTo799re/tYMOOsiaNWtmv//97+27774rePy1116z008/3YWYpk2b2gUXXGBffPFFweN79+61YcOGWYsWLaxu3brWunVrGz9+fMHjKsfVV19thxxyiDVo0MDOOuss9/wARCJYAHFMF9bzzjvPLrnkElu6dKnNmjXLBQ1dYD2//PKL3X333e4impWVZXl5ea6ZpbBbb73V7rvvPluxYoWdc845NnLkSHfxV82EbpdffnmJZRk+fLir7Xj55ZejPj506FDbs2ePzZ8/35YtW2b333+/CxHeRV8X+hNPPNE++eQTFyI2bdrkmlg8CksjRoxwj7/99tuWmJhoF198seXn57vHtULuK6+8Yi+88IILNzNnznTNNJ5LL73UBSoFqOzsbEtLS7Ozzz7bfvjhh3K88kANFgJQIw0YMCCUlJQUOvDAAyNudevWDemf/tatW0NXXXVVaPDgwRE/t2DBglBiYmJo9+7dUc+7ePFi9/M7duxw2++++67bzsrKijhu9OjRoY4dOxb5+datW4cefPDBqOdu1qxZ6E9/+lPEeVVO6dChQ2jMmDFRf+7uu+8OnXvuuRH71q1b535+1apVUX9my5Yt7vFly5a57euvvz501llnhfLz84scq9ekQYMGoZ9//jli/5FHHhmaNm1a1PMD8YoaC6AGy8jIsM8++yzi9te//rXgcdVCqIlC3/y9W48ePdy3+NzcXHeMvp2rCULNFmrCOPPMM93+r7/+OuJ3qbmkolRjUVyfCjXR3HPPPdalSxcbPXq0q2EJfx7vvvtuxPNo27ate8xr7lizZo1deeWVdsQRR7imDK82wnseqoXR63PMMce43/XGG29EnH/nzp2uCSX8d+g1Cm9OAWBWixcBqLnUF6FNmzYR+7755puC/9fFcsiQIe5CWpiChJoPFDR0U9OA+hfoQqxt9Uko/Lsq4vvvv7ctW7ZYampq1MfVv0G/9x//+Ie76Kv/w+TJk+366693z0PhR80jhanPhOhx9Zt44oknrGXLli48tW/fvuB5qGlDQUFNHW+99ZZrRlGH0tmzZ7vz6zzq91GY+mwA+A+CBRDHdDFdvnx5kfDhUV8GXfDVd0IdO0V9FMpCozr27dtX5rL85S9/cf0eog2R9agM1157rbtlZma6kKBgoefx0ksvuVqIWrWK/lnTc1C/CR2vjqqiviSFqSZDfUF069Onj+t/oj4UOv/GjRvducP7XQAoiqYQII7dcsst9tFHH7nOmmoGUHOBOk96nTdVa6GA8Mgjj9iXX37pOjeqI2dZ6AKsGgCdV6Mz1PHSs2PHDnehXrduneuMOXjwYNfMoeGmxYWcG2+80V5//XV3ziVLlrimj3bt2hV07FQAUFPH4sWLXfOEjh00aJALNxpJomYMjT5Zu3atmzNDHTnDPfDAA/bcc8/ZypUrbfXq1fbiiy+6kSveUNjTTjvNhR7VlqgDq1632267rcxBC4gXBAsgjh1//PH2/vvvuwupvslrVIWGfKqpQNT0oT4Yusgee+yxruZi0qRJZTq3RproG7/6eeg8umh79DvUtKAQoWGh27ZtcyM1FHSKo4CgAKEwofMeffTR9thjj7nHVN4PP/zQHXPuuedahw4dXBBRKFAtiG7PP/+86y+i5o+bbrrJJk6cGHF+9R+ZMGGC6yty0kknufCg4az6WfX70P9raKzCin73FVdc4YbAamgrgP9IUA/OsG0AAIByo8YCAAD4hmABAAB8Q7AAAAC+IVgAAADfECwAAIBvCBYAAMA3BAsAAOAbggUAAPANwQIAAPiGYAEAAHxDsAAAAOaX/wPEdAqdpLygYgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "continuous = [c for c in ['Age', 'RestingBP', 'Cholesterol', 'MaxHR', 'Oldpeak'] if c in df.columns]\n", + "\n", + "for col in continuous:\n", + " fig = plt.figure(figsize=(6,4))\n", + " groups = [df[df['HeartDisease']==t][col].dropna() for t in sorted(df['HeartDisease'].unique())]\n", + " plt.boxplot(groups, labels=[str(t) for t in sorted(df['HeartDisease'].unique())])\n", + " plt.title(f'{col} vs HeartDisease')\n", + " plt.xlabel('HeartDisease')\n", + " plt.ylabel(col)\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "46d13026", + "metadata": {}, + "source": [ + "## 11. Bar charts — categorical variables vs HeartDisease\n", + "Grouped bar charts from crosstabs to compare category counts by target class." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7104a928", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGGCAYAAADmRxfNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAATMlJREFUeJzt3QmcjfX////X2LeM7JR93wlJi8gW8qGolESEhLJUUnaFqCRZ0kILKUqFkAgVlexkicqSnYwt+/nfnu/v7zr/mTEYc8ycMzOP++12NXOu6zrXuc45V+P9ut6v1/sd5vP5fAYAAAAAAUgRyJMBAAAAgMACAAAAwDVBjwUAAACAgBFYAAAAAAgYgQUAAACAgBFYAAAAAAgYgQUAAACAgBFYAAAAAAgYgQUAAACAgBFYAEjUwsLCrEuXLpYUTZo0yb2/v//+O9ingkSkZs2abgGAhEZgASAkbdu2zTp27GiFCxe2dOnSWebMme22226zUaNG2X///RfUc1u6dKkNGDDAjhw5ctG2ggULumDAW3LmzGl33HGHzZgxI8HOL/o5XGpR4JJc6DO55557Yty2aNEi93lMnz7dgmH37t3uelq9evVF29q0aRPlO8uUKZP7f6J58+b2+eef24ULF4JyzgAQk1QxrgWAIJo9e7bdf//9ljZtWnv00UetbNmydubMGfvxxx/t2WeftQ0bNtiECROCGlgMHDjQNfqyZMly0faKFStaz549/Y3Gt99+2+677z4bN26cPfHEE7F+nVatWlmLFi3c53A13njjDTt+/Lj/8TfffGOffPKJjRw50rJnz+5ff+utt17VcRE/dI3oelLwo2snOn3/7777rvtdQfX27dtt5syZLrhQz8RXX33lAm/Pt99+y1cFICgILACElL/++ss1pgsUKGALFy60PHny+Ld17tzZtm7d6gKPUHbDDTfYI4884n+s4Kho0aKuYX81gUXKlCndcrWaNm0a5fHevXtdYKH1arwiNJw7dy5WPQ6pUqWKcj3JSy+9ZMOGDbPevXtb+/bt7dNPP/VvS5MmTbycLwBcCalQAELK8OHD3d329957L0pQ4VED/emnn75o/Zdfful6NnR3t0yZMjZ37tyL9vnnn3+sbdu2litXLv9+77///kX7jR492m3LkCGDXX/99ValShWbMmWK26aUFfWaSKFChfwpKperg8idO7eVKlXKBU2ydu1a19vhpXlpu87r0KFDV6yx8FJ61Htz8803u+frOB9++KHFVv/+/S116tR24MCBi7Z16NDB9cKcOnUqyuvpLrjupuv1SpcubV988cVFz1VqWLdu3Sxfvnzu89V39corr1yx8azj6z3EpHr16u7z98yfP99uv/12d45KCypRooS98MILFh9ic72oJ61fv35WuXJlCw8Pt4wZM7rUt++//z7KfvoO9V2++uqrrkepSJEi7phjx461qlWrun0ee+yxq0pTe/75561evXo2bdo027Jly2VrLC53TcfH+5WpU6e6/a677jrXo1KuXDmXyngtrhkAoYkeCwAhRSkeamReTZqOGtlq6D755JOuEfPmm29as2bNbMeOHZYtWza3z759++yWW27xF3vnyJHD5syZY+3atbOjR4+6xo2888479tRTT7k0EwUwamArEPjll1/s4YcfdilNasRFTy3S8S7l7NmztnPnTv+5qHH8559/uoakggovtUs/f/75Z3eOl6NeG52fzr1169au8adARY04NQZjk2I1aNAgd5c7cuG7Go2qM9BnpwDC88cff9iDDz7oelv0ehMnTnSpagre6tat6/Y5efKk3Xnnna5xqtqY/Pnzu5Qx3VHfs2ePa0xfio6tXp3ly5f7G9milB99HiNGjHCP9fkoCClfvrw7fzVE9Vn89NNPFhv6Hg4ePHjR+oiIiIvWxfZ60e9KU3rooYdcz8GxY8dcUFy/fn379ddfL0pt0mena0oBnM7/3nvvdc9RY13r1EiX2F7/+i4V9OmaKl68eIz7XOmajo/3q/PRPrVr13aBgmzcuNF9V96NgUCuGQAhygcAISIiIsKnP0tNmjSJ9XO0f5o0aXxbt271r1uzZo1bP3r0aP+6du3a+fLkyeM7ePBglOe3aNHCFx4e7jt58qR7rNcuU6bMZV9zxIgR7vh//fXXRdsKFCjgq1evnu/AgQNu0bnoNbR/165d3T7ea0X2ySefuH2WLFniXzdx4sSLXkfHj77f/v37fWnTpvX17Nkz1udbvXp1X7Vq1aLs98UXX7j9vv/++4te7/PPP4/yPemzrFSpkn/d4MGDfRkzZvRt2bIlyjGff/55X8qUKX07duyI8dy848V0/sOHD/eFhYX5tm/f7h6PHDnSnYs+16vlvY/LLdOmTbvq6+XcuXO+06dPR9nn33//9eXKlcvXtm1b/zp99nqNzJkzu+8rsuXLl7tt+r6ja926tftcL2XVqlXuud27d/evu/POO93iic01fa3f79NPP+3eq/a/lECuGQChiVQoACFDd0NFvQ5Xo06dOi61xKM72kq9UK+AKP7QCDqNGzd2v+uutbfoTqvuWK9cudLtqxSbXbt2ubvncaU7yLrjq6VChQouVUV3lr07t+nTp/fvq7vHOg/dLRbvPC5HqUjenW3R6yglyHu/saEeAt2x1uhbnsmTJ7uUFN1Fjixv3rzuzrpHn62ev2rVKle/IXqPOiel2UT+fPXdnD9/3pYsWXLJc9HxGjRoYJ999pn7fjzqUdHnojvZ4hXKq1g5Lqky1apVc3fSoy9KT4rsaq4X1cB4NQ06p8OHD7vaCaUaxfRdqjfocr1bV0vpYKKeg0u50jUdH+9Xr3nixAn3+V5KINcMgNBEKhSAkOGNbHO5RlJMvIZnZGqs/Pvvv+531RIol1vpRpcaTWr//v3uZ69evey7775z9QvK91YOu9JFNNTt1TRgVVyrtBLltKu+IvLoUWqMaRQg5aB7r3u5tJyrfb+xofQjpbcomFAajl531qxZ1r1794tSsfQ5RF/npd2odkDpXEqXUnrNpRrN0d9nTOejOplly5a5NCAFPCtWrIiSDqN9lIbz+OOPu/oCpdkoNU0pPilSXPk+mdLW1GiNqTg6squ5XuSDDz6w1157zTZt2uTSrTyqwYkupnWB8Eb/ulwwfqVrOj7er9ISFSgqYNRgBnrNBx54wO6++27/PoFeMwBCD4EFgJAKLHR3fP369Vf1vEuNnOTd/fbubmtkHdUIxES9HKIgYPPmza6RrRoC3clVga0a3woGYuNSDViPGljKJVcRuHLSdddZ56hGV2zuxF/p/caGAhHVK3iBhWorTp8+fdHoQ7Gl81a9xXPPPRfj9kvl/3t0t1xBmBqjCiz0U8GCajk86unRXWwVCmtkMH0/6tW46667XC9RXEbQutR7ie318vHHH7v6Fo24pe9T85boPIYOHRqlNyjye7iWvP9XFDBcypWu6fh4v1qveTnmzZvnajW0qL5EPV0KTK7FNQMg9BBYAAgpauzqrqnuXGtEoGtBd0R1R1fpFZdr8Hs00o3ujmtRQbPuir/88suuqFRFzVcqrr4c9SosWLDANejUsIt89zahqZHXpEkTlyKjAKNSpUoxFn+rQFpBS+T37Y1C5A1fq1Q03T2Pzed7qc9c373SY15//XUXMChNRoFmZAo21FOhRfsNGTLEXnzxRRdsxPW1A7leFJBpsAENHhD589HIW7EVyPX00Ucfued7RfRxuabj6/0qZUoBoxYFEerF0Jwuffv2dYFQoNcMgNBDjQWAkKK7l2oEKd1FI9VEp7ui0YesvBLdUVVuu+7UxtQbEnnY1ehDvqpxpJoGNay9tA+dn8Q083ZsziWm3oVgjICjNBX1rqj2Y/HixZfsrdAEbpFnDlctjIa3VW+L0qC8XhgFg7pDHZ0+J+XhX4kavXotpTutWbPGPY5MKWTReaMQqbflWrma6yWm71O1K/osYiuu15PmsVBPjT6nYsWKXXK/K13T8fF+o7+mAkKv18P7rq7FNQMgtNBjASCk6C6mxtdXY0kpHJFn3lb6kO5oKxXjaqkRprvaqn/QMJlqWKmhqoJT5Z97jVblgquxrPxzjeevITLfeusta9SokT+PXcO6iu6UazI/zQmhu7JeA/FK6V41atRw83WoUaf8czUOvTkuEpLOW+ev96cGo4YHvVRKioYdVc+GPhMNb6ugT6ktHqXFfP31167XwRv6VsW769atc3e5VYsRedbvmDRs2NB9xs8884y/sRuZhphVKpS+C02gqBx8pfTceOONbm6Laym214ver+7eq7hd56Xvcfz48W7/yLOfX+maVw2Onqf3r+tIr+vVLKiBrRQkr9hfw/Dqs1Z9Qq1ata44C31srulr/X51Y0DPUZqavh+ds+bSUCCo/6+v1TUDIMQEe1gqAIiJhqBs3769r2DBgm442euuu8532223uSFkT5065d9Pf8Y6d+4c4/CiGqozsn379rl98+XL50udOrUvd+7cvtq1a/smTJjg3+ftt9/21ahRw5ctWzY3BGqRIkV8zz77rBsSNfpQmTfccIMvRYoUUYZy1es2atTosl/qrl27fPfee68vS5YsbijP+++/37d79253nP79+19xuNmYjh99iNHYDo/766+/um0aIjcm3uvNmzfPV758efeZlCxZMsrQrJ5jx475evfu7StatKj7zrJnz+679dZbfa+++qrvzJkzvtho2bKlO586depctG3BggVu6NS8efO64+vnQw89dNFwpZd7HzHR8LrRh5uN7fVy4cIF35AhQ9zx9dloCN5Zs2a5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4YcfosxlMXnyZCtZsqSrudAws7fffrtNmDAhiO8KAAAASH6C2mNRs2ZN8/l8l9w+b968Kx5DPRtMhgcAAAAEV6KqsQAAAAAQmggsAAAAAASMwAIAAAAAgQUAAACA4KPHAgAAAEDACCwAAAAAJO7hZgEACKaCz89Oll/A38MaBfsUACRB9FgAAAAACBiBBQAAAICAEVgAAAAACBiBBQAAAICAEVgAAAAACBiBBQAAAICAEVgAAAAACBiBBQAAAICAEVgAAAAACBiBBQAAAICAEVgAAAAACBiBBQAAAICAEVgAAAAACBiBBQAAAICAEVgAAAAACBiBBQAAAICAEVgAAAAASNyBxZIlS6xx48aWN29eCwsLsy+//DLKdp/PZ/369bM8efJY+vTprU6dOvbHH39E2efw4cPWsmVLy5w5s2XJksXatWtnx48fT+B3AgAAACRvQQ0sTpw4YRUqVLAxY8bEuH348OH25ptv2vjx4+2XX36xjBkzWv369e3UqVP+fRRUbNiwwebPn2+zZs1ywUqHDh0S8F0AAAAASBXMj6BBgwZuiYl6K9544w3r06ePNWnSxK378MMPLVeuXK5no0WLFrZx40abO3euLV++3KpUqeL2GT16tDVs2NBeffVV1xOSWBR8frYlR3+nC/YZAAAAIEnXWPz111+2d+9el/7kCQ8Pt2rVqtmyZcvcY/1U+pMXVIj2T5EihevhuJTTp0/b0aNHoywAAAAAkmBgoaBC1EMRmR572/QzZ86cUbanSpXKsmbN6t8nJkOHDnVBirfky5cvXt4DAAAAkFyEbGARn3r37m0RERH+ZefOncE+JQAAACBRC9nAInfu3O7nvn37oqzXY2+bfu7fvz/K9nPnzrmRorx9YpI2bVo3ilTkBQAAAEASDCwKFSrkgoMFCxb416kWQrUT1atXd4/188iRI7ZixQr/PgsXLrQLFy64WgwAAAAAyWBUKM03sXXr1igF26tXr3Y1Evnz57du3brZSy+9ZMWKFXOBRt++fd1IT02bNnX7lypVyu6++25r3769G5L27Nmz1qVLFzdiVGIaEQoAAABI7IIaWPz2229Wq1Yt/+MePXq4n61bt7ZJkybZc8895+a60LwU6pm4/fbb3fCy6dL9/2OUTp482QUTtWvXdqNBNWvWzM19AQAAACCZBBY1a9Z081VcimbjHjRokFsu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wu4xDTSEogMHDtjPP//sn81VPWwff/yxfffdd9azZ09btWqV20YqH0LZ7NmzLXv27O5aXrhwoWuc9erVy7788kt799133T78DUYoOXbsmPXv398WLVrkHtepU8caN25szZs3t99++82efPJJW7NmjdvG39/Eh8ACcaJu9n///delOZUtW9YmTJhgN998s40ePdr27dtnERERdGUiZKnhlStXLps+fbp7fMstt7jG18mTJ10qyfHjx61Zs2au583DXV+EamCRKVMmGzFihFWpUsVuvPFG1/Om61vBMSlRCCWDBg2yLFmy2K+//mplypRx6/T3Vj0U6mmbNGmSHT161Dp06GC///67P5Wav7+JB4EFrpr+0dIdBnW1582b11599VWX09utWzeXp65G2l9//WVFixZ1+/MHAaFi1qxZlidPHtcY090yXbuiIPmmm26yTZs2WalSpeztt9+2u+66yx566CGbOHGi24e7vgglXg76s88+a/nz57dPP/3U1Vh4cuTI4QKOjBkzBvEsgf8zZ84cK1eunPvbqr+9eqxrVGrVquUe//3331a5cmXXc6zr+4EHHuDvbyJEYIFY+/bbb116k+7yPvHEE1a7dm13h1d/AJRK0rt3b1uyZIm98MILLhVq/vz5fLoICbpzW7FiRfvf//7nAl2ljNSoUcPfza56IKVGbd682d0h++OPP9wdtd27d1vnzp1t3Lhx/uGTKSpEsMycOdP/u+7w6votVKiQNW3a1FasWOFu8Hg9cmq8Kb1EuLmDYNHf1Ntvv93uvfdel82gwOGOO+5w166uSy3qwahZs6YLjJVSrUBDf4N1c3L48OE2ZMgQ+++///gSEwsfEAv79+/33X333b6+ffv6zpw5c9H2Cxcu+M6ePet//P777/tSpUrl27p1q387kNB0TXbs2NEXFhbm69Wrl2/t2rW+1KlT+8aOHes7ffq028e7nidMmOCrXLmy7+GHH3b7PProo77Dhw/7Ro8e7StTpoyvatWqvvPnz/MlIsHpuqtTp467jl966SXfsmXLoly7J06c8NWvX99XvXp1X548eXw33XST76effuKbQlBt2bLFXbMdOnTwHThwwDd79mxfeHi4b+bMmVGu34iICN/NN9/sK1u2rC9t2rS+5s2b+3bs2OH777//fJ988ok7RufOnX0nT57kG00EUgU7sEFo010F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m9by5ctnjRs3tgULFiTI67dp08aaNm0aY0DjLeHh4XbbbbfZwoULY33cL774wgYPHhyrfSdNmhTl9WJa/v7776t6XwCASyOwAIAkRo3lypUruwb7iBEjbN26dTZ37lyrVauWde7cOdinZxMnTrQ9e/bYTz/9ZNmzZ7d77rnH/vzzz1g9N2vWrHbdddfFat8HH3zQvY63VK9e3dq3bx9lnQIuAMC1QWABAEnMk08+6e7G//rrr9asWTMrXry4lSlTxnr06GE///yzf7+DBw/avffeaxkyZLBixYrZ119/HeU469evtwYNGlimTJksV65c1qpVK/ccz/Tp061cuXKWPn16y5Ytm9WpU8dOnDhhAwYMsA8++MC++uorf8/AokWL/M/LkiWL5c6d28qWLWvjxo2z//77z+bPn2+HDh2yhx56yG644QZ3Tjr2J598ctlUqIIFC9qQIUOsbdu2LuDInz+/TZgwwW3Teel1vCVNmjTuuPr922+/dZ/JuXPnohxfvSx6n6L3UbFiRXv77bddAKLnPvDAAxYRERHlOe+++66VKlXK0qVLZyVLlrSxY8cG+A0CQOJEYAEAScjhw4dd74R6JjJmzHjRdjXqPQMHDnQN5bVr11rDhg2tZcuW7vly5MgRu+uuu6xSpUr222+/uWPu27fP7S+6268gQA36jRs3usDhvvvuM5/PZ88884zb7+677/b3DNx6660xnq8a/3LmzBk7deqU62mZPXu2C2o6dOjgGvkKkC7ntddesypVqtiqVatcUNWpUyfbvHnzZZ9z//332/nz56MEU/v373evrffk2bp1q3322Wc2c+ZM9xl4r+GZPHmy9evXz15++WX3OSjI6du3rwusACDZ8QEAkoxffvnFpz/tX3zxxWX30z59+vTxPz5+/LhbN2fOHPd48ODBvnr16kV5zs6dO90+mzdv9q1YscL9/vfff8d4/NatW/uaNGkS4+vOmDHD/X7ixAnfk08+6UuZMqVvzZo1MR6nUaNGvp49e/of33nnnb6nn37a/7hAgQK+Rx55xP/4woULvpw5c/rGjRt30bGiP7dTp06+Bg0a+B+/9tprvsKFC7tjSP/+/d257dq1y7+PPp8UKVL49uzZ4x4XKVLEN2XKlCivo8+uevXqMb4fAEjKUgU7sAEAXDv/13aPnfLly/t/V+9G5syZ3V17WbNmjX3//fcuDSq6bdu2Wb169ax27douXal+/frucfPmze3666+/4uuqpyNlypQuBSpHjhz23nvvuXNRD4Lu+KuH4J9//nG9GKdPn3YpSLF9H0q7UqqT9z4uR/UWVatWda+l9CsVe6voXMfwKLVK2zyq07hw4YLrEVHqlT6Ldu3auWN5lF6lwnQASG4ILAAgCVGthBrGmzZtuuK+qVOnjvJYz1OjWY4fP+5GkXrllVcuel6ePHlcYKC6iKVLl7p6hdGjR9uLL75ov/zyixUqVOiyrzty5EhXj6HGtwILjwrNR40aZW+88YYLWBTsqJ5CAUZc38flKM2rQoUK9uGHH7rAaMOGDS4VKrb0Gck777xj1apVi7JNnw8AJDcEFgCQhGjUJPUgjBkzxp566qmL6ixUOxG5zuJSbrrpJvv8889dcXSqVDH/U6EGvIaL1aI6gwIFCtiMGTNckbgKpdUDERP1KBQtWvSi9RolqkmTJvbII4+4xwoOtmzZYqVLl7b48vjjj7tARr0WCnaijxK1Y8cO2717t+XNm9c9VvF7ihQprESJEq6gXes1opXqUwAguaN4GwCSGAUVatTffPPNLjj4448/XGHxm2++6VJ5YkPF3yrkVtrS8uXLXcrPvHnz7LHHHnPHVs+E0pZU2K3Gt+aXOHDggBsdSRSQqChcKUMaSers2bOx6m3xekF0vh07dnQF4/Hp4Ycftl27drleh8hF2x6N9NS6dWuXGvbDDz+4YE2F6QqOvAL4oUOHus9WQZCG9tVwuq+//nq8njcAhCICCwBIYjQp3sqVK928FT179nTDutatW9dNjqfhXWNDd+LVg6AgQmlCSk1SWpJ6O3THXvUYS5YscaNJaTjbPn36uNGZNDytqOZAd/U1WpPSnXSsK9Ex1FOiHhcNK6vGe0yT7F1LSsfSkLyqJYnptdSzotGu9D71OaieI/Jwsurx0HCzCib0Gd15552uVuNK6WAAkBSFqYI72CcBAECwqAhdc1qo1yEyzWPx5Zdf2urVq4N2bgCQmFBjAQBIlv799183/4YWJrUDgMARWAAAkiWNCqXgQiNfKW0LABAYUqEAAAAABIzibQAAAAABI7AAAAAAEDACCwAAAAABI7AAAAAAEDACCwAAAAABI7AAAAAAEDACCwAAAAABI7AAAAAAEDACCwAAAAAWqP8Pwf4JdPb9k9cAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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bSshISGmS5XdwoULzbfrrVq1Ms/tLRLalShm966E0K42MT+z6J9ddIsWLTLf2pctW9a0ctgXe2vMpk2bHPtG/8ztrTv//ve/5eTJk7G6aGlrkra6JCXt2vSw0aH0b00tW7bMtCrEJamv1/6a2pqk/x3E95r6mWoLXfTXrF69urmm6K8JwEO5OtkAQHJ61DfI+m3u0KFDbQULFrR5eXk5fSPepUsXx35btmyx5cyZ06yvWLGi7b///a9t3759llssQkND4zzf06dPm+c9evQw30zfv3/fab/r16/H22IR81ojIyNtlStXthUoUMB29+7dWOf24MED2x9//GEbPXq04xrXrVtne5i//vrLnNeHH35onkdFRdkKFy5sa926tdN+/fv3N8fT1pEmTZrYPv30U9u1a9dsj6KtAdoqEJ+YLRblypV7aOtGnz59HPtu27bN1rBhQ1uWLFli7XfmzBmnFosGDRrE+frJ2WKhf5O1a9c26/LmzWtr27atbeHCheZzTK7r1c+vTZs2Zp2vr6/tueees82aNct2584dx3GaNm360NfU3wHg2aixAODR9Jt/LW7VoUADAwPNN7JaSKs1F9G/Ldb5HfTbef0WWfvHay2E9mefMWOGaQ1ILG9v7zjX/79756SRLl0602qhrRLa4qKtFTHPoVKlSmbR90D3nTdvnjRq1CjeY+rcDNq6ojUVWjOwY8cOOXv2rFNtiBo/frypEbG/b9ovX+tJdH+taUkq+lnp+etwrnHRwmaln2HDhg3NN/26r67XYnMdKlg/z5gtBAkZAepxnD9/3rQSaKtYfPQ1t27daloAVq5caVqttDVIWyP0PdTPK6mvV//mf/jhB/O5aA2GtjJp4bZ+frpOWyR0X63/0b+NuGh9BgDPRrAA4NH0Zqpz587mBspOhxTV4uKYcufObYpWddFiaA0bWtRtDxbJMXuyFlnrDZ0WyeqIVHZazPs4Hjx4YB71vB/GPkSqzmmRkO5Q2kVLC5z1xlcL3Vu2bBlrP3to0fkatFC+du3aJpB98MEHklS0eHrfvn3mJvphn4PeNGsxuc4lUbhwYcf6x+3Gk9jP2l7Y/6juVRoG9Vp00UCg82a899575jw18CXX9ergALp8+OGHMn/+fOnQoYMsWLDA/I3ra2rBv35+SR24ALgHaiwAeDT99jdm64COohQZGem0TuseotNv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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGGCAYAAADmRxfNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQ+JJREFUeJzt3QucTeUa+PFnmBn3GcZlkHGXSxiFJJfcJ9QhKkkI0QXFSDXl7mgcl1w6Ll2pDoekUgohl1NUbhMRuYbCiMwwMpjZ/8/z/v9r//cee9Csmdkze/++n89qZq+19l7v2ntr1rPe53nfAIfD4RAAAAAAsCGPnScDAAAAAIEFAAAAgExBjwUAAAAA2wgsAAAAANhGYAEAAADANgILAAAAALYRWAAAAACwjcACAAAAgG0EFgAAAABsI7AAgAxq0aKFWXyVr5+fP1i/fr0EBASYnwCQ1QgsAHjd/PnzzcVPest3330n/uznn38270P+/Pnl3Llz3m6Oz3zftm7d6nG7BlO1a9cWb1m4cKFMnz79mvVHjhxx+3cRFBQkJUqUkLvvvltefvllOXr0qFfaCwCWQOdvAOBl48aNk0qVKl2zvmrVqpITffXVV9lynP/85z9SunRp+fPPP+Wjjz6SJ554wqfOD9cGFj/99JMMGTLE41vTvXt36dChg6SmpprvxJYtW0wgMmPGDHnnnXfkkUcece7bvHlz+euvvyQ4OJi3GUCWI7AAkGO0b99eGjRo4NU2JCUlSaFChW5q3+y4WHM4HOZC89FHH5XDhw/LggULsi2w4GI0Z3737rjjDnnsscfc1v3666/Srl076d27t9SsWVMiIyPN+jx58pieLgDIDqRCAcg1Ro8ebS6U1q5d67Z+wIAB5iL4xx9/dK77/vvv5d5775XQ0FApWLCg3HPPPfLtt9+6PW/MmDEmpWTPnj3mwr1YsWLStGlTt56CO++80zxft+ndX9e7+J5qEF5//XW57bbbnM/RQEkDA1e//fab9O3bV8LDwyVfvnxm/3fffdfjOWubNQVG70LrsnHjRjl+/Pg1+1WsWFHuu+8++eabb0yb9WKycuXK8v7771+z786dO837UaBAASlXrpz885//lHnz5pn3Qo+V3vlZ+foffvihTJgwwTxXj9O6dWs5cOCA2zH+97//yUMPPSTly5c35xgRESFDhw41d8+vR9OT9BjvvffeNdtWrVplti1fvtw8Pn/+vLmrr+euxyhVqpS0bdtWtm/fLllBvw/169c371tYWJj5PI4dO5ah83788celcOHCcvDgQdP7UKRIEenRo4d5v7/44gsTKFgpT3p+N1KhQgWT4nX58mWZNGnSdWss9u/fL127djW9YPr56eeo55KQkJBl53vy5Enp06ePOZbuV6ZMGenUqZPb902tWLFCmjVrZgIsfU86duwou3fvvuH5A8gZ6LEAkGPohc0ff/zhtk4viooXL25+HzFihHz++efSr18/2bVrl7nw0IvNt956S8aPH++8S/v111+b3g+9KLKCEb1wbtWqlbkQ0gtvV3phVK1aNXn11VdND4EaO3asCTw0f11TtDRw0WBFX1vvDHui7Xj22WflwQcflOeee04uXbpkLuL1eRq4qFOnTsldd91lzmvQoEFSsmRJczGl55SYmHhN+ov2UFSpUkUaNmxo8v41YPnvf/8rw4cPv+b4enGvx9bX0jvXGqzoBay+Dxq8WEFNy5YtzfFjYmLMBdzbb79tLvZu1sSJE817+vzzz5vPTC9k9aJYz9OyZMkSuXjxojz99NPm8/vhhx9M0KVBkW5LjwZiGhBp8KLn4Grx4sUmWIuKijKPn3rqKZMapu9jrVq15MyZMyaw0poUvaufke+bunLlyjXrNJAaOXKkPPzww6bH6PTp0+Z8NNjcsWOHFC1a9G+f99WrV825aDA7ZcoU89nqxb62S/efNm2a2U8DkJvRuHFj811ZvXp1uvto4KHHTE5OlsGDB5vj6XdCgzWt39FAPCvOVwMZDRD0mBooxcfHm3ZqXYgVOH3wwQfmM9f2/etf/zKvO2fOHPP+6DFvJsAC4GUOAPCyefPm6dW8xyVfvnxu++7atcsRHBzseOKJJxx//vmn45ZbbnE0aNDAceXKFbM9NTXVUa1aNUdUVJT53XLx4kVHpUqVHG3btnWuGz16tDlG9+7d3Y6xf/9+R548eRwPPPCAIyUlxW2b62vec889ZrF06tTJcdttt133XPv16+coU6aM448//nBb/8gjjzhCQ0NNOy2XL192FC9e3PHKK6841z366KOOyMjIa163QoUK5lw2btzoXBcfH2/ev2HDhjnXDR482BEQEODYsWOHc92ZM2ccYWFh5vmHDx9O9/zWrVtn9qlZs6YjOTnZuX7GjBlmvX42FtfzsMTGxppj//rrr9d9j2JiYhxBQUGOs2fPOtfp8YoWLero27evc52+XwMHDnRk5vfNWlw/xyNHjjjy5s3rmDBhgtvr6PkGBga6rb/Z8+7du7c5zksvvXTN/h07djSfZ1r62ehzJk+enO656XdQ90lISHD7zPSn0s9dHy9ZsiTd18js89V/pzdq9/nz583n279/f7f1J0+eNJ9z2vUAciZSoQDkGLNmzTJ3MV0XvZvvSu/aa2+C3mXXO5t6x1nTZgID/28HbFxcnEn10B4CvYOt23XR/HVN2dFUIi16daV3vl19+umnZp9Ro0aZO/Ou9E5/evQurt6p1WJaT7Q3ZOnSpXL//feb36226aLnoneqXdN49Nz1HLRY16K/a8qXp/QQvWuvaSQW7Q2pXr26HDp0yLlu5cqV5s52vXr1nOs0zUV7HG6WprS41l9Yx3Q9jqbPWPS913PU3h89b737fD3dunUzvQYff/yxc52moOkddd3m+n5rL8nvv/8umfV906Vu3bpu+2k79Pugd+9dPzO92689XevWrcvweeud/sxk9W5ompgnVo+E9vRpj4AnmX2+uo9+XzQdS4vNPdH3XT9f/X67HjNv3rzSqFEjt2MCyLlIhQKQY2iK0s0Ub2sa0KJFi0zahaYv6QW1RYMKlTaNxpVewGtKjSXtSFSa964Bhevr3owXX3xR1qxZY85DR7LSlCkNcJo0aWK2azqJXjy9+eabZvFEU0Rcc9y1bZqmZNUwaKqLpsxoipSeuyvNc09Lz9P1Yk5z9zWwsDPyVtrjWO+l63E0xUUDs88+++yai8m0ufxpaUpbjRo1TOqTpnUp/V2HVtV0NoumYOnnrHn9mu6ltQq9evUyqVR2vm96Pq4pUvqd0gtlvaj2RId9zch5azCsNQeZ6cKFC+anpgl6ot+n6Ohoee2118x3SIPCf/zjH6YY3Ao6Mvt89furqU3Dhg0zdUWaCqj1QPpZabBiHVO5fr6uQkJCMvBuAMhuBBYAch29M25diGithSurN2Ly5Mlud+Vdpc1Zd73raoeOxrNv3z6Tr649A9o7MXv2bHPhpb0sVtv0Ii69wMe6W671FlpPonUani7wtCBc8+Bde1D07q4nVt1IZrnRcVJSUkwR9dmzZ02wpUGC1nJoLr/WfKTtMfJEeyb0/PQCXy+S9cJV72ZbPVNK76jrhfEnn3xiejT0M9cLWL3jrjU2mUXbq++z9iB5Onfr+/R3z1svuNP2iNmlw9RqEfv1LsSnTp1q2rNs2TLzvmldUGxsrJkvRgOdrDhfrR3SnjrtDdTeEq3f0GNqzdLtt9/u3FfrLKxgw5Xr5w4g5+JfKoBcRS9A9KJFL5z0YkXv2mvBcpcuXZx39JVub9OmTYaOoa+hx9HRotILTtKjF1Z6UayLFspqu/QCWQulNTVJL5L1guxGbdOLYw0qtHhV79S70uBFC9l1xCjXUaxuho4elHYEJ+VpXUZpsPfLL7+YFDW9K225XlFxWvr+aTCmwZne5dZAy3V+BouOLvTMM8+YRXt7tGhb3+/MDCz0+6BBk97tv/XWW7P0vG+Ubnc9mzdvNr1taYei9aROnTpm0e/Rpk2bTK/a3LlzzQhhWXW++rraa6GL3hjQf1sa5GjPnPXvVoOijP67BeB91FgAyFU0hUMvhDSVSEeC0nxuzVO3Ulc0JUYvUnSUHSstxJWmI91I586dzZ1kHQ0q7V3m693913oIV5pXrulU+hytGdC7vzo6jl4s653l67VNL7Y0pUfrPzRwcl10NCa9a6ypLH+X1nLoBajWolj0jnNGXis91l1u1/dKf9cJ3P5O749e+GoKlC4aQOiIRBYNztKmFulFadmyZc2IR5lJg0M9Jw100n7++tj63DPjvK3g9EbpYmlpipsG3Pqd8zRimEUDNB2NypW+z/p9t963zD5freXQINmV/hvVINs6pn4v9WaA3ijwNCrXzfy7BeB99FgAyDE09WLv3r3XrNfgQS+ydRhRTaHQCyhNq1A6dr/e+dQ71jpEqV4gaWG33rHWIVa10PiWW24x6RlaAKoXL5pidD1ab/DKK6+YwEVTbfRCS9NWtChbL1w1hcMTranQNA69+6t32bW9//73v81Y/FbOuw7Vqu3QgtT+/fubwEMv7LVoW+sz9HctRtZ9NEXFE22LXojpcJ4zZ850y3m/kRdeeMEELZrCokN/WsPNat2EHjujd8tdaUqMXjhqAKTvu77nGkylV7h7vV4LTSPTuRa01sI1bUiLkzVtRwMtrcnQQEvfP/2M9C54ZtJz0Tv52uuk8y5o4Kmfp05YqGlYOo+KnmtmnbcGxxpMaS2EDjOs52Z935V+V/Qz1KBXa3b0nPU4+tlpKlHa4nNXmnqkw/PqEMvaG6FBhj7HCnqz4ny1V0MHTtDUNf2+a1qTvo4OvWz1QulztXeuZ8+eptdJ12sPn9Zw6Lwe+m9K/y0ByOG8PSwVANxo+E/dfvXqVUfDhg0d5cqVc5w7d87tTbOGO128eLFznQ6r2aVLFzNcqw65qsN3Pvzww461a9deM9zs6dOnPX4I7777ruP22283zy9WrJgZenX16tXpDsf6xhtvOJo3b+48ZpUqVRzDhw93Dv1pOXXqlBkmNSIiwgyrWrp0aUfr1q0db775ptk+depU0y7XtqY1f/58s8+yZcvMYz0/HaY0rbRttN6bZs2amTbq+6nDg86cOdO8ng7vmd5zraFL0w5Vag2Dqp+TZc+ePY42bdo4Chcu7ChRooQZLvTHH3+8Zr/r0WF/re/AN99847ZNh5/V91aH3i1SpIijUKFC5vfZs2ff9Pdty5YtHrfrOXsaNnjp0qWOpk2bmmPpUqNGDfM57tu372+ftw43q6/hyYULF8ywwjr8qj7PGnrWep+tRYd+1WGCGzVqZIbo9TSMb9rhZg8dOmSG7NXvZv78+c3zW7Zs6VizZk2Wna8OrazP0+fr6+jwsdrmDz/80GN7daho3Ufbp+18/PHHHVu3bvX4XgHIWQL0P94ObgAA3qX1Km+88YZJH0uvOBsAgOuhxgIA/Mxff/3l9lhz5jUdRgvBCSoAABlFjQUA+Bmdx6JFixamQFrz3N955x1T1Kv1KwAAZBSBBQD4GZ1I7qOPPjIja2nBrxbLanDhOuoSAAB/FzUWAAAAAGyjxgIAAACAbQQWAAAAAGyjxkLETDKkE1LpBECZMTkUAAAA4At0ZgqdlFQniHWdqNQTAgsRE1RERERk1+cDAAAA5CrHjh2TcuXKXXcfAgsR01NhvWEhISHZ8+kAAAAAOZwOR6434K3r5eshsNChsf5f+pMGFQQWAAAAgLubKRegeBsAAACAbQQWAAAAAGwjsAAAAABgG4EFAAAAANsILAAAAADYRmABAAAAwDYCCwAAAAC2EVgAAAAAsI3AAgAAAIBtBBYAAAAAbCOwAAAAAJC7A4s5c+ZI3bp1JSQkxCyNGzeWFStWOLe3aNFCAgIC3JannnrK7TWOHj0qHTt2lIIFC0qpUqVk+PDhcvXqVS+cDQAAAOC/Ar158HLlysnEiROlWrVq4nA45L333pNOnTrJjh075LbbbjP79O/fX8aNG+d8jgYQlpSUFBNUlC5dWjZt2iQnTpyQXr16SVBQkLz66quSm1R86QtvNwE50JGJHb3dBAAAgJwfWNx///1ujydMmGB6Mb777jtnYKGBhAYOnnz11VeyZ88eWbNmjYSHh0u9evVk/Pjx8uKLL8qYMWMkODg4W84DAAAA8Hc5psZCex8WLVokSUlJJiXKsmDBAilRooTUrl1bYmJi5OLFi85tmzdvljp16pigwhIVFSWJiYmye/fubD8HAAAAwF95tcdC7dq1ywQSly5dksKFC8snn3witWrVMtseffRRqVChgpQtW1Z27txpeiL27dsnH3/8sdl+8uRJt6BCWY91W3qSk5PNYtFABAAAAEAuDiyqV68ucXFxkpCQIB999JH07t1bNmzYYIKLAQMGOPfTnokyZcpI69at5eDBg1KlSpUMHzM2NlbGjh2bSWcAAAAAwOupUFoHUbVqValfv7654I+MjJQZM2Z43LdRo0bm54EDB8xPrb04deqU2z7W4/TqMpSmVGkgYy3Hjh3LxDMCAAAA/I/XA4u0UlNT3dKUXGnPhtKeC6UpVJpKFR8f79xn9erVZuhaK53Kk3z58jmHuLUWAAAAALk0FUp7Dtq3by/ly5eX8+fPy8KFC2X9+vWyatUqk+6kjzt06CDFixc3NRZDhw6V5s2bm7kvVLt27UwA0bNnT5k0aZKpqxgxYoQMHDjQBA8AAAAA/CCw0J4GnXdC558IDQ01AYMGFW3btjXpSTqM7PTp081IUREREdK1a1cTOFjy5s0ry5cvl6efftr0XhQqVMjUaLjOewEAAAAg6wU4dGY6P6ejQmlgo/UW3kqLYoI8eMIEeQAAILdcJ+e4GgsAAAAAuQ+BBQAAAADbCCwAAAAA2EZgAQAAAMA2AgsAAAAAthFYAAAAALCNwAIAAACAbQQWAAAAAGwjsAAAAABgG4EFAAAAANsILAAAAADYRmABAAAAwDYCCwAAAAC2EVgAAAAAsI3AAgAAAIBtBBYAAAAAbCOwAAAAAGAbgQUAAAAA2wgsAAAAANhGYAEAAADANgILAAAAALYF2n8JAAAAZIoxobyRuNaYBMkN6LEAAAAAYBuBBQAAAADbCCwAAAAA2EZgAQAAAMA2AgsAAAAAthFYAAAAALCNwAIAAACAbQQWAAAAAHJ3YDFnzhypW7euhISEmKVx48ayYsUK5/ZLly7JwIEDpXjx4lK4cGHp2rWrnDp1yu01jh49Kh07dpSCBQtKqVKlZPjw4XL16lUvnA0AAADgv7waWJQrV04mTpwo27Ztk61bt0qrVq2kU6dOsnv3brN96NCh8vnnn8uSJUtkw4YN8vvvv0uXLl2cz09JSTFBxeXLl2XTpk3y3nvvyfz582XUqFFePCsAAADA/wQ4HA6H5CBhYWEyefJkefDBB6VkyZKycOFC87vau3ev1KxZUzZv3ix33XWX6d247777TMARHh5u9pk7d668+OKLcvr0aQkODr6pYyYmJkpoaKgkJCSYnhNvqPjSF145LnK2IxM7ersJAIDsNCaU9xvXGpMg3vJ3rpNzTI2F9j4sWrRIkpKSTEqU9mJcuXJF2rRp49ynRo0aUr58eRNYKP1Zp04dZ1ChoqKizBtg9Xp4kpycbPZxXQAAAABknNcDi127dpn6iXz58slTTz0ln3zyidSqVUtOnjxpehyKFi3qtr8GEbpN6U/XoMLabm1LT2xsrIm8rCUiIiJLzg0AAADwF14PLKpXry5xcXHy/fffy9NPPy29e/eWPXv2ZOkxY2JiTHeOtRw7dixLjwcAAAD4ukBvN0B7JapWrWp+r1+/vmzZskVmzJgh3bp1M0XZ586dc+u10FGhSpcubX7Xnz/88IPb61mjRln7eKK9I7oAAAAA8JEei7RSU1NNDYQGGUFBQbJ27Vrntn379pnhZbUGQ+lPTaWKj4937rN69WpTWKLpVAAAAAD8oMdCU5Lat29vCrLPnz9vRoBav369rFq1ytQ+9OvXT6Kjo81IURosDB482AQTOiKUateunQkgevbsKZMmTTJ1FSNGjDBzX9AjAQAAAPhJYKE9Db169ZITJ06YQEIny9Ogom3btmb7tGnTJE+ePGZiPO3F0BGfZs+e7Xx+3rx5Zfny5aY2QwOOQoUKmRqNcePGefGsAAAAAP+T4+ax8AbmsUBOxTwWAOBnmMcCnjCPBQAAAAB/keOKtwEAAADkPgQWAAAAAGwjsAAAAABgG4EFAAAAANsILAAAAADYRmABAAAAwDYCCwAAAAC2EVgAAAAAsI3AAgAAAIBtBBYAAAAAbCOwAAAAAGAbgQUAAAAA2wgsAAAAANhGYAEAAADANgILAAAAAAQWAAAAALyPHgsAAAAAthFYAAAAALCNwAIAAACAbQQWAAAAAGwjsAAAAABgG4EFAAAAANsILAAAAADYRmABAAAAwDYCCwAAAAC2EVgAAAAAsI3AAgAAAIBtBBYAAAAAcndgERsbKw0bNpQiRYpIqVKlpHPnzrJv3z63fVq0aCEBAQFuy1NPPeW2z9GjR6Vjx45SsGBB8zrDhw+Xq1evZvPZAAAAAP4r0JsH37BhgwwcONAEFxoIvPzyy9KuXTvZs2ePFCpUyLlf//79Zdy4cc7HGkBYUlJSTFBRunRp2bRpk5w4cUJ69eolQUFB8uqrr2b7OQEAAAD+yKuBxcqVK90ez58/3/Q4bNu2TZo3b+4WSGjg4MlXX31lApE1a9ZIeHi41KtXT8aPHy8vvviijBkzRoKDg7P8PAAAAAB/l6NqLBISEszPsLAwt/ULFiyQEiVKSO3atSUmJkYuXrzo3LZ582apU6eOCSosUVFRkpiYKLt37/Z4nOTkZLPddQEAAACQS3ssXKWmpsqQIUOkSZMmJoCwPProo1KhQgUpW7as7Ny50/REaB3Gxx9/bLafPHnSLahQ1mPdll5tx9ixY7P0fAAAAAB/kmMCC621+Omnn+Sbb75xWz9gwADn79ozUaZMGWndurUcPHhQqlSpkqFjaa9HdHS087H2WERERNhoPQAAAODfckQq1KBBg2T58uWybt06KVeu3HX3bdSokfl54MAB81NrL06dOuW2j/U4vbqMfPnySUhIiNsCAAAAIJcGFg6HwwQVn3zyiXz99ddSqVKlGz4nLi7O/NSeC9W4cWPZtWuXxMfHO/dZvXq1CRZq1aqVha0HAAAAkCNSoTT9aeHChbJs2TIzl4VVExEaGioFChQw6U66vUOHDlK8eHFTYzF06FAzYlTdunXNvjo8rQYQPXv2lEmTJpnXGDFihHlt7ZkAAAAA4OM9FnPmzDEjQekkeNoDYS2LFy8223WoWB1GVoOHGjVqyLBhw6Rr167y+eefO18jb968Jo1Kf2rvxWOPPWbmsXCd9wIAAACAD/dYaCrU9WhBtU6idyM6atSXX36ZiS0DAAAAkOuKtwEAAADkbgQWAAAAAGwjsAAAAABgG4EFAAAAANsILAAAAADYRmABAAAAwDYCCwAAAAC2EVgAAAAAsI3AAgAAAIBtBBYAAAAAbCOwAAAAAGBboJ0nnz59Wvbt22d+r169upQsWdJ+iwAAAAD4R49FUlKS9O3bV8qWLSvNmzc3i/7er18/uXjxYua3EgAAAIDvBRbR0dGyYcMG+eyzz+TcuXNmWbZsmVk3bNiwzG8lAAAAAN9LhVq6dKl89NFH0qJFC+e6Dh06SIECBeThhx+WOXPmZGYbAQAAAPhij4WmO4WHh1+zvlSpUqRCAQAAAH4oQ4FF48aNZfTo0XLp0iXnur/++kvGjh1rtgEAAADwLxlKhZoxY4ZERUVJuXLlJDIy0qz78ccfJX/+/LJq1arMbiMAAAAAXwwsateuLfv375cFCxbI3r17zbru3btLjx49TJ0FAAAAAP+S4XksChYsKP3798/c1gAAAADw7cBCh5Zt3769BAUFmd+v5x//+EdmtA0AAACArwUWnTt3lpMnT5qRn/T39AQEBEhKSkpmtQ8AAACALwUWqampHn8HAAAAgAwNNwsAAAAAtou3Z86cmW4alA45W7VqVWnevLnkzZs3Iy8PAAAAwB8Ci2nTpsnp06fNLNvFihUz6/78808zUlThwoUlPj5eKleuLOvWrZOIiIjMbjMAAAAAX0iFevXVV6Vhw4ZmLoszZ86Y5ZdffpFGjRqZyfOOHj0qpUuXlqFDh2Z+iwEAAAD4Ro/FiBEjZOnSpVKlShXnOk1/mjJlinTt2lUOHTokkyZNMr8DAAAA8H0Z6rE4ceKEXL169Zr1uk6HpFVly5aV8+fP228hAAAAAN8MLFq2bClPPvmk7Nixw7lOf3/66aelVatW5vGuXbukUqVK132d2NhYk1JVpEgR5/wY+/btc9vn0qVLMnDgQClevLip39BekFOnTrnto6lXHTt2NDUe+jrDhw/3GPgAAAAAyEGBxTvvvCNhYWFSv359yZcvn1kaNGhg1uk2pUHA1KlTr/s6GzZsMEHDd999J6tXr5YrV65Iu3btJCkpybmP1ml8/vnnsmTJErP/77//Ll26dHFu18n4NKi4fPmybNq0Sd577z2ZP3++jBo1KiOnBgAAACADAhwOh0MyaO/evaZoW1WvXt0sduhIU9rjoAGEDlebkJAgJUuWlIULF8qDDz7oPGbNmjVl8+bNctddd8mKFSvkvvvuMwFHeHi42Wfu3Lny4osvmtcLDg6+4XETExMlNDTUHC8kJES8oeJLX3jluMjZjkzs6O0mAACy05hQ3m9ca0yCeMvfuU62NUFejRo15B//+IdZ7AYVShustOdDbdu2zfRitGnTxu2Y5cuXN4GF0p916tRxBhUqKirKvAm7d++23SYAAAAAWTQqVHR09A0nyOvUqZMzQLgZqampMmTIEGnSpInUrl3brNNCcO1xKFq0qNu+GkRYReL60zWosLZb2zxJTk42i0WDEAAAAADZHFhoofb27dtNfYPVU6EpUTrTtvYozJ49W4YNGybffPON1KpV66ZeU2stfvrpJ/OcrKZF42PHjs3y4wAAAAD+IkOpUNoboelJWteg6Uq6HD9+XNq2bSvdu3eX3377zdRI3OwEeYMGDZLly5ebmbrLlSvnXK+T7GlR9rlz59z211GhdJu1T9pRoqzH1j5pxcTEmLQrazl27Njffg8AAAAA2AwsJk+eLOPHj3cr4NCijjFjxpiJ8XTYVx2VSQOO69G6cQ0qPvnkE/n666+vGZ5WR50KCgqStWvXOtfpcLQ6vGzjxo3NY/2pQ9vGx8c799ERprRt6fWW6ChWut11AQAAAJDNqVB6l18v5NNeuOsoTFa9gtZFaG/DjdKfdMSnZcuWmbksrJoIDVIKFChgfvbr18/UdGi9hgYAgwcPNsGEjgildHhabUfPnj1NUKOvoTOD62trAAEAAAAgB6dC9e3b1/Q0aAqULvq7BgE6yZ364Ycf5NZbb73u68yZM8cEKS1atJAyZco4l8WLFzv3mTZtmhlOVifG0/QqTW/6+OOPndu1rkPTqPSnBhyPPfaY9OrVS8aNG5eRUwMAAACQXfNYXLhwwdRPvP/++84ZrgMDA6V3794mEChUqJDExcWZ9fXq1ZOcjnkskFMxjwUA+BnmsUAunsciQ6lQOqv2W2+9ZYKIQ4cOmXWVK1c26y25IaAAcjz+wCCH/YEBACBLJsjTeoYTJ05ItWrVTFBhYxJvAAAAAP4WWJw5c0Zat25taig6dOhgggulNRY6fwUAAAAA/5KhwELrK3QYWB32VYeWtXTr1k1WrlyZme0DAAAAkAtkqMbiq6++klWrVrlNZqc0JerXX3/NrLYBAAAA8OUei6SkJLeeCsvZs2eZOwIAAADwQxkKLJo1a2aGmrUEBARIamqqmaCuZcuWmdk+AAAAAL6aCqUBhBZvb9261cyu/cILL8ju3btNj8W3336b+a0EAAAA4Hs9FrVr15ZffvlFmjZtambh1tSoLl26yI4dO6RKlSqZ30oAAAAAvtdjoaNBRUREyCuvvOJxW/ny5TOjbQAAAAB8uceiUqVKcvr0aY/zW+g2AAAAAP4lQ4GFzrCtBdtpXbhwQfLnz58Z7QIAAADgq6lQ0dHR5qcGFSNHjnQbcjYlJUW+//57qVevXua3EgAAAIDvBBZanG31WOzatUuCg4Od2/T3yMhIef755zO/lQAAAAB8J7BYt26d+dmnTx+ZMWOGhISEZFW7AAAAAPj6qFDz5s3L/JYAAAAA8K/AQuetmDhxoqxdu1bi4+PNrNuuDh06lFntAwAAAOCrgcUTTzwhGzZskJ49e0qZMmU8jhAFAAAAwH9kKLBYsWKFfPHFF9KkSZPMbxEAAAAA/5jHolixYhIWFpb5rQEAAADgP4HF+PHjZdSoUXLx4sXMbxEAAAAA/0iFmjp1qhw8eFDCw8OlYsWKEhQU5LZ9+/btmdU+AAAAAL4aWHTu3DnzWwIAAADAvwKL0aNHZ35LAAAAAPhXYGHZtm2b/Pzzz+b32267TW6//fbMahcAAAAAXw8sdFK8Rx55RNavXy9FixY1686dOyctW7aURYsWScmSJTO7nQAAAAB8bVSowYMHy/nz52X37t1y9uxZs/z000+SmJgozz77bOa3EgAAAIDv9VisXLlS1qxZIzVr1nSuq1WrlsyaNUvatWuXme0DAAAA4Ks9FqmpqdcMMat0nW4DAAAA4F8yFFi0atVKnnvuOfn999+d63777TcZOnSotG7dOjPbBwAAAMBXA4t///vfpp5CJ8erUqWKWSpVqmTWvf766zf9Ohs3bpT7779fypYtKwEBAfLpp5+6bX/88cfNetfl3nvvddtH6zt69OghISEhppC8X79+cuHChYycFgAAAIDsrLGIiIgws2trncXevXvNOq23aNOmzd96naSkJImMjJS+fftKly5dPO6jgcS8efOcj/Ply+e2XYOKEydOyOrVq+XKlSvSp08fGTBggCxcuDAjpwYAAAAgqwOLr7/+WgYNGiTfffed6SFo27atWVRCQoKZy2Lu3LnSrFmzm3q99u3bm+V6NJAoXbq0x206h4YWkm/ZskUaNGhg1mmPSYcOHWTKlCmmJwQAAABADkuFmj59uvTv398EFWmFhobKk08+Ka+99lpmts/MlVGqVCmpXr26PP3003LmzBnnts2bN5v0JyuoUNprkidPHvn+++/Tfc3k5GSTtuW6AAAAAMimwOLHH3+8psbBlQ41q7NxZxY91vvvvy9r166Vf/3rX7JhwwbTw5GSkmK2nzx50gQdrgIDAyUsLMxsS09sbKwJhKxFU7sAAAAAZFMq1KlTpzwOM+t8scBAOX36tGQWnd3bUqdOHalbt64pFNdeDDujT8XExEh0dLTzsfZYEFwAAAAA2dRjccstt5gZttOzc+dOKVOmjGSVypUrS4kSJeTAgQPmsdZexMfHu+1z9epVM1JUenUZVt2GpnO5LgAAAACyKbDQouiRI0fKpUuXrtn2119/yejRo+W+++6TrHL8+HFTY2EFL40bN5Zz5865pV9pgblO0teoUaMsawcAAAAAG6lQI0aMkI8//lhuvfVWMzqUFlQrHXJ21qxZpvbhlVdeuenX0/kmrN4HdfjwYYmLizM1ErqMHTtWunbtanofDh48KC+88IJUrVpVoqKinEPcah2GFpTraFQ63Ky2S1OoGBEKAAAAyKGBRXh4uGzatMmMzqR1Cg6Hw6zXiev0Yl+DC93nZm3dulVatmzpfGzVPfTu3VvmzJljUqvee+890yuhgYIWh48fP95tLosFCxaYYEJrLnQ0KA1EZs6c+XdOCwAAAEB2T5BXoUIF+fLLL+XPP/80vQ0aXFSrVk2KFSv2tw/eokULZ3DiyapVq274GtqzwWR4AAAAQC6ceVtpINGwYcPMbQ0AAAAA3y/eBgAAAABPCCwAAAAA2EZgAQAAAMA2AgsAAAAAthFYAAAAALCNwAIAAACAbQQWAAAAAGwjsAAAAABAYAEAAADA++ixAAAAAGAbgQUAAAAA2wgsAAAAANhGYAEAAADANgILAAAAALYRWAAAAACwjcACAAAAgG0EFgAAAABsI7AAAAAAYBuBBQAAAADbCCwAAAAA2EZgAQAAAMA2AgsAAAAAthFYAAAAALCNwAIAAACAbQQWAAAAAGwjsAAAAABgG4EFAAAAANsILAAAAADk7sBi48aNcv/990vZsmUlICBAPv30U7ftDodDRo0aJWXKlJECBQpImzZtZP/+/W77nD17Vnr06CEhISFStGhR6devn1y4cCGbzwQAAADwb14NLJKSkiQyMlJmzZrlcfukSZNk5syZMnfuXPn++++lUKFCEhUVJZcuXXLuo0HF7t27ZfXq1bJ8+XITrAwYMCAbzwIAAABAoDffgvbt25vFE+2tmD59uowYMUI6depk1r3//vsSHh5uejYeeeQR+fnnn2XlypWyZcsWadCggdnn9ddflw4dOsiUKVNMTwgAAAAAP66xOHz4sJw8edKkP1lCQ0OlUaNGsnnzZvNYf2r6kxVUKN0/T548pocDAAAAgB/0WFyPBhVKeyhc6WNrm/4sVaqU2/bAwEAJCwtz7uNJcnKyWSyJiYmZ3HoAAADAv+TYHousFBsba3o/rCUiIsLbTQIAAABytRwbWJQuXdr8PHXqlNt6fWxt05/x8fFu269evWpGirL28SQmJkYSEhKcy7Fjx7LkHAAAAAB/kWMDi0qVKpngYO3atW4pS1o70bhxY/NYf547d062bdvm3Ofrr7+W1NRUU4uRnnz58pnhaV0XAAAAALm0xkLnmzhw4IBbwXZcXJypkShfvrwMGTJE/vnPf0q1atVMoDFy5Egz0lPnzp3N/jVr1pR7771X+vfvb4akvXLligwaNMiMGMWIUAAAAICfBBZbt26Vli1bOh9HR0ebn71795b58+fLCy+8YOa60HkptGeiadOmZnjZ/PnzO5+zYMECE0y0bt3ajAbVtWtXM/cFAAAAgOwT4NAJI/ycplhpEbfWW3grLariS1945bjI2Y7kf9TbTUBONCbB42pNA718+XK2NwfpCwoKkrx58/IW4eaNCeXdwk3/fz+nXSfn2OFmAQA3TwMKTSfV4AI5i863pDWDAQEB3m4KAGQpAgsAyOW04/nEiRPmzrgOn61pocgZn8vFixedoxeWKVPG200CgCxFYAEAuZwOs60XsDpoRcGCBb3dHLgoUKCA+anBhU7oSloUAF/GbS0AyOVSUlLMz+DgYG83BR5YwZ6OXAgAvozAAgB8BDn8OROfCwB/QWABAAAAwDYCCwBAjrZ+/Xpz11/nMwIA5FwEFgDg4x5//HHp3Lmz1y7Yx4wZI/Xq1btmfcWKFc3xddEiZ3388MMPy9dff+223913321GvdJx1AEAOReBBQAgy4Zb1RGrrmfcuHEmaNi3b5+8//77Zs6HNm3ayIQJE5z7aFE680AAQM5HYAEAML755htp1qyZ6T3Q+TCeffZZSUpKcr47H3zwgTRo0ECKFCliLvQfffRR5xwNrj0gK1askPr160u+fPnkP//5j4wdO1Z+/PFHZ+/E/Pnznc+xXqt8+fLSvHlzefPNN2XkyJEyatQoE2x46ln59ddf5f7775dixYpJoUKF5LbbbpMvv/zS+Zo//fSTtG/fXgoXLizh4eHSs2dP+eOPP5zbV65cKU2bNjVBTPHixeW+++6TgwcPuk02OGjQIDPvRP78+aVChQoSGxvr3K7teOKJJ6RkyZJmFtpWrVqZ8wMAf0dgAQAwF9b33nuvdO3aVXbu3CmLFy82gYZeYFt0uNTx48ebi+hPP/1Ujhw5YtKs0nrppZdk4sSJ8vPPP0vbtm1l2LBh5uJfeyZ06dat23Xf8eeee870dixbtszj9oEDB0pycrJs3LhRdu3aJf/6179MEGFd9OuF/u233y5bt241QcSpU6dMipVFg6Xo6Gizfe3atWZCwQceeMA5a/nMmTPls88+kw8//NAENwsWLDBpWpaHHnrIBFQaQG3btk3uuOMOad26tZw9e5ZvEgC/xgR5AOAHli9f7rz4Tjv/hdI78j169JAhQ4aYx9WqVTMX2Pfcc4/MmTPH3Lnv27evc//KlSub7Q0bNpQLFy64vbamN2lAYdFtgYGBpmfiZoSFhZnJ5DRw8eTo0aMmAKpTp46zLZZ///vfJqh49dVXneveffdd0wPzyy+/yK233mqe60q3a+/Dnj17pHbt2ub19fy1V0N7SrTHwqLB1g8//GACC+2RUVOmTDGB1kcffSQDBgy4qXMEAF9EjwUA+IGWLVtKXFyc2/L22287t2svhKYoaRBgLVFRUeYu/uHDh80+endeU5A0bUlTmDToUHoh7krTpezSHov05n/QFK1//vOf0qRJExk9erTpYXE9j3Xr1rmdR40aNcw2K91p//790r17dxOQaCqT1RthnYf2wuj7U716dXOsr776yu31NZDSFCrXY+h75JpOBQD+iB4LAPADWotQtWpVt3XHjx93/q4Xy08++aS5kE5LAwlNH9JAQxdNDdI7/Hohro+1JiHtsew4c+aMnD59WipVquRxu9Y36HG/+OILc9GvvS1Tp06VwYMHm/PQ4EfTo9LSmgml27UX4q233pKyZcua4El7Kqzz0NQmDRQ01WnNmjUmjUoLyrVHQl9fX0frPtLSmg0A8GcEFgAAczGtqUBpgw+L1jLoBb/WTmhakdIahZuhozq5pl3dyIwZM0zdg6chci3ahqeeesosMTExJkjQwELPY+nSpaYXQtOv0tJz0LoJ3V8L1a30prS0J0NrQXR58MEHTf2J1lDo6588edK8tmvdBQCAVCgAgIi8+OKLsmnTJlOsrWlAmi6kxdNW8bb2WmiA8Prrr8uhQ4dMcbMWct8MvQDXHgB9XR2dSQuvLefPnzcX6seOHTPF2FqjoGlOOtxsekGO1oGsWrXKvOb27dtN6lPNmjWdhd0aAGiq05YtW0x6ku7bp08fE9zoSFKaxqSjTx04cMDMmaGF3K5ee+01+e9//yt79+41dRlLliwx9SHWULiNGzc2QY/2lmgdiL5vr7zyyk0HWgDgq6ixAABI3bp1ZcOGDeZCWu/kawG0DvmqqUJKU5+0BkMvsmvVqmV6LrRo+WZosbTe8dc6D30dvWi36DE0tUiDCB0WNiEhwYzUpIFOejRA0ABCgwl9XS3Inj17ttmm7f3222/NPu3atTMF3hqIaFCgvSC6LFq0yNSLaPrT0KFDZfLkyW6vr/UjkyZNMrUiWpyuwYMOZ6vP1boP/V2HxtVgRY/9yCOPmCFwdWhbAPBnAQ6tkPNziYmJZkZX/YOm3d/eUPGlL7xyXORsR/I/6u0mICcak+D28NKlS+buvdYk6OhNyFn4fPC3jGGGedz4//s59TqZHgsAAAAAthFYAAAAALCNwAIAAACAbQQWAAAAAGwjsAAAAABgG4EFAAAAANsILAAAAADYRmABAAAAwDYCCwAAAAC2EVgAAAAAsC3Q/ksAAPxNxZe+yNbjHZnYMUPPmzVrlkyePFlOnjwpkZGR8vrrr8udd96Z6e0DANBjAQDwUYsXL5bo6GgZPXq0bN++3QQWUVFREh8f7+2mAYBPytE9FmPGjJGxY8e6ratevbrs3bvX/H7p0iUZNmyYLFq0SJKTk80fjNmzZ0t4eLiXWgwAyClee+016d+/v/Tp08c8njt3rnzxxRfy7rvvyksvveR3vT7IHY7k93YLAB+usbjtttvkxIkTzuWbb75xbhs6dKh8/vnnsmTJEtmwYYP8/vvv0qVLF6+2FwDgfZcvX5Zt27ZJmzZtnOvy5MljHm/evNmrbQMAX5WjeyxUYGCglC5d+pr1CQkJ8s4778jChQulVatWZt28efOkZs2a8t1338ldd93lhdYCAHKCP/74Q1JSUq7pwdbHVq83AMDPeiz2798vZcuWlcqVK0uPHj3k6NGjZr3eibpy5Yrb3agaNWpI+fLlb3g3StOmEhMT3RYAAAAAPhpYNGrUSObPny8rV66UOXPmyOHDh6VZs2Zy/vx5M8JHcHCwFC1a9Jq7UbrtemJjYyU0NNS5REREZPGZAACyU4kSJSRv3rxy6tQpt/X62FMvOADAxwOL9u3by0MPPSR169Y1hdlffvmlnDt3Tj788ENbrxsTE2NSqazl2LFjmdZmAID36Y2n+vXry9q1a53rUlNTzePGjRt7tW0A4KtyfI2FK+2duPXWW+XAgQPStm1bU5yngYZrr8XN3I3Kly+fWQAAvkuHmu3du7c0aNDAzF0xffp0SUpKco4SBQDwox6LtC5cuCAHDx6UMmXKmDtRQUFBbnej9u3bZ2owuBsFAOjWrZtMmTJFRo0aJfXq1ZO4uDiTWsuQ5ADghz0Wzz//vNx///1SoUIFM5SsTnKkObPdu3c3tRH9+vUzd6TCwsIkJCREBg8ebIIKRoQCgJw5E3Z2GzRokFkAAH4eWBw/ftwEEWfOnJGSJUtK06ZNzVCy+ruaNm2aGZe8a9eubhPkAQAAAMheOTqw0Bm1ryd//vwya9YsswAAAADwnlxVYwEAAAAgZyKwAAAAAGAbgQUAAAAA2wgsAAAAANhGYAEAAADANgILAAAAALYRWAAAAACwjcACAAAAgG9PkAcAyKHGhGbz8RL+1u4bN26UyZMny7Zt2+TEiRPyySefSOfOnbOseQAAeiwAAD4oKSlJIiMjZdasWd5uCgD4DXosAAA+p3379mYBAGQfaiwAAAAA2EZgAQAAAMA2AgsAAAAAthFYAAAAALCNwAIAAACAbYwKBQDwORcuXJADBw44Hx8+fFji4uIkLCxMypcv79W2AYCvIrAAAPicrVu3SsuWLZ2Po6Ojzc/evXvL/PnzvdgyAPBdBBYAgCyfCTu7tWjRQhwOh7ebAQB+hRoLAAAAALYRWAAAAACwjcACAAAAgG0EFgAAAABsI7AAAAAAYBuBBQD4CEZByplSU1O93QQAyBYMNwsAuVxQUJAEBATI6dOnpWTJkuZ35IxA7/Lly+ZzyZMnjwQHB3u7SQCQpQgsACCXy5s3r5QrV06OHz8uR44c8XZzkEbBggXNbN8aXACALyOwAAAfULhwYalWrZpcuXLF201BmqAvMDCQXiQAfoHAAgB86CJWFwAAvMFn+mVnzZolFStWlPz580ujRo3khx9+8HaTAAAAAL/hE4HF4sWLJTo6WkaPHi3bt2+XyMhIiYqKkvj4eG83DQAAAPALPhFYvPbaa9K/f3/p06eP1KpVS+bOnWuK5d59911vNw0AAADwC7m+xkKH8tu2bZvExMQ41+nIG23atJHNmzd7fE5ycrJZLAkJCeZnYmKieEtq8kWvHRs5V2KAw9tNQE7kxf9XIfPw/314wv/3kdP+v29dH9/MXEm5PrD4448/JCUlRcLDw93W6+O9e/d6fE5sbKyMHTv2mvURERFZ1k4gI0J52+DJRL4ZgK/iXzdy6v/3z58/L6Ghob4dWGSE9m5oTYbrrKhnz56V4sWLMyQgcgy9Q6DB7rFjxyQkJMTbzQEAZDH+v4+cSHsqNKgoW7bsDffN9YFFiRIlzPCKp06dcluvj0uXLu3xOfny5TOLq6JFi2ZpO4GM0qCCwAIA/Af/30dOc6OeCp8p3g4ODpb69evL2rVr3Xog9HHjxo292jYAAADAX+T6HgulaU29e/eWBg0ayJ133inTp0+XpKQkM0oUAAAAgKznE4FFt27d5PTp0zJq1Cg5efKk1KtXT1auXHlNQTeQm2i6ns7NkjZtDwDgm/j/PnK7AMfNjB0FAAAAAL5cYwEAAADA+wgsAAAAANhGYAEAAADANgILAACAbJScnMz7DZ9EYAEAAJBNYmNjzRD5gC8isAC85K+//pJVq1bx/gOAn7h8+bKsX7/eDIsP+CICC8ALdHb42bNnS/v27eXcuXN8BgDg41JSUiQ4ONhM4HvlyhVvNwfIEgQWgBfkyZNHHnjgAYmMjJRnnnmGzwAAfIxO2DtkyBD58MMPTSCRN29euXjxopw5c0bq1Klj9mEqMfgaAgsgG/z666/yxhtvyM8//+xcV6FCBRk+fLgsWrRItm3bxucAAD7k4MGDEh8fLwMGDJBWrVrJ8uXL5c8//5Tw8HATYKiAgABvNxPIVMy8DWQx/UNy5513mj8y5cuXl9dff12aNGkiYWFhcvr0aenVq5f540NwAQC+Jy4uTt566y1TW6GprxpUbNiwQerWrWvSYrUHG/AVfJuBLFasWDHp27evNGzYUAoUKCCTJ0+WTp06yS+//CIlS5aUmJgY+emnn+S9997jswAAH6OF2rNmzZLVq1fLQw89JPnz55fPPvvMbKPHAr6GHgsgG+hdKg0uChYsKC+88II8++yz8vvvv0uPHj3M+jfffNMUc2vuLQDAd2gdhS7aM3H+/HmZOnWqLFmyRJYuXSo1atSg1wI+hR4LIBsULVpUunXrJnv37pVjx46ZLvGRI0fK22+/bdaHhISYPzoTJkzg8wAAH6K9Ela6U5EiRaRt27amzmLKlClmHalQ8CX0WADZREcFeeyxx8xQg1rIfcstt8jOnTvlnXfeMXevdAQRpfUWJUqU4HMBAB+kdRUzZ840E+XNmzdPOnTo4O0mAZmGHgsgmwQFBcmwYcPk7Nmz5o+J0uK9GTNmmJ6LZs2ayV133SWBgYEMQQgAPshKiWrTpo307NnTDOgB+BJ6LIBs/qMydOhQ01Mxffp0E1joOu0q1xlZdfIkAACA3IgeCyAbaQChvRaaFmXl11qjghBUAACA3CzQ2w0A/E1ERIR07tzZpEZZvRUAAAC5HalQgBcQUAAAAF9DKhTgBfRSAAAAX0NgAQAAAMA2AgsAAAAAthFYAAAAALCNwAIAAACAbQQWAAAAAGwjsAAAAABgG4EFACBLjBkzRurVq5cr392KFSvK9OnTvd0MAMhVCCwAwAc8/vjjZn6UtMu9997rtTY9//zzsnbt2kx/3djYWMmbN69MnjxZssqWLVtkwIABWfb6AOCLmHkbAHwksDh16pTMmzfPbX2+fPmkWLFimX68y5cvS3BwsHhDtWrV5MEHH5RPP/1Ufv75Z6+0AQBwLXosAMBHaBBRunRpt0WDivXr15sg4H//+59z30mTJkmpUqVMMKKOHTsmDz/8sBQtWlTCwsKkU6dOcuTIEbfApXPnzjJhwgQpW7asVK9e3aw/fvy4dO/e3TynUKFC0qBBA/n+++89pkJpO+68806znx6nSZMm8uuvvzq3L1u2TO644w7Jnz+/VK5cWcaOHStXr151O8cNGzbIX3/9JePGjZPExETZtGmT23brmB988IFJZwoNDZVHHnlEzp8/79xHf+/Ro4dpR5kyZWTatGnSokULGTJkSLqpUNr78/bbb8sDDzwgBQsWNMHNZ5995tyekpIi/fr1k0qVKkmBAgXM+zNjxowMf5YAkBsRWACAj7Mumnv27CkJCQmyY8cOGTlypLlQDg8PlytXrkhUVJQUKVLEBB/ffvutFC5c2KRRac+ERdOa9u3bJ6tXr5bly5fLhQsX5J577pHffvvNXGT/+OOP8sILL0hqauo1bdAAQQMT3X/nzp2yefNmk2qkF+xKj9urVy957rnnZM+ePfLGG2/I/PnzTSDj6p133jGBTFBQkPmpj9M6ePCg6c3QNuqiwcjEiROd26Ojo805apv1XPTY27dvv+H7qIGOBl/a/g4dOpjg5OzZs2abnnO5cuVkyZIlpv2jRo2Sl19+WT788MO/+WkBQC7mAADker1793bkzZvXUahQIbdlwoQJZntycrKjXr16jocffthRq1YtR//+/Z3P/eCDDxzVq1d3pKamOtfp/gUKFHCsWrXK+frh4eFmveWNN95wFClSxHHmzBmPbRo9erQjMjLS/K776J+c9evXe9y3devWjldffdVtnbarTJkyzscJCQmmTXFxcebxjh07HIULF3acP3/e7ZgFCxZ0JCYmOtcNHz7c0ahRI/O7rg8KCnIsWbLEuf3cuXPmOc8995xzXYUKFRzTpk1zPta2jxgxwvn4woULZt2KFSsc6Rk4cKCja9eu6W4HAF8T6O3ABgCQOVq2bClz5sxxW6cpSkpToRYsWCB169aVChUqmPQfi/Y0HDhwwPRYuLp06ZK5+2+pU6eOW11FXFyc3H777c5jXI/uo+lU2jPStm1badOmjbn7r6lIVhu0F8G1h0LTi7QNFy9eNOlH//3vf6VKlSoSGRlptmvKk57L4sWLTRqSaxqT67noMeLj483vhw4dMj00mpJl0XQpK7XrevS9s2gaVUhIiPN11axZs+Tdd9+Vo0ePmnQt7e3JraNiAUBGEFgAgI/Qi92qVaumu92qR9D0HV10f6UpTfXr1zeBR1olS5Z0e31XWkvwd2hh+bPPPisrV640wcCIESNMKtJdd91l2qCpRl26dLnmeVpzoTTtaffu3RIY+P//dGkKkl7MuwYWmiblStOtPKVn/V3Xe91FixaZUbCmTp0qjRs3NoGNjlpl1ZsAgD8gsAAAP6A9D0OHDpW33nrLXNT37t1b1qxZI3ny5DEF07pOi7n1LvzN0jv4WqehQcrN9Foo7eHQJSYmxlyAL1y40AQW2gat30gvMNq1a5ds3brVFIC7HkuPrTUke/fulRo1atzw+FoUrgGCDidbvnx5s07rTn755Rdp3ry5ZJT2ttx9993yzDPPONe59vYAgD+geBsAfERycrKcPHnSbfnjjz9MStFjjz1m0pD69Oljeg60AFnvristQi5RooQZCUoLmQ8fPmwu4LV3QUd9So8WT+vIU1qUrRfWmma0dOlSU5idlr6mBhO6TUeC+uqrr2T//v1Ss2ZNs12Lnd9//33Ta6G9EjqMrPYCaK+G1Vuh6Ut68V+7dm3noo8bNmzosYjbE+1J0KBq+PDhsm7dOnMs7e3QAMsqJM8IHSVKA59Vq1aZIEWL4zV4AQB/QmABAD5CU4y0nsB1adq0qalb0It5HWlJ6fo333zTXLRrbYPWL2zcuNHcwddUJL3Y14ttrW+4Xg+G1ltogKA9HTpKktZg6OhLOnldWnoM7VXo2rWr3HrrrWZEqIEDB8qTTz5ptmvQoyM46etpoKC9GFoHojUUWqvwn//8xzzXE12vQYnWTtyM1157zfSW3HfffabWQ4e91XO2Uq4yQs9D37tu3bpJo0aN5MyZM269FwDgD5ggDwDg15KSkuSWW24xPTiutRoAgL+HGgsAgF/ReTy090RTq7S+QifbU5oKBgDIOAILAIDfmTJliikW13QuHRFLa0u0zgQAkHGkQgEAAACwjeJtAAAAALYRWAAAAACwjcACAAAAgG0EFgAAAABsI7AAAAAAYBuBBQAAAADbCCwAAAAA2EZgAQAAAMA2AgsAAAAAYtf/AZbO6s7rEaf7AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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QNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACk78BixIgRVrduXcubN68VLVrU2rZtaytXroy3T8OGDS1TpkzxlrvuuivePuvXr7dWrVpZrly5/HH69u1rR48eTeVXAwAAAESvrJF88jlz5lj37t09uFAg8N///teaNWtmy5cvt9y5c4f269q1qw0bNix0XwFE4NixYx5UFC9e3ObOnWubN2+2Tp06WbZs2eyRRx5J9dcEAAAARKOIBhZTp06Nd3/8+PE+4rBo0SJr0KBBvEBCgUNipk+f7oHIF198YcWKFbNatWrZ8OHDrV+/fjZkyBDLnj17ir8OAAAAINqlqRqL3bt3+9dChQrFWz9hwgQ766yzrFq1ata/f387cOBAaNu8efOsevXqHlQEmjdvbnv27LFly5al4tEDAAAA0SuiIxZxHT9+3Hr16mWXXnqpBxCBm2++2cqUKWMlS5a0n3/+2UciVIfx4Ycf+vYtW7bECyokuK9tiTl06JAvAQUhAAAAADJAYKFai6VLl9o333wTb/0dd9wRuq2RiRIlSljjxo1tzZo1dt555yW5aHzo0KFhHzMAAACANJQK1aNHD5s8ebJ9+eWXds4555xy33r16vnX1atX+1fVXmzdujXePsH9k9VlKJ1KaVfBsmHDhmR6JQAAAEB0Ciuw2L59u48waNHtfyo2NtaDio8++shmzZplZcuWPe33LF682L9q5ELq169vS5YssW3btoX2mTFjhuXLl8+qVKmS6GPExMT49rgLAAAAgFQOLPbv32+33Xab1z2oe5MW3e7SpUu8wuozSX968803beLEiT6XhWoitPz999++XelO6vCkLlHr1q2zTz/91FvJ6vlq1Kjh+6g9rQKIjh072k8//WTTpk2zAQMG+GMrgAAAAACQRgOLPn36+BwUOtHftWuXL5988omvu/fee8/4cZ5//nlPRdIkeBqBCJZ33nnHt6tVrNrIKnioVKmSP3a7du1s0qRJocfIkiWLp1Hpq0Yv/v3vf3vwEXfeCwAAAABpsHj7gw8+sPfff98DgkDLli0tZ86cdsMNN3jAcKapUKdSqlQpD1ZOR12jPv/88zN6TgAAAABpZMRC6U4JW7yKJrf7J6lQAAAAAKI4sFDK0eDBg+3gwYOhdaqLUAtXbQMAAAAQXZKUCvX000/77NZqDVuzZk1fp8LpHDlyePE0AAAAgOiSpMBCM2OvWrXKJkyYYCtWrPB1N910k3Xo0MHrLAAAAABElyTPvJ0rVy7r2rVr8h4NAAAAgIwdWKi1bIsWLSxbtmx++1Suvvrq5Dg2AAAAABktsGjbtq1PXqfOT7p9MpkyZbJjx44l1/EBAAAAyEiBxfHjxxO9DQAAAABJajcLAAAAAGEXbz/zzDMnTYNSy9ny5ctbgwYNLEuWLEl5eAAAAADREFiMHj3atm/f7rNsFyxY0Nf99ddf3ikqT548tm3bNitXrpx9+eWXVqpUqeQ+ZgAAAAAZIRXqkUcesbp16/pcFjt27PDl119/tXr16vnkeevXr7fixYtb7969k/+IAQAAAGSMEYsBAwbYBx98YOedd15ondKfHn/8cWvXrp399ttvNmrUKL8NAAAAIONL0ojF5s2b7ejRoyes1zq1pJWSJUva3r17wz9CAAAAABkzsGjUqJHdeeed9uOPP4bW6Xa3bt3siiuu8PtLliyxsmXLJt+RAgAAAMhYgcUrr7xihQoVstq1a1tMTIwvderU8XXaJirifuKJJ5L7eAEAAABklBoLFWbPmDHDVqxY4UXbUrFiRV/ijmoAAAAAiA5JCiwClSpV8gUAAABAdEtSYNGnT5/TTpDXpk0bT40CAAAAkPElKbBQofYPP/xgx44dC6U/KSVKM21rBGPs2LF277332jfffGNVqlRJ7mMGAAAAkBGKtzUa0aRJE9u0aZMtWrTIl40bN1rTpk3tpptusj/++MMaNGjABHkAAABAlEhSYPHYY4/Z8OHDLV++fKF1+fPntyFDhvjEeLly5bJBgwZ5wAEAAAAg40tSYLF7927btm3bCeu3b99ue/bs8dsFChSww4cPh3+EAAAAADJuKtRtt91mH330kadAadHtLl26WNu2bX2fBQsW2Pnnn5/cxwsAAAAgoxRvv/DCC14/0b59ezt69Oj/f6CsWa1z5842evRov68i7pdffjl5jxYAAABAxhmx0KzaL730ku3YscM7RGnR7RdffNFy587t+9SqVcuXUxkxYoTVrVvX8ubNa0WLFvXRjpUrV8bb5+DBg9a9e3crXLiwP2+7du1s69at8fZZv369tWrVyms79Dh9+/YNBTwAAAAA0mhgEdiyZYtt3rzZKlSo4Cf9sbGx/+j758yZ40HDd9995zN5HzlyxJo1a2b79+8P7aORkUmTJtl7773n+6sT1bXXXhvarpa3CipUzzF37lx7/fXXbfz48V48DgAAACB1ZIr9p9GAmY9O3HDDDfbll1/6pHirVq2ycuXKed1FwYIF7YknnkjSwaj4WyMOCiDUrlZF4kWKFLGJEyfadddd5/usWLHCKleubPPmzbOLL77YpkyZYldddZUHHMWKFfN9xo0bZ/369fPHy549+2mfVwXn6mql54vb6QoAECFD8vPWJ+v7uZv38xTOfeAz3p9ktG5kK97PDOSfnCcnacRCowjZsmXzFCSlHwVuvPFGmzp1qiWVDliCGbvVrlajGJozI6DajdKlS3tgIfpavXr1UFAhzZs39zdh2bJlST4WAAAAAClcvD19+nSbNm2anXPOOfHWKyXq999/T8pD2vHjx61Xr1526aWXWrVq1UKpVhpxUOvauBREaFuwT9ygItgebEvMoUOHfAkELXIBAAAAJE2SRixUAxF3pCKwc+dOi4mJSdKBqNZi6dKl9vbbb1tKU9G4hnSCpVSpUin+nAAAAEBGlqTA4vLLL7c33ngjdF91Fhpx0KzbjRo1+seP16NHD5s8ebLXbMQdBSlevLgXZe/atSve/uoKpW3BPgm7RAX3g30S6t+/v6ddBcuGDRv+8TEDAAAACDMVSgFE48aNbeHChX7if//993s9g0Ysvv322zN+HNWN9+zZ0yfXmz17tpUtWzbe9tq1a3stx8yZM73NrKgdrWo76tev7/f19eGHH/aZwFX4LeowpeKSKlWqJPq8GlVJ6sgKAAAAgGQKLFQD8euvv9pzzz3nc1Ds27fPW8AqnalEiRJn/DjaXx2fPvnkE3+coCZC6Uk5c+b0r5rNu0+fPl7QrWBBgYiCCXWEErWnVQDRsWNHD3j0GAMGDPDHJngAAAAA0nBgoRED1SU8+OCDiW5T16Yz8fzzz/vXhg0bxlv/2muv2S233OK3NZN35syZfcRCBdfq+DR27NjQvlmyZPE0qm7dunnAoQn6NAP4sGHDkvLSAAAAAKTWPBY6mdfEeEHqUdz5LbROk9alJ8xjAQBpDPNYJPP7yTwWp8I8FsmLeSwylhSfx0KxiAq2E1JKVI4cOZLykAAAAACiJRVKtQ6ioGLgwIHxWs5qlGL+/PlWq1at5D9KAAAAABknsPjxxx9DIxZLlizxyesCul2zZk277777kv8oAQAAAGScwELzTMitt95qTz/99GnzrAAAAABEhyR1hVLXJgAAAAAIK7DYv3+/jRw50ieu08R0mnU7rt9++y0pDwsAAAAgmgKL22+/3ebMmeOT0mlCvMQ6RAEAAACIHkkKLKZMmWKfffaZXXrppcl/RAAAAADSnSTNY1GwYEErVKhQ8h8NAAAAgOgJLIYPH26DBg2yAwcOJP8RAQAAAIiOVKgnnnjC1qxZY8WKFbNzzz3XsmXLFm/7Dz/8kFzHBwAAACCjBhZt27ZN/iMBAAAAEF2BxeDBg5P/SAAAAABEV2ARWLRokf3yyy9+u2rVqnbBBRck13EBAAAAyOiBhSbFa9++vc2ePdsKFCjg63bt2mWNGjWyt99+24oUKZLcxwkAAAAgo3WF6tmzp+3du9eWLVtmO3fu9GXp0qW2Z88eu/vuu5P/KAEAAABkvBGLqVOn2hdffGGVK1cOratSpYqNGTPGmjVrlpzHBwAAACCjjlgcP378hBazonXaBgAAACC6JCmwuOKKK+yee+6xTZs2hdb98ccf1rt3b2vcuHFyHh8AAACAjBpYPPfcc15PocnxzjvvPF/Kli3r65599tnkP0oAAAAAGa/GolSpUj67tuosVqxY4etUb9GkSZPkPj4AAAAAGW3EYtasWV6krZGJTJkyWdOmTb1DlJa6dev6XBZff/11yh0tAAAAgPQfWDz11FPWtWtXy5cv3wnb8ufPb3feeac9+eSTyXl8AAAAADJaYPHTTz/ZlVdeedLtajWr2bgBAAAARJd/FFhs3bo10TazgaxZs9r27duT47gAAAAAZNTA4uyzz/YZtk/m559/thIlSpzx43311VfWunVrK1mypNdsfPzxx/G233LLLb4+7pJwxESzfnfo0MHTswoUKGBdunSxffv2/ZOXBQAAACA1A4uWLVvawIED7eDBgyds+/vvv23w4MF21VVXnfHj7d+/32rWrOkzdp+MAonNmzeHlrfeeivedgUVy5YtsxkzZtjkyZM9WLnjjjv+ycsCAAAAkJrtZgcMGGAffvihnX/++dajRw+rWLGir1fLWQUHx44dswcffPCMH69Fixa+nEpMTIwVL1480W2//PKLTZ061b7//nurU6eOr9M8GgqAHn/8cR8JAQAAAJDGAotixYrZ3LlzrVu3bta/f3+LjY319UpRat68uQcX2ic5zZ4924oWLWoFCxb0Gb8feughK1y4sG+bN2+epz8FQYVoLo3MmTPb/Pnz7Zprrkn0MQ8dOuRLQO1zAQAAAKTiBHllypSxzz//3P766y9bvXq1BxcVKlTwE//kpjSoa6+91mf1XrNmjf33v//1EQ4FFFmyZLEtW7Z40JGwgLxQoUK+7WRGjBhhQ4cOTfbjBQAAAKJVkmbeFgUSmhQvJbVv3z50u3r16lajRg0777zzfBSjcePGSX5cjbb06dMn3oiFZhMHAAAAkArF25FWrlw5O+uss3ykRFR7sW3btnj7HD161DtFnawuI6jbUBepuAsAAACAKAksNm7caDt27Ai1tK1fv77t2rUr3qR8s2bNsuPHj1u9evUieKQAAABAdElyKlRy0HwTweiDrF271hYvXuw1ElpUB9GuXTsffVCNxf3332/ly5f3QnGpXLmy12F07drVxo0bZ0eOHPFuVUqhoiMUAAAAECUjFgsXLrQLLrjAF1Hdg24PGjTIi7M14d7VV1/t7W018V3t2rXt66+/9lSmwIQJE6xSpUpec6E2s5dddpm9+OKLEXxVAAAAQPSJ6IhFw4YNQy1rEzNt2rTTPoZGNiZOnJjMRwYAAAAgw9ZYAAAAAEibCCwAAAAAhI3AAgAAAEDYCCwAAAAAhI3AAgAAAEDYCCwAAAAAhI3AAgAAAEDYCCwAAAAAhI3AAgAAAEDYCCwAAAAAEFgAAAAAiDxGLAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQPoOLL766itr3bq1lSxZ0jJlymQff/xxvO2xsbE2aNAgK1GihOXMmdOaNGliq1atirfPzp07rUOHDpYvXz4rUKCAdenSxfbt25fKrwQAAACIbhENLPbv3281a9a0MWPGJLp91KhR9swzz9i4ceNs/vz5ljt3bmvevLkdPHgwtI+CimXLltmMGTNs8uTJHqzccccdqfgqAAAAAGSN5FvQokULXxKj0YqnnnrKBgwYYG3atPF1b7zxhhUrVsxHNtq3b2+//PKLTZ061b7//nurU6eO7/Pss89ay5Yt7fHHH/eREAAAAABRXGOxdu1a27Jli6c/BfLnz2/16tWzefPm+X19VfpTEFSI9s+cObOPcJzMoUOHbM+ePfEWAAAAABkwsFBQIRqhiEv3g236WrRo0Xjbs2bNaoUKFQrtk5gRI0Z4kBIspUqVSpHXAAAAAESLNBtYpKT+/fvb7t27Q8uGDRsifUgAAABAupZmA4vixYv7161bt8Zbr/vBNn3dtm1bvO1Hjx71TlHBPomJiYnxLlJxFwAAAAAZMLAoW7asBwczZ84MrVMthGon6tev7/f1ddeuXbZo0aLQPrNmzbLjx497LQYAAACAKOgKpfkmVq9eHa9ge/HixV4jUbp0aevVq5c99NBDVqFCBQ80Bg4c6J2e2rZt6/tXrlzZrrzySuvatau3pD1y5Ij16NHDO0bREQoAAACIksBi4cKF1qhRo9D9Pn36+NfOnTvb+PHj7f777/e5LjQvhUYmLrvsMm8vmyNHjtD3TJgwwYOJxo0bezeodu3a+dwXAAAAAFJPplhNGBHllGKl7lAq5KbeAgDSgCH5I30EGcuQ3ZE+gjTt3Ac+i/QhZCjrRraK9CEgQufJabbGAgAAAED6QWABAAAAIGwEFgAAAADCRmABAAAAIGwEFgAAAADCRmABAAAAIGwEFgAAAADCRmABAAAAIH3PvA0AGQUTbCWvdTmS+QEBACmOwAIAAADJZ0h+3s3kNmS3pQekQgEAAAAIG4EFAAAAgLARWAAAAAAIG4EFAAAAgLARWAAAAAAIG4EFAAAAgLARWAAAAAAIG4EFAAAAgLARWAAAAAAIG4EFAAAAgLARWAAAAAAIG4EFAAAAgLARWAAAAAAIG4EFAAAAgIwdWAwZMsQyZcoUb6lUqVJo+8GDB6179+5WuHBhy5Mnj7Vr1862bt0a0WMGAAAAolGaDiykatWqtnnz5tDyzTffhLb17t3bJk2aZO+9957NmTPHNm3aZNdee21EjxcAAACIRlktjcuaNasVL178hPW7d++2V155xSZOnGhXXHGFr3vttdescuXK9t1339nFF18cgaMFAAAAolOaH7FYtWqVlSxZ0sqVK2cdOnSw9evX+/pFixbZkSNHrEmTJqF9lSZVunRpmzdvXgSPGAAAAIg+aXrEol69ejZ+/HirWLGip0ENHTrULr/8clu6dKlt2bLFsmfPbgUKFIj3PcWKFfNtp3Lo0CFfAnv27Emx1wAAAABEgzQdWLRo0SJ0u0aNGh5olClTxt59913LmTNnkh93xIgRHqQAAAAAiILAIiGNTpx//vm2evVqa9q0qR0+fNh27doVb9RCXaESq8mIq3///tanT594IxalSpVK0WNHKhuSn7c8Wd/P3byfAAAgfddYxLVv3z5bs2aNlShRwmrXrm3ZsmWzmTNnhravXLnSazDq169/yseJiYmxfPnyxVsAAAAAZNARi/vuu89at27t6U9qJTt48GDLkiWL3XTTTZY/f37r0qWLjzwUKlTIg4OePXt6UEFHKAAAACB1penAYuPGjR5E7Nixw4oUKWKXXXaZt5LVbRk9erRlzpzZJ8ZTMXbz5s1t7NixkT5sAAAAIOqk6cDi7bffPuX2HDly2JgxY3wBAAAAEDnpqsYCAAAAQNpEYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEAAAAgbFnDfwgkh3Mf+Iw3Mhmty8HbCQAAkJoYsQAAAABAYAEAAAAg8hixAAAAABA2AgsAAAAAYcswgcWYMWPs3HPPtRw5cli9evVswYIFkT4kAAAAIGpkiMDinXfesT59+tjgwYPthx9+sJo1a1rz5s1t27ZtkT40AAAAICpkiMDiySeftK5du9qtt95qVapUsXHjxlmuXLns1VdfjfShAQAAAFEh3QcWhw8ftkWLFlmTJk1C6zJnzuz3582bF9FjAwAAAKJFup8g788//7Rjx45ZsWLF4q3X/RUrViT6PYcOHfIlsHv3bv+6Z88ei5Tjhw5E7Lkzoj2ZYiN9CBlLBD8b6QWf4eTFZzi531A+w6fC5zeZf934G5yhPsPB+XFsbGzGDyySYsSIETZ06NAT1pcqVSoix4Pkl583NXmN5B1F6uI3LpnxGUYq4vObMT/De/futfz582fswOKss86yLFmy2NatW+Ot1/3ixYsn+j39+/f3Yu/A8ePHbefOnVa4cGHLlClTih8zUj6yVpC4YcMGy5cvH283kM7wGQbSLz6/GY9GKhRUlCxZ8rT7pvvAInv27Fa7dm2bOXOmtW3bNhQo6H6PHj0S/Z6YmBhf4ipQoECqHC9Sj4IKAgsg/eIzDKRffH4zltONVGSYwEI0+tC5c2erU6eOXXTRRfbUU0/Z/v37vUsUAAAAgJSXIQKLG2+80bZv326DBg2yLVu2WK1atWzq1KknFHQDAAAASBkZIrAQpT2dLPUJ0UVpbposMWG6G4D0gc8wkH7x+Y1umWLPpHcUAAAAAGTkCfIAAAAARB6BBQAAAICwEVgAAAAACBuBBQAAAICwEVgAAFKcJi4FAGRsBBYAgJT/Y5P5//7cEGQA6RONRHE6BBZIN3QywgkJkD6tWLHCypUrZwcPHvQg4/3337dvv/020ocF4AwDimPHjlmmTJl4v3BKBBZIFxRQ6GREy86dO/3kBED6UbJkScuTJ4+1adPGzj//fLv33nsta9YMM0crkKH//iqgyJIli+3YscP+97//2fLly23fvn2h7UCAwAJpWvAflgKKo0eP2l133WU1atSwq6++2l5++eVIHx6AM5QjRw7/HM+YMcMuvvhi+/33361evXq8f0AaH6kI0hhfe+01K1q0qD300EPWuHFj69ixo49ixE1zBPhtQJoPKOS3336zZ555xtavX2+PPvqolSpVyrp162azZ8+O8JECSEgnGwlly5bNbrzxRj8h+eWXX3wdVzqBtGfz5s1Wq1YtT1fUSMU333xjw4YNsy+//NI+/vhjW7hwof89Xrp0qQcXQFyZYqnEQRr33HPP2d13322NGjWyp59+2qpVq+brr732Wtu4caN99tlnVqRIkUgfJhDV9KdEJyFB2qJ89dVXdujQIU99KlOmjK9bvHixXXLJJfbss89aly5d4u0PIPI2bdpkPXv29At6P/74o91+++0eUFSpUsVmzpzpFwlEt5s3b+4X+C677LLQ/wGIbvxvjjRp79691qdPH7+t/9QuvPBCT50oVqxYaJ+nnnrKfvrpJ3vnnXfoVAFEgD6TSo84fPhw6IRCQYLyry+99FK/mtmjRw9r0qSJTZ482bfr5OQ///mP9e/f344cOXJCUMG1LiB1BZ+5YARR9VAKLDRy8corr9jw4cPtnHPOsT179oSCCo1K6mKfRiD1t1gIKiAEFoi4xE4kfv75Z/voo4/s008/9dxsFXquW7fOVq9eHfqe0qVL+/rHHnvM1qxZE4EjB6JP3PQlnVDo8zd9+vTQ53LRokV25513WtWqVf1z/MMPP1jr1q09mNiwYYNlz57dunfvbjlz5rT777/fv++PP/6w8ePH+21OToDU88EHH3iQr4t5CvKDNEZdzLv11lvtwQcftIIFC/roopqmvPvuu6HPqRbVXKioWyOTgBBYIOKCEwkNtU6dOtVvFy9e3FtTKtVJJys33XSTXwFVnmfcq6O6v3XrVj+5SSyvG0DyXgAIRhg++eQTu+OOO/zEQhcAtm/f7p9LNVm4/vrr7cUXX7T8+fPbuHHjvIuMPsuPPPKIf2/ZsmVt5MiRntqoVArVTClfm88wkLo0ajhlypTQxQEFCZIvXz6viSpcuLAHF8oc0N9kXUwIghBdZFi1apVVqlTJYmJi+NHBUWOBiNAJRPAfmOiqZp06dbwdpQrDlJPdqVMn++uvv2zSpEm+z4IFC6x+/fp+xaRdu3ahfM7PP//cChUq5J1mACS/uHUQCig04nDgwAHPxVZ3No02qJmCrmqKUibUirJz586eTqELALqvkxPVXQSfVY1KKm2qZcuWdsEFF/CjAyLw2VYL6AIFCnjgryA/+Pusi3gvvfSSDRkyxP9Ga1F6oy786YLA3Llzvf27Pscq9gaEEQtEhP7T2rVrlwcOwbCr/nPTycvQoUP95EMF27NmzbItW7b4PhdddJGfmPTr1897aQejFjopIagAUo4+l0pFVIGmgoVevXr5CIXSFDVqoRMNBfgrV64MXe1UioWuhn744YfeaEH7aDRjxIgRof7311xzjV8NJagAIvfZVvvYZcuW+UWD4O+zLtwpbbFBgwZ+oU+1VC1atPDPbO7cuf3z3LdvX1u7di1BBeIhsECqSCzFQYVfSnFSl5gguNA8FSVKlPCOMboaovkqgpxOGThwoF8lXbJkCT85IJXoAoA+iyrW1ufvvvvuC4046uSjd+/enhKhK5cBNVXQyYdOSkTbr7vuOk+5UNtoAGlDzZo1/eKcUpGDv8dBLVX16tV95EIXBfRZb9u2radH6eJA+/btfR9dQAACBBZIUbrqof+ggpOQv//+O7Tt1Vdf9e1Kk/jzzz/9JGT37t3eRUZXRjUyoTQKXRnVf2yizhQawWjYsCE/OSCVqHhT+dbly5e3+fPnh9aPGTPGC7XVGUYjimo/qdFGUZ2FLgooveKee+7xOih9ppU6oc5QANIOZQrob+tbb73l94O/2bqQoOyAihUr+n2NWCjt6dtvv/XPu2TNmjWCR460hsACKUr/IWmoVVdBrrrqKj/ZUBtZ9cdW+oPSIFQIpnoKBRNvv/22p1foREQdKXSS8t5778X7j0tpFgBSl+oqVKCpz+gXX3zhJxejRo3ykcdgu9IbVcitCwj6DOsigfadN2+evfnmm1a7dm3vBgUgbdFcUOrcplEL/V1esWKF//294YYbPPVJFw+CUQyt04hF0EKaTm6Ii+JtpHjBp3IzlSrRoUMHy5Url59o7N+/PzThjrrFKA3q3//+t+dp33bbbd6GUqMXysfWKIVOUABElkYg1JpSqUwaadRohRonBAYNGuSz86o+ShcR9H+ACrlVGAogbVO6k+atUO2E2kWrDbTSF5988skT9tVs3LoYCCREYIFkM2fOHE9tUjChtAiNPIhyMjXhztixY0P1FmpPd/nll3uahFKgdDIyePBg7wilExLNtp03b15m8gTSEOVS6wKBUhdVnK0UqeAqpj73Slu84oorfGRCdVL6DANIX5QSpQYpZ511VmhS2qBTFLNr43RIhULY1A5WaRG6kql2k82aNfMaCI0+6D8jBRw62RBNoqP/nB599FHvFqMaClE6hQqzNTqhExQViQlDrEDaoVl3VbitibKef/55X6fPa9DTXukUmptCKVIEFUD6pIt9GrFQUKG/4QomgpoL/ibjdBixQJKp/aTSl9SmTqlLaimp/4TU315XNXWioVEKFXjqJEOTZGmoNaiXOPvss23AgAHe/170n9e2bdtCV0gApD36nCq1UbNqjx492jvKJJyXBgAQnRixQFjtJxVcKA9ToxVqK6maCU1098ILL3iRtSbW0WjF999/70sQVKxevdpHJTTUGtCVEIIKIG3T51SjFkqLeuKJJ3wdQQUAQAgsEFb7yQoVKnjAIBqhCPKtlQqlLlDK1VQRtmouNLoxbdo0n1Bn3LhxPsu21gNIX5SyqNopXUTQCAYAAEIqFJJMrSU1QY7yqtX5SaMROskICrg1iZ1qJ9S7Xu3pbrnlFtuwYYPXWSg1avz48QQWQDpFEScAICFGLJBkaiGp1rCaUXfixIn/90uVOXNoxk4FEOp3XaZMGfvss8+8kFvzUixfvpygAkjHKOIEACREYIGwaBZOBQ3qb6+0J51sqJAz6BaldZoITzS5lgq2L774Yt51AACADIbAAmG3n7z33ntt586d9uqrr4YKORVQaAI81VW0bt06tB4AAAAZE4EFwla3bl1Pa5o1a5b9+uuvPrO2Jr/TbbWlJKAAAADI+CjeRrJQUbYKuX/44Qe/P2zYMOvbty/vLgAAQJQgsECy0Yy7SoEaPHiw5ciRg3cWAAAgihBYINnQfhIAACB6UWOBZEP7SQAAgOhFYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEAAAAgbAQWAAAAAMJGYAEASLMaNmxovXr1ivRhAADOAIEFAOCktm/fbt26dbPSpUtbTEyMFS9e3Jo3b24PP/ywz11zqmX27NmnfGePHTtmI0eOtEqVKlnOnDmtUKFCVq9ePXv55Zf5iQBAOpQ10gcAAEi72rVrZ4cPH7bXX3/dypUrZ1u3brWZM2da1apVbfPmzaH97rnnHtuzZ4+99tproXUKFE5l6NCh9sILL9hzzz1nderU8e9fuHCh/fXXXyn6mgAAKYMRCwBAonbt2mVff/21Pfroo9aoUSMrU6aMXXTRRda/f3+7+uqrffQiWDTiEIxoBEv27NlP+c5++umn9p///Meuv/56K1u2rNWsWdO6dOli991330m/R0FHp06drGDBgpYrVy5r0aKFrVq1KrR9/PjxVqBAAfv444+tQoUKliNHDh9h2bBhQ7zH+eSTT+zCCy/07QqYFOQcPXqU3wQACAOBBQAgUXny5PFFJ+mHDh1K9ndJwcesWbM83epM3XLLLT6qoaBk3rx5Fhsbay1btrQjR46E9jlw4ICnar3xxhv27bffeoDUvn370HYFSwpONMqyfPlyHzVRQKLvAQAkHYEFACBRWbNm9RNupUFpFODSSy+1//73v/bzzz8nyzv25JNPelChAKNGjRp211132ZQpU066v0YmFFCoBuPyyy/3EY4JEybYH3/84cFPQEGG0qvq169vtWvX9uOfO3euLViwwLdrdOKBBx6wzp07+2hF06ZNbfjw4R5gAACSjsACAHDKGotNmzb5Cf2VV17pBdlKIVLAEa4qVarY0qVL7bvvvrPbbrvNtm3bZq1bt7bbb7890f1/+eUXD3ZU4B0oXLiwVaxY0bcFtE/dunVD91UcrsAo2Oenn36yYcOGhUZktHTt2tVrRjTaAQBIGgILAMApqQ5BV/UHDhzoV/6VjjR48OBkedcyZ87sQYBayn744YcesLzyyiu2du3aFPup7Nu3z0ctFi9eHFqWLFniIyJ6rQCApCGwAAD845GG/fv3p9hjS2KPX7lyZS+wnj9/fmjdjh07bOXKlaHvE+2jOoyAtqvOQt8vGnHRuvLly5+wKNABACQN7WYBAInSSbs6NilNSTUQefPm9RP2UaNGWZs2bcJ+16677jqv27jkkku8zkKjFOo4df7553v6UkLq8qTnVdqS6iF0PKqVOPvss+MdT7Zs2axnz572zDPPeFpUjx497OKLL/aOVjJo0CC76qqrfG4OHYOCCaVHKS3roYce4rcBAJKISzMAgESp9kD1DKNHj7YGDRpYtWrVPB1KJ/Yqjg6X2sBOmjTJ6yoUTKiYWgHF9OnTPSBIjObJUEG2AgMVZ6sr1Oeff+7BREBtaPv162c333yzBy56He+880685508ebI/j9KwFHToNaqdLgAg6TLF6n9lAAAyANVoqF5DqU8AgNTFiAUAAACAsBFYAABSRNWqVeO1dI27aP4JAEDGQioUACBF/P777/FmxI6rWLFiXnwNAMg4CCwAAAAAhI1UKAAAAABhI7AAAAAAEDYCCwAAAABhI7AAAAAAEDYCCwAAAABhI7AAAAAAEDYCCwAAAABhI7AAAAAAYOH6f7/U8tEUqvRhAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "categorical = [c for c in ['Sex', 'ChestPainType', 'FastingBS', 'RestingECG', 'ExerciseAngina', 'ST_Slope'] if c in df.columns]\n", + "\n", + "for col in categorical:\n", + " ct = pd.crosstab(df[col], df['HeartDisease'])\n", + " categories = ct.index.astype(str).tolist()\n", + " targets = ct.columns.tolist()\n", + "\n", + " fig = plt.figure(figsize=(8,4))\n", + " x = np.arange(len(categories))\n", + " width = 0.35 if len(targets)==2 else 0.2\n", + "\n", + " for i, t in enumerate(targets):\n", + " plt.bar(x + i*width, ct[t].values, width=width, label=str(t))\n", + "\n", + " plt.title(f'{col} vs HeartDisease')\n", + " plt.xlabel(col)\n", + " plt.ylabel('Conteggio')\n", + " plt.xticks(x + (len(targets)-1)*width/2, categories, rotation=30, ha='right')\n", + " plt.legend(title='HeartDisease')\n", + " plt.tight_layout()\n", + " plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "CardioTrack", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/predicting_outcomes_in_heart_failure/__init__.py b/predicting_outcomes_in_heart_failure/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e2a8ffea102bb0616bab2ee01d7e7057502e4cb6 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/__init__.py @@ -0,0 +1 @@ +from predicting_outcomes_in_heart_failure import config # noqa: F401 diff --git a/predicting_outcomes_in_heart_failure/app/__init__.py b/predicting_outcomes_in_heart_failure/app/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/predicting_outcomes_in_heart_failure/app/main.py b/predicting_outcomes_in_heart_failure/app/main.py new file mode 100644 index 0000000000000000000000000000000000000000..766acdd8b486bc5309e4bc3c14d5ee28f51172b6 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/app/main.py @@ -0,0 +1,183 @@ +from contextlib import asynccontextmanager + +from fastapi import FastAPI +from fastapi.staticfiles import StaticFiles +import gradio as gr +import joblib +from loguru import logger + +from predicting_outcomes_in_heart_failure.app.routers import cards, model_info, prediction +from predicting_outcomes_in_heart_failure.app.utils import load_page, update_patient_index_choices +from predicting_outcomes_in_heart_failure.app.wrapper import Wrapper +from predicting_outcomes_in_heart_failure.config import FIGURES_DIR, MODEL_PATH + + +@asynccontextmanager +async def lifespan(app: FastAPI): + """Context manager to handle application lifespan events.""" + if not MODEL_PATH.exists(): + logger.error(f"Model file not found at: {MODEL_PATH}") + raise FileNotFoundError(f"Model file not found at: {MODEL_PATH}") + + logger.info(f"Loading default model from {MODEL_PATH} ...") + app.state.model = joblib.load(MODEL_PATH) + logger.success(f"Default model loaded from {MODEL_PATH}") + + try: + yield + finally: + app.state.model = None + logger.info("Default model cleared on application shutdown") + + +app = FastAPI( + title="CardioTrack's Model Space - Heart Failure Prediction", + version="0.01", + lifespan=lifespan, +) + + +if not FIGURES_DIR.exists(): + logger.warning(f"Figures directory {FIGURES_DIR} does not exist. Creating it.") + FIGURES_DIR.mkdir(parents=True, exist_ok=True) +app.mount("/figures", StaticFiles(directory=str(FIGURES_DIR)), name="figures") +app.include_router(prediction.router) +app.include_router(model_info.router) +app.include_router(cards.router) + + +# UI Definition +with gr.Blocks(title="CardioTrack") as io: + gr.Markdown( + """ + # 🫀 CardioTrack's Model Space - Heart Failure Diagnosis + Choose an area to access the platform's features. + """ + ) + + with gr.Tabs(): + with gr.TabItem("Single Diagnosis"): + gr.Markdown("### Enter patient data for the diagnosis") + + with gr.Row(): + with gr.Column(): + age = gr.Slider(minimum=20, maximum=100, step=1, label="Age", value=60) + resting_bp = gr.Slider( + minimum=80, + maximum=200, + step=1, + label="Resting Blood Pressure (mm Hg)", + value=120, + ) + cholesterol = gr.Slider( + minimum=0, maximum=600, step=1, label="Cholesterol (mg/dL)", value=200 + ) + max_hr = gr.Slider( + minimum=60, maximum=220, step=1, label="Max Heart Rate", value=150 + ) + oldpeak = gr.Slider( + minimum=-3.0, + maximum=7.0, + step=0.1, + label="Oldpeak (ST Depression)", + value=1.0, + ) + + with gr.Column(): + chest_pain_type = gr.Dropdown( + choices=["TA", "ATA", "NAP", "ASY"], label="Chest Pain Type", value="ASY" + ) + fasting_bs = gr.Dropdown( + choices=[0, 1], + label="Fasting Blood Sugar (0: <=120 mg/dL, 1: >120 mg/dL)", + value=0, + ) + resting_ecg = gr.Dropdown( + choices=["Normal", "ST", "LVH"], label="Resting ECG", value="Normal" + ) + exercise_angina = gr.Dropdown( + choices=["Y", "N"], label="Exercise Angina", value="N" + ) + st_slope = gr.Dropdown( + choices=["Up", "Flat", "Down"], label="ST Slope", value="Flat" + ) + + predict_btn = gr.Button("Analyze", variant="primary") + single_output = gr.Markdown(label="Result") + + explanation_img = gr.Image(label="Explanation", type="filepath", visible=True) + + predict_btn.click( + fn=Wrapper.prediction_with_explanation, + inputs=[ + age, + chest_pain_type, + resting_bp, + cholesterol, + fasting_bs, + resting_ecg, + max_hr, + exercise_angina, + oldpeak, + st_slope, + ], + outputs=[single_output, explanation_img], + ) + + with gr.TabItem("Group Diagnosis"): + gr.Markdown("### Upload a CSV file for analize multiple subjects") + gr.Markdown( + "The CSV should contain columns: Age, ChestPainType, RestingBP, Cholesterol," + + "FastingBS, RestingECG, MaxHR, ExerciseAngina, Oldpeak, ST_Slope" + ) + + file_input = gr.File(label="Upload CSV", file_types=[".csv"]) + batch_predict_btn = gr.Button("Analyze Group", variant="primary") + batch_output = gr.Dataframe(label="Results") + + batch_predict_btn.click( + fn=Wrapper.batch_prediction, inputs=file_input, outputs=batch_output + ) + + gr.Markdown("### Explain a specific patient from the group") + + patient_index = gr.Dropdown( + label="Patient index (0-based)", + choices=[], + interactive=True, + ) + + batch_output.change( + fn=update_patient_index_choices, + inputs=batch_output, + outputs=patient_index, + ) + + batch_explain_btn = gr.Button("Explain selected patient", variant="secondary") + + batch_explanation_img = gr.Image( + label="Explanation", + type="filepath", + ) + + batch_explain_btn.click( + fn=Wrapper.batch_explanation, + inputs=[file_input, patient_index], + outputs=batch_explanation_img, + ) + + with gr.TabItem("ModelCard"): + io = load_page(io, Wrapper.get_model_card) + + with gr.TabItem("DatasetCard"): + io = load_page(io, Wrapper.get_dataset_card) + + with gr.TabItem("Hyperparameters"): + gr.Markdown("## Model Hyperparameters") + io = load_page(io, Wrapper.get_hyperparameters) + + with gr.TabItem("Evaluation Metrics"): + gr.Markdown("## Model Performance Metrics") + io = load_page(io, Wrapper.get_metrics) + +app = gr.mount_gradio_app(app, io, path="/") diff --git a/predicting_outcomes_in_heart_failure/app/routers/cards.py b/predicting_outcomes_in_heart_failure/app/routers/cards.py new file mode 100644 index 0000000000000000000000000000000000000000..2d569f3431b90107db460cad44af5fef18c8d316 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/app/routers/cards.py @@ -0,0 +1,52 @@ +from http import HTTPStatus + +from fastapi import APIRouter, HTTPException, Request +from loguru import logger +from predicting_outcomes_in_heart_failure.app.utils import construct_response +from predicting_outcomes_in_heart_failure.config import CARD_PATHS + +router = APIRouter(tags=["Cards"]) + + +@router.get("/cards/{card_type}") +@construct_response +def card(request: Request, card_type: str): + """Return card information. + card_type = dataset_card / model_card + """ + logger.info(f"Received /cards/{card_type} request") + + # Normalizza il card_type per gestire eventuali varianti + card_type = card_type.lower().replace("-", "_") + + path = CARD_PATHS.get(card_type) + if path is None: + logger.warning(f"Unsupported card_type requested: {card_type}") + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Card type '{card_type}' not supported." + + f" Valid types: {', '.join(CARD_PATHS.keys())}", + ) + + try: + with open(path, encoding="utf-8") as f: + card_content = f.read() + + logger.success(f"{path} loaded successfully") + + return { + "message": HTTPStatus.OK.phrase, + "status-code": HTTPStatus.OK.value, + "data": { + "card_type": card_type, + "path": str(path), + "card_lines": card_content.split("\n"), + }, + } + + except Exception as e: + logger.exception(f"Failed to load card content from {path}: {e}") + raise HTTPException( + status_code=HTTPStatus.INTERNAL_SERVER_ERROR, + detail=f"Error reading card file: {e}", + ) from e diff --git a/predicting_outcomes_in_heart_failure/app/routers/general.py b/predicting_outcomes_in_heart_failure/app/routers/general.py new file mode 100644 index 0000000000000000000000000000000000000000..a0901351257ecb1714a2b3579e309cafdf85ec1b --- /dev/null +++ b/predicting_outcomes_in_heart_failure/app/routers/general.py @@ -0,0 +1,19 @@ +from http import HTTPStatus + +from fastapi import APIRouter, Request +from loguru import logger +from predicting_outcomes_in_heart_failure.app.utils import construct_response + +router = APIRouter(tags=["General"]) + + +@router.get("/") +@construct_response +def index(request: Request): + """Root endpoint.""" + logger.info("General requested") + return { + "message": HTTPStatus.OK.phrase, + "status-code": HTTPStatus.OK, + "data": {"message": "Welcome to Heart Failure Predictor!"}, + } diff --git a/predicting_outcomes_in_heart_failure/app/routers/model_info.py b/predicting_outcomes_in_heart_failure/app/routers/model_info.py new file mode 100644 index 0000000000000000000000000000000000000000..6404387a79f51b1b11ada55ce489ef9fd7cbb520 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/app/routers/model_info.py @@ -0,0 +1,95 @@ +from http import HTTPStatus +import json +from typing import Any + +from fastapi import APIRouter, Request +from loguru import logger +from predicting_outcomes_in_heart_failure.app.utils import construct_response +from predicting_outcomes_in_heart_failure.config import ( + MODEL_PATH, + REPORTS_DIR, + TEST_METRICS_DIR, +) + +router = APIRouter(tags=["Model"]) + + +@router.get("/model/hyperparameters") +@construct_response +def get_model_hyperparameters(request: Request): + variant = MODEL_PATH.parent.name + model_name = MODEL_PATH.stem + hyperparams_path = REPORTS_DIR / variant / model_name / "cv_parameters.json" + logger.info( + f"Looking for hyperparameters file at {hyperparams_path} " + f"(model={model_name}, variant={variant})" + ) + + if not hyperparams_path.exists(): + logger.warning("Hyperparameters file not found") + return { + "message": HTTPStatus.NOT_FOUND.phrase, + "status-code": HTTPStatus.NOT_FOUND, + "data": { + "detail": "Hyperparameters file not found. Run the training pipeline.", + "model_name": model_name, + "variant": variant, + "expected_path": str(hyperparams_path), + }, + } + + with hyperparams_path.open("r", encoding="utf-8") as f: + hyperparams_data = json.load(f) + + data: dict[str, Any] = { + "model_path": str(MODEL_PATH), + "hyperparameters": hyperparams_data, + } + + return { + "message": HTTPStatus.OK.phrase, + "status-code": HTTPStatus.OK, + "data": data, + } + + +@router.get("/model/metrics") +@construct_response +def get_model_metrics(request: Request): + variant = MODEL_PATH.parent.name + model_name = MODEL_PATH.stem + metrics_path = TEST_METRICS_DIR / variant / f"{model_name}.json" + logger.info( + f"Looking for metrics file at {metrics_path} (model={model_name}, variant={variant})" + ) + + if not metrics_path.exists(): + logger.warning("Metrics file not found") + return { + "message": HTTPStatus.NOT_FOUND.phrase, + "status-code": HTTPStatus.NOT_FOUND, + "data": { + "detail": ( + "Metrics file not found. Run the evaluation pipeline for this model first." + ), + "model_name": model_name, + "variant": variant, + "expected_path": str(metrics_path), + }, + } + + with metrics_path.open("r", encoding="utf-8") as f: + metrics_data = json.load(f) + + data: dict[str, Any] = { + "model_path": str(MODEL_PATH), + "model_name": model_name, + "variant": variant, + "metrics": metrics_data.get("metrics", metrics_data), + } + + return { + "message": HTTPStatus.OK.phrase, + "status-code": HTTPStatus.OK, + "data": data, + } diff --git a/predicting_outcomes_in_heart_failure/app/routers/prediction.py b/predicting_outcomes_in_heart_failure/app/routers/prediction.py new file mode 100644 index 0000000000000000000000000000000000000000..c7cd25a33da86cf7d06ef7c45be8b7e6be055de9 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/app/routers/prediction.py @@ -0,0 +1,135 @@ +from http import HTTPStatus +from typing import Any + +from fastapi import APIRouter, Request +from loguru import logger +import pandas as pd +from predicting_outcomes_in_heart_failure.app.schema import HeartSample +from predicting_outcomes_in_heart_failure.app.utils import ( + construct_response, + get_model_from_state, +) +from predicting_outcomes_in_heart_failure.config import FIGURES_DIR, MODEL_PATH +from predicting_outcomes_in_heart_failure.modeling.explainability import ( + explain_prediction, + save_shap_waterfall_plot, +) +from predicting_outcomes_in_heart_failure.modeling.predict import preprocessing + +router = APIRouter() + + +@router.post("/predictions", tags=["Prediction"]) +@construct_response +def predict(request: Request, payload: HeartSample): + model = get_model_from_state(request) + if model is None: + return { + "message": HTTPStatus.SERVICE_UNAVAILABLE.phrase, + "status-code": HTTPStatus.SERVICE_UNAVAILABLE, + "data": {"detail": "Model is not loaded."}, + } + + X_raw = payload.to_dataframe() + X = preprocessing(X_raw) + y_pred = int(model.predict(X)[0]) + + data: dict[str, Any] = { + "input": payload.model_dump(), + "prediction": y_pred, + } + + logger.success("Prediction completed successfully for /predictions") + return { + "message": HTTPStatus.OK.phrase, + "status-code": HTTPStatus.OK, + "data": data, + } + + +@router.post("/batch-predictions", tags=["Prediction"]) +@construct_response +def predict_batch(request: Request, payload: list[HeartSample]): + model = get_model_from_state(request) + if model is None: + return { + "message": HTTPStatus.SERVICE_UNAVAILABLE.phrase, + "status-code": HTTPStatus.SERVICE_UNAVAILABLE, + "data": {"detail": "Model is not loaded."}, + } + + X_raw_list = [sample.to_dataframe() for sample in payload] + X_raw = pd.concat(X_raw_list, ignore_index=True) + X = preprocessing(X_raw) + + y_pred = [int(y) for y in model.predict(X)] + + results: list[dict[str, Any]] = [] + for idx, (sample, pred) in enumerate(zip(payload, y_pred, strict=True)): + results.append( + { + "index": idx, + "input": sample.model_dump(), + "prediction": pred, + } + ) + + data: dict[str, Any] = { + "results": results, + "batch_size": len(results), + } + + return { + "message": HTTPStatus.OK.phrase, + "status-code": HTTPStatus.OK, + "data": data, + } + + +@router.post("/explanations", tags=["Explainability"]) +@construct_response +def explain(request: Request, payload: HeartSample): + model = get_model_from_state(request) + if model is None: + return { + "message": HTTPStatus.SERVICE_UNAVAILABLE.phrase, + "status-code": HTTPStatus.SERVICE_UNAVAILABLE, + "data": {"detail": "Model is not loaded."}, + } + + X_raw = payload.to_dataframe() + X = preprocessing(X_raw) + + data: dict[str, Any] = {"input": payload.model_dump()} + model_type = MODEL_PATH.stem + + try: + logger.info("Computing explanation for default model prediction...") + explanations = explain_prediction(model, X, model_type=model_type, top_k=5) + if explanations: + data["explanations"] = explanations + logger.success("Explanation computed successfully for default model.") + else: + logger.warning("No explanation available for default model.") + except Exception as e: + logger.exception(f"Failed to compute explanation: {e}") + + try: + plot_path = FIGURES_DIR / f"shap_waterfall_default_{model_type}.png" + saved_path = save_shap_waterfall_plot( + model=model, + X=X, + model_type=model_type, + output_path=plot_path, + ) + if saved_path is not None: + data["explanation_plot_url"] = f"/figures/{saved_path.name}" + except Exception as e: + logger.exception(f"Failed to generate explanation plot: {e}") + + logger.success("Explanation completed successfully for /explanations") + return { + "message": HTTPStatus.OK.phrase, + "status-code": HTTPStatus.OK, + "data": data, + } diff --git a/predicting_outcomes_in_heart_failure/app/schema.py b/predicting_outcomes_in_heart_failure/app/schema.py new file mode 100644 index 0000000000000000000000000000000000000000..da70fdde3fef42a4dd8804bd2bc5a215891d519b --- /dev/null +++ b/predicting_outcomes_in_heart_failure/app/schema.py @@ -0,0 +1,28 @@ +from __future__ import annotations + +from typing import Literal + +import numpy as np +import pandas as pd +from pydantic import BaseModel, field_validator + + +class HeartSample(BaseModel): + Age: int + ChestPainType: Literal["TA", "ATA", "NAP", "ASY"] + RestingBP: int + Cholesterol: int + FastingBS: int + RestingECG: Literal["Normal", "ST", "LVH"] + MaxHR: int + ExerciseAngina: Literal["Y", "N"] + Oldpeak: float + ST_Slope: Literal["Up", "Flat", "Down"] + + @field_validator("Oldpeak") + @classmethod + def round_oldpeak(cls, v: float) -> float: + return float(np.round(v, 2)) + + def to_dataframe(self) -> pd.DataFrame: + return pd.DataFrame([self.model_dump()]) diff --git a/predicting_outcomes_in_heart_failure/app/utils.py b/predicting_outcomes_in_heart_failure/app/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..7b57530486d1fb64c0ab6dc1a50d2647d254cb1b --- /dev/null +++ b/predicting_outcomes_in_heart_failure/app/utils.py @@ -0,0 +1,59 @@ +from datetime import datetime +from functools import wraps + +from fastapi import Request +import gradio as gr +from loguru import logger + + +def construct_response(f): + """Construct a JSON response for an endpoint's results.""" + + @wraps(f) + def wrap(request: Request, *args, **kwargs): + result = f(request, *args, **kwargs) + response = { + "message": result["message"], + "method": request.method, + "status-code": result["status-code"], + "timestamp": datetime.now().isoformat(), + "url": request.url._url, + } + if "data" in result: + response["data"] = result["data"] + return response + + return wrap + + +def get_model_from_state(request: Request): + """Retrieve the model from the app state.""" + model = getattr(request.app.state, "model", None) + if model is None: + logger.error("Model not loaded in app.state.model") + return model + + +def load_page(io, fn): + content = gr.Markdown("Loading...") + + io.load(fn=fn, inputs=None, outputs=content) + return io + + +def update_patient_index_choices(df): + """Populate the dropdown with valid patient indices from the batch results.""" + import gradio as gr + + if df is None: + return gr.update(choices=[], value=None) + + try: + indices = list(df["Patients's index"].astype(int)) + except Exception: + return gr.update(choices=[], value=None) + + if not indices: + return gr.update(choices=[], value=None) + + return gr.update(choices=indices, value=indices[0]) diff --git a/predicting_outcomes_in_heart_failure/app/wrapper.py b/predicting_outcomes_in_heart_failure/app/wrapper.py new file mode 100644 index 0000000000000000000000000000000000000000..128a1d23508bea039ae0bc7bbb2ed104b893ccf9 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/app/wrapper.py @@ -0,0 +1,210 @@ +import httpx +from loguru import logger +import pandas as pd + +from predicting_outcomes_in_heart_failure.config import API_URL, FIGURES_DIR + + +async def _fetch_api(endpoint: str): + async with httpx.AsyncClient() as client: + try: + response = await client.get(f"{API_URL}/{endpoint}") + response.raise_for_status() + return response.json() + except Exception as e: + logger.error(f"Error fetching {endpoint}: {e}") + return {"error": str(e)} + + +class Wrapper: + async def prediction_with_explanation( + age, + chest_pain_type, + resting_bp, + cholesterol, + fasting_bs, + resting_ecg, + max_hr, + exercise_angina, + oldpeak, + st_slope, + ): + payload = { + "Age": age, + "ChestPainType": chest_pain_type, + "RestingBP": resting_bp, + "Cholesterol": cholesterol, + "FastingBS": fasting_bs, + "RestingECG": resting_ecg, + "MaxHR": max_hr, + "ExerciseAngina": exercise_angina, + "Oldpeak": round(oldpeak, 2), + "ST_Slope": st_slope, + } + + async with httpx.AsyncClient() as client: + try: + pred_resp = await client.post(f"{API_URL}/predictions", json=payload) + pred_resp.raise_for_status() + pred_json = pred_resp.json() + + prediction_value = pred_json["data"]["prediction"] + status = "🆘 Risk Detected" if prediction_value == 1 else "✅ No Risk Detected" + status_text = f"# Patient's status: {status}" + except Exception as e: + logger.error(f"Error making prediction: {e}") + return f"Error during prediction: {str(e)}", "" + + try: + expl_resp = await client.post(f"{API_URL}/explanations", json=payload) + expl_resp.raise_for_status() + expl_json = expl_resp.json() + + plot_rel_url = expl_json["data"].get("explanation_plot_url") + if not plot_rel_url: + logger.warning("No explanation_plot_url found in /explanations response.") + return status_text, "" + + filename = plot_rel_url.split("/")[-1] + plot_path = FIGURES_DIR / filename + return status_text, str(plot_path) + + except Exception as e: + logger.error(f"Error getting explanation: {e}") + return status_text, "" + + async def batch_prediction(file): + async with httpx.AsyncClient(timeout=30.0) as client: + try: + df = pd.read_csv(file) + + payload = [] + for _, row in df.iterrows(): + sample = { + "Age": int(row["Age"]), + "ChestPainType": row["ChestPainType"], + "RestingBP": int(row["RestingBP"]), + "Cholesterol": int(row["Cholesterol"]), + "FastingBS": int(row["FastingBS"]), + "RestingECG": row["RestingECG"], + "MaxHR": int(row["MaxHR"]), + "ExerciseAngina": row["ExerciseAngina"], + "Oldpeak": round(float(row["Oldpeak"]), 2), + "ST_Slope": row["ST_Slope"], + } + payload.append(sample) + + response = await client.post(f"{API_URL}/batch-predictions", json=payload) + response.raise_for_status() + result = response.json() + + results = result["data"]["results"] + df_results = pd.DataFrame( + [ + { + "Patients's index": r["index"], + "Patient's status": "🆘 Risk Detected" + if r["prediction"] == 1 + else "✅ No Risk Detected", + } + for r in results + ] + ) + + return df_results + except Exception as e: + logger.error(f"Error making batch prediction: {e}") + return pd.DataFrame({"error": [str(e)]}) + + async def get_model_card(): + data = await _fetch_api("cards/model_card") + + card_lines = data.get("data").get("card_lines") + return "\n".join(card_lines) + + async def get_dataset_card(): + data = await _fetch_api("cards/dataset_card") + + card_lines = data.get("data").get("card_lines") + return "\n".join(card_lines) + + async def get_hyperparameters(): + data = await _fetch_api("model/hyperparameters") + if "error" in data: + return f"## Error\n{data['error']}" + + data = data.get("data", {}).get("hyperparameters", {}).get("cv", {}) + + md = "" + for key, value in data.items(): + md += f"- **{key}**: {value}\n" + return md + + async def get_metrics(): + data = await _fetch_api("model/metrics") + if "error" in data: + return f"## Error\n{data['error']}" + + metrics = data.get("data", {}).get("metrics", {}) + if not metrics: + return "## No metrics found" + + md = "" + for key, value in metrics.items(): + md += f"- **{key}**: {value:.4f}\n" + return md + + async def batch_explanation(file, patient_index: int): + """Return SHAP plot (filepath) for a specific patient in the uploaded CSV.""" + try: + df = pd.read_csv(file) + except Exception as e: + logger.error(f"Error reading CSV for batch explanation: {e}") + return None + + try: + idx = int(patient_index) + except (TypeError, ValueError): + logger.error(f"Invalid patient_index: {patient_index}") + return None + + if idx < 0 or idx >= len(df): + logger.error(f"patient_index {idx} out of range (0..{len(df) - 1})") + return None + + row = df.iloc[idx] + + payload = { + "Age": int(row["Age"]), + "ChestPainType": row["ChestPainType"], + "RestingBP": int(row["RestingBP"]), + "Cholesterol": int(row["Cholesterol"]), + "FastingBS": int(row["FastingBS"]), + "RestingECG": row["RestingECG"], + "MaxHR": int(row["MaxHR"]), + "ExerciseAngina": row["ExerciseAngina"], + "Oldpeak": round(float(row["Oldpeak"]), 2), + "ST_Slope": row["ST_Slope"], + } + + async with httpx.AsyncClient() as client: + try: + expl_resp = await client.post(f"{API_URL}/explanations", json=payload) + expl_resp.raise_for_status() + expl_json = expl_resp.json() + + plot_rel_url = expl_json["data"].get("explanation_plot_url") + if not plot_rel_url: + logger.warning( + "No explanation_plot_url found in /explanations response (batch)." + ) + return None + + filename = plot_rel_url.split("/")[-1] + plot_path = FIGURES_DIR / filename + + return str(plot_path) + + except Exception as e: + logger.error(f"Error getting batch explanation: {e}") + return None diff --git a/predicting_outcomes_in_heart_failure/config.py b/predicting_outcomes_in_heart_failure/config.py new file mode 100644 index 0000000000000000000000000000000000000000..ffa0b4ef8162e13816598c7674cd5100df70fb1e --- /dev/null +++ b/predicting_outcomes_in_heart_failure/config.py @@ -0,0 +1,129 @@ +from pathlib import Path + +from dotenv import load_dotenv +from loguru import logger + +load_dotenv() + +# ------------------- +# Experiment settings +# ------------------- +VALID_VARIANTS = ["all", "female", "male", "nosex"] +VALID_MODELS = ["logreg", "random_forest", "decision_tree"] +EXPERIMENT_NAME = "Heart_Failure_Prediction" +DATASET_NAME = "fedesoriano/heart-failure-prediction" +TARGET_COL = "HeartDisease" +RANDOM_STATE = 42 +TEST_SIZE = 0.30 +N_SPLITS = 5 +SCORING = { + "accuracy": "accuracy", + "f1": "f1", + "recall": "recall", + "roc_auc": "roc_auc", +} + +NUM_COLS_DEFAULT = ["Age", "RestingBP", "Cholesterol", "MaxHR", "Oldpeak"] +CAT_COLS_DEFAULT = [ + "Sex", + "ChestPainType", + "FastingBS", + "RestingECG", + "ExerciseAngina", + "ST_Slope", +] +MULTI_CAT = ["ChestPainType", "RestingECG", "ST_Slope"] + +INPUT_COLUMNS = [ + "Age", + "RestingBP", + "Cholesterol", + "FastingBS", + "MaxHR", + "ExerciseAngina", + "Oldpeak", + "ChestPainType_ASY", + "ChestPainType_ATA", + "ChestPainType_NAP", + "ChestPainType_TA", + "RestingECG_LVH", + "RestingECG_Normal", + "RestingECG_ST", + "ST_Slope_Down", + "ST_Slope_Flat", + "ST_Slope_Up", +] +# ---------------------------- +# Model hyperparameter configurations +# ---------------------------- +CONFIG_RF = { + "n_estimators": [200, 400, 800], + "max_depth": [None, 6, 12], + "class_weight": [None, "balanced"], +} +CONFIG_DT = { + "criterion": ["gini", "entropy", "log_loss"], + "max_depth": [None, 3, 5, 7, 9, 12], + "min_samples_split": [2, 5, 10, 20], + "min_samples_leaf": [1, 2, 4, 8], + "max_features": [None, "sqrt", "log2"], + "class_weight": [None, "balanced"], + "ccp_alpha": [0.0, 0.001, 0.01], +} +CONFIG_LR = {"C": [0.01, 0.1, 1, 10], "penalty": ["l2"], "class_weight": [None, "balanced"]} + +# ---------------------------- +# Repository info +# ---------------------------- +REPO_OWNER = "se4ai2526-uniba" +REPO_NAME = "CardioTrack" + +# ---------------------------- +# Great Expectations +# ---------------------------- +SOURCE_NAME = "heart_data_source" +ASSET_NAME = "heart_failure" +SUITE_NAME = "heart_failure_data_quality" + +# ---------------------------- +# Paths +# ---------------------------- +PROJ_ROOT = Path(__file__).resolve().parents[1] +logger.info(f"PROJ_ROOT path is: {PROJ_ROOT}") + +DATA_DIR = PROJ_ROOT / "data" +INTERIM_DATA_DIR = DATA_DIR / "interim" +PROCESSED_DATA_DIR = DATA_DIR / "processed" +RAW_DATA_DIR = DATA_DIR / "raw" +EXTERNAL_DATA_DIR = DATA_DIR / "external" + +RAW_PATH = RAW_DATA_DIR / "heart.csv" +PREPROCESSED_CSV = INTERIM_DATA_DIR / "preprocessed.csv" +TRAIN_CSV = PROCESSED_DATA_DIR / "train.csv" +TEST_CSV = PROCESSED_DATA_DIR / "test.csv" + +MODELS_DIR = PROJ_ROOT / "models" +REPORTS_DIR = PROJ_ROOT / "reports" +FIGURES_DIR = REPORTS_DIR / "figures" + +METRICS_DIR = PROJ_ROOT / "metrics" +TEST_METRICS_DIR = METRICS_DIR / "test" + +NOSEX_CSV = INTERIM_DATA_DIR / "preprocessed_no_sex_column.csv" +MALE_CSV = INTERIM_DATA_DIR / "preprocessed_male_only.csv" +FEMALE_CSV = INTERIM_DATA_DIR / "preprocessed_female_only.csv" + +PREPROCESS_ARTIFACTS_DIR = INTERIM_DATA_DIR / "preprocess_artifacts" +SCALER_PATH = PREPROCESS_ARTIFACTS_DIR / "scaler.joblib" + +MODEL_PATH = Path("models/nosex/random_forest.joblib") + +CARD_PATHS = { + "dataset_card": DATA_DIR / "README.md", + "model_card": MODELS_DIR / "README.md", +} + +# ---------------------------- +# API +# ---------------------------- +API_URL = "http://localhost:7860" diff --git a/predicting_outcomes_in_heart_failure/data/dataset.py b/predicting_outcomes_in_heart_failure/data/dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..a6bbd587d7478f3738d1debfc6a57395f8b3cf63 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/data/dataset.py @@ -0,0 +1,22 @@ +import os +import shutil + +import kagglehub +from loguru import logger +from predicting_outcomes_in_heart_failure.config import DATASET_NAME, RAW_DATA_DIR +import typer + +app = typer.Typer() + + +@app.command() +def main(): + logger.info("Downloading dataset from Kaggle...") + os.makedirs(RAW_DATA_DIR, exist_ok=True) + path = kagglehub.dataset_download(DATASET_NAME) + shutil.copytree(path, RAW_DATA_DIR, dirs_exist_ok=True) + logger.success("Dataset downloaded successfully to {RAW_DATA_DIR}.") + + +if __name__ == "__main__": + app() diff --git a/predicting_outcomes_in_heart_failure/data/preprocess.py b/predicting_outcomes_in_heart_failure/data/preprocess.py new file mode 100644 index 0000000000000000000000000000000000000000..b979635c29491f9757041013f8ae41f4a289de43 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/data/preprocess.py @@ -0,0 +1,116 @@ +import joblib +from loguru import logger +import pandas as pd +from predicting_outcomes_in_heart_failure.config import ( + FEMALE_CSV, + INTERIM_DATA_DIR, + MALE_CSV, + NOSEX_CSV, + NUM_COLS_DEFAULT, + PREPROCESS_ARTIFACTS_DIR, + PREPROCESSED_CSV, + RAW_PATH, + SCALER_PATH, + TARGET_COL, +) +from sklearn.preprocessing import StandardScaler + + +def save_scaler_artifact(scaler: StandardScaler): + """Save only the fitted scaler used during preprocessing for inference.""" + PREPROCESS_ARTIFACTS_DIR.mkdir(parents=True, exist_ok=True) + joblib.dump(scaler, SCALER_PATH) + logger.success(f"Saved StandardScaler to {SCALER_PATH}") + + +def generate_gender_splits(df: pd.DataFrame): + """Create and save gender-based CSV splits (female, male, nosex).""" + if "Sex" in df.columns: + df_female = df[df["Sex"] == 0].copy() + df_female.to_csv(FEMALE_CSV, index=False) + logger.success(f"Saved female-only dataset: {FEMALE_CSV} (rows={len(df_female)})") + + if "Sex" in df.columns: + df_male = df[df["Sex"] == 1].copy() + df_male.to_csv(MALE_CSV, index=False) + logger.success(f"Saved male-only dataset: {MALE_CSV} (rows={len(df_male)})") + + df_nosex = df.drop(columns=["Sex"], errors="ignore").copy() + df_nosex.to_csv(NOSEX_CSV, index=False) + logger.success(f"Saved dataset without 'Sex': {NOSEX_CSV} (rows={len(df_nosex)})") + + +def preprocessing(): + """Run the full preprocessing pipeline on the raw heart dataset.""" + logger.info("Starting preprocessing pipeline...") + + if not RAW_PATH.exists(): + logger.error(f"Missing {RAW_PATH}. Put heart.csv under data/raw/ or adjust RAW_PATH.") + raise FileNotFoundError(f"Missing {RAW_PATH}.") + + df = pd.read_csv(RAW_PATH) + logger.info(f"Loaded dataset: {RAW_PATH} (rows={len(df)}, cols={df.shape[1]})") + + if len(df) < 2: + raise ValueError("Preprocessing requires at least 2 rows, got only 1.") + + # Ensure target is integer + df[TARGET_COL] = df[TARGET_COL].astype(int) + + # Remove invalid RestingBP rows + if "RestingBP" in df.columns: + before = len(df) + df = df[df["RestingBP"] != 0].reset_index(drop=True) + removed = before - len(df) + if removed > 0: + logger.warning(f"Removed {removed} rows with RestingBP == 0") + + # Impute missing/zero Cholesterol + if "Cholesterol" in df.columns: + zero_mask = df["Cholesterol"] == 0 + if zero_mask.any(): + median_chol = df.loc[~zero_mask, "Cholesterol"].median() + df.loc[zero_mask, "Cholesterol"] = median_chol + logger.info(f"Imputed {zero_mask.sum()} Cholesterol==0 with median={median_chol}") + + # Encode binary categorical features + if "Sex" in df.columns: + df["Sex"] = df["Sex"].map({"M": 1, "F": 0}).astype(int) + logger.debug("Encoded 'Sex' as binary.") + + if "ExerciseAngina" in df.columns: + df["ExerciseAngina"] = df["ExerciseAngina"].map({"Y": 1, "N": 0}).astype(int) + logger.debug("Encoded 'ExerciseAngina' as binary.") + + # One-hot encode multi-category features + multi_cat = [c for c in ["ChestPainType", "RestingECG", "ST_Slope"] if c in df.columns] + df = pd.get_dummies(df, columns=multi_cat, drop_first=False) + logger.debug(f"One-hot encoded columns: {multi_cat}") + + # Scale numerical columns + num_cols = [c for c in NUM_COLS_DEFAULT if c in df.columns and c != TARGET_COL] + scaler = StandardScaler() + df[num_cols] = scaler.fit_transform(df[num_cols]) + logger.info(f"Scaled numerical features: {num_cols}") + + # Save processed dataset + df.to_csv(PREPROCESSED_CSV, index=False) + logger.success( + "Saved preprocessed dataset: %s (rows=%d, cols=%d)", PREPROCESSED_CSV, len(df), df.shape[1] + ) + + # Log class distribution + count_0 = (df[TARGET_COL] == 0).sum() + count_1 = (df[TARGET_COL] == 1).sum() + logger.info(f"Target balance — 0: {count_0} | 1: {count_1}") + + save_scaler_artifact(scaler) + + logger.success("Preprocessing completed successfully.") + return df + + +if __name__ == "__main__": + INTERIM_DATA_DIR.mkdir(parents=True, exist_ok=True) + df_processed = preprocessing() + generate_gender_splits(df_processed) diff --git a/predicting_outcomes_in_heart_failure/data/split_data.py b/predicting_outcomes_in_heart_failure/data/split_data.py new file mode 100644 index 0000000000000000000000000000000000000000..74dfa229d4527d3e50713d55bba589774f7ad08c --- /dev/null +++ b/predicting_outcomes_in_heart_failure/data/split_data.py @@ -0,0 +1,114 @@ +import argparse +from pathlib import Path + +from loguru import logger +import pandas as pd +from predicting_outcomes_in_heart_failure.config import ( + FEMALE_CSV, + MALE_CSV, + NOSEX_CSV, + PREPROCESSED_CSV, + PROCESSED_DATA_DIR, + RANDOM_STATE, + TARGET_COL, + TEST_SIZE, +) +from sklearn.model_selection import train_test_split + +VARIANTS = { + "all": PREPROCESSED_CSV, + "female": FEMALE_CSV, + "male": MALE_CSV, + "nosex": NOSEX_CSV, +} + + +def _safe_train_test_split(X, y, test_size, random_state): + """Perform a stratified train/test split with fallback if not possible.""" + stratify_y = y if y.nunique() > 1 else None + try: + X_tr, X_te, y_tr, y_te = train_test_split( + X, + y, + test_size=test_size, + stratify=stratify_y, + random_state=random_state, + shuffle=True, + ) + if stratify_y is None: + logger.warning("Target has only one class — performing non-stratified split.") + else: + logger.debug("Stratified split executed successfully.") + return X_tr, X_te, y_tr, y_te + except ValueError as e: + logger.warning(f"Stratified split failed ({e}). Falling back to non-stratified split.") + return train_test_split( + X, + y, + test_size=test_size, + stratify=None, + random_state=random_state, + shuffle=True, + ) + + +def split_one(csv_path: Path, variant: str): + """Split a specific variant (all/female/male/nosex) into train/test sets.""" + if not csv_path.exists(): + logger.warning(f"[{variant}] Missing CSV file: {csv_path} — skipping.") + return + + df = pd.read_csv(csv_path) + logger.info(f"[{variant}] Loaded {csv_path} (rows={len(df)}, cols={df.shape[1]})") + + if TARGET_COL not in df.columns: + raise ValueError(f"[{variant}] Target column '{TARGET_COL}' not found in {csv_path}") + + X = df.drop(columns=[TARGET_COL]) + y = df[TARGET_COL].astype(int) + + X_train, X_test, y_train, y_test = _safe_train_test_split(X, y, TEST_SIZE, RANDOM_STATE) + + train_df = X_train.copy() + train_df[TARGET_COL] = y_train.values + test_df = X_test.copy() + test_df[TARGET_COL] = y_test.values + + out_dir = PROCESSED_DATA_DIR / variant + out_dir.mkdir(parents=True, exist_ok=True) + train_p = out_dir / "train.csv" + test_p = out_dir / "test.csv" + + train_df.to_csv(train_p, index=False) + test_df.to_csv(test_p, index=False) + + logger.success(f"[{variant}] Saved TRAIN -> {train_p} (rows={len(train_df)})") + logger.success(f"[{variant}] Saved TEST -> {test_p} (rows={len(test_df)})") + + train_counts = train_df[TARGET_COL].value_counts().to_dict() + test_counts = test_df[TARGET_COL].value_counts().to_dict() + logger.info(f"[{variant}] Class distribution — TRAIN: {train_counts} | TEST: {test_counts}") + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--variant", + type=str, + choices=list(VARIANTS.keys()), + required=True, + help="Data variant to split: all, female, male, or nosex.", + ) + args = parser.parse_args() + + variant = args.variant + csv_path = VARIANTS[variant] + + logger.info(f"Starting splitting for variant='{variant}'") + PROCESSED_DATA_DIR.mkdir(parents=True, exist_ok=True) + split_one(csv_path, variant) + logger.success(f"Splitting completed for variant='{variant}'") + + +if __name__ == "__main__": + main() diff --git a/predicting_outcomes_in_heart_failure/modeling/__init__.py b/predicting_outcomes_in_heart_failure/modeling/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/predicting_outcomes_in_heart_failure/modeling/evaluate.py b/predicting_outcomes_in_heart_failure/modeling/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..da0ddbd0297a5d5c7443b98d52755f037f567c48 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/modeling/evaluate.py @@ -0,0 +1,182 @@ +import argparse +import json +import os + +import dagshub +import joblib +from loguru import logger +import mlflow +from mlflow.models.signature import infer_signature +from sklearn.metrics import accuracy_score, f1_score, recall_score, roc_auc_score + +from predicting_outcomes_in_heart_failure.config import ( + DATASET_NAME, + EXPERIMENT_NAME, + MODELS_DIR, + PROCESSED_DATA_DIR, + REPO_NAME, + REPO_OWNER, + TARGET_COL, + TEST_METRICS_DIR, + VALID_MODELS, + VALID_VARIANTS, +) +from predicting_outcomes_in_heart_failure.modeling.train import load_split + + +def compute_metrics(model, X_test, y_test) -> dict: + """Compute evaluation metrics (F1, recall, accuracy, ROC-AUC).""" + y_pred = model.predict(X_test) + results = { + "test_f1": f1_score(y_test, y_pred, zero_division=0), + "test_recall": recall_score(y_test, y_pred, zero_division=0), + "test_accuracy": accuracy_score(y_test, y_pred), + } + if hasattr(model, "predict_proba"): + try: + y_prob = model.predict_proba(X_test)[:, 1] + results["test_roc_auc"] = roc_auc_score(y_test, y_prob) + except Exception as e: + logger.warning(f"ROC AUC not computed: {e}") + return results, y_pred + + +def evaluate_variant(variant: str, model_name: str | None = None): + """Evaluate trained models for a given variant, optionally by model.""" + logger.info(f"=== Evaluation started (variant={variant}, model={model_name or 'ALL'}) ===") + + test_path = PROCESSED_DATA_DIR / variant / "test.csv" + test_df = load_split(test_path) + + X_test = test_df.drop(columns=[TARGET_COL]) + y_test = test_df[TARGET_COL].astype(int) + + models_dir_variant = MODELS_DIR / variant + if not models_dir_variant.exists(): + logger.warning( + f"[{variant}] Models directory does not exist: {models_dir_variant} — skipping." + ) + return + + experiment_name = f"{EXPERIMENT_NAME}_{variant}" + experiment = mlflow.get_experiment_by_name(experiment_name) + if experiment is None: + logger.error(f"Experiment '{experiment_name}' not found.") + return + + model_files = [] + if model_name is not None: + model_files = [f"{model_name}.joblib"] + else: + model_files = [f for f in os.listdir(models_dir_variant) if f.endswith(".joblib")] + + for file in model_files: + if not file.endswith(".joblib"): + continue + + current_model_name = file.split(".joblib")[0] + run_name = f"{current_model_name}_{variant}" + logger.info( + f"[{variant} | {current_model_name}] Looking for training run '{run_name}' in MLflow." + ) + + runs = mlflow.search_runs( + experiment_ids=[experiment.experiment_id], + filter_string=f"tags.mlflow.runName = '{run_name}'", + order_by=["start_time DESC"], + max_results=1, + ) + + if runs.empty: + logger.warning( + f"[{variant} | {current_model_name}]No matching MLflow run found — skipping." + ) + continue + + tracked_id = runs.loc[0, "run_id"] + + with mlflow.start_run(run_id=tracked_id): + rawdata = mlflow.data.from_pandas(test_df, name=f"{DATASET_NAME}_{variant}_test") + mlflow.log_input(rawdata, context="testing") + + model_path = models_dir_variant / file + model = joblib.load(model_path) + + metrics, _ = compute_metrics(model, X_test, y_test) + mlflow.log_metrics(metrics) + + logger.info(f"[{variant} | {current_model_name}] Test set metrics:") + for k in ["test_f1", "test_recall", "test_accuracy", "test_roc_auc"]: + if k in metrics: + logger.info(f" - {k}: {metrics[k]:.4f}") + + metrics_dir = TEST_METRICS_DIR / variant + metrics_dir.mkdir(parents=True, exist_ok=True) + + metrics_path = metrics_dir / f"{current_model_name}.json" + + to_save = { + "variant": variant, + "model_name": current_model_name, + "metrics": metrics, + } + + with open(metrics_path, "w", encoding="utf-8") as f: + json.dump(to_save, f, indent=4) + + logger.info( + f"[{variant} | {current_model_name}] Saved test metrics locally → {metrics_path}" + ) + + if ( + metrics.get("test_f1", 0.0) >= 0.80 + and metrics.get("test_recall", 0.0) >= 0.80 + and metrics.get("test_accuracy", 0.0) >= 0.80 + and metrics.get("test_roc_auc", 0.0) >= 0.85 + ): + signature = infer_signature(X_test, model.predict(X_test)) + registered_name = f"{current_model_name}_{variant}" + mlflow.sklearn.log_model( + sk_model=model, + artifact_path="Model_Info", + signature=signature, + input_example=X_test, + registered_model_name=registered_name, + ) + logger.success( + f"[{variant} | {current_model_name}] " + f"Model promoted and registered as '{registered_name}'." + ) + + logger.success( + f"=== Evaluation completed (variant={variant}, model={model_name or 'ALL'}) ===" + ) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--variant", + type=str, + choices=VALID_VARIANTS, + required=True, + help="Data variant to use: all, female, male, or nosex.", + ) + parser.add_argument( + "--model", + type=str, + choices=VALID_MODELS, + required=False, + help=( + "Specific model to evaluate (logreg, random_forest, decision_tree)." + " If omitted, evaluate all models." + ), + ) + args = parser.parse_args() + + dagshub.init(repo_owner=REPO_OWNER, repo_name=REPO_NAME, mlflow=True) + evaluate_variant(args.variant, args.model) + + +if __name__ == "__main__": + main() diff --git a/predicting_outcomes_in_heart_failure/modeling/explainability.py b/predicting_outcomes_in_heart_failure/modeling/explainability.py new file mode 100644 index 0000000000000000000000000000000000000000..39203954aa60d2a401c9de53654f97480869172b --- /dev/null +++ b/predicting_outcomes_in_heart_failure/modeling/explainability.py @@ -0,0 +1,202 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any + +import matplotlib + +matplotlib.use("Agg") + +from loguru import logger +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import shap + + +def explain_prediction( + model: Any, + X: pd.DataFrame, + model_type: str, + top_k: int = 5, +): + """ + Build a explanation for a single sample. + """ + + if X.empty: + logger.warning("Received empty DataFrame for explanation; returning empty list.") + return [] + + model_type = model_type.lower() + x = X.iloc[[0]] + feature_names = x.columns.tolist() + + # --------------------------------------------------------------------- + # 1) Logistic Regression → use coefficients + # --------------------------------------------------------------------- + if model_type in ("logreg", "logistic_regression"): + logger.info("Using coefficient-based explanation for Logistic Regression.") + + if not hasattr(model, "coef_"): + logger.error( + "Model has no coef_ attribute;cannot build coefficient-based explanation." + ) + return [] + + coef = np.asarray(model.coef_[0]).reshape(-1) + if coef.shape[0] != len(feature_names): + logger.warning( + f"Coefficient vector length ({coef.shape[0]}) does not match " + f"number of features ({len(feature_names)}). " + "Truncating to minimum length." + ) + + n = min(len(feature_names), coef.shape[0]) + explanations = [ + { + "feature": feature_names[i], + "value": float(coef[i]), + "abs_value": float(abs(coef[i])), + } + for i in range(n) + ] + + explanations = sorted(explanations, key=lambda d: d["abs_value"], reverse=True)[:top_k] + logger.info( + f"Built coefficient-based explanation. Returning top {len(explanations)} features." + ) + return explanations + + # --------------------------------------------------------------------- + # 2) Tree-based models → SHAP TreeExplainer + # --------------------------------------------------------------------- + if model_type in ("random_forest", "decision_tree"): + logger.info("Using SHAP TreeExplainer for tree-based model.") + + if X.empty: + logger.warning("Received empty DataFrame for SHAP explanation; returning empty list.") + return [] + + x = X.iloc[[0]] + feature_names = x.columns.tolist() + + try: + explainer = shap.TreeExplainer(model) + shap_exp = explainer(x) + values = np.asarray(shap_exp.values) + logger.debug(f"Raw SHAP values shape: {values.shape!r}") + except Exception as e: + logger.error(f"SHAP TreeExplainer failed: {e}") + logger.warning("SHAP explanation not available for this model.") + return [] + + if values.ndim == 2: + shap_vec = values[0] + + elif values.ndim == 3: + n_samples, dim2, dim3 = values.shape + + if dim2 == x.shape[1]: + n_outputs = dim3 + class_index = 1 if n_outputs > 1 else 0 + shap_vec = values[0, :, class_index] + + elif dim3 == x.shape[1]: + n_outputs = dim2 + class_index = 1 if n_outputs > 1 else 0 + shap_vec = values[0, class_index, :] + + else: + logger.error(f"Unexpected SHAP shape {values.shape} for {x.shape[1]} features.") + return [] + + else: + logger.error(f"Unexpected SHAP values dimension: {values.ndim}") + return [] + + shap_vec = np.asarray(shap_vec).reshape(-1) + + if shap_vec.shape[0] != len(feature_names): + logger.warning( + f"SHAP vector length ({shap_vec.shape[0]}) " + f"!= number of features ({len(feature_names)}). " + "Truncating to minimum length." + ) + + n = min(len(feature_names), shap_vec.shape[0]) + explanations = [ + { + "feature": feature_names[i], + "value": float(shap_vec[i]), + "abs_value": float(abs(shap_vec[i])), + } + for i in range(n) + ] + + explanations = sorted(explanations, key=lambda d: d["abs_value"], reverse=True)[:top_k] + + logger.info(f"Built SHAP-based explanation. Returning top {len(explanations)} features.") + return explanations + + +def save_shap_waterfall_plot( + model: Any, + X: pd.DataFrame, + model_type: str, + output_path: Path, +) -> Path | None: + """ + Save a SHAP waterfall plot for a single sample to the given output path. + """ + model_type = model_type.lower() + + if model_type not in ("random_forest", "decision_tree"): + logger.warning( + f"Waterfall plot is only supported for tree-based models. " + f"Got model_type='{model_type}'. Skipping plot generation." + ) + return None + + if X.empty: + logger.warning("Received empty DataFrame for SHAP plot; skipping.") + return None + + x = X.iloc[[0]] + logger.info(f"Generating SHAP waterfall plot for model_type='{model_type}'.") + + try: + explainer = shap.TreeExplainer(model) + shap_exp = explainer(x) + except Exception as e: + logger.error(f"Failed to build SHAP explainer for plot: {e}") + return None + + try: + output_path.parent.mkdir(parents=True, exist_ok=True) + + shap_to_plot = shap_exp + if np.asarray(shap_exp.values).ndim == 3: + vals = np.asarray(shap_exp.values) + if vals.shape[1] == x.shape[1]: + shap_to_plot = shap_exp[..., 1] + elif vals.shape[2] == x.shape[1]: + shap_to_plot = shap_exp[:, 1, :] + else: + logger.warning( + f"Unexpected shape for SHAP values in plot: {vals.shape}. " + "Falling back to shap_exp[0]." + ) + shap_to_plot = shap_exp + + plt.figure() + shap.plots.waterfall(shap_to_plot[0], show=False) + plt.tight_layout() + plt.savefig(output_path, bbox_inches="tight") + plt.close() + + logger.success(f"SHAP waterfall plot saved to {output_path}") + return output_path + except Exception as e: + logger.error(f"Failed to save SHAP waterfall plot: {e}") + return None diff --git a/predicting_outcomes_in_heart_failure/modeling/predict.py b/predicting_outcomes_in_heart_failure/modeling/predict.py new file mode 100644 index 0000000000000000000000000000000000000000..0e96c22a6a850db3773889c912c7cbcd935e601c --- /dev/null +++ b/predicting_outcomes_in_heart_failure/modeling/predict.py @@ -0,0 +1,135 @@ +from __future__ import annotations + +import time + +import joblib +from loguru import logger +import numpy as np +import pandas as pd + +from predicting_outcomes_in_heart_failure.app.schema import HeartSample +from predicting_outcomes_in_heart_failure.config import ( + FIGURES_DIR, + INPUT_COLUMNS, + MODEL_PATH, + MULTI_CAT, + NUM_COLS_DEFAULT, + SCALER_PATH, +) +from predicting_outcomes_in_heart_failure.modeling.explainability import ( + explain_prediction, + save_shap_waterfall_plot, +) + + +def preprocessing(sample_df: pd.DataFrame) -> pd.DataFrame: + """ + Apply the exact same preprocessing used during training: + """ + logger.info("Applying preprocessing pipeline for inference...") + + if not (SCALER_PATH.exists() and MODEL_PATH.exists()): + raise FileNotFoundError("Preprocessing artifacts missing.") + + scaler = joblib.load(SCALER_PATH) + input_columns = INPUT_COLUMNS + multi_cat = MULTI_CAT + num_cols = NUM_COLS_DEFAULT + + logger.debug(f"Loaded scaler from {SCALER_PATH}") + logger.debug(f"Using {len(input_columns)} input columns") + + if "Sex" in sample_df.columns and "Sex" not in input_columns: + logger.debug("Dropping column 'Sex' since it's not used by the current model variant.") + sample_df = sample_df.drop(columns=["Sex"]) + + if "Sex" in sample_df.columns and "Sex" in input_columns: + sample_df["Sex"] = sample_df["Sex"].map({"M": 1, "F": 0}).astype(int) + logger.debug("Mapped 'Sex' to binary values (M=1, F=0).") + + if "ExerciseAngina" in sample_df.columns and "ExerciseAngina" in input_columns: + sample_df["ExerciseAngina"] = sample_df["ExerciseAngina"].map({"Y": 1, "N": 0}).astype(int) + logger.debug("Mapped 'ExerciseAngina' to binary values (Y=1, N=0).") + + present_multi = [c for c in multi_cat if c in sample_df.columns] + if present_multi: + logger.debug(f"Performing one-hot encoding on: {present_multi}") + sample_df = pd.get_dummies(sample_df, columns=present_multi, drop_first=False) + + for col in input_columns: + if col not in sample_df.columns: + sample_df[col] = 0 + sample_df = sample_df.reindex(columns=input_columns, fill_value=0) + logger.debug("Aligned input columns with training feature order.") + + cols_to_scale = [c for c in num_cols if c in sample_df.columns] + sample_df[cols_to_scale] = scaler.transform(sample_df[cols_to_scale]) + logger.debug(f"Scaled numerical columns: {cols_to_scale}") + + logger.success("Preprocessing completed successfully.") + return sample_df + + +def main(): + logger.info("Starting static inference...") + + sample = HeartSample( + Age=54, + ChestPainType="ASY", + RestingBP=140, + Cholesterol=239, + FastingBS=0, + RestingECG="Normal", + MaxHR=160, + ExerciseAngina="N", + Oldpeak=0.0, + ST_Slope="Up", + ) + logger.info("Sample created successfully.") + + X_raw = sample.to_dataframe() + logger.debug(f"Raw input features:\n{X_raw}") + X = preprocessing(X_raw) + + if not MODEL_PATH.exists(): + raise FileNotFoundError(f"Model not found: {MODEL_PATH}") + model = joblib.load(MODEL_PATH) + logger.success(f"Loaded model from {MODEL_PATH}") + + # Perform prediction + t0 = time.perf_counter() + y_pred = model.predict(X)[0] + inference_time = time.perf_counter() - t0 + y_pred = int(y_pred) if np.issubdtype(type(y_pred), np.integer) else y_pred + result = { + "prediction": y_pred, + "inference_time_seconds": inference_time, + } + + # Explainability + model = joblib.load(MODEL_PATH) + model_type = MODEL_PATH.stem + try: + logger.info("Computing explanation for the prediction...") + explanations = explain_prediction(model, X, model_type=model_type, top_k=5) + result["explanations"] = explanations + logger.success("Explanation computed successfully.") + except Exception as e: + logger.error(f"Failed to compute explanation: {e}") + + try: + shap_path = FIGURES_DIR / f"shap_waterfall_{model_type}.png" + saved = save_shap_waterfall_plot(model, X, model_type=model_type, output_path=shap_path) + if saved is not None: + result["explanation_plot"] = str(saved) + except Exception as e: + logger.error(f"Failed to generate SHAP waterfall plot: {e}") + + logger.info("Inference completed.") + logger.success(f"Prediction result: {result}") + + return result + + +if __name__ == "__main__": + main() diff --git a/predicting_outcomes_in_heart_failure/modeling/train.py b/predicting_outcomes_in_heart_failure/modeling/train.py new file mode 100644 index 0000000000000000000000000000000000000000..52654e2a43fd17b06de8884ba1c1d25c079b2f11 --- /dev/null +++ b/predicting_outcomes_in_heart_failure/modeling/train.py @@ -0,0 +1,261 @@ +from __future__ import annotations + +import argparse +import json +from pathlib import Path + +import dagshub +from imblearn.over_sampling import RandomOverSampler +import joblib +from loguru import logger +import mlflow +import pandas as pd +from sklearn.model_selection import GridSearchCV, StratifiedKFold + +from predicting_outcomes_in_heart_failure.config import ( + CONFIG_DT, + CONFIG_LR, + CONFIG_RF, + DATASET_NAME, + EXPERIMENT_NAME, + MODELS_DIR, + N_SPLITS, + PROCESSED_DATA_DIR, + RANDOM_STATE, + REPO_NAME, + REPO_OWNER, + REPORTS_DIR, + SCORING, + TARGET_COL, + VALID_MODELS, + VALID_VARIANTS, +) + +REFIT = "f1" + + +def load_split(path: Path) -> pd.DataFrame: + if not path.exists(): + logger.error(f"Missing split file: {path}. Run split_data.py first.") + raise FileNotFoundError(path) + df = pd.read_csv(path) + logger.info(f"Loaded {path} (rows={len(df)}, cols={df.shape[1]})") + return df + + +def apply_random_oversampling( + X: pd.DataFrame, + y: pd.Series, + model_name: str, + variant: str, +): + """Apply RandomOverSampler to balance classes in the training set.""" + logger.info(f"[{variant} | {model_name}] Applying RandomOverSampler on training data...") + + # Log original class distribution + orig_counts = y.value_counts().to_dict() + logger.info(f"[{variant} | {model_name}] Original class distribution: {orig_counts}") + + ros = RandomOverSampler(random_state=RANDOM_STATE) + X_res, y_res = ros.fit_resample(X, y) + + # Log resampled class distribution + res_counts = y_res.value_counts().to_dict() + logger.info(f"[{variant} | {model_name}] Resampled class distribution: {res_counts}") + + logger.success(f"[{variant} | {model_name}] RandomOverSampler applied successfully.") + return X_res, y_res + + +def get_model_and_grid(model_name: str): + """Return estimator and parameter grid for the selected model.""" + if model_name == "decision_tree": + from sklearn.tree import DecisionTreeClassifier + + estimator = DecisionTreeClassifier(random_state=RANDOM_STATE) + param_grid = CONFIG_DT + return estimator, param_grid + + elif model_name == "logreg": + from sklearn.linear_model import LogisticRegression + + estimator = LogisticRegression(max_iter=500, random_state=RANDOM_STATE) + param_grid = CONFIG_LR + return estimator, param_grid + + elif model_name == "random_forest": + from sklearn.ensemble import RandomForestClassifier + + estimator = RandomForestClassifier(random_state=RANDOM_STATE) + param_grid = CONFIG_RF + return estimator, param_grid + + else: + raise ValueError(f"Unknown model_name: {model_name}") + + +def run_grid_search( + estimator, + param_grid, + X_train, + y_train, + model_name: str, + variant: str, + reports_dir: Path, +): + """Run GridSearchCV for the specified model and log CV results.""" + cv = StratifiedKFold( + n_splits=N_SPLITS, + shuffle=True, + random_state=RANDOM_STATE, + ) + grid = GridSearchCV( + estimator=estimator, + param_grid=param_grid, + scoring=SCORING, + refit=REFIT, + cv=cv, + n_jobs=-1, + verbose=1, + return_train_score=True, + ) + + logger.info(f"[{variant} | {model_name}] Starting GridSearchCV …") + grid.fit(X_train, y_train) + + logger.success(f"[{variant} | {model_name}] GridSearchCV completed.") + logger.info(f"[{variant} | {model_name}] Best params ({REFIT}): {grid.best_params_}") + logger.info(f"[{variant} | {model_name}] Best CV {REFIT}: {grid.best_score_:.4f}") + + cv_results_path = reports_dir / "cv_results.csv" + df = pd.DataFrame(grid.cv_results_) + df.to_csv(cv_results_path, index=False) + + mlflow.log_artifact(str(cv_results_path)) + return grid.best_estimator_, grid, grid.best_params_ + + +def save_artifacts( + model, + grid, + X_train, + model_name: str, + variant: str, + model_dir: Path, + reports_dir: Path, +) -> None: + """Save model, parameters, and metadata to disk and MLflow.""" + model_dir.mkdir(parents=True, exist_ok=True) + reports_dir.mkdir(parents=True, exist_ok=True) + + model_path = model_dir / f"{model_name}.joblib" + joblib.dump(model, model_path) + logger.success(f"[{variant} | {model_name}] Saved model → {model_path}") + + out = { + "model_name": model_name, + "data_variant": variant, + "cv": { + "refit": REFIT, + "best_score": getattr(grid, "best_score_", None), + "best_params": getattr(grid, "best_params_", None), + "scoring": list(SCORING.keys()), + "n_splits": N_SPLITS, + "random_state": RANDOM_STATE, + }, + "features": list(X_train.columns), + } + + cv_params_path = reports_dir / "cv_parameters.json" + with open(cv_params_path, "w", encoding="utf-8") as f: + json.dump(out, f, indent=4) + + mlflow.log_artifact(str(cv_params_path)) + logger.success(f"[{variant} | {model_name}] Saved artifacts.") + + +def train(model_name: str, variant: str): + """Train a model for a specific dataset variant and log results to MLflow.""" + experiment_name = f"{EXPERIMENT_NAME}_{variant}" + if not mlflow.get_experiment_by_name(experiment_name): + mlflow.create_experiment(experiment_name) + mlflow.set_experiment(experiment_name) + + train_path = PROCESSED_DATA_DIR / variant / "train.csv" + run_name = f"{model_name}_{variant}" + + logger.info(f"=== Training started (model={model_name}, variant={variant}) ===") + + with mlflow.start_run(run_name=run_name): + train_df = load_split(train_path) + + rawdata = mlflow.data.from_pandas(train_df, name=f"{DATASET_NAME}_{variant}") + mlflow.log_input(rawdata, context="training") + + X_train = train_df.drop(columns=[TARGET_COL]) + y_train = train_df[TARGET_COL].astype(int) + + X_train, y_train = apply_random_oversampling( + X_train, + y_train, + model_name=model_name, + variant=variant, + ) + + estimator, param_grid = get_model_and_grid(model_name) + mlflow.set_tag("estimator_name", estimator.__class__.__name__) + mlflow.set_tag("data_variant", variant) + mlflow.log_param("data_variant", variant) + + model_dir = MODELS_DIR / variant + reports_dir = REPORTS_DIR / variant / model_name + reports_dir.mkdir(parents=True, exist_ok=True) + + best_model, grid, params = run_grid_search( + estimator, + param_grid, + X_train, + y_train, + model_name=model_name, + variant=variant, + reports_dir=reports_dir, + ) + mlflow.log_params(params) + + save_artifacts( + best_model, + grid, + X_train, + model_name=model_name, + variant=variant, + model_dir=model_dir, + reports_dir=reports_dir, + ) + + logger.success(f"=== Training completed (model={model_name}, variant={variant}) ===") + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--variant", + type=str, + choices=VALID_VARIANTS, + required=True, + help="Data variant to use: all, female, male, or nosex.", + ) + parser.add_argument( + "--model", + type=str, + choices=VALID_MODELS, + required=True, + help="Model to train: logreg, random_forest, or decision_tree.", + ) + args = parser.parse_args() + + dagshub.init(repo_owner=REPO_OWNER, repo_name=REPO_NAME, mlflow=True) + train(args.model, args.variant) + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..a48d6a69c6bf6d546177769427f6ba7669faa903 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,80 @@ +[build-system] +requires = ["flit_core >=3.2,<4"] +build-backend = "flit_core.buildapi" + +[project] +name = "predicting_outcomes_in_heart_failure" +version = "0.0.1" +description = "This project develops a predictive pipeline for patient outcome prediction in heart failure, using a publicly available dataset of clinical records. The goal is to design and evaluate machine learning models within a reproducible workflow that can be integrated into larger systems for clinical decision support. The workflow addresses data heterogeneity, defines consistent preprocessing and feature engineering strategies, and explores alternative modeling approaches with systematic evaluation using clinically relevant metrics. It also emphasizes model transparency and auditability, ensuring that the resulting pipeline can be deployed as a reliable, adaptable software component in healthcare applications. The project aims not only to improve baseline predictive performance but also to demonstrate how data-driven models can be effectively integrated into end-to-end AI-enabled healthcare systems." +authors = [ + { name = "CardioTrack" }, +] + +readme = "README.md" +classifiers = [ + "Programming Language :: Python :: 3", + +] +dependencies = [ + "asttokens>=3.0.0", + "dagshub>=0.6.3", + "gradio>=6.0.2", + "great-expectations>=1.9.0", + "httpx>=0.28.1", + "imbalanced-learn>=0.14.0", + "ipykernel>=7.1.0", + "kagglehub>=0.3.13", + "loguru", + "matplotlib>=3.10.7", + "mkdocs", + "mlflow==2.22.0", + "numpy>=2.3.4", + "pandas>=2.3.3", + "pip", + "pytest", + "python-dotenv", + "ruff", + "scikit-learn>=1.7.2", + "seaborn>=0.13.2", + "shap>=0.50.0", + "tqdm", + "typer", +] +requires-python = "~=3.11.0" + + +[tool.ruff] +target-version = "py311" +line-length = 99 +src = [ + "predicting_outcomes_in_heart_failure", + "tests", +] +include = ["pyproject.toml", "predicting_outcomes_in_heart_failure/**/*.py", "tests/**/*.py",] +extend-exclude = [ + ".git/", ".venv/", ".ruff_cache/", ".mypy_cache/", + "data/", "artifacts/", "mlruns/", "notebooks/.ipynb_checkpoints/", +] + + +[tool.ruff.lint] +# Enable sets of rules: basic style, static errors, import, upgrade, bugbear, simplify +select = ["E", "F", "I", "UP", "B", "SIM"] +ignore = ["E203"] # compatibility with slicing and formatter +per-file-ignores = {"tests/**" = ["S101", "D"], "notebooks/**" = ["E402", "F401", "D"]} + +[tool.ruff.lint.isort] +force-sort-within-sections = true + +[tool.ruff.format] +quote-style = "double" +indent-style = "space" +docstring-code-format = true # format code inside docstrings + + +[dependency-groups] +dev = [ + "pynblint>=0.1.6", + "ruff>=0.14.2", +] + diff --git a/references/.gitkeep b/references/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/reports/.gitignore b/reports/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..60513b9478f5f9017e9188c5e4feac2e4fd2ad0a --- /dev/null +++ b/reports/.gitignore @@ -0,0 +1,3 @@ +/decision_tree +/random_forest +/logreg diff --git a/reports/all/.gitignore b/reports/all/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..21a0a5eb8abbd42435f58a26d31f1f7f250d9aca --- /dev/null +++ b/reports/all/.gitignore @@ -0,0 +1,3 @@ +/logreg +/random_forest +/decision_tree diff --git a/reports/female/.gitignore b/reports/female/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..21a0a5eb8abbd42435f58a26d31f1f7f250d9aca --- /dev/null +++ b/reports/female/.gitignore @@ -0,0 +1,3 @@ +/logreg +/random_forest +/decision_tree diff --git a/reports/figures/.gitkeep b/reports/figures/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/reports/male/.gitignore b/reports/male/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..21a0a5eb8abbd42435f58a26d31f1f7f250d9aca --- /dev/null +++ b/reports/male/.gitignore @@ -0,0 +1,3 @@ +/logreg +/random_forest +/decision_tree diff --git a/reports/nosex/.gitignore b/reports/nosex/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..21a0a5eb8abbd42435f58a26d31f1f7f250d9aca --- /dev/null +++ b/reports/nosex/.gitignore @@ -0,0 +1,3 @@ +/logreg +/random_forest +/decision_tree diff --git a/tests/test_behavioral_model/directional_test.py b/tests/test_behavioral_model/directional_test.py new file mode 100644 index 0000000000000000000000000000000000000000..452e6a49a45a920a577d376b4ce9276f0f9820c7 --- /dev/null +++ b/tests/test_behavioral_model/directional_test.py @@ -0,0 +1,153 @@ +import joblib +import pandas as pd +from predicting_outcomes_in_heart_failure.config import ( + MODELS_DIR, + PREPROCESSED_CSV, + TARGET_COL, +) +import pytest + + +@pytest.fixture +def sample_features(): + df = pd.read_csv(PREPROCESSED_CSV).iloc[100:].copy() + return df.iloc[[1]].drop(columns=[TARGET_COL]) + + +@pytest.fixture +def trained_models(): + """ + Load all saved models. + """ + models = {} + models_path = MODELS_DIR / "all" + + for model_file in models_path.iterdir(): + if model_file.suffix == ".joblib": + model_name = model_file.stem + models[model_name] = joblib.load(model_file) + + return models + + +class TestModelDirectional: + def test_one_hot_encoding_invariance(self, trained_models, sample_features): + """ + Check how the model reacts to a change in an one hot encoded feature. + """ + + models = trained_models + original = sample_features.copy() + + st = [c for c in sample_features.columns if c.startswith("ST_Slope_")] + active_col = original[st].columns[original[st].iloc[0] == 1][0] + other_col = [c for c in st if c != active_col][0] + + modified = original.copy() + modified[active_col] = 0 + modified[other_col] = 1 + + for _, model in models.items(): + pred_original = model.predict_proba(original)[0, 1] + pred_modified = model.predict_proba(modified)[0, 1] + assert pred_original != pred_modified + + def test_outlier_effect_on_prediction(self, trained_models, sample_features): + """ + Check how the model reacts to an outlier. + """ + + models = trained_models + original = sample_features.copy() + + modified = original.copy() + modified["ExerciseAngina"] = original["ExerciseAngina"].iloc[0] + 1 + + for model_name, model in models.items(): + pred_original = model.predict_proba(original)[0, 1] + pred_modified = model.predict_proba(modified)[0, 1] + + assert pred_original != pred_modified, f"{model_name}: model not sensitive to outlier" + + def test_age_effect(self, trained_models, sample_features): + """ + Higher age should generally be associated with increased risk. + """ + + models = trained_models + + younger = sample_features.copy() + younger["Age"] = -1.5 + + older = sample_features.copy() + older["Age"] = 2.0 + + for model_name, model in models.items(): + prob_younger = model.predict_proba(younger)[0, 1] + prob_older = model.predict_proba(older)[0, 1] + + assert prob_older >= prob_younger, f"{model_name}: unexpected age effect" + + def test_max_heart_rate_relationship(self, trained_models, sample_features): + """ + Lower maximum heart rate achieved should generally increase risk + """ + + models = trained_models + + high_hr = sample_features.copy() + high_hr["MaxHR"] = 2.0 + + low_hr = sample_features.copy() + low_hr["MaxHR"] = -2.0 + + for model_name, model in models.items(): + prob_high = model.predict_proba(high_hr)[0, 1] + prob_low = model.predict_proba(low_hr)[0, 1] + + assert prob_low >= prob_high - 0.15, ( + f"{model_name}: unexpected directionality for MaxHR. " + ) + + def test_oldpeak_elevation_increases_risk(self, trained_models, sample_features): + """ + Higher Oldpeak should increase heart disease probability + """ + + models = trained_models + + low_oldpeak = sample_features.copy() + low_oldpeak["Oldpeak"] = -1.0 + + high_oldpeak = sample_features.copy() + high_oldpeak["Oldpeak"] = 2.0 + + for model_name, model in models.items(): + prob_low = model.predict_proba(low_oldpeak)[0, 1] + prob_high = model.predict_proba(high_oldpeak)[0, 1] + + assert prob_high >= prob_low - 0.15, ( + f"{model_name}: unexpected directionality for Oldpeak. " + ) + + def test_exercise_angina_increases_risk(self, trained_models, sample_features): + """ + Exercise-induced angina should generally increase heart disease probability + """ + + models = trained_models + + no_angina = sample_features.copy() + no_angina["ExerciseAngina"] = 0 + + with_angina = sample_features.copy() + with_angina["ExerciseAngina"] = 1 + + for model_name, model in models.items(): + if hasattr(model, "predict_proba"): + prob_no_angina = model.predict_proba(no_angina)[0, 1] + prob_with_angina = model.predict_proba(with_angina)[0, 1] + + assert prob_with_angina >= prob_no_angina - 0.15, ( + f"{model_name}: unexpected directionality for ExerciseAngina " + ) diff --git a/tests/test_behavioral_model/invariance_test.py b/tests/test_behavioral_model/invariance_test.py new file mode 100644 index 0000000000000000000000000000000000000000..1fb358c39b3e56a31695d10417128fe6f0cfcd14 --- /dev/null +++ b/tests/test_behavioral_model/invariance_test.py @@ -0,0 +1,60 @@ +import joblib +import numpy as np +import pandas as pd +from predicting_outcomes_in_heart_failure.config import MODELS_DIR, PREPROCESSED_CSV, TARGET_COL +import pytest + + +@pytest.fixture +def sample_features(): + df = pd.read_csv(PREPROCESSED_CSV).iloc[100:].copy() + return df.iloc[[1]].drop(columns=[TARGET_COL]) + + +@pytest.fixture +def trained_models(): + """ + Load all saved models. + """ + models = {} + models_path = MODELS_DIR / "all" + + for model_file in models_path.iterdir(): + if model_file.suffix == ".joblib": + model_name = model_file.stem + models[model_name] = joblib.load(model_file) + + return models + + +class TestModelInvariance: + def test_prediction_determinism(self, trained_models, sample_features): + """ + Same input should always produce same prediction. + """ + + models = trained_models + for model_name, model in models.items(): + pred1 = model.predict(sample_features) + pred2 = model.predict(sample_features) + pred3 = model.predict(sample_features) + + assert np.array_equal(pred1, pred2), f"{model_name}: non-deterministic predictions" + assert np.array_equal(pred2, pred3), f"{model_name}: non-deterministic predictions" + + def test_uniform_scaling_invariance(self, trained_models, sample_features): + """ + Uniform scaling should always produce same prediction. + """ + + models = trained_models + original = sample_features.copy() + + modified = original.copy() * 1.1 + + for model_name, model in models.items(): + pred_original = model.predict(original) + pred_modified = model.predict(modified) + assert np.array_equal(pred_original, pred_modified), ( + f"{model_name}: prediction changed after uniform scaling" + ) diff --git a/tests/test_behavioral_model/minimum_functionality_test.py b/tests/test_behavioral_model/minimum_functionality_test.py new file mode 100644 index 0000000000000000000000000000000000000000..a9553f5eb6b17de4f5919b555ef06dcff40ea64d --- /dev/null +++ b/tests/test_behavioral_model/minimum_functionality_test.py @@ -0,0 +1,114 @@ +import joblib +import numpy as np +import pandas as pd +from predicting_outcomes_in_heart_failure.config import ( + MODELS_DIR, + PREPROCESSED_CSV, + TARGET_COL, +) +import pytest + + +@pytest.fixture +def sample_features(): + df = pd.read_csv(PREPROCESSED_CSV).iloc[100:].copy() + return df.iloc[[1]].drop(columns=[TARGET_COL]) + + +@pytest.fixture +def trained_models(): + """ + Load all saved models. + """ + models = {} + models_path = MODELS_DIR / "all" + + for model_file in models_path.iterdir(): + if model_file.suffix == ".joblib": + model_name = model_file.stem + models[model_name] = joblib.load(model_file) + + return models + + +class TestModelMinimumFunctionality: + def test_predict_returns_binary_array(self, trained_models, sample_features): + """ + Models should return binary predictions (0 or 1) for heart disease. + """ + + models = trained_models + for model_name, model in models.items(): + predictions = model.predict(sample_features) + assert predictions.shape == (1,), f"{model_name}: wrong shape" + assert predictions[0] in [0, 1], f"{model_name}: prediction not binary" + + def test_predict_proba_returns_valid_probabilities(self, trained_models, sample_features): + """ + Models with predict_proba should return valid probability distributions. + """ + + models = trained_models + for model_name, model in models.items(): + if hasattr(model, "predict_proba"): + proba = model.predict_proba(sample_features) + assert proba.shape == (1, 2), f"{model_name}: wrong probability shape" + assert np.allclose(proba.sum(axis=1), 1.0), ( + f"{model_name}: probabilities don't sum to 1" + ) + assert np.all(proba >= 0) and np.all(proba <= 1), ( + f"{model_name}: invalid probability values" + ) + + def test_batch_prediction_consistency(self, trained_models, sample_features): + """ + Predictions on batches should be consistent with individual predictions. + """ + + models = trained_models + + batch = pd.concat([sample_features] * 5, ignore_index=True) + for model_name, model in models.items(): + batch_pred = model.predict(batch) + single_pred = model.predict(sample_features) + + assert len(batch_pred) == 5, f"{model_name}: wrong batch size" + assert np.all(batch_pred == single_pred[0]), ( + f"{model_name}: inconsistent batch predictions" + ) + + def test_correct_number_of_features(self, trained_models, sample_features): + """ + Models should expect exactly 18 features after preprocessing + """ + + models = trained_models + expected_n_features = 18 + + assert len(sample_features.columns) == expected_n_features, ( + f"Sample has {len(sample_features.columns)} columns, expected {expected_n_features}" + ) + + for _, model in models.items(): + _ = model.predict(sample_features) + + with pytest.raises((ValueError, IndexError)): + wrong_features = sample_features.iloc[:, :10] + model.predict(wrong_features) + + def test_invalid_one_hot_encoding_detection(self, trained_models, sample_features): + """ + Test behavior when one-hot encoding is invalid + """ + + models = trained_models + + invalid_none = sample_features.copy() + invalid_none["ChestPainType_ASY"] = 0 + invalid_none["ChestPainType_ATA"] = 0 + invalid_none["ChestPainType_NAP"] = 0 + invalid_none["ChestPainType_TA"] = 0 + + for model_name, model in models.items(): + pred = model.predict(invalid_none) + assert pred[0] in [0, 1], f"{model_name}: should still return valid binary prediction" diff --git a/tests/test_heart_data/processed_test.py b/tests/test_heart_data/processed_test.py new file mode 100644 index 0000000000000000000000000000000000000000..2714a422e0e7e50f6f47c00d1c9e4e86647bd64a --- /dev/null +++ b/tests/test_heart_data/processed_test.py @@ -0,0 +1,101 @@ +import great_expectations as gx +import pandas as pd +from predicting_outcomes_in_heart_failure.config import ( + ASSET_NAME, + PREPROCESSED_CSV, + SOURCE_NAME, + SUITE_NAME, +) +from util import set_gx, show_results + + +def run_test(): + suite.add_expectation( + gx.expectations.ExpectTableColumnCountToEqual(value=len(expected_columns)) + ) + + for col in expected_columns: + suite.add_expectation(gx.expectations.ExpectColumnToExist(column=col)) + suite.add_expectation(gx.expectations.ExpectColumnValuesToNotBeNull(column=col)) + + for col in ["Age", "RestingBP", "Cholesterol", "MaxHR", "Oldpeak"]: + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeOfType(column=col, type_="float") + ) + suite.add_expectation( + gx.expectations.ExpectColumnMeanToBeBetween(column=col, min_value=-0.1, max_value=0.1) + ) + suite.add_expectation( + gx.expectations.ExpectColumnStdevToBeBetween(column=col, min_value=0.9, max_value=1.1) + ) + + for col in ["Sex", "FastingBS", "ExerciseAngina", "HeartDisease"]: + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeInSet(column=col, value_set=[0, 1]) + ) + + for col in [ + "ChestPainType_ASY", + "ChestPainType_ATA", + "ChestPainType_NAP", + "ChestPainType_TA", + "RestingECG_LVH", + "RestingECG_Normal", + "RestingECG_ST", + "ST_Slope_Down", + "ST_Slope_Flat", + "ST_Slope_Up", + ]: + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeInSet(column=col, value_set=[True, False]) + ) + + context.suites.add_or_update(suite) + validation_definition = context.validation_definitions.add( + gx.core.validation_definition.ValidationDefinition( + name=ASSET_NAME + "_validation_processed", + data=batch_definition, + suite=suite, + ) + ) + + checkpoint = context.checkpoints.add( + gx.checkpoint.checkpoint.Checkpoint( + name=ASSET_NAME + "_checkpoint_validation_processed", + validation_definitions=[validation_definition], + ) + ) + + checkpoint_result = checkpoint.run(batch_parameters={"dataframe": df}) + show_results(checkpoint_result) + + +if __name__ == "__main__": + df = pd.read_csv(PREPROCESSED_CSV) + context, suite, batch_definition = set_gx( + SOURCE_NAME + "_processed", ASSET_NAME + "_processed", SUITE_NAME + "_processed" + ) + + features_columns = [ + "Age", + "Sex", + "RestingBP", + "Cholesterol", + "FastingBS", + "MaxHR", + "ExerciseAngina", + "Oldpeak", + "ChestPainType_ASY", + "ChestPainType_ATA", + "ChestPainType_NAP", + "ChestPainType_TA", + "RestingECG_LVH", + "RestingECG_Normal", + "RestingECG_ST", + "ST_Slope_Down", + "ST_Slope_Flat", + "ST_Slope_Up", + ] + + expected_columns = features_columns + ["HeartDisease"] + run_test() diff --git a/tests/test_heart_data/raw_test.py b/tests/test_heart_data/raw_test.py new file mode 100644 index 0000000000000000000000000000000000000000..4249e200201a3075ccddb67afe324d243eb976f7 --- /dev/null +++ b/tests/test_heart_data/raw_test.py @@ -0,0 +1,116 @@ +import great_expectations as gx +import pandas as pd +from predicting_outcomes_in_heart_failure.config import ( + ASSET_NAME, + RAW_PATH, + SOURCE_NAME, + SUITE_NAME, +) +from util import set_gx, show_results + + +def run_test(): + suite.add_expectation( + gx.expectations.ExpectTableColumnCountToEqual(value=len(expected_columns)) + ) + + for col in expected_columns: + suite.add_expectation(gx.expectations.ExpectColumnToExist(column=col)) + suite.add_expectation(gx.expectations.ExpectColumnValuesToNotBeNull(column=col)) + + for col in ["Age", "RestingBP", "Cholesterol", "MaxHR", "Oldpeak"]: + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeOfType( + column=col, type_="float" if col == "Oldpeak" else "int" + ) + ) + + for col in ["Sex", "ChestPainType", "RestingECG", "ST_Slope"]: + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeOfType(column=col, type_="str") + ) + + for col in ["FastingBS", "HeartDisease"]: + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeInSet(column=col, value_set=[0, 1]) + ) + + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeInSet(column="Sex", value_set=["M", "F"]) + ) + + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeInSet(column="ExerciseAngina", value_set=["N", "Y"]) + ) + + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeInSet( + column="ST_Slope", value_set=["Flat", "Up", "Down"] + ) + ) + + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeInSet( + column="RestingECG", value_set=["Normal", "LVH", "ST"] + ) + ) + + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeInSet( + column="ChestPainType", value_set=["ASY", "NAP", "ATA", "TA"] + ) + ) + + suite.add_expectation( + gx.expectations.ExpectCompoundColumnsToBeUnique(column_list=features_columns) + ) + + suite.add_expectation( + gx.expectations.ExpectCompoundColumnsToBeUnique(column_list=expected_columns) + ) + + suite.add_expectation( + gx.expectations.ExpectColumnValuesToBeBetween(column="Age", min_value=18) + ) + + context.suites.add_or_update(suite) + validation_definition = context.validation_definitions.add( + gx.core.validation_definition.ValidationDefinition( + name=ASSET_NAME + "_validation_raw", + data=batch_definition, + suite=suite, + ) + ) + + checkpoint = context.checkpoints.add( + gx.checkpoint.checkpoint.Checkpoint( + name=ASSET_NAME + "_checkpoint_raw", + validation_definitions=[validation_definition], + ) + ) + + checkpoint_result = checkpoint.run(batch_parameters={"dataframe": df}) + show_results(checkpoint_result) + + +if __name__ == "__main__": + df = pd.read_csv(RAW_PATH) + context, suite, batch_definition = set_gx( + SOURCE_NAME + "_raw", ASSET_NAME + "_raw", SUITE_NAME + "_raw" + ) + + features_columns = [ + "Age", + "Sex", + "ChestPainType", + "RestingBP", + "Cholesterol", + "FastingBS", + "RestingECG", + "MaxHR", + "ExerciseAngina", + "Oldpeak", + "ST_Slope", + ] + expected_columns = features_columns + ["HeartDisease"] + run_test() diff --git a/tests/test_heart_data/util.py b/tests/test_heart_data/util.py new file mode 100644 index 0000000000000000000000000000000000000000..a3175808a0c9dfab42000ec0e5726bdb3ebc7a5f --- /dev/null +++ b/tests/test_heart_data/util.py @@ -0,0 +1,43 @@ +import json + +import great_expectations as gx +from loguru import logger + + +def set_gx(source_name, asset_name, suite_name): + context = gx.get_context() + + data_source = context.data_sources.add_pandas(name=source_name) + data_asset = data_source.add_dataframe_asset(name=asset_name) + + batch_definition = data_asset.add_batch_definition_whole_dataframe("batch_definition") + + suite = context.suites.add( + gx.core.expectation_suite.ExpectationSuite( + name=suite_name, + ) + ) + return context, suite, batch_definition + + +def show_results(checkpoint_result): + result = json.loads(checkpoint_result.describe()) + + for i, v in enumerate(result.get("validation_results", []), 1): + logger.info(f"Validation {i}, {v['success']}") + + for e in v.get("expectations", []): + name = e["expectation_type"] + kwargs = e.get("kwargs", {}) + col = kwargs.get("column") + success = e["success"] + logger.info(f"{col}: {name} -> {success}") + + if not success: + logger.warning(kwargs) + logger.warning(e.get("result")) + + if result.get("success"): + logger.success(f"Overall success: {result.get('success')}") + else: + logger.error(f"Overall success: {result.get('success')}") diff --git a/tests/test_predicting_outcomes_in_heart_failure/app/routers/model_info_test.py b/tests/test_predicting_outcomes_in_heart_failure/app/routers/model_info_test.py new file mode 100644 index 0000000000000000000000000000000000000000..7b159b74f91c481437000faca4269f27bbde80fe --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/app/routers/model_info_test.py @@ -0,0 +1,53 @@ +from http import HTTPStatus + +from fastapi.testclient import TestClient +from predicting_outcomes_in_heart_failure.app.main import app + +client = TestClient(app) + + +def test_model_hyperparameters(): + response = client.get("/model/hyperparameters") + assert response.status_code in (HTTPStatus.OK, HTTPStatus.NOT_FOUND) + + body = response.json() + + if response.status_code == HTTPStatus.OK: + assert body["status-code"] == HTTPStatus.OK.value + data = body["data"] + assert "model_path" in data + assert "hyperparameters" in data + + hyper = data["hyperparameters"] + assert "model_name" in hyper + assert "data_variant" in hyper + assert "cv" in hyper + assert "features" in hyper + else: + assert body["status-code"] == HTTPStatus.NOT_FOUND.value + assert "data" in body + assert "detail" in body["data"] + + +def test_model_metrics(): + response = client.get("/model/metrics") + assert response.status_code in (HTTPStatus.OK, HTTPStatus.NOT_FOUND) + + body = response.json() + + if response.status_code == HTTPStatus.OK: + assert body["status-code"] == HTTPStatus.OK.value + data = body["data"] + assert "model_path" in data + assert "model_name" in data + assert "variant" in data + assert "metrics" in data + + metrics = data["metrics"] + assert any( + key in metrics for key in ("test_f1", "test_accuracy", "test_recall", "test_roc_auc") + ) + else: + assert body["status-code"] == HTTPStatus.NOT_FOUND.value + assert "data" in body + assert "detail" in body["data"] diff --git a/tests/test_predicting_outcomes_in_heart_failure/app/routers/prediction_test.py b/tests/test_predicting_outcomes_in_heart_failure/app/routers/prediction_test.py new file mode 100644 index 0000000000000000000000000000000000000000..87bfe76fe973205633c94f407ace4554c237308c --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/app/routers/prediction_test.py @@ -0,0 +1,171 @@ +from http import HTTPStatus + +from fastapi.testclient import TestClient +import joblib +from predicting_outcomes_in_heart_failure.app.main import app +from predicting_outcomes_in_heart_failure.config import MODEL_PATH +import pytest + +client = TestClient(app) + +SINGLE_SAMPLE = { + "Age": 45, + "ChestPainType": "TA", + "RestingBP": 120, + "Cholesterol": 200, + "FastingBS": 0, + "RestingECG": "Normal", + "MaxHR": 150, + "ExerciseAngina": "N", + "Oldpeak": 0.0, + "ST_Slope": "Up", +} + +BATCH_PAYLOAD = [ + { + "Age": 45, + "ChestPainType": "TA", + "RestingBP": 120, + "Cholesterol": 200, + "FastingBS": 0, + "RestingECG": "Normal", + "MaxHR": 150, + "ExerciseAngina": "N", + "Oldpeak": 0.0, + "ST_Slope": "Up", + }, + { + "Age": 67, + "ChestPainType": "ASY", + "RestingBP": 160, + "Cholesterol": 280, + "FastingBS": 1, + "RestingECG": "LVH", + "MaxHR": 105, + "ExerciseAngina": "Y", + "Oldpeak": 2.5, + "ST_Slope": "Flat", + }, +] + + +@pytest.fixture +def ensure_model_loaded(): + """ + Fixture that ensures app.state.model is loaded + before running the test. + """ + if not hasattr(app.state, "model") or app.state.model is None: + app.state.model = joblib.load(MODEL_PATH) + yield + + +def test_predictions_single_ok(ensure_model_loaded): + """Test the /predictions endpoint with a single valid example.""" + response = client.post("/predictions", json=SINGLE_SAMPLE) + + assert response.status_code == HTTPStatus.OK + + body = response.json() + assert body["status-code"] == HTTPStatus.OK.value + assert body["method"] == "POST" + assert "timestamp" in body + assert "url" in body + assert "data" in body + + data = body["data"] + + # input must match payload + assert data["input"] == SINGLE_SAMPLE + + # prediction must be an integer 0/1 + assert isinstance(data["prediction"], int) + assert data["prediction"] in (0, 1) + + +def test_predict_batch_two_samples_ok(ensure_model_loaded): + """Test /predict-batch with two examples.""" + response = client.post("/batch-predictions", json=BATCH_PAYLOAD) + + assert response.status_code == HTTPStatus.OK + + body = response.json() + + assert body["status-code"] == HTTPStatus.OK.value + assert body["method"] == "POST" + assert "data" in body + + data = body["data"] + + # batch_size coerente con la lunghezza del payload + assert data["batch_size"] == len(BATCH_PAYLOAD) + + results = data["results"] + assert isinstance(results, list) + assert len(results) == len(BATCH_PAYLOAD) + + # Check every element of the batch + for idx, item in enumerate(results): + assert item["index"] == idx + assert item["input"] == BATCH_PAYLOAD[idx] + assert isinstance(item["prediction"], int) + assert item["prediction"] in (0, 1) + + +def test_explanations_single_ok(ensure_model_loaded): + """Test /explanations with a single example.""" + response = client.post("/explanations", json=SINGLE_SAMPLE) + + assert response.status_code == HTTPStatus.OK + + body = response.json() + + assert body["status-code"] == HTTPStatus.OK.value + assert body["method"] == "POST" + assert "data" in body + + data = body["data"] + assert data["input"] == SINGLE_SAMPLE + + if "explanations" in data: + assert isinstance(data["explanations"], list) + + if "explanation_plot_url" in data: + assert isinstance(data["explanation_plot_url"], str) + assert data["explanation_plot_url"].startswith("/figures/") + + +def test_predictions_model_not_loaded(): + """ + Verify that when the model is missing from app.state, the endpoint returns + a 503 status-code inside the response payload while keeping HTTP 200. + """ + app.state.model = None + + response = client.post("/predictions", json=SINGLE_SAMPLE) + assert response.status_code == HTTPStatus.OK + + body = response.json() + assert body["status-code"] == HTTPStatus.SERVICE_UNAVAILABLE.value + assert body["data"]["detail"] == "Model is not loaded." + + +def test_predictions_invalid_type(): + """ + Ensure that invalid field types (e.g., Age as string) trigger FastAPI/Pydantic + validation and return HTTP 422 instead of reaching the endpoint logic. + """ + bad_payload = SINGLE_SAMPLE.copy() + bad_payload["Age"] = "not_a_number" + + response = client.post("/predictions", json=bad_payload) + assert response.status_code == HTTPStatus.UNPROCESSABLE_ENTITY + + body = response.json() + assert "status-code" not in body + assert "data" not in body + assert "detail" in body + + errors = body["detail"] + assert isinstance(errors, list) + assert len(errors) > 0 diff --git a/tests/test_predicting_outcomes_in_heart_failure/app/schema_test.py b/tests/test_predicting_outcomes_in_heart_failure/app/schema_test.py new file mode 100644 index 0000000000000000000000000000000000000000..fc09456172bc7a8a66adc44302965e59e888e66e --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/app/schema_test.py @@ -0,0 +1,84 @@ +from __future__ import annotations + +import pandas as pd +from predicting_outcomes_in_heart_failure.app.schema import HeartSample +import pytest + + +def test_heartsample_valid_creation(): + """HeartSample should be created correctly with valid input data.""" + sample = HeartSample( + Age=50, + ChestPainType="ATA", + RestingBP=120, + Cholesterol=220, + FastingBS=0, + RestingECG="Normal", + MaxHR=160, + ExerciseAngina="N", + Oldpeak=1.23456, + ST_Slope="Up", + ) + + assert sample.Age == 50 + assert sample.ChestPainType == "ATA" + assert sample.RestingBP == 120 + assert sample.Cholesterol == 220 + + +def test_heartsample_round_oldpeak(): + """Oldpeak should be rounded to 2 decimal places by the field validator.""" + sample = HeartSample( + Age=50, + ChestPainType="ASY", + RestingBP=110, + Cholesterol=200, + FastingBS=1, + RestingECG="ST", + MaxHR=150, + ExerciseAngina="Y", + Oldpeak=1.2367, + ST_Slope="Flat", + ) + + assert sample.Oldpeak == 1.24 + + +def test_heartsample_invalid_literal(): + """Invalid literal values should raise a ValueError during validation.""" + with pytest.raises(ValueError): + HeartSample( + Age="Quaranta", + ChestPainType="ATA", + RestingBP=120, + Cholesterol=200, + FastingBS=0, + RestingECG="Normal", + MaxHR=150, + ExerciseAngina="N", + Oldpeak=0.5, + ST_Slope="Up", + ) + + +def test_heartsample_to_dataframe(): + """to_dataframe() should return a single-row DataFrame with all fields.""" + sample = HeartSample( + Age=60, + ChestPainType="NAP", + RestingBP=130, + Cholesterol=210, + FastingBS=1, + RestingECG="LVH", + MaxHR=140, + ExerciseAngina="Y", + Oldpeak=2.0, + ST_Slope="Down", + ) + + df = sample.to_dataframe() + + assert isinstance(df, pd.DataFrame) + assert df.shape == (1, len(sample.model_dump())) + assert df.loc[0, "Age"] == 60 + assert df.loc[0, "ST_Slope"] == "Down" diff --git a/tests/test_predicting_outcomes_in_heart_failure/data/preprocess_test.py b/tests/test_predicting_outcomes_in_heart_failure/data/preprocess_test.py new file mode 100644 index 0000000000000000000000000000000000000000..fe49cda8b93e0daa2875614b881fc5d3135fa08d --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/data/preprocess_test.py @@ -0,0 +1,523 @@ +import joblib +import numpy as np +import pandas as pd +from predicting_outcomes_in_heart_failure.data.preprocess import ( + generate_gender_splits, + preprocessing, + save_scaler_artifact, +) +import pytest +from sklearn.preprocessing import StandardScaler + + +@pytest.fixture +def mock_paths(monkeypatch, tmp_path): + import predicting_outcomes_in_heart_failure.data.preprocess as preprocess_module + + artifacts_dir = tmp_path / "artifacts" + monkeypatch.setattr(preprocess_module, "PREPROCESS_ARTIFACTS_DIR", artifacts_dir) + monkeypatch.setattr(preprocess_module, "SCALER_PATH", artifacts_dir / "scaler.pkl") + monkeypatch.setattr(preprocess_module, "FEMALE_CSV", tmp_path / "female.csv") + monkeypatch.setattr(preprocess_module, "MALE_CSV", tmp_path / "male.csv") + monkeypatch.setattr(preprocess_module, "NOSEX_CSV", tmp_path / "nosex.csv") + monkeypatch.setattr(preprocess_module, "RAW_PATH", tmp_path / "raw" / "heart.csv") + monkeypatch.setattr(preprocess_module, "PREPROCESSED_CSV", tmp_path / "preprocessed.csv") + monkeypatch.setattr(preprocess_module, "TARGET_COL", "HeartDisease") + monkeypatch.setattr( + preprocess_module, + "NUM_COLS_DEFAULT", + ["Age", "RestingBP", "Cholesterol", "MaxHR", "Oldpeak"], + ) + + return tmp_path + + +class TestSaveScalerArtifact: + def test_save_scaler_creates_directory(self, mock_paths): + """ + Test that the function creates the artifacts directory if it doesn't exist. + """ + + scaler = StandardScaler() + scaler.fit([[0, 0], [1, 1]]) + + save_scaler_artifact(scaler) + + assert (mock_paths / "artifacts").exists() + assert (mock_paths / "artifacts" / "scaler.pkl").exists() + + def test_save_scaler_saves_correctly(self, mock_paths): + """ + Test that the scaler is saved and can be loaded back. + """ + + scaler = StandardScaler() + test_data = [[0, 0], [1, 1], [2, 2]] + scaler.fit(test_data) + + save_scaler_artifact(scaler) + + loaded_scaler = joblib.load(mock_paths / "artifacts" / "scaler.pkl") + assert isinstance(loaded_scaler, StandardScaler) + np.testing.assert_array_almost_equal(loaded_scaler.mean_, scaler.mean_) + np.testing.assert_array_almost_equal(loaded_scaler.scale_, scaler.scale_) + + def test_save_scaler_overwrites_existing(self, mock_paths): + """ + Test that saving a scaler overwrites an existing one. + """ + + scaler1 = StandardScaler() + scaler1.fit([[0, 0], [1, 1]]) + save_scaler_artifact(scaler1) + + scaler2 = StandardScaler() + scaler2.fit([[10, 10], [20, 20]]) + save_scaler_artifact(scaler2) + + loaded_scaler = joblib.load(mock_paths / "artifacts" / "scaler.pkl") + np.testing.assert_array_almost_equal(loaded_scaler.mean_, scaler2.mean_) + + def test_save_unfitted_scaler(self, mock_paths): + """ + Test saving an unfitted scaler. + """ + + scaler = StandardScaler() + save_scaler_artifact(scaler) + + loaded_scaler = joblib.load(mock_paths / "artifacts" / "scaler.pkl") + assert isinstance(loaded_scaler, StandardScaler) + assert not hasattr(loaded_scaler, "mean_") + + +class TestGenerateGenderSplits: + @pytest.fixture + def sample_df_with_sex(self): + """ + Balanced dataset including Sex column. + """ + + return pd.DataFrame( + { + "Age": [45, 50, 55, 60, 65], + "Sex": [0, 1, 0, 1, 0], + "Cholesterol": [200, 220, 180, 240, 210], + "HeartDisease": [0, 1, 0, 1, 1], + } + ) + + @pytest.fixture + def sample_df_without_sex(self): + """ + Dataset missing Sex column. + """ + + return pd.DataFrame( + {"Age": [45, 50, 55], "Cholesterol": [200, 220, 180], "HeartDisease": [0, 1, 0]} + ) + + def test_creates_all_three_splits(self, mock_paths, sample_df_with_sex): + """ + Test that all three CSV files are created. + """ + + generate_gender_splits(sample_df_with_sex) + + assert (mock_paths / "female.csv").exists() + assert (mock_paths / "male.csv").exists() + assert (mock_paths / "nosex.csv").exists() + + def test_female_split_correct_rows(self, mock_paths, sample_df_with_sex): + """ + Test that female split contains only Sex==0 rows. + """ + + generate_gender_splits(sample_df_with_sex) + + df_female = pd.read_csv(mock_paths / "female.csv") + assert len(df_female) == 3 + assert all(df_female["Sex"] == 0) + + def test_male_split_correct_rows(self, mock_paths, sample_df_with_sex): + """ + Test that male split contains only Sex==1 rows. + """ + + generate_gender_splits(sample_df_with_sex) + + df_male = pd.read_csv(mock_paths / "male.csv") + assert len(df_male) == 2 + assert all(df_male["Sex"] == 1) + + def test_nosex_split_removes_sex_column(self, mock_paths, sample_df_with_sex): + """ + Test that nosex split doesn't contain Sex column. + """ + + generate_gender_splits(sample_df_with_sex) + + df_nosex = pd.read_csv(mock_paths / "nosex.csv") + assert "Sex" not in df_nosex.columns + assert len(df_nosex) == 5 + + def test_no_sex_column_in_input(self, mock_paths, sample_df_without_sex): + """ + Test behavior when input DataFrame has no Sex column. + """ + + generate_gender_splits(sample_df_without_sex) + + assert ( + not (mock_paths / "female.csv").exists() + or len(pd.read_csv(mock_paths / "female.csv")) == 0 + ) + + df_nosex = pd.read_csv(mock_paths / "nosex.csv") + assert len(df_nosex) == 3 + + def test_empty_dataframe(self, mock_paths): + """ + Test with an empty DataFrame. + """ + + df_empty = pd.DataFrame(columns=["Age", "Sex", "Cholesterol"]) + generate_gender_splits(df_empty) + + df_nosex = pd.read_csv(mock_paths / "nosex.csv") + assert len(df_nosex) == 0 + + def test_all_female_dataset(self, mock_paths): + """ + Test with dataset containing only females. + """ + + df = pd.DataFrame({"Age": [45, 50, 55], "Sex": [0, 0, 0], "Cholesterol": [200, 220, 180]}) + + generate_gender_splits(df) + + df_female = pd.read_csv(mock_paths / "female.csv") + df_male = pd.read_csv(mock_paths / "male.csv") + + assert len(df_female) == 3 + assert len(df_male) == 0 + + def test_preserves_all_columns_except_sex(self, mock_paths, sample_df_with_sex): + """ + Test that all columns except Sex are preserved in nosex split. + """ + + generate_gender_splits(sample_df_with_sex) + + df_nosex = pd.read_csv(mock_paths / "nosex.csv") + expected_cols = [col for col in sample_df_with_sex.columns if col != "Sex"] + + assert list(df_nosex.columns) == expected_cols + + +class TestPreprocessing: + @pytest.fixture + def raw_heart_data(self): + """ + Fixture with heart disease dataset. + """ + + return pd.DataFrame( + { + "Age": [40, 50, 60, 45, 55], + "Sex": ["M", "F", "M", "F", "M"], + "ChestPainType": ["ATA", "NAP", "ASY", "ATA", "NAP"], + "RestingBP": [120, 130, 0, 140, 125], + "Cholesterol": [200, 0, 250, 0, 220], + "MaxHR": [150, 160, 140, 155, 145], + "ExerciseAngina": ["N", "Y", "N", "Y", "N"], + "Oldpeak": [1.0, 2.0, 1.5, 2.5, 1.2], + "ST_Slope": ["Up", "Flat", "Down", "Up", "Flat"], + "RestingECG": ["Normal", "ST", "Normal", "LVH", "Normal"], + "HeartDisease": [0, 1, 1, 0, 1], + } + ) + + def test_preprocessing_removes_invalid_restingbp(self, mock_paths, raw_heart_data): + """ + Test that rows with RestingBP==0 are removed. + """ + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + raw_heart_data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + df = preprocessing() + + assert len(df) == 4 + assert all(df["RestingBP"] != 0) + + @pytest.mark.parametrize( + "sex_input,sex_expected", + [ + ("M", 1), + ("F", 0), + ], + ) + def test_preprocessing_encodes_sex(self, mock_paths, raw_heart_data, sex_input, sex_expected): + """ + Test that Sex is correctly encoded as binary. + """ + + data = raw_heart_data.copy() + data["Sex"] = sex_input + data["RestingBP"] = 120 + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + df = preprocessing() + assert all(df["Sex"] == sex_expected) + + @pytest.mark.parametrize( + "exercise_input,exercise_expected", + [ + ("Y", 1), + ("N", 0), + ], + ) + def test_preprocessing_encodes_exercise_angina( + self, mock_paths, raw_heart_data, exercise_input, exercise_expected + ): + """ + Test that ExerciseAngina is correctly encoded as binary. + """ + + data = raw_heart_data.copy() + data["ExerciseAngina"] = exercise_input + data["RestingBP"] = 120 + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + df = preprocessing() + + assert all(df["ExerciseAngina"] == exercise_expected) + + def test_preprocessing_one_hot_encoding(self, mock_paths, raw_heart_data): + """ + Test that categorical features are encoded. + """ + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + raw_heart_data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + df = preprocessing() + + assert "ChestPainType" not in df.columns + assert "RestingECG" not in df.columns + assert "ST_Slope" not in df.columns + + assert any("ChestPainType_" in col for col in df.columns) + assert any("RestingECG_" in col for col in df.columns) + assert any("ST_Slope_" in col for col in df.columns) + + def test_preprocessing_scales_numerical_features(self, mock_paths, raw_heart_data): + """ + Test that numerical features are scaled. + """ + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + raw_heart_data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + df = preprocessing() + + for col in ["Age", "MaxHR", "Oldpeak"]: + if col in df.columns: + assert abs(df[col].mean()) < 0.1 + assert abs(df[col].std() - 1.0) < 0.2 + + def test_preprocessing_saves_scaler(self, mock_paths, raw_heart_data): + """ + Test that the fitted scaler is saved. + """ + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + raw_heart_data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + preprocessing() + + assert (mock_paths / "artifacts" / "scaler.pkl").exists() + + scaler = joblib.load(mock_paths / "artifacts" / "scaler.pkl") + assert isinstance(scaler, StandardScaler) + assert hasattr(scaler, "mean_") + + def test_preprocessing_saves_csv(self, mock_paths, raw_heart_data): + """ + Test that preprocessed CSV is saved. + """ + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + raw_heart_data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + preprocessing() + + assert (mock_paths / "preprocessed.csv").exists() + + df = pd.read_csv(mock_paths / "preprocessed.csv") + assert len(df) > 0 + assert "HeartDisease" in df.columns + + def test_preprocessing_preserves_target(self, mock_paths, raw_heart_data): + """ + Test that target column is preserved and not scaled. + """ + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + raw_heart_data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + df = preprocessing() + + assert "HeartDisease" in df.columns + assert set(df["HeartDisease"].unique()).issubset({0, 1}) + + def test_preprocessing_missing_raw_file(self, mock_paths): + """ + Test that FileNotFoundError is raised when raw file is missing. + """ + + with pytest.raises(FileNotFoundError): + preprocessing() + + def test_preprocessing_empty_dataset(self, mock_paths): + """ + Test behavior with an empty dataset. + """ + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + + empty_df = pd.DataFrame( + columns=[ + "Age", + "Sex", + "ChestPainType", + "RestingBP", + "Cholesterol", + "MaxHR", + "ExerciseAngina", + "Oldpeak", + "ST_Slope", + "RestingECG", + "HeartDisease", + ] + ) + empty_df.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + with pytest.raises(ValueError): + preprocessing() + + def test_preprocessing_returns_dataframe(self, mock_paths, raw_heart_data): + """ + Test that preprocessing returns a pandas DataFrame. + """ + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + raw_heart_data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + result = preprocessing() + + assert isinstance(result, pd.DataFrame) + assert len(result) > 0 + + def test_preprocessing_all_cholesterol_zero(self, mock_paths, raw_heart_data): + """ + Test edge case where all Cholesterol values are 0, NaN returned. + """ + + data = raw_heart_data.copy() + data["Cholesterol"] = 0 + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + df = preprocessing() + + assert df["Cholesterol"].isna().all() + + def test_preprocessing_target_as_integer(self, mock_paths, raw_heart_data): + """ + Test that target is converted to integer type. + """ + + data = raw_heart_data.copy() + data["HeartDisease"] = data["HeartDisease"].astype(float) + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + df = preprocessing() + + assert df["HeartDisease"].dtype == np.int64 or df["HeartDisease"].dtype == np.int32 + + def test_preprocessing_single_row(self, mock_paths): + """ + Test that preprocessing raises an error when the dataset contains only one row. + """ + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + + single_row = pd.DataFrame( + { + "Age": [50], + "Sex": ["M"], + "ChestPainType": ["ATA"], + "RestingBP": [120], + "Cholesterol": [200], + "MaxHR": [150], + "ExerciseAngina": ["N"], + "Oldpeak": [1.0], + "ST_Slope": ["Up"], + "RestingECG": ["Normal"], + "HeartDisease": [0], + } + ) + single_row.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + with pytest.raises(ValueError): + preprocessing() + + +class TestPreprocessingIntegration: + """ + Integration tests for the full preprocessing. + """ + + def test_full_pipeline_with_splits(self, mock_paths): + data = pd.DataFrame( + { + "Age": [40, 50, 60, 45, 55, 35], + "Sex": ["M", "F", "M", "F", "M", "F"], + "ChestPainType": ["ATA", "NAP", "ASY", "ATA", "NAP", "ASY"], + "RestingBP": [120, 130, 140, 135, 125, 128], + "Cholesterol": [200, 210, 250, 230, 220, 205], + "MaxHR": [150, 160, 140, 155, 145, 158], + "ExerciseAngina": ["N", "Y", "N", "Y", "N", "Y"], + "Oldpeak": [1.0, 2.0, 1.5, 2.5, 1.2, 1.8], + "ST_Slope": ["Up", "Flat", "Down", "Up", "Flat", "Down"], + "RestingECG": ["Normal", "ST", "Normal", "LVH", "Normal", "ST"], + "HeartDisease": [0, 1, 1, 0, 1, 0], + } + ) + + (mock_paths / "raw").mkdir(parents=True, exist_ok=True) + data.to_csv(mock_paths / "raw" / "heart.csv", index=False) + + df = preprocessing() + generate_gender_splits(df) + + assert (mock_paths / "preprocessed.csv").exists() + assert (mock_paths / "female.csv").exists() + assert (mock_paths / "male.csv").exists() + assert (mock_paths / "nosex.csv").exists() + assert (mock_paths / "artifacts" / "scaler.pkl").exists() + + df_female = pd.read_csv(mock_paths / "female.csv") + df_male = pd.read_csv(mock_paths / "male.csv") + + assert len(df_female) == 3 + assert len(df_male) == 3 diff --git a/tests/test_predicting_outcomes_in_heart_failure/data/split_data_test.py b/tests/test_predicting_outcomes_in_heart_failure/data/split_data_test.py new file mode 100644 index 0000000000000000000000000000000000000000..72f41e80f1eca961347bf41a00d5d486e5055ef8 --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/data/split_data_test.py @@ -0,0 +1,144 @@ +from unittest.mock import patch + +from loguru import logger +import pandas as pd +from predicting_outcomes_in_heart_failure.data.split_data import ( + TARGET_COL, + VARIANTS, + _safe_train_test_split, + split_one, +) +import pytest + + +# TEST: split_one() +@pytest.fixture +def csv_dir(tmp_path): + """ + Create a temporary directory with mock CSV files for all variants. + """ + + paths = {} + for variant, csv_name in VARIANTS.items(): + path = tmp_path / csv_name.name + + df = pd.DataFrame( + { + "feature1": [1, 2, 3, 4], + "feature2": [10, 20, 30, 40], + TARGET_COL: [0, 1, 0, 1], + } + ) + df.to_csv(path, index=False) + paths[variant] = path + return paths + + +@pytest.mark.parametrize("variant", ["all", "female", "male", "nosex"]) +def test_split_one_creates_files(csv_dir, tmp_path, variant): + """ + Test that split_one creates train/test CSV files correctly. + """ + + csv_path = csv_dir[variant] + out_dir = tmp_path / "processed" / variant + + with patch( + "predicting_outcomes_in_heart_failure.data.split_data.PROCESSED_DATA_DIR", + tmp_path / "processed", + ): + split_one(csv_path, variant) + + train_file = out_dir / "train.csv" + test_file = out_dir / "test.csv" + + assert train_file.exists() + assert test_file.exists() + + train_df = pd.read_csv(train_file) + test_df = pd.read_csv(test_file) + + assert TARGET_COL in train_df.columns + assert TARGET_COL in test_df.columns + + assert len(train_df) + len(test_df) == 4 + assert set(train_df[TARGET_COL].unique()).issubset({0, 1}) + assert set(test_df[TARGET_COL].unique()).issubset({0, 1}) + + +@pytest.mark.parametrize("variant", ["all", "female", "male", "nosex"]) +def test_split_one_missing_csv_raises(tmp_path, variant): + """ + Test that split_one outputs a warning log when CSV is missing. + """ + + from loguru import logger + + log_messages = [] + missing_csv = tmp_path / f"missing_{variant}.csv" + handler_id = logger.add(log_messages.append, level="WARNING") + + try: + split_one(missing_csv, variant) + finally: + logger.remove(handler_id) + + assert any("Missing CSV file" in msg for msg in log_messages) + + +class LogCapture: + def __init__(self): + self.messages = [] + + def __call__(self, message): + self.messages.append(message) + + +@pytest.mark.parametrize( + "X, y, expected_classes, log_level, log_text", + [ + ( + pd.DataFrame({"a": [1, 2, 3, 4]}), + pd.Series([0, 1, 0, 1]), + {0, 1}, + "DEBUG", + "Stratified split executed successfully", + ), + ( + pd.DataFrame({"a": [1, 2, 3, 4]}), + pd.Series([0, 0, 0, 0]), + {0}, + "WARNING", + "Target has only one class", + ), + ], +) +def test_safe_train_test_split_basic(X, y, expected_classes, log_level, log_text): + log_capture = LogCapture() + handler_id = logger.add(log_capture, level=log_level) + + try: + X_tr, X_te, y_tr, _ = _safe_train_test_split(X, y, test_size=0.5, random_state=42) + finally: + logger.remove(handler_id) + + assert len(X_tr) + len(X_te) == len(X) + assert set(y_tr).issubset(expected_classes) + assert any(log_text in msg for msg in log_capture.messages) + + +def test_safe_train_test_split_fallback_exception(): + X = pd.DataFrame({"a": [1, 2, 3, 4]}) + y = pd.Series([0, 0, 1, 1]) + + test_size = 0.75 + log_capture = [] + handler_id = logger.add(lambda msg: log_capture.append(msg), level="WARNING") + + try: + X_tr, X_te, _, _ = _safe_train_test_split(X, y, test_size=test_size, random_state=42) + finally: + logger.remove(handler_id) + + assert len(X_tr) + len(X_te) == len(X) + assert any("Falling back to non-stratified split" in msg for msg in log_capture) diff --git a/tests/test_predicting_outcomes_in_heart_failure/modeling/conftest.py b/tests/test_predicting_outcomes_in_heart_failure/modeling/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..1fb81c863c750f357934bff3ca6d7f6766ab2353 --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/modeling/conftest.py @@ -0,0 +1,228 @@ +from io import StringIO +from types import SimpleNamespace + +import joblib +import pandas as pd +from predicting_outcomes_in_heart_failure.config import MODELS_DIR, TARGET_COL +from predicting_outcomes_in_heart_failure.modeling import evaluate +import pytest + +TEST_PROCESSED_CSV = ( + "Age,Sex,RestingBP,Cholesterol,FastingBS,MaxHR,ExerciseAngina,Oldpeak,HeartDisease," + "ChestPainType_ASY,ChestPainType_ATA,ChestPainType_NAP,ChestPainType_TA," + "RestingECG_LVH,RestingECG_Normal,RestingECG_ST,ST_Slope_Down,ST_Slope_Flat,ST_Slope_Up\n" + "-1.4322063372940435,1,0.41462668821399407,0.8574469341726604,0,1.3833394263306962," + "0,-0.8315022488659315,0,False,True,False,False,False,True,False,False,False,True\n" + "-0.47805724933087407,0,1.5263596504719819,-1.183717051045972,0,0.7547357326016333," + "0,0.10625148648034725,1,False,False,True,False,False,True,False,False,True,False\n" + "-1.7502560332817665,1,-0.14123979291499986,0.7450892836101669,0,-1.5239526571662194," + "0,-0.8315022488659315,0,False,True,False,False,False,False,True,False,False,True\n" + "-0.5840738146601151,0,0.30345339198819526,-0.5470236978585087,0,-1.1310753485855551," + "1,0.5751283541534866,1,True,False,False,False,False,True,False,False,True,False\n" + "0.05202557731533111,1,0.970493169342988,-0.9028229246397381,0,-0.5810471165726252," + "0,-0.8315022488659315,0,False,False,True,False,False,True,False,False,False,True\n" + "-1.5382229026232843,1,-0.6971062740439938,1.7937606888601065,0,1.3047639646145632," + "0,-0.8315022488659315,0,False,False,True,False,False,True,False,False,False,True\n" + "-0.9021235106478382,0,-0.14123979291499986,-0.11631937070228347,0,1.3047639646145632," + "0,-0.8315022488659315,0,False,True,False,False,False,True,False,False,False,True\n" + "0.05202557731533111,1,-1.2529727551729877,-0.6593813484210022,0,0.2047075005887033," + "0,-0.8315022488659315,0,False,True,False,False,False,True,False,False,False,True\n" + "-1.7502560332817665,1,0.41462668821399407,-0.6781076235147511,0,-0.2667452697080938," + "1,0.5751283541534866,1,True,False,False,False,False,True,False,False,True,False\n" +) + + +@pytest.fixture +def processed_df(): + df = pd.read_csv(StringIO(TEST_PROCESSED_CSV)) + return df + + +@pytest.fixture +def definition_X_test_and_y_test(processed_df): + df = processed_df + X_test = df.drop(columns=[TARGET_COL]) + y_test = df[TARGET_COL] + + return X_test, y_test + + +@pytest.fixture +def logreg_model(): + path = MODELS_DIR / "all" / "logreg.joblib" + model = joblib.load(path) + return model + + +@pytest.fixture +def decision_tree_model(): + path = MODELS_DIR / "all" / "decision_tree.joblib" + return joblib.load(path) + + +@pytest.fixture +def random_forest_model(): + path = MODELS_DIR / "all" / "random_forest.joblib" + return joblib.load(path) + + +@pytest.fixture +def sample_raw_df_single(): + """ + Single-row raw sample, similar to the one used in main(). + Used to test overall preprocessing shape / columns / NaNs. + """ + return pd.DataFrame( + { + "Age": [54], + "Sex": ["F"], + "ChestPainType": ["ASY"], + "RestingBP": [140], + "Cholesterol": [239], + "FastingBS": [0], + "RestingECG": ["Normal"], + "MaxHR": [160], + "ExerciseAngina": ["N"], + "Oldpeak": [0.0], + "ST_Slope": ["Up"], + } + ) + + +@pytest.fixture +def sample_raw_df_two_rows(): + """ + Two-row raw sample with variation in categorical features, + used to test binary encodings and one-hot encoding. + """ + return pd.DataFrame( + { + "Age": [50, 60], + "Sex": ["M", "F"], + "ChestPainType": ["ASY", "NAP"], + "RestingBP": [130, 140], + "Cholesterol": [220, 250], + "FastingBS": [0, 1], + "RestingECG": ["Normal", "ST"], + "MaxHR": [150, 140], + "ExerciseAngina": ["Y", "N"], + "Oldpeak": [1.0, 0.0], + "ST_Slope": ["Up", "Flat"], + } + ) + + +@pytest.fixture +def sample_raw_df_only_asy_up(): + """ + Three-row raw sample where: + - ChestPainType is always ASY + - RestingECG is always Normal + - ST_Slope is always Up + + Used to test that missing dummy columns (NAP, TA, ST, LVH, Flat, Down) + are still present and filled with zeros. + """ + return pd.DataFrame( + { + "Age": [50, 60, 55], + "Sex": ["M", "F", "M"], + "ChestPainType": ["ASY", "ASY", "ASY"], + "RestingBP": [130, 140, 135], + "Cholesterol": [220, 250, 230], + "FastingBS": [0, 1, 0], + "RestingECG": ["Normal", "Normal", "Normal"], + "MaxHR": [150, 140, 145], + "ExerciseAngina": ["Y", "N", "Y"], + "Oldpeak": [1.0, 0.0, 0.5], + "ST_Slope": ["Up", "Up", "Up"], + } + ) + + +@pytest.fixture +def dummy_logger(monkeypatch): + class DummyLogger: + def __init__(self): + self.warnings = [] + self.infos = [] + self.errors = [] + self.successes = [] + + def warning(self, msg): + self.warnings.append(msg) + + def info(self, msg): + self.infos.append(msg) + + def error(self, msg): + self.errors.append(msg) + + def success(self, msg): + self.successes.append(msg) + + logger = DummyLogger() + monkeypatch.setattr(evaluate, "logger", logger) + return logger + + +@pytest.fixture +def mlflow_no_runs(monkeypatch): + class DummyMlflow: + called_search_runs = 0 + + class data: + @staticmethod + def from_pandas(*args, **kwargs): + pytest.fail("mlflow.data.from_pandas should not be called when there are no runs") + + class sklearn: + @staticmethod + def log_model(*args, **kwargs): + pytest.fail("mlflow.sklearn.log_model should not be called when there are no runs") + + @staticmethod + def get_experiment_by_name(name): + # we SImulate an empty experiment + return SimpleNamespace(experiment_id="exp-123") + + @staticmethod + def search_runs(experiment_ids, filter_string, order_by, max_results): + DummyMlflow.called_search_runs += 1 + # Empty DataFrame → runs.empty == True + return pd.DataFrame() + + @staticmethod + def start_run(run_id): + pytest.fail("mlflow.start_run should not be called when there are no runs") + + @staticmethod + def log_input(*args, **kwargs): + pytest.fail("mlflow.log_input should not be called when there are no runs") + + @staticmethod + def log_metrics(*args, **kwargs): + pytest.fail("mlflow.log_metrics should not be called when there are no runs") + + monkeypatch.setattr(evaluate, "mlflow", DummyMlflow) + return DummyMlflow + + +@pytest.fixture +def mlflow_experiment_missing(monkeypatch): + class DummyMlflow: + called_get_experiment = 0 + called_search_runs = 0 + + @staticmethod + def get_experiment_by_name(name): + DummyMlflow.called_get_experiment += 1 + return None # not founded experiment + + @staticmethod + def search_runs(*args, **kwargs): + DummyMlflow.called_search_runs += 1 + return pd.DataFrame() + + monkeypatch.setattr(evaluate, "mlflow", DummyMlflow) + return DummyMlflow diff --git a/tests/test_predicting_outcomes_in_heart_failure/modeling/test_evaluate.py b/tests/test_predicting_outcomes_in_heart_failure/modeling/test_evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..649f52e60811eb5f28c5933cd1890d88f0fa6077 --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/modeling/test_evaluate.py @@ -0,0 +1,310 @@ +import types +from types import SimpleNamespace + +import numpy as np +import pandas as pd +from predicting_outcomes_in_heart_failure.config import TARGET_COL +from predicting_outcomes_in_heart_failure.modeling import evaluate +import pytest + + +@pytest.mark.parametrize( + "model_fixture", + ["logreg_model", "decision_tree_model", "random_forest_model"], +) +def test_compute_metrics_all_models(request, model_fixture, definition_X_test_and_y_test): + """ + Check computer_metrics works well + for all model saved in variant "all" + """ + + X_test, y_test = definition_X_test_and_y_test + + model = request.getfixturevalue(model_fixture) + + results, y_pred = evaluate.compute_metrics(model, X_test, y_test) + + # ---- ASSERTIONS ---- + assert isinstance(results, dict) + assert len(y_pred) == len(y_test) + + for key in ["test_f1", "test_recall", "test_accuracy"]: + assert key in results + + if hasattr(model, "predict_proba"): + assert "test_roc_auc" in results + assert 0.0 <= results["test_roc_auc"] <= 1.0 + else: + assert "test_roc_auc" not in results + + +class DummyModelNoProba: + def __init__(self, y_pred): + self._y_pred = np.array(y_pred) + + def predict(self, X): + return self._y_pred + + +def test_compute_metrics_without_predict_proba(): + X_test = np.array([[0], [1], [2], [3]]) + y_test = np.array([0, 1, 0, 1]) + model = DummyModelNoProba(y_pred=[0, 1, 0, 0]) + + results, y_pred = evaluate.compute_metrics(model, X_test, y_test) + + assert isinstance(results, dict) + assert len(y_pred) == len(y_test) + + assert "test_f1" in results + assert "test_recall" in results + assert "test_accuracy" in results + assert "test_roc_auc" not in results + + +def test_evaluate_variant_skips_when_models_dir_missing( + monkeypatch, + tmp_path, + sample_raw_df_two_rows, +): + """ + If MODELS_DIR / does NOT exist, + evaluate_variant should: + + - return early + - NOT call any MLflow APIs (e.g. get_experiment_by_name) + """ + variant = "all" + + def fake_load_split(path): + df = sample_raw_df_two_rows.copy() + df[TARGET_COL] = [0, 1] + return df + + monkeypatch.setattr(evaluate, "load_split", fake_load_split) + + models_root = tmp_path / "models" + models_root.mkdir() # root exists, but models_root / "all" does not + monkeypatch.setattr(evaluate, "MODELS_DIR", models_root) + + # 3) Dummy mlflow: we just count calls to get_experiment_by_name + class DummyMlflow: + called_get_experiment = 0 + + @staticmethod + def get_experiment_by_name(name): + DummyMlflow.called_get_experiment += 1 + return None + + monkeypatch.setattr(evaluate, "mlflow", DummyMlflow) + + evaluate.evaluate_variant(variant=variant, model_name=None) + + assert DummyMlflow.called_get_experiment == 0 + + +def test_evaluate_variant_skips_model_when_no_mlflow_run( + monkeypatch, + tmp_path, + processed_df, + dummy_logger, + mlflow_no_runs, +): + """ + Scenario: + - MODELS_DIR / 'all' exists and contains a .joblib model file + - mlflow.search_runs(...) returns an empty DataFrame + + We check that: + - mlflow.search_runs is called + - compute_metrics is NOT called + - a warning 'No matching MLflow run found — skipping.' is logged + """ + variant = "all" + model_name = "random_forest" + + # Fake load_split → always returns processed_df + def fake_load_split(path): + return processed_df.copy() + + monkeypatch.setattr(evaluate, "load_split", fake_load_split) + + # MODELS_DIR / with a fake .joblib file + models_root = tmp_path / "models" + models_variant_dir = models_root / variant + models_variant_dir.mkdir(parents=True) + + model_filename = f"{model_name}.joblib" + model_path = models_variant_dir / model_filename + model_path.write_bytes(b"fake-binary-content") + + monkeypatch.setattr(evaluate, "MODELS_DIR", models_root) + + # compute_metrics should NOT be called + compute_metrics_calls = {"count": 0} + + def fake_compute_metrics(model, X, y): + compute_metrics_calls["count"] += 1 + return {"test_f1": 0.5}, None + + monkeypatch.setattr(evaluate, "compute_metrics", fake_compute_metrics) + + # ACT + evaluate.evaluate_variant(variant=variant, model_name=model_name) + + # ASSERT + assert mlflow_no_runs.called_search_runs == 1 + assert compute_metrics_calls["count"] == 0 + assert any("No matching MLflow run found — skipping." in msg for msg in dummy_logger.warnings) + + +def test_evaluate_variant_returns_when_experiment_missing( + monkeypatch, + tmp_path, + sample_raw_df_two_rows, + dummy_logger, + mlflow_experiment_missing, +): + """ + If mlflow.get_experiment_by_name(...) returns None, + evaluate_variant should: + + - log an error + - return early + - NOT call mlflow.search_runs + """ + variant = "all" + + def fake_load_split(path): + df = sample_raw_df_two_rows.copy() + df[TARGET_COL] = [0, 1] + return df + + monkeypatch.setattr(evaluate, "load_split", fake_load_split) + + models_root = tmp_path / "models" + models_variant_dir = models_root / variant + models_variant_dir.mkdir(parents=True) + monkeypatch.setattr(evaluate, "MODELS_DIR", models_root) + + evaluate.evaluate_variant(variant=variant, model_name=None) + + assert mlflow_experiment_missing.called_get_experiment == 1 + assert mlflow_experiment_missing.called_search_runs == 0 + assert any("Experiment" in msg for msg in dummy_logger.errors) + + +def test_evaluate_variant_happy_path_without_promotion( + monkeypatch, + tmp_path, + sample_raw_df_two_rows, + dummy_logger, +): + """ + Minimal happy path: + - MODELS_DIR / 'all' exists and contains a .joblib model + - MLflow experiment and run are found + - compute_metrics is called + - metrics < thresholds → model is NOT registered + """ + variant = "all" + model_name = "random_forest" + + def fake_load_split(path): + df = sample_raw_df_two_rows.copy() + df[TARGET_COL] = [0, 1] + return df + + monkeypatch.setattr(evaluate, "load_split", fake_load_split) + + # MODELS_DIR / variant with a .joblib file + models_root = tmp_path / "models" + models_variant_dir = models_root / variant + models_variant_dir.mkdir(parents=True) + model_path = models_variant_dir / f"{model_name}.joblib" + model_path.write_bytes(b"fake-binary-content") + monkeypatch.setattr(evaluate, "MODELS_DIR", models_root) + + # Fake model + joblib.load + class DummyModel: + def predict(self, X): + return [0] * len(X) + + def fake_joblib_load(path): + assert path == model_path + return DummyModel() + + monkeypatch.setattr(evaluate, "joblib", types.SimpleNamespace(load=fake_joblib_load)) + + # compute_metrics called once, returning low metrics + compute_metrics_calls = {"count": 0} + + def fake_compute_metrics(model, X, y): + compute_metrics_calls["count"] += 1 + return { + "test_f1": 0.5, + "test_recall": 0.5, + "test_accuracy": 0.5, + "test_roc_auc": 0.5, + }, None + + monkeypatch.setattr(evaluate, "compute_metrics", fake_compute_metrics) + + # Fake MLflow: experiment + run exist, but we track log_model calls + class DummyRunCtx: + def __init__(self, run_id): + self.run_id = run_id + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc, tb): + return False + + class DummyMlflow: + called_search_runs = 0 + started_runs = [] + log_model_calls = 0 + + class sklearn: + @staticmethod + def log_model(*args, **kwargs): + DummyMlflow.log_model_calls += 1 + + class data: + @staticmethod + def from_pandas(*args, **kwargs): + return "dummy-dataset" + + @staticmethod + def log_input(*args, **kwargs): + pass + + @staticmethod + def log_metrics(*args, **kwargs): + pass + + @staticmethod + def get_experiment_by_name(name): + return SimpleNamespace(experiment_id="exp-123") + + @staticmethod + def search_runs(experiment_ids, filter_string, order_by, max_results): + DummyMlflow.called_search_runs += 1 + return pd.DataFrame([{"run_id": "run-123"}]) + + @staticmethod + def start_run(run_id): + DummyMlflow.started_runs.append(run_id) + return DummyRunCtx(run_id) + + monkeypatch.setattr(evaluate, "mlflow", DummyMlflow) + + evaluate.evaluate_variant(variant=variant, model_name=model_name) + + # ASSERTIONS + assert compute_metrics_calls["count"] == 1 + assert DummyMlflow.called_search_runs == 1 + assert DummyMlflow.started_runs == ["run-123"] + # metrics below thresholds → no promotion → no log_model + assert DummyMlflow.log_model_calls == 0 diff --git a/tests/test_predicting_outcomes_in_heart_failure/modeling/test_explainability.py b/tests/test_predicting_outcomes_in_heart_failure/modeling/test_explainability.py new file mode 100644 index 0000000000000000000000000000000000000000..8f67d205f2498133aac70272fd5d948eae15748a --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/modeling/test_explainability.py @@ -0,0 +1,167 @@ +import pandas as pd +from predicting_outcomes_in_heart_failure.modeling.explainability import ( + explain_prediction, + save_shap_waterfall_plot, +) +from sklearn.ensemble import RandomForestClassifier +from sklearn.linear_model import LogisticRegression + + +def test_explain_prediction_tree_model_returns_explanations(tmp_path): + """ + Given a simple trained tree-based model and a single input row, + explain_prediction should: + - run without errors + - return a non-empty list of explanations + - each explanation should contain 'feature', 'value', 'abs_value' + - all feature names must belong to the input columns + - respect the top_k limit + """ + X_train = pd.DataFrame( + { + "Age": [50, 60, 55, 45], + "RestingBP": [120, 140, 130, 110], + "Cholesterol": [200, 250, 230, 190], + } + ) + y_train = [0, 1, 1, 0] + + model = RandomForestClassifier( + n_estimators=10, + random_state=42, + ) + model.fit(X_train, y_train) + + X_single = X_train.iloc[[0]] + + top_k = 2 + explanations = explain_prediction( + model=model, + X=X_single, + model_type="random_forest", + top_k=top_k, + ) + + assert isinstance(explanations, list) + assert len(explanations) > 0 + assert len(explanations) <= top_k + + input_features = set(X_single.columns.tolist()) + for exp in explanations: + assert "feature" in exp + assert "value" in exp + assert "abs_value" in exp + assert exp["feature"] in input_features + + +def test_explain_prediction_logreg_uses_coefficients(): + """ + For a logistic regression model, explain_prediction should use coef_ + and return explanations for the most important features (by |coef|). + """ + X_train = pd.DataFrame( + { + "Age": [50, 60, 55, 45, 52, 58], + "RestingBP": [120, 140, 130, 110, 125, 135], + "Cholesterol": [200, 250, 230, 190, 210, 240], + } + ) + y_train = [0, 1, 1, 0, 0, 1] + + model = LogisticRegression( + solver="liblinear", + random_state=42, + ) + model.fit(X_train, y_train) + + X_single = X_train.iloc[[0]] + + top_k = 2 + explanations = explain_prediction( + model=model, + X=X_single, + model_type="logreg", + top_k=top_k, + ) + + assert isinstance(explanations, list) + assert len(explanations) > 0 + assert len(explanations) <= top_k + + input_features = set(X_single.columns.tolist()) + for exp in explanations: + assert "feature" in exp + assert "value" in exp + assert "abs_value" in exp + assert exp["feature"] in input_features + + +def test_save_shap_waterfall_plot_creates_file(tmp_path): + """ + save_shap_waterfall_plot should create a PNG file on disk + for a tree-based model when given a valid single row. + """ + X_train = pd.DataFrame( + { + "Age": [50, 60, 55, 45], + "RestingBP": [120, 140, 130, 110], + "Cholesterol": [200, 250, 230, 190], + } + ) + y_train = [0, 1, 1, 0] + + model = RandomForestClassifier( + n_estimators=5, + random_state=42, + ) + model.fit(X_train, y_train) + + X_single = X_train.iloc[[0]] + + output_path = tmp_path / "waterfall_rf.png" + + result_path = save_shap_waterfall_plot( + model=model, + X=X_single, + model_type="random_forest", + output_path=output_path, + ) + + assert result_path is not None + assert result_path.exists() + assert result_path.suffix == ".png" + + +def test_save_shap_waterfall_plot_non_tree_returns_none(tmp_path): + """ + For non-tree models (e.g. logistic regression), the helper should + not try to build a plot and must return None. + """ + X_train = pd.DataFrame( + { + "Age": [50, 60, 55, 45], + "RestingBP": [120, 140, 130, 110], + "Cholesterol": [200, 250, 230, 190], + } + ) + y_train = [0, 1, 1, 0] + + model = LogisticRegression( + solver="liblinear", + random_state=42, + ) + model.fit(X_train, y_train) + + X_single = X_train.iloc[[0]] + + output_path = tmp_path / "waterfall_logreg.png" + + result_path = save_shap_waterfall_plot( + model=model, + X=X_single, + model_type="logreg", + output_path=output_path, + ) + + assert result_path is None + assert not output_path.exists() diff --git a/tests/test_predicting_outcomes_in_heart_failure/modeling/test_predict.py b/tests/test_predicting_outcomes_in_heart_failure/modeling/test_predict.py new file mode 100644 index 0000000000000000000000000000000000000000..3bcd3c2e3e2fe38082e1894df734e188e77e3ff1 --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/modeling/test_predict.py @@ -0,0 +1,155 @@ +import pandas as pd +from predicting_outcomes_in_heart_failure.config import INPUT_COLUMNS +from predicting_outcomes_in_heart_failure.modeling.predict import preprocessing + + +def test_preprocessing_produces_expected_columns(sample_raw_df_single): + """ + + Given as input a *raw* sample with all the original columns + we expect that after preprocessing: + + * does not raise any error + * returns a DataFrame + * with columns exactly equal to `INPUT_COLUMNS` (same order) + * with no NaN values + """ + + processed = preprocessing(sample_raw_df_single) + + assert isinstance(processed, pd.DataFrame) + + assert list(processed.columns) == INPUT_COLUMNS + + assert not processed.isna().any().any() + + +def test_preprocessing_encodes_exerciseAngina_binary(sample_raw_df_two_rows): + """ + Given ExerciseAngina = [Y, N], + we expect that after preprocessing: + + - ExerciseAngina is mapped to [1, 0] (Y -> 1, N -> 0) + """ + processed = preprocessing(sample_raw_df_two_rows) + + ea_values = processed["ExerciseAngina"].tolist() + assert ea_values == [1, 0] + + +def test_preprocessing_one_hot_chestPainType(sample_raw_df_two_rows): + """ + Given ChestPainType = [ASY, NAP], + we expect one-hot encoded columns for ChestPainType + to be present and consistent with the raw input. + """ + processed = preprocessing(sample_raw_df_two_rows) + + assert "ChestPainType_ASY" in processed.columns + assert "ChestPainType_NAP" in processed.columns + assert "ChestPainType_TA" in processed.columns + + # Row 0: ASY -> ASY=1, NAP=0, TA=0 + assert processed.loc[0, "ChestPainType_ASY"] == 1 + assert processed.loc[0, "ChestPainType_NAP"] == 0 + assert processed.loc[0, "ChestPainType_TA"] == 0 + + # Row 1: NAP -> ASY=0, NAP=1, TA=0 + assert processed.loc[1, "ChestPainType_ASY"] == 0 + assert processed.loc[1, "ChestPainType_NAP"] == 1 + assert processed.loc[1, "ChestPainType_TA"] == 0 + + +def test_preprocessing_one_hot_restingecg(sample_raw_df_two_rows): + """ + Given RestingECG = [Normal, ST], + we expect one-hot encoded columns for RestingECG + to be present and consistent with the raw input. + """ + processed = preprocessing(sample_raw_df_two_rows) + + assert "RestingECG_Normal" in processed.columns + assert "RestingECG_ST" in processed.columns + + # Row 0: Normal + assert processed.loc[0, "RestingECG_Normal"] == 1 + assert processed.loc[0, "RestingECG_ST"] == 0 + + # Row 1: ST + assert processed.loc[1, "RestingECG_Normal"] == 0 + assert processed.loc[1, "RestingECG_ST"] == 1 + + +def test_preprocessing_one_hot_st_slope(sample_raw_df_two_rows): + """ + Given ST_Slope = [Up, Flat], + we expect one-hot encoded columns for ST_Slope + to be present and consistent with the raw input. + """ + processed = preprocessing(sample_raw_df_two_rows) + + assert "ST_Slope_Up" in processed.columns + assert "ST_Slope_Flat" in processed.columns + assert "ST_Slope_Down" in processed.columns + + # Row 0: Up + assert processed.loc[0, "ST_Slope_Up"] == 1 + assert processed.loc[0, "ST_Slope_Flat"] == 0 + assert processed.loc[0, "ST_Slope_Down"] == 0 + + # Row 1: Flat + assert processed.loc[1, "ST_Slope_Up"] == 0 + assert processed.loc[1, "ST_Slope_Flat"] == 1 + assert processed.loc[1, "ST_Slope_Down"] == 0 + + +def test_preprocessing_adds_missing_dummy_columns_with_zeros(): + """ + Given input where some categorical levels never appear + (e.g., no TA for ChestPainType, no Flat/Down for ST_Slope), + we still expect the corresponding one-hot columns to exist + in the preprocessed DataFrame, filled with zeros. + """ + + # All rows use only a subset of possible categories + sample_df = pd.DataFrame( + { + "Age": [50, 60, 55], + "ChestPainType": ["ASY", "ASY", "ASY"], # only ASY, never NAP/TA/etc. + "RestingBP": [130, 140, 135], + "Cholesterol": [220, 250, 230], + "FastingBS": [0, 1, 0], + "RestingECG": ["Normal", "Normal", "Normal"], # only Normal + "MaxHR": [150, 140, 145], + "ExerciseAngina": ["Y", "N", "Y"], + "Oldpeak": [1.0, 0.0, 0.5], + "ST_Slope": ["Up", "Up", "Up"], # only Up, never Flat/Down + } + ) + + processed = preprocessing(sample_df) + + # ChestPainType: only ASY in input, but we still expect other dummies to exist + assert "ChestPainType_ASY" in processed.columns + assert "ChestPainType_NAP" in processed.columns + assert "ChestPainType_TA" in processed.columns + + # Since NAP and TA never appeared, their columns should be all zeros + assert (processed["ChestPainType_NAP"] == 0).all() + assert (processed["ChestPainType_TA"] == 0).all() + + # RestingECG: only Normal in input, but ST/LVH columns should still exist and be 0 + assert "RestingECG_Normal" in processed.columns + assert "RestingECG_ST" in processed.columns + assert "RestingECG_LVH" in processed.columns + + assert (processed["RestingECG_ST"] == 0).all() + assert (processed["RestingECG_LVH"] == 0).all() + + # ST_Slope: only Up in input, but Flat and Down should exist and be 0 + assert "ST_Slope_Up" in processed.columns + assert "ST_Slope_Flat" in processed.columns + assert "ST_Slope_Down" in processed.columns + + assert (processed["ST_Slope_Flat"] == 0).all() + assert (processed["ST_Slope_Down"] == 0).all() diff --git a/tests/test_predicting_outcomes_in_heart_failure/modeling/test_train.py b/tests/test_predicting_outcomes_in_heart_failure/modeling/test_train.py new file mode 100644 index 0000000000000000000000000000000000000000..19b0cdb65a8492d2fb09e733f80f13c010336119 --- /dev/null +++ b/tests/test_predicting_outcomes_in_heart_failure/modeling/test_train.py @@ -0,0 +1,346 @@ +import json +from pathlib import Path +import sys + +import numpy as np +import pandas as pd +from predicting_outcomes_in_heart_failure.modeling import train +import pytest + +# ========================= +# load_split +# ========================= + + +def test_load_split_ok(tmp_path: Path): + """ + Test that `load_split` correctly reads a CSV file. + + The test creates a temporary CSV with known columns and values, + loads it using `load_split`, and verifies that: + - the resulting DataFrame is not empty, + - the column names match the original ones, + - the number of rows is preserved. + """ + path = tmp_path / "train.csv" + df_orig = pd.DataFrame( + { + "feat1": [1, 2, 3], + "feat2": [0.1, 0.2, 0.3], + train.TARGET_COL: [0, 1, 0], + } + ) + df_orig.to_csv(path, index=False) + + df_loaded = train.load_split(path) + + assert not df_loaded.empty + assert list(df_loaded.columns) == list(df_orig.columns) + assert len(df_loaded) == len(df_orig) + + +def test_load_split_missing_file_raises(tmp_path: Path): + """ + Test that `load_split` raises FileNotFoundError when the CSV file does not exist. + """ + path = tmp_path / "missing.csv" + assert not path.exists() + + with pytest.raises(FileNotFoundError): + train.load_split(path) + + +# ========================= +# apply_random_oversampling +# ========================= + + +def test_apply_random_oversampling_balances_classes(): + """ + Test that `apply_random_oversampling` correctly balances class distribution. + + The test creates an imbalanced dataset, applies random oversampling, + and verifies that: + - both classes appear with the same frequency after resampling, + - the feature columns remain unchanged, + - the number of samples in X and y is consistent. + """ + X = pd.DataFrame( + { + "feat1": [1, 2, 3, 4], + "feat2": [10, 20, 30, 40], + } + ) + y = pd.Series([0, 1, 1, 1], name=train.TARGET_COL) + + X_res, y_res = train.apply_random_oversampling(X, y, model_name="logreg", variant="all") + + counts = y_res.value_counts().to_dict() + + assert counts[0] == counts[1] + assert list(X_res.columns) == list(X.columns) + assert len(X_res) == len(y_res) + + +# ========================= +# get_model_and_grid +# ========================= + + +@pytest.mark.parametrize( + "model_name, expected_class", + [ + ("decision_tree", "DecisionTreeClassifier"), + ("logreg", "LogisticRegression"), + ("random_forest", "RandomForestClassifier"), + ], +) +def test_get_model_and_grid_valid(model_name, expected_class): + """ + Test that `get_model_and_grid` returns the correct estimator and parameter grid. + + For each supported model name, the test verifies that: + - the returned estimator matches the expected class, + - the parameter grid is a dictionary, + - the grid contains at least one hyperparameter. + """ + estimator, param_grid = train.get_model_and_grid(model_name) + assert estimator.__class__.__name__ == expected_class + assert isinstance(param_grid, dict) + assert len(param_grid) > 0 + + +def test_get_model_and_grid_invalid(): + """ + Test that `get_model_and_grid` raises a ValueError for unsupported model names. + """ + with pytest.raises(ValueError): + train.get_model_and_grid("unknown_model") + + +# ========================= +# run_grid_search +# ========================= + + +def test_run_grid_search_creates_cv_results(tmp_path: Path, monkeypatch): + """ + Test that `run_grid_search` executes a full GridSearchCV workflow + and produces the expected outputs. + + The test: + - patches `N_SPLITS` to speed up cross-validation, + - disables `mlflow.log_artifact` during the run, + - runs grid search on a small synthetic dataset, + - verifies that the `cv_results.csv` file is created, + - checks that the returned best model is usable, + - ensures the best hyperparameters include the parameter `C`. + """ + from sklearn.linear_model import LogisticRegression + + monkeypatch.setattr(train, "N_SPLITS", 2, raising=False) + monkeypatch.setattr(train.mlflow, "log_artifact", lambda *_, **__: None) + + estimator = LogisticRegression(max_iter=200) + param_grid = {"C": [0.1, 1.0]} + + X_train = pd.DataFrame( + np.random.randn(20, 2), + columns=["feat1", "feat2"], + ) + y_train = pd.Series([0] * 10 + [1] * 10, name=train.TARGET_COL) + + reports_dir = tmp_path / "reports" + reports_dir.mkdir(parents=True, exist_ok=True) + + best_model, grid, best_params = train.run_grid_search( + estimator=estimator, + param_grid=param_grid, + X_train=X_train, + y_train=y_train, + model_name="logreg", + variant="all", + reports_dir=reports_dir, + ) + + cv_results_path = reports_dir / "cv_results.csv" + + assert cv_results_path.exists() + assert hasattr(best_model, "predict") + assert isinstance(best_params, dict) + assert "C" in best_params + + +# ========================= +# save_artifacts +# ========================= + + +def test_save_artifacts_writes_files(tmp_path: Path, monkeypatch): + """ + Test that `save_artifacts` correctly writes the model and CV metadata files. + + The test: + - disables `mlflow.log_artifact` to avoid side effects, + - uses a dummy model and dummy grid search results, + - calls `save_artifacts` with temporary output directories, + - verifies that the serialized model file and `cv_parameters.json` + are created, + - checks that the JSON file contains the expected metadata such as + model name, variant, refit metric, and feature list. + """ + from sklearn.linear_model import LogisticRegression + + monkeypatch.setattr(train.mlflow, "log_artifact", lambda *_, **__: None) + + model = LogisticRegression() + model_dir = tmp_path / "models" + reports_dir = tmp_path / "reports" + + class DummyGrid: + best_score_ = 0.9 + best_params_ = {"C": 1.0} + + grid = DummyGrid() + + X_train = pd.DataFrame( + {"feat1": [1, 2], "feat2": [3, 4]}, + ) + + train.save_artifacts( + model=model, + grid=grid, + X_train=X_train, + model_name="logreg", + variant="all", + model_dir=model_dir, + reports_dir=reports_dir, + ) + + model_path = model_dir / "logreg.joblib" + cv_params_path = reports_dir / "cv_parameters.json" + + assert model_path.exists() + assert cv_params_path.exists() + + with open(cv_params_path, encoding="utf-8") as f: + data = json.load(f) + + assert data["model_name"] == "logreg" + assert data["data_variant"] == "all" + assert data["cv"]["refit"] == train.REFIT + assert data["features"] == list(X_train.columns) + + +# ========================= +# train +# ========================= + + +class _DummyRun: + """ + Minimal dummy context manager used to mock an MLflow run. + """ + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc, tb): + return False + + +class _DummyData: + """ + Dummy object used to replace `mlflow.data`. + """ + + @staticmethod + def from_pandas(df, name: str): + return df + + +def test_train_end_to_end_small(tmp_path: Path, monkeypatch): + """ + End-to-end style test ensuring that `train()` runs successfully and + produces the expected model artifact. + + The test: + - patches paths, + - overrides MLflow functions to avoid external side effects, + - creates a small synthetic dataset stored as `train.csv`, + - calls `train()` with the "logreg" model, + - verifies that the trained model file is saved in the expected location. + """ + + processed_dir = tmp_path / "processed" + models_dir = tmp_path / "models" + reports_dir = tmp_path / "reports" + + monkeypatch.setattr(train, "PROCESSED_DATA_DIR", processed_dir, raising=False) + monkeypatch.setattr(train, "MODELS_DIR", models_dir, raising=False) + monkeypatch.setattr(train, "REPORTS_DIR", reports_dir, raising=False) + monkeypatch.setattr(train, "N_SPLITS", 2, raising=False) + + variant = "all" + split_dir = processed_dir / variant + split_dir.mkdir(parents=True, exist_ok=True) + + df = pd.DataFrame( + { + "feat1": [0, 1, 0, 1], + "feat2": [1, 1, 0, 0], + train.TARGET_COL: [0, 1, 0, 1], + } + ) + (split_dir / "train.csv").write_text(df.to_csv(index=False)) + + monkeypatch.setattr(train.mlflow, "get_experiment_by_name", lambda name: None) + monkeypatch.setattr(train.mlflow, "create_experiment", lambda name: None) + monkeypatch.setattr(train.mlflow, "set_experiment", lambda name: None) + monkeypatch.setattr(train.mlflow, "start_run", lambda **kwargs: _DummyRun()) + monkeypatch.setattr(train.mlflow, "log_input", lambda *_, **__: None) + monkeypatch.setattr(train.mlflow, "set_tag", lambda *_, **__: None) + monkeypatch.setattr(train.mlflow, "log_param", lambda *_, **__: None) + monkeypatch.setattr(train.mlflow, "log_params", lambda *_, **__: None) + monkeypatch.setattr(train.mlflow, "log_artifact", lambda *_, **__: None) + monkeypatch.setattr(train.mlflow, "data", _DummyData) + + train.train(model_name="logreg", variant=variant) + model_path = models_dir / variant / "logreg.joblib" + + assert model_path.exists() + + +# ========================= +# main +# ========================= + + +def test_main_parses_args_and_calls_train(monkeypatch): + """ + Test that the `main` function correctly parses CLI arguments and + forwards them to the `train` function. + + The test: + - replaces `train.train` with a fake function to capture calls, + - mocks `sys.argv` to simulate command-line input, + - ensures that `main()` extracts the arguments properly, + - verifies that the correct `model_name` and `variant` + are passed to `train`. + """ + called = {} + + def fake_train(model_name, variant): + called["model_name"] = model_name + called["variant"] = variant + + monkeypatch.setattr(train, "train", fake_train) + monkeypatch.setattr(train.dagshub, "init", lambda *_, **__: None) + + test_args = ["prog", "--variant", "all", "--model", "logreg"] + monkeypatch.setattr(sys, "argv", test_args) + + train.main() + + assert called["model_name"] == "logreg" + assert called["variant"] == "all" diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000000000000000000000000000000000000..204e583599ed77dba035dff83443a0220ac3f2a9 --- /dev/null +++ b/uv.lock @@ -0,0 +1,2939 @@ +version = 1 +revision = 3 +requires-python = "==3.11.*" +resolution-markers = [ + "sys_platform != 'win32'", + "sys_platform == 'win32'", +] + +[[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 = "alembic" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mako" }, + { name = "sqlalchemy" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/b6/2a81d7724c0c124edc5ec7a167e85858b6fd31b9611c6fb8ecf617b7e2d3/alembic-1.17.1.tar.gz", hash = "sha256:8a289f6778262df31571d29cca4c7fbacd2f0f582ea0816f4c399b6da7528486", size = 1981285, upload-time = "2025-10-29T00:23:16.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/32/7df1d81ec2e50fb661944a35183d87e62d3f6c6d9f8aff64a4f245226d55/alembic-1.17.1-py3-none-any.whl", hash = "sha256:cbc2386e60f89608bb63f30d2d6cc66c7aaed1fe105bd862828600e5ad167023", size = 247848, upload-time = "2025-10-29T00:23:18.79Z" }, +] + +[[package]] +name = "altair" +version = "4.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "entrypoints" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ec/bf/781b607da4c1a2a7211cd570bd7e22e0accd4deaf1074c32ac7344a09339/altair-4.2.2.tar.gz", hash = "sha256:39399a267c49b30d102c10411e67ab26374156a84b1aeb9fcd15140429ba49c5", size = 740430, upload-time = "2023-01-27T22:51:11.045Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/62/47452306e84d4d2e67f9c559380aeb230f5e6ca84fafb428dd36b96a99ba/altair-4.2.2-py3-none-any.whl", hash = "sha256:8b45ebeaf8557f2d760c5c77b79f02ae12aee7c46c27c06014febab6f849bc87", size = 813630, upload-time = "2023-01-27T22:51:08.935Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/a6/dc46877b911e40c00d395771ea710d5e77b6de7bacd5fdcd78d70cc5a48f/annotated_doc-0.0.3.tar.gz", hash = "sha256:e18370014c70187422c33e945053ff4c286f453a984eba84d0dbfa0c935adeda", size = 5535, upload-time = "2025-10-24T14:57:10.718Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/b7/cf592cb5de5cb3bade3357f8d2cf42bf103bbe39f459824b4939fd212911/annotated_doc-0.0.3-py3-none-any.whl", hash = "sha256:348ec6664a76f1fd3be81f43dffbee4c7e8ce931ba71ec67cc7f4ade7fbbb580", size = 5488, upload-time = "2025-10-24T14:57:09.462Z" }, +] + +[[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 = "anyio" +version = "4.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/78/7d432127c41b50bccba979505f272c16cbcadcc33645d5fa3a738110ae75/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4", size = 219094, upload-time = "2025-09-23T09:19:12.58Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc", size = 109097, upload-time = "2025-09-23T09:19:10.601Z" }, +] + +[[package]] +name = "appdirs" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/d8/05696357e0311f5b5c316d7b95f46c669dd9c15aaeecbb48c7d0aeb88c40/appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", size = 13470, upload-time = "2020-05-11T07:59:51.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128", size = 9566, upload-time = "2020-05-11T07:59:49.499Z" }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, +] + +[[package]] +name = "attrs" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, +] + +[[package]] +name = "backoff" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/d7/5bbeb12c44d7c4f2fb5b56abce497eb5ed9f34d85701de869acedd602619/backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", size = 17001, upload-time = "2022-10-05T19:19:32.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148, upload-time = "2022-10-05T19:19:30.546Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/e9/df2358efd7659577435e2177bfa69cba6c33216681af51a707193dec162a/beautifulsoup4-4.14.2.tar.gz", hash = "sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e", size = 625822, upload-time = "2025-09-29T10:05:42.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/fe/3aed5d0be4d404d12d36ab97e2f1791424d9ca39c2f754a6285d59a3b01d/beautifulsoup4-4.14.2-py3-none-any.whl", hash = "sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515", size = 106392, upload-time = "2025-09-29T10:05:43.771Z" }, +] + +[[package]] +name = "bleach" +version = "6.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533, upload-time = "2025-10-27T17:57:39.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437, upload-time = "2025-10-27T17:57:37.538Z" }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, +] + +[[package]] +name = "boto3" +version = "1.40.61" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/f9/6ef8feb52c3cce5ec3967a535a6114b57ac7949fd166b0f3090c2b06e4e5/boto3-1.40.61.tar.gz", hash = "sha256:d6c56277251adf6c2bdd25249feae625abe4966831676689ff23b4694dea5b12", size = 111535, upload-time = "2025-10-28T19:26:57.247Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/24/3bf865b07d15fea85b63504856e137029b6acbc73762496064219cdb265d/boto3-1.40.61-py3-none-any.whl", hash = "sha256:6b9c57b2a922b5d8c17766e29ed792586a818098efe84def27c8f582b33f898c", size = 139321, upload-time = "2025-10-28T19:26:55.007Z" }, +] + +[[package]] +name = "botocore" +version = "1.40.61" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/a3/81d3a47c2dbfd76f185d3b894f2ad01a75096c006a2dd91f237dca182188/botocore-1.40.61.tar.gz", hash = "sha256:a2487ad69b090f9cccd64cf07c7021cd80ee9c0655ad974f87045b02f3ef52cd", size = 14393956, upload-time = "2025-10-28T19:26:46.108Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/c5/f6ce561004db45f0b847c2cd9b19c67c6bf348a82018a48cb718be6b58b0/botocore-1.40.61-py3-none-any.whl", hash = "sha256:17ebae412692fd4824f99cde0f08d50126dc97954008e5ba2b522eb049238aa7", size = 14055973, upload-time = "2025-10-28T19:26:42.15Z" }, +] + +[[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/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" }, +] + +[[package]] +name = "cachetools" +version = "5.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/81/3747dad6b14fa2cf53fcf10548cf5aea6913e96fab41a3c198676f8948a5/cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4", size = 28380, upload-time = "2025-02-20T21:01:19.524Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/76/20fa66124dbe6be5cafeb312ece67de6b61dd91a0247d1ea13db4ebb33c2/cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a", size = 10080, upload-time = "2025-02-20T21:01:16.647Z" }, +] + +[[package]] +name = "certifi" +version = "2025.10.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/5b/b6ce21586237c77ce67d01dc5507039d444b630dd76611bbca2d8e5dcd91/certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43", size = 164519, upload-time = "2025-10-05T04:12:15.808Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de", size = 163286, upload-time = "2025-10-05T04:12:14.03Z" }, +] + +[[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/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" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, + { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, + { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, + { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, + { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, + { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, + { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, + { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, + { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, + { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, + { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, + { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "click" +version = "8.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", size = 276943, upload-time = "2025-09-18T17:32:23.696Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", size = 107295, upload-time = "2025-09-18T17:32:22.42Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/39/069100b84d7418bc358d81669d5748efb14b9cceacd2f9c75f550424132f/cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64", size = 22113, upload-time = "2025-01-14T17:02:05.085Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e", size = 20992, upload-time = "2025-01-14T17:02:02.417Z" }, +] + +[[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 = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773, upload-time = "2025-07-26T12:01:02.277Z" }, + { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149, upload-time = "2025-07-26T12:01:04.072Z" }, + { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222, upload-time = "2025-07-26T12:01:05.688Z" }, + { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234, upload-time = "2025-07-26T12:01:07.054Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555, upload-time = "2025-07-26T12:01:08.801Z" }, + { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238, upload-time = "2025-07-26T12:01:10.319Z" }, + { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218, upload-time = "2025-07-26T12:01:12.659Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867, upload-time = "2025-07-26T12:01:15.533Z" }, + { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677, upload-time = "2025-07-26T12:01:17.088Z" }, + { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234, upload-time = "2025-07-26T12:01:18.256Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123, upload-time = "2025-07-26T12:01:19.848Z" }, + { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, + { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, + { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, + { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207, upload-time = "2025-07-26T12:02:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, +] + +[[package]] +name = "cryptography" +version = "46.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, + { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, + { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, + { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, + { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, + { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, + { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, + { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, + { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, + { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, + { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, + { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, + { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, + { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, + { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, + { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, + { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/e60e46adab4362a682cf142c7dcb5bf79b782ab2199b0dcb81f55970807f/cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", size = 3698132, upload-time = "2025-10-15T23:18:17.056Z" }, + { url = "https://files.pythonhosted.org/packages/da/38/f59940ec4ee91e93d3311f7532671a5cef5570eb04a144bf203b58552d11/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", size = 4243992, upload-time = "2025-10-15T23:18:18.695Z" }, + { url = "https://files.pythonhosted.org/packages/b0/0c/35b3d92ddebfdfda76bb485738306545817253d0a3ded0bfe80ef8e67aa5/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", size = 4409944, upload-time = "2025-10-15T23:18:20.597Z" }, + { url = "https://files.pythonhosted.org/packages/99/55/181022996c4063fc0e7666a47049a1ca705abb9c8a13830f074edb347495/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", size = 4242957, upload-time = "2025-10-15T23:18:22.18Z" }, + { url = "https://files.pythonhosted.org/packages/ba/af/72cd6ef29f9c5f731251acadaeb821559fe25f10852f44a63374c9ca08c1/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", size = 4409447, upload-time = "2025-10-15T23:18:24.209Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "dacite" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/bf/3f0912b4cfd861cd0fb7278c2b8d5bfb0c613ec1b7922e25e4115287b73a/dacite-1.6.0.tar.gz", hash = "sha256:d48125ed0a0352d3de9f493bf980038088f45f3f9d7498f090b50a847daaa6df", size = 16538, upload-time = "2020-11-30T09:08:06.69Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/9d/11a073172d889e9e0d0ad270a1b468876c82d759af7864a8095dfc73f46d/dacite-1.6.0-py3-none-any.whl", hash = "sha256:4331535f7aabb505c732fa4c3c094313fc0a1d5ea19907bf4726a7819a68b93f", size = 12458, upload-time = "2020-11-30T09:08:05.142Z" }, +] + +[[package]] +name = "dagshub" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appdirs" }, + { name = "boto3" }, + { name = "click" }, + { name = "dacite" }, + { name = "dagshub-annotation-converter" }, + { name = "dataclasses-json" }, + { name = "gitpython" }, + { name = "gql", extra = ["requests"] }, + { name = "httpx" }, + { name = "pandas" }, + { name = "pathvalidate" }, + { name = "python-dateutil" }, + { name = "pyyaml" }, + { name = "rich" }, + { name = "semver" }, + { name = "tenacity" }, + { name = "treelib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/fb/6437d6e879cd3c60542eeeef10c2fd32c2a0b449adcc6472d1f67a1966d4/dagshub-0.6.3.tar.gz", hash = "sha256:cf14da9ab2e03efde93dce31ebe033d4cc37454254fc8409276d904ecf34b74a", size = 236754, upload-time = "2025-08-10T10:13:57.574Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/d2/35fb0ebd954386db7886e750d0a56a8654488155f95a4af599eab10e31f3/dagshub-0.6.3-py3-none-any.whl", hash = "sha256:6fac5037ea3a6c74e4dc471c21a433ecb6adb83770fbadb5cd0adbe57fc96bf5", size = 261262, upload-time = "2025-08-10T10:13:55.993Z" }, +] + +[[package]] +name = "dagshub-annotation-converter" +version = "0.1.15" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lxml" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/aa/5f/16b2b84a6c497d04932ec7598642e55d1c93b64df4881f8c7fac181e9975/dagshub_annotation_converter-0.1.15.tar.gz", hash = "sha256:62e62c03cbef7e999a916727d2b645c5556c8a1783293b895fa57b49b63c645c", size = 33400, upload-time = "2025-10-22T10:39:24.101Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/ce/e4e3f036b095e8cad6eadecfe906bc910706dd835fece144fdaf6697be2f/dagshub_annotation_converter-0.1.15-py3-none-any.whl", hash = "sha256:ba89ae731eb6f45db421b1211226a577f936448fc3ec657254590ee9a54048c1", size = 35863, upload-time = "2025-10-22T10:39:22.493Z" }, +] + +[[package]] +name = "databricks-sdk" +version = "0.70.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-auth" }, + { name = "protobuf" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/c0/7bca00fcf265bc1fc8ac9452f8fc80779ca56225e11ffce5fbbcd1b47e17/databricks_sdk-0.70.0.tar.gz", hash = "sha256:a4e2141972a5aebca7f4cda0a8e7e3ea444d150fea9bb28fcbd1746e62f65735", size = 798157, upload-time = "2025-10-23T13:44:18.217Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/b9/202b3ff6f2c53736aa45b68870da0de1226e1abe15fc3f2222278cb8193c/databricks_sdk-0.70.0-py3-none-any.whl", hash = "sha256:f573d76cd6960d390253929950210145e9175242196c6f192facd8ea00bc91f2", size = 752568, upload-time = "2025-10-23T13:44:16.474Z" }, +] + +[[package]] +name = "dataclasses-json" +version = "0.6.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "marshmallow" }, + { name = "typing-inspect" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/a4/f71d9cf3a5ac257c993b5ca3f93df5f7fb395c725e7f1e6479d2514173c3/dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0", size = 32227, upload-time = "2024-06-09T16:20:19.103Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686, upload-time = "2024-06-09T16:20:16.715Z" }, +] + +[[package]] +name = "debugpy" +version = "1.8.17" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/ad/71e708ff4ca377c4230530d6a7aa7992592648c122a2cd2b321cf8b35a76/debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e", size = 1644129, upload-time = "2025-09-17T16:33:20.633Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/53/3af72b5c159278c4a0cf4cffa518675a0e73bdb7d1cac0239b815502d2ce/debugpy-1.8.17-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840", size = 2207154, upload-time = "2025-09-17T16:33:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/8f/6d/204f407df45600e2245b4a39860ed4ba32552330a0b3f5f160ae4cc30072/debugpy-1.8.17-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f", size = 3170322, upload-time = "2025-09-17T16:33:30.837Z" }, + { url = "https://files.pythonhosted.org/packages/f2/13/1b8f87d39cf83c6b713de2620c31205299e6065622e7dd37aff4808dd410/debugpy-1.8.17-cp311-cp311-win32.whl", hash = "sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da", size = 5155078, upload-time = "2025-09-17T16:33:33.331Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c5/c012c60a2922cc91caa9675d0ddfbb14ba59e1e36228355f41cab6483469/debugpy-1.8.17-cp311-cp311-win_amd64.whl", hash = "sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4", size = 5179011, upload-time = "2025-09-17T16:33:35.711Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef", size = 5283210, upload-time = "2025-09-17T16:34:25.835Z" }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "docker" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/9b/4a2ea29aeba62471211598dac5d96825bb49348fa07e906ea930394a83ce/docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", size = 117834, upload-time = "2024-05-23T11:13:57.216Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0", size = 147774, upload-time = "2024-05-23T11:13:55.01Z" }, +] + +[[package]] +name = "entrypoints" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/8d/a7121ffe5f402dc015277d2d31eb82d2187334503a011c18f2e78ecbb9b2/entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4", size = 13974, upload-time = "2022-02-02T21:30:28.172Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f", size = 5294, upload-time = "2022-02-02T21:30:26.024Z" }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, +] + +[[package]] +name = "fastapi" +version = "0.120.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/cc/28aff6e246ee85bd571b26e4a793b84d42700e3bdc3008c3d747eda7b06d/fastapi-0.120.1.tar.gz", hash = "sha256:b5c6217e9ddca6dfcf54c97986180d4a1955e10c693d74943fc5327700178bff", size = 337616, upload-time = "2025-10-27T17:53:42.954Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/bb/1a74dbe87e9a595bf63052c886dfef965dc5b91d149456a8301eb3d41ce2/fastapi-0.120.1-py3-none-any.whl", hash = "sha256:0e8a2c328e96c117272d8c794d3a97d205f753cc2e69dd7ee387b7488a75601f", size = 108254, upload-time = "2025-10-27T17:53:40.076Z" }, +] + +[[package]] +name = "fastjsonschema" +version = "2.21.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130, upload-time = "2025-08-14T18:49:36.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload-time = "2025-08-14T18:49:34.776Z" }, +] + +[[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.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4", size = 18922, upload-time = "2025-10-08T18:03:50.056Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" }, +] + +[[package]] +name = "flask" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/6d/cfe3c0fcc5e477df242b98bfe186a4c34357b4847e87ecaef04507332dab/flask-3.1.2.tar.gz", hash = "sha256:bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87", size = 720160, upload-time = "2025-08-19T21:03:21.205Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/f9/7f9263c5695f4bd0023734af91bedb2ff8209e8de6ead162f35d8dc762fd/flask-3.1.2-py3-none-any.whl", hash = "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c", size = 103308, upload-time = "2025-08-19T21:03:19.499Z" }, +] + +[[package]] +name = "fonttools" +version = "4.60.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/42/97a13e47a1e51a5a7142475bbcf5107fe3a68fc34aef331c897d5fb98ad0/fonttools-4.60.1.tar.gz", hash = "sha256:ef00af0439ebfee806b25f24c8f92109157ff3fac5731dc7867957812e87b8d9", size = 3559823, upload-time = "2025-09-29T21:13:27.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/85/639aa9bface1537e0fb0f643690672dde0695a5bbbc90736bc571b0b1941/fonttools-4.60.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7b4c32e232a71f63a5d00259ca3d88345ce2a43295bb049d21061f338124246f", size = 2831872, upload-time = "2025-09-29T21:11:20.329Z" }, + { url = "https://files.pythonhosted.org/packages/6b/47/3c63158459c95093be9618794acb1067b3f4d30dcc5c3e8114b70e67a092/fonttools-4.60.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3630e86c484263eaac71d117085d509cbcf7b18f677906824e4bace598fb70d2", size = 2356990, upload-time = "2025-09-29T21:11:22.754Z" }, + { url = "https://files.pythonhosted.org/packages/94/dd/1934b537c86fcf99f9761823f1fc37a98fbd54568e8e613f29a90fed95a9/fonttools-4.60.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c1015318e4fec75dd4943ad5f6a206d9727adf97410d58b7e32ab644a807914", size = 5042189, upload-time = "2025-09-29T21:11:25.061Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d2/9f4e4c4374dd1daa8367784e1bd910f18ba886db1d6b825b12edf6db3edc/fonttools-4.60.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e6c58beb17380f7c2ea181ea11e7db8c0ceb474c9dd45f48e71e2cb577d146a1", size = 4978683, upload-time = "2025-09-29T21:11:27.693Z" }, + { url = "https://files.pythonhosted.org/packages/cc/c4/0fb2dfd1ecbe9a07954cc13414713ed1eab17b1c0214ef07fc93df234a47/fonttools-4.60.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec3681a0cb34c255d76dd9d865a55f260164adb9fa02628415cdc2d43ee2c05d", size = 5021372, upload-time = "2025-09-29T21:11:30.257Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d5/495fc7ae2fab20223cc87179a8f50f40f9a6f821f271ba8301ae12bb580f/fonttools-4.60.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4b5c37a5f40e4d733d3bbaaef082149bee5a5ea3156a785ff64d949bd1353fa", size = 5132562, upload-time = "2025-09-29T21:11:32.737Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fa/021dab618526323c744e0206b3f5c8596a2e7ae9aa38db5948a131123e83/fonttools-4.60.1-cp311-cp311-win32.whl", hash = "sha256:398447f3d8c0c786cbf1209711e79080a40761eb44b27cdafffb48f52bcec258", size = 2230288, upload-time = "2025-09-29T21:11:35.015Z" }, + { url = "https://files.pythonhosted.org/packages/bb/78/0e1a6d22b427579ea5c8273e1c07def2f325b977faaf60bb7ddc01456cb1/fonttools-4.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:d066ea419f719ed87bc2c99a4a4bfd77c2e5949cb724588b9dd58f3fd90b92bf", size = 2278184, upload-time = "2025-09-29T21:11:37.434Z" }, + { url = "https://files.pythonhosted.org/packages/c7/93/0dd45cd283c32dea1545151d8c3637b4b8c53cdb3a625aeb2885b184d74d/fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb", size = 1143175, upload-time = "2025-09-29T21:13:24.134Z" }, +] + +[[package]] +name = "fsspec" +version = "2025.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/27/954057b0d1f53f086f681755207dda6de6c660ce133c829158e8e8fe7895/fsspec-2025.12.0.tar.gz", hash = "sha256:c505de011584597b1060ff778bb664c1bc022e87921b0e4f10cc9c44f9635973", size = 309748, upload-time = "2025-12-03T15:23:42.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/c7/b64cae5dba3a1b138d7123ec36bb5ccd39d39939f18454407e5468f4763f/fsspec-2025.12.0-py3-none-any.whl", hash = "sha256:8bf1fe301b7d8acfa6e8571e3b1c3d158f909666642431cc78a1b7b4dbc5ec5b", size = 201422, upload-time = "2025-12-03T15:23:41.434Z" }, +] + +[[package]] +name = "ghp-import" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z" }, +] + +[[package]] +name = "gitpython" +version = "3.1.45" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9a/c8/dd58967d119baab745caec2f9d853297cec1989ec1d63f677d3880632b88/gitpython-3.1.45.tar.gz", hash = "sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c", size = 215076, upload-time = "2025-07-24T03:45:54.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/61/d4b89fec821f72385526e1b9d9a3a0385dda4a72b206d28049e2c7cd39b8/gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77", size = 208168, upload-time = "2025-07-24T03:45:52.517Z" }, +] + +[[package]] +name = "google-auth" +version = "2.42.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cachetools" }, + { name = "pyasn1-modules" }, + { name = "rsa" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/11/75/28881e9d7de9b3d61939bc9624bd8fa594eb787a00567aba87173c790f09/google_auth-2.42.0.tar.gz", hash = "sha256:9bbbeef3442586effb124d1ca032cfb8fb7acd8754ab79b55facd2b8f3ab2802", size = 295400, upload-time = "2025-10-28T17:38:08.599Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/24/ec82aee6ba1a076288818fe5cc5125f4d93fffdc68bb7b381c68286c8aaa/google_auth-2.42.0-py2.py3-none-any.whl", hash = "sha256:f8f944bcb9723339b0ef58a73840f3c61bc91b69bf7368464906120b55804473", size = 222550, upload-time = "2025-10-28T17:38:05.496Z" }, +] + +[[package]] +name = "gql" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "backoff" }, + { name = "graphql-core" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/9f/cf224a88ed71eb223b7aa0b9ff0aa10d7ecc9a4acdca2279eb046c26d5dc/gql-4.0.0.tar.gz", hash = "sha256:f22980844eb6a7c0266ffc70f111b9c7e7c7c13da38c3b439afc7eab3d7c9c8e", size = 215644, upload-time = "2025-08-17T14:32:35.397Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/94/30bbd09e8d45339fa77a48f5778d74d47e9242c11b3cd1093b3d994770a5/gql-4.0.0-py3-none-any.whl", hash = "sha256:f3beed7c531218eb24d97cb7df031b4a84fdb462f4a2beb86e2633d395937479", size = 89900, upload-time = "2025-08-17T14:32:34.029Z" }, +] + +[package.optional-dependencies] +requests = [ + { name = "requests" }, + { name = "requests-toolbelt" }, +] + +[[package]] +name = "gradio" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiofiles" }, + { name = "anyio" }, + { name = "brotli" }, + { name = "fastapi" }, + { name = "ffmpy" }, + { name = "gradio-client" }, + { name = "groovy" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "numpy" }, + { name = "orjson" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pydub" }, + { name = "python-multipart" }, + { 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/b8/e8/66612eabc43a792b09ea8080d5581644128823b4f20185881f86a042e470/gradio-6.0.2.tar.gz", hash = "sha256:e3bb128fd9247a49820048cfb8f5b677b59a0da24f6d81bc990ca1a20eb6d1fb", size = 36452504, upload-time = "2025-12-02T01:57:48.397Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/b0/d4bb7a5c9c2e26a952da06f046c6411fb8678003a0b9c7ed379941aff21f/gradio-6.0.2-py3-none-any.whl", hash = "sha256:bcb8b9d147b313c958f811977527415cfd7871ee9547ccd92ef1911970c49a2c", size = 21560841, upload-time = "2025-12-02T01:57:45.471Z" }, +] + +[[package]] +name = "gradio-client" +version = "2.0.1" +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/cc/b0f04b1c9bf79c7ae9840b9945f5fbd93355719684f83032837695ab1eaf/gradio_client-2.0.1.tar.gz", hash = "sha256:087eb50652370747c0ce66cd0ae79ecb49f9682188d5348e279d44602cbc2814", size = 54792, upload-time = "2025-12-02T01:57:58.685Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/11/d680ecf4073bd1cacfe9dea57fa95660e4ea2d1fff3125dbaaa902cc9095/gradio_client-2.0.1-py3-none-any.whl", hash = "sha256:6322eecb5963a07703306c0b048bb98518063d05ca99a65fe384417188af8c63", size = 55439, upload-time = "2025-12-02T01:57:57.551Z" }, +] + +[[package]] +name = "graphene" +version = "3.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "graphql-core" }, + { name = "graphql-relay" }, + { name = "python-dateutil" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/f6/bf62ff950c317ed03e77f3f6ddd7e34aaa98fe89d79ebd660c55343d8054/graphene-3.4.3.tar.gz", hash = "sha256:2a3786948ce75fe7e078443d37f609cbe5bb36ad8d6b828740ad3b95ed1a0aaa", size = 44739, upload-time = "2024-11-09T20:44:25.757Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/e0/61d8e98007182e6b2aca7cf65904721fb2e4bce0192272ab9cb6f69d8812/graphene-3.4.3-py2.py3-none-any.whl", hash = "sha256:820db6289754c181007a150db1f7fff544b94142b556d12e3ebc777a7bf36c71", size = 114894, upload-time = "2024-11-09T20:44:23.851Z" }, +] + +[[package]] +name = "graphql-core" +version = "3.2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/16/7574029da84834349b60ed71614d66ca3afe46e9bf9c7b9562102acb7d4f/graphql_core-3.2.6.tar.gz", hash = "sha256:c08eec22f9e40f0bd61d805907e3b3b1b9a320bc606e23dc145eebca07c8fbab", size = 505353, upload-time = "2025-01-26T16:36:27.374Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/4f/7297663840621022bc73c22d7d9d80dbc78b4db6297f764b545cd5dd462d/graphql_core-3.2.6-py3-none-any.whl", hash = "sha256:78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f", size = 203416, upload-time = "2025-01-26T16:36:24.868Z" }, +] + +[[package]] +name = "graphql-relay" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "graphql-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/13/98fbf8d67552f102488ffc16c6f559ce71ea15f6294728d33928ab5ff14d/graphql-relay-3.2.0.tar.gz", hash = "sha256:1ff1c51298356e481a0be009ccdff249832ce53f30559c1338f22a0e0d17250c", size = 50027, upload-time = "2022-04-16T11:03:45.447Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/74/16/a4cf06adbc711bd364a73ce043b0b08d8fa5aae3df11b6ee4248bcdad2e0/graphql_relay-3.2.0-py3-none-any.whl", hash = "sha256:c9b22bd28b170ba1fe674c74384a8ff30a76c8e26f88ac3aa1584dd3179953e5", size = 16940, upload-time = "2022-04-16T11:03:43.895Z" }, +] + +[[package]] +name = "great-expectations" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "altair" }, + { name = "cryptography" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "marshmallow" }, + { name = "mistune" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pydantic" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, + { name = "requests" }, + { name = "ruamel-yaml" }, + { name = "scipy" }, + { name = "tqdm" }, + { name = "typing-extensions" }, + { name = "tzlocal" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/fb/1fbc31586ab0d9d62411e701b6ddcc4808babbb3e4e555db5de01faa9248/great_expectations-1.9.0.tar.gz", hash = "sha256:3113c25a521c848313a6b07443f0435c727128d2860b00d5b1aabaa6051b5663", size = 36297762, upload-time = "2025-11-07T18:17:12.303Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/a9/b5270fe0c022ffd18e08949f6c5f81c097a950b8d9783d7ce741409c8540/great_expectations-1.9.0-py3-none-any.whl", hash = "sha256:7dc60b05013507a9c3ae6751d08e5e9d5fe2a03228e868bfc3106ec41444d56f", size = 4940738, upload-time = "2025-11-07T18:17:09.417Z" }, +] + +[[package]] +name = "greenlet" +version = "3.2.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/b8/704d753a5a45507a7aab61f18db9509302ed3d0a27ac7e0359ec2905b1a6/greenlet-3.2.4.tar.gz", hash = "sha256:0dca0d95ff849f9a364385f36ab49f50065d76964944638be9691e1832e9f86d", size = 188260, upload-time = "2025-08-07T13:24:33.51Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2", size = 272305, upload-time = "2025-08-07T13:15:41.288Z" }, + { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246", size = 632472, upload-time = "2025-08-07T13:42:55.044Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/95d48d7e3d433e6dae5b1682e4292242a53f22df82e6d3dda81b1701a960/greenlet-3.2.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:94abf90142c2a18151632371140b3dba4dee031633fe614cb592dbb6c9e17bc3", size = 644646, upload-time = "2025-08-07T13:45:26.523Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5e/405965351aef8c76b8ef7ad370e5da58d57ef6068df197548b015464001a/greenlet-3.2.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:4d1378601b85e2e5171b99be8d2dc85f594c79967599328f95c1dc1a40f1c633", size = 640519, upload-time = "2025-08-07T13:53:13.928Z" }, + { url = "https://files.pythonhosted.org/packages/25/5d/382753b52006ce0218297ec1b628e048c4e64b155379331f25a7316eb749/greenlet-3.2.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0db5594dce18db94f7d1650d7489909b57afde4c580806b8d9203b6e79cdc079", size = 639707, upload-time = "2025-08-07T13:18:27.146Z" }, + { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8", size = 587684, upload-time = "2025-08-07T13:18:25.164Z" }, + { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52", size = 1116647, upload-time = "2025-08-07T13:42:38.655Z" }, + { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa", size = 1142073, upload-time = "2025-08-07T13:18:21.737Z" }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c", size = 1548385, upload-time = "2025-11-04T12:42:11.067Z" }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5", size = 1613329, upload-time = "2025-11-04T12:42:12.928Z" }, + { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9", size = 299100, upload-time = "2025-08-07T13:44:12.287Z" }, +] + +[[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 = "gunicorn" +version = "23.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging", marker = "sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/72/9614c465dc206155d93eff0ca20d42e1e35afc533971379482de953521a4/gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec", size = 375031, upload-time = "2024-08-10T20:25:27.378Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/7d/6dac2a6e1eba33ee43f318edbed4ff29151a49b5d37f080aad1e6469bca4/gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", size = 85029, upload-time = "2024-08-10T20:25:24.996Z" }, +] + +[[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-xet" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/6e/0f11bacf08a67f7fb5ee09740f2ca54163863b07b70d579356e9222ce5d8/hf_xet-1.2.0.tar.gz", hash = "sha256:a8c27070ca547293b6890c4bf389f713f80e8c478631432962bb7f4bc0bd7d7f", size = 506020, upload-time = "2025-10-24T19:04:32.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/2d/22338486473df5923a9ab7107d375dbef9173c338ebef5098ef593d2b560/hf_xet-1.2.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:46740d4ac024a7ca9b22bebf77460ff43332868b661186a8e46c227fdae01848", size = 2866099, upload-time = "2025-10-24T19:04:15.366Z" }, + { url = "https://files.pythonhosted.org/packages/7f/8c/c5becfa53234299bc2210ba314eaaae36c2875e0045809b82e40a9544f0c/hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:27df617a076420d8845bea087f59303da8be17ed7ec0cd7ee3b9b9f579dff0e4", size = 2722178, upload-time = "2025-10-24T19:04:13.695Z" }, + { url = "https://files.pythonhosted.org/packages/9a/92/cf3ab0b652b082e66876d08da57fcc6fa2f0e6c70dfbbafbd470bb73eb47/hf_xet-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3651fd5bfe0281951b988c0facbe726aa5e347b103a675f49a3fa8144c7968fd", size = 3320214, upload-time = "2025-10-24T19:04:03.596Z" }, + { url = "https://files.pythonhosted.org/packages/46/92/3f7ec4a1b6a65bf45b059b6d4a5d38988f63e193056de2f420137e3c3244/hf_xet-1.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d06fa97c8562fb3ee7a378dd9b51e343bc5bc8190254202c9771029152f5e08c", size = 3229054, upload-time = "2025-10-24T19:04:01.949Z" }, + { url = "https://files.pythonhosted.org/packages/0b/dd/7ac658d54b9fb7999a0ccb07ad863b413cbaf5cf172f48ebcd9497ec7263/hf_xet-1.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4c1428c9ae73ec0939410ec73023c4f842927f39db09b063b9482dac5a3bb737", size = 3413812, upload-time = "2025-10-24T19:04:24.585Z" }, + { url = "https://files.pythonhosted.org/packages/92/68/89ac4e5b12a9ff6286a12174c8538a5930e2ed662091dd2572bbe0a18c8a/hf_xet-1.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a55558084c16b09b5ed32ab9ed38421e2d87cf3f1f89815764d1177081b99865", size = 3508920, upload-time = "2025-10-24T19:04:26.927Z" }, + { url = "https://files.pythonhosted.org/packages/cb/44/870d44b30e1dcfb6a65932e3e1506c103a8a5aea9103c337e7a53180322c/hf_xet-1.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:e6584a52253f72c9f52f9e549d5895ca7a471608495c4ecaa6cc73dba2b24d69", size = 2905735, upload-time = "2025-10-24T19:04:35.928Z" }, +] + +[[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 = "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 = "huggingface-hub" +version = "1.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "httpx" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "shellingham" }, + { name = "tqdm" }, + { name = "typer-slim" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/fa/a1a94c55637f2b7cfeb05263ac3881aa87c82df92d8b4b31c909079f4419/huggingface_hub-1.1.7.tar.gz", hash = "sha256:3c84b6283caca928595f08fd42e9a572f17ec3501dec508c3f2939d94bfbd9d2", size = 607537, upload-time = "2025-12-01T11:05:28.137Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/4f/82e5ab009089a2c48472bf4248391fe4091cf0b9c3e951dbb8afe3b23d76/huggingface_hub-1.1.7-py3-none-any.whl", hash = "sha256:f3efa4779f4890e44c957bbbb0f197e6028887ad09f0cf95a21659fa7753605d", size = 516239, upload-time = "2025-12-01T11:05:25.981Z" }, +] + +[[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 = "imbalanced-learn" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7b/5a/ad42e366914abfea7434b9ab7a821778be52dae4a8cbeac165918e66e7b0/imbalanced_learn-0.14.0.tar.gz", hash = "sha256:22b9ba6dbd681a9ec613cd6e08c21d39639fb5ccbf2a3c991f9c36415b70522c", size = 534790, upload-time = "2025-08-14T14:15:31.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/60/103dc71019ec2fa987f42f9dbe88641a74edc57f8499fac8896955b66065/imbalanced_learn-0.14.0-py3-none-any.whl", hash = "sha256:8a8700c02ca185e113064815513f990fbf84eb4e7701f1d4e944ce67fb259a60", size = 239958, upload-time = "2025-08-14T14:15:30.174Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "8.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, +] + +[[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 = "ipykernel" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/a4/4948be6eb88628505b83a1f2f40d90254cab66abf2043b3c40fa07dfce0f/ipykernel-7.1.0.tar.gz", hash = "sha256:58a3fc88533d5930c3546dc7eac66c6d288acde4f801e2001e65edc5dc9cf0db", size = 174579, upload-time = "2025-10-27T09:46:39.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/17/20c2552266728ceba271967b87919664ecc0e33efca29c3efc6baf88c5f9/ipykernel-7.1.0-py3-none-any.whl", hash = "sha256:763b5ec6c5b7776f6a8d7ce09b267693b4e5ce75cb50ae696aaefb3c85e1ea4c", size = 117968, upload-time = "2025-10-27T09:46:37.805Z" }, +] + +[[package]] +name = "ipython" +version = "8.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088, upload-time = "2025-05-31T16:39:09.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/d0/274fbf7b0b12643cbbc001ce13e6a5b1607ac4929d1b11c72460152c9fc3/ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2", size = 831864, upload-time = "2025-05-31T16:39:06.38Z" }, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, +] + +[[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 = "jmespath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843, upload-time = "2022-06-17T18:00:12.224Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256, upload-time = "2022-06-17T18:00:10.251Z" }, +] + +[[package]] +name = "joblib" +version = "1.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/5d/447af5ea094b9e4c4054f82e223ada074c552335b9b4b2d14bd9b35a67c4/joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55", size = 331077, upload-time = "2025-08-27T12:15:46.575Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396, upload-time = "2025-08-27T12:15:45.188Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, +] + +[[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 = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900, upload-time = "2023-11-23T09:26:37.44Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884, upload-time = "2023-11-23T09:26:34.325Z" }, +] + +[[package]] +name = "kagglehub" +version = "0.3.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/12/e13c1c8b203535b15dacc420c0f1596dda67463175ff1e4404af21815bdd/kagglehub-0.3.13.tar.gz", hash = "sha256:d3c8b6250627d665096cd91a9487559bf5ed61be607eaf63d14511b20eea646e", size = 113694, upload-time = "2025-08-26T16:17:33.486Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/8e/4077b08b95a1f8302c694a8b399bd413815fbe89045c41e6e08cd7d9439a/kagglehub-0.3.13-py3-none-any.whl", hash = "sha256:e00dec8b81396cbad9c7b5eb62a33cf8ae27da26227abd196ed8f054c845ca00", size = 68257, upload-time = "2025-08-26T16:17:32.13Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564, upload-time = "2025-08-10T21:27:49.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/ab/c80b0d5a9d8a1a65f4f815f2afff9798b12c3b9f31f1d304dd233dd920e2/kiwisolver-1.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eb14a5da6dc7642b0f3a18f13654847cd8b7a2550e2645a5bda677862b03ba16", size = 124167, upload-time = "2025-08-10T21:25:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c0/27fe1a68a39cf62472a300e2879ffc13c0538546c359b86f149cc19f6ac3/kiwisolver-1.4.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:39a219e1c81ae3b103643d2aedb90f1ef22650deb266ff12a19e7773f3e5f089", size = 66579, upload-time = "2025-08-10T21:25:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/31/a2/a12a503ac1fd4943c50f9822678e8015a790a13b5490354c68afb8489814/kiwisolver-1.4.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2405a7d98604b87f3fc28b1716783534b1b4b8510d8142adca34ee0bc3c87543", size = 65309, upload-time = "2025-08-10T21:25:55.76Z" }, + { url = "https://files.pythonhosted.org/packages/66/e1/e533435c0be77c3f64040d68d7a657771194a63c279f55573188161e81ca/kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61", size = 1435596, upload-time = "2025-08-10T21:25:56.861Z" }, + { url = "https://files.pythonhosted.org/packages/67/1e/51b73c7347f9aabdc7215aa79e8b15299097dc2f8e67dee2b095faca9cb0/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1f570ce4d62d718dce3f179ee78dac3b545ac16c0c04bb363b7607a949c0d1", size = 1246548, upload-time = "2025-08-10T21:25:58.246Z" }, + { url = "https://files.pythonhosted.org/packages/21/aa/72a1c5d1e430294f2d32adb9542719cfb441b5da368d09d268c7757af46c/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb27e7b78d716c591e88e0a09a2139c6577865d7f2e152488c2cc6257f460872", size = 1263618, upload-time = "2025-08-10T21:25:59.857Z" }, + { url = "https://files.pythonhosted.org/packages/a3/af/db1509a9e79dbf4c260ce0cfa3903ea8945f6240e9e59d1e4deb731b1a40/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:15163165efc2f627eb9687ea5f3a28137217d217ac4024893d753f46bce9de26", size = 1317437, upload-time = "2025-08-10T21:26:01.105Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f2/3ea5ee5d52abacdd12013a94130436e19969fa183faa1e7c7fbc89e9a42f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bdee92c56a71d2b24c33a7d4c2856bd6419d017e08caa7802d2963870e315028", size = 2195742, upload-time = "2025-08-10T21:26:02.675Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9b/1efdd3013c2d9a2566aa6a337e9923a00590c516add9a1e89a768a3eb2fc/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:412f287c55a6f54b0650bd9b6dce5aceddb95864a1a90c87af16979d37c89771", size = 2290810, upload-time = "2025-08-10T21:26:04.009Z" }, + { url = "https://files.pythonhosted.org/packages/fb/e5/cfdc36109ae4e67361f9bc5b41323648cb24a01b9ade18784657e022e65f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2c93f00dcba2eea70af2be5f11a830a742fe6b579a1d4e00f47760ef13be247a", size = 2461579, upload-time = "2025-08-10T21:26:05.317Z" }, + { url = "https://files.pythonhosted.org/packages/62/86/b589e5e86c7610842213994cdea5add00960076bef4ae290c5fa68589cac/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f117e1a089d9411663a3207ba874f31be9ac8eaa5b533787024dc07aeb74f464", size = 2268071, upload-time = "2025-08-10T21:26:06.686Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c6/f8df8509fd1eee6c622febe54384a96cfaf4d43bf2ccec7a0cc17e4715c9/kiwisolver-1.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2", size = 73840, upload-time = "2025-08-10T21:26:07.94Z" }, + { url = "https://files.pythonhosted.org/packages/e2/2d/16e0581daafd147bc11ac53f032a2b45eabac897f42a338d0a13c1e5c436/kiwisolver-1.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:0ae37737256ba2de764ddc12aed4956460277f00c4996d51a197e72f62f5eec7", size = 65159, upload-time = "2025-08-10T21:26:09.048Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0f/36d89194b5a32c054ce93e586d4049b6c2c22887b0eb229c61c68afd3078/kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:720e05574713db64c356e86732c0f3c5252818d05f9df320f0ad8380641acea5", size = 60104, upload-time = "2025-08-10T21:27:43.287Z" }, + { url = "https://files.pythonhosted.org/packages/52/ba/4ed75f59e4658fd21fe7dde1fee0ac397c678ec3befba3fe6482d987af87/kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:17680d737d5335b552994a2008fab4c851bcd7de33094a82067ef3a576ff02fa", size = 58592, upload-time = "2025-08-10T21:27:44.314Z" }, + { url = "https://files.pythonhosted.org/packages/33/01/a8ea7c5ea32a9b45ceeaee051a04c8ed4320f5add3c51bfa20879b765b70/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85b5352f94e490c028926ea567fc569c52ec79ce131dadb968d3853e809518c2", size = 80281, upload-time = "2025-08-10T21:27:45.369Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/dbd2ecdce306f1d07a1aaf324817ee993aab7aee9db47ceac757deabafbe/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:464415881e4801295659462c49461a24fb107c140de781d55518c4b80cb6790f", size = 78009, upload-time = "2025-08-10T21:27:46.376Z" }, + { url = "https://files.pythonhosted.org/packages/da/e9/0d4add7873a73e462aeb45c036a2dead2562b825aa46ba326727b3f31016/kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1", size = 73929, upload-time = "2025-08-10T21:27:48.236Z" }, +] + +[[package]] +name = "llvmlite" +version = "0.45.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/99/8d/5baf1cef7f9c084fb35a8afbde88074f0d6a727bc63ef764fe0e7543ba40/llvmlite-0.45.1.tar.gz", hash = "sha256:09430bb9d0bb58fc45a45a57c7eae912850bedc095cd0810a57de109c69e1c32", size = 185600, upload-time = "2025-10-01T17:59:52.046Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/ad/9bdc87b2eb34642c1cfe6bcb4f5db64c21f91f26b010f263e7467e7536a3/llvmlite-0.45.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:60f92868d5d3af30b4239b50e1717cb4e4e54f6ac1c361a27903b318d0f07f42", size = 43043526, upload-time = "2025-10-01T18:03:15.051Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ea/c25c6382f452a943b4082da5e8c1665ce29a62884e2ec80608533e8e82d5/llvmlite-0.45.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:98baab513e19beb210f1ef39066288784839a44cd504e24fff5d17f1b3cf0860", size = 37253118, upload-time = "2025-10-01T18:04:06.783Z" }, + { url = "https://files.pythonhosted.org/packages/fe/af/85fc237de98b181dbbe8647324331238d6c52a3554327ccdc83ced28efba/llvmlite-0.45.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3adc2355694d6a6fbcc024d59bb756677e7de506037c878022d7b877e7613a36", size = 56288209, upload-time = "2025-10-01T18:01:00.168Z" }, + { url = "https://files.pythonhosted.org/packages/0a/df/3daf95302ff49beff4230065e3178cd40e71294968e8d55baf4a9e560814/llvmlite-0.45.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f3377a6db40f563058c9515dedcc8a3e562d8693a106a28f2ddccf2c8fcf6ca", size = 55140958, upload-time = "2025-10-01T18:02:11.199Z" }, + { url = "https://files.pythonhosted.org/packages/a4/56/4c0d503fe03bac820ecdeb14590cf9a248e120f483bcd5c009f2534f23f0/llvmlite-0.45.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9c272682d91e0d57f2a76c6d9ebdfccc603a01828cdbe3d15273bdca0c3363a", size = 38132232, upload-time = "2025-10-01T18:04:52.181Z" }, +] + +[[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 = "lxml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload-time = "2025-09-22T04:04:59.287Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/d5/becbe1e2569b474a23f0c672ead8a29ac50b2dc1d5b9de184831bda8d14c/lxml-6.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:13e35cbc684aadf05d8711a5d1b5857c92e5e580efa9a0d2be197199c8def607", size = 8634365, upload-time = "2025-09-22T04:00:45.672Z" }, + { url = "https://files.pythonhosted.org/packages/28/66/1ced58f12e804644426b85d0bb8a4478ca77bc1761455da310505f1a3526/lxml-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b1675e096e17c6fe9c0e8c81434f5736c0739ff9ac6123c87c2d452f48fc938", size = 4650793, upload-time = "2025-09-22T04:00:47.783Z" }, + { url = "https://files.pythonhosted.org/packages/11/84/549098ffea39dfd167e3f174b4ce983d0eed61f9d8d25b7bf2a57c3247fc/lxml-6.0.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d", size = 4944362, upload-time = "2025-09-22T04:00:49.845Z" }, + { url = "https://files.pythonhosted.org/packages/ac/bd/f207f16abf9749d2037453d56b643a7471d8fde855a231a12d1e095c4f01/lxml-6.0.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438", size = 5083152, upload-time = "2025-09-22T04:00:51.709Z" }, + { url = "https://files.pythonhosted.org/packages/15/ae/bd813e87d8941d52ad5b65071b1affb48da01c4ed3c9c99e40abb266fbff/lxml-6.0.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964", size = 5023539, upload-time = "2025-09-22T04:00:53.593Z" }, + { url = "https://files.pythonhosted.org/packages/02/cd/9bfef16bd1d874fbe0cb51afb00329540f30a3283beb9f0780adbb7eec03/lxml-6.0.2-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d", size = 5344853, upload-time = "2025-09-22T04:00:55.524Z" }, + { url = "https://files.pythonhosted.org/packages/b8/89/ea8f91594bc5dbb879734d35a6f2b0ad50605d7fb419de2b63d4211765cc/lxml-6.0.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7", size = 5225133, upload-time = "2025-09-22T04:00:57.269Z" }, + { url = "https://files.pythonhosted.org/packages/b9/37/9c735274f5dbec726b2db99b98a43950395ba3d4a1043083dba2ad814170/lxml-6.0.2-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178", size = 4677944, upload-time = "2025-09-22T04:00:59.052Z" }, + { url = "https://files.pythonhosted.org/packages/20/28/7dfe1ba3475d8bfca3878365075abe002e05d40dfaaeb7ec01b4c587d533/lxml-6.0.2-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553", size = 5284535, upload-time = "2025-09-22T04:01:01.335Z" }, + { url = "https://files.pythonhosted.org/packages/e7/cf/5f14bc0de763498fc29510e3532bf2b4b3a1c1d5d0dff2e900c16ba021ef/lxml-6.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb", size = 5067343, upload-time = "2025-09-22T04:01:03.13Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b0/bb8275ab5472f32b28cfbbcc6db7c9d092482d3439ca279d8d6fa02f7025/lxml-6.0.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a", size = 4725419, upload-time = "2025-09-22T04:01:05.013Z" }, + { url = "https://files.pythonhosted.org/packages/25/4c/7c222753bc72edca3b99dbadba1b064209bc8ed4ad448af990e60dcce462/lxml-6.0.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c", size = 5275008, upload-time = "2025-09-22T04:01:07.327Z" }, + { url = "https://files.pythonhosted.org/packages/6c/8c/478a0dc6b6ed661451379447cdbec77c05741a75736d97e5b2b729687828/lxml-6.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7", size = 5248906, upload-time = "2025-09-22T04:01:09.452Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d9/5be3a6ab2784cdf9accb0703b65e1b64fcdd9311c9f007630c7db0cfcce1/lxml-6.0.2-cp311-cp311-win32.whl", hash = "sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46", size = 3610357, upload-time = "2025-09-22T04:01:11.102Z" }, + { url = "https://files.pythonhosted.org/packages/e2/7d/ca6fb13349b473d5732fb0ee3eec8f6c80fc0688e76b7d79c1008481bf1f/lxml-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078", size = 4036583, upload-time = "2025-09-22T04:01:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a2/51363b5ecd3eab46563645f3a2c3836a2fc67d01a1b87c5017040f39f567/lxml-6.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285", size = 3680591, upload-time = "2025-09-22T04:01:14.874Z" }, + { url = "https://files.pythonhosted.org/packages/0b/11/29d08bc103a62c0eba8016e7ed5aeebbf1e4312e83b0b1648dd203b0e87d/lxml-6.0.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1c06035eafa8404b5cf475bb37a9f6088b0aca288d4ccc9d69389750d5543700", size = 3949829, upload-time = "2025-09-22T04:04:45.608Z" }, + { url = "https://files.pythonhosted.org/packages/12/b3/52ab9a3b31e5ab8238da241baa19eec44d2ab426532441ee607165aebb52/lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee", size = 4226277, upload-time = "2025-09-22T04:04:47.754Z" }, + { url = "https://files.pythonhosted.org/packages/a0/33/1eaf780c1baad88224611df13b1c2a9dfa460b526cacfe769103ff50d845/lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f", size = 4330433, upload-time = "2025-09-22T04:04:49.907Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c1/27428a2ff348e994ab4f8777d3a0ad510b6b92d37718e5887d2da99952a2/lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9", size = 4272119, upload-time = "2025-09-22T04:04:51.801Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d0/3020fa12bcec4ab62f97aab026d57c2f0cfd480a558758d9ca233bb6a79d/lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a", size = 4417314, upload-time = "2025-09-22T04:04:55.024Z" }, + { url = "https://files.pythonhosted.org/packages/6c/77/d7f491cbc05303ac6801651aabeb262d43f319288c1ea96c66b1d2692ff3/lxml-6.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e", size = 3518768, upload-time = "2025-09-22T04:04:57.097Z" }, +] + +[[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" +version = "3.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/37/02347f6d6d8279247a5837082ebc26fc0d5aaeaf75aa013fcbb433c777ab/markdown-3.9.tar.gz", hash = "sha256:d2900fe1782bd33bdbbd56859defef70c2e78fc46668f8eb9df3128138f2cb6a", size = 364585, upload-time = "2025-09-04T20:25:22.885Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/ae/44c4a6a4cbb496d93c6257954260fe3a6e91b7bed2240e5dad2a717f5111/markdown-3.9-py3-none-any.whl", hash = "sha256:9f4d91ed810864ea88a6f32c07ba8bee1346c0cc1f6b1f9f6c822f2a9667d280", size = 107441, upload-time = "2025-09-04T20:25:21.784Z" }, +] + +[[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/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" }, +] + +[[package]] +name = "marshmallow" +version = "3.26.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/5e/5e53d26b42ab75491cda89b871dab9e97c840bf12c63ec58a1919710cd06/marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6", size = 221825, upload-time = "2025-02-03T15:32:25.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/75/51952c7b2d3873b44a0028b1bd26a25078c18f92f256608e8d1dc61b39fd/marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", size = 50878, upload-time = "2025-02-03T15:32:22.295Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.10.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/e2/d2d5295be2f44c678ebaf3544ba32d20c1f9ef08c49fe47f496180e1db15/matplotlib-3.10.7.tar.gz", hash = "sha256:a06ba7e2a2ef9131c79c49e63dad355d2d878413a0376c1727c8b9335ff731c7", size = 34804865, upload-time = "2025-10-09T00:28:00.669Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/bc/0fb489005669127ec13f51be0c6adc074d7cf191075dab1da9fe3b7a3cfc/matplotlib-3.10.7-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:53b492410a6cd66c7a471de6c924f6ede976e963c0f3097a3b7abfadddc67d0a", size = 8257507, upload-time = "2025-10-09T00:26:19.073Z" }, + { url = "https://files.pythonhosted.org/packages/e2/6a/d42588ad895279ff6708924645b5d2ed54a7fb2dc045c8a804e955aeace1/matplotlib-3.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d9749313deb729f08207718d29c86246beb2ea3fdba753595b55901dee5d2fd6", size = 8119565, upload-time = "2025-10-09T00:26:21.023Z" }, + { url = "https://files.pythonhosted.org/packages/10/b7/4aa196155b4d846bd749cf82aa5a4c300cf55a8b5e0dfa5b722a63c0f8a0/matplotlib-3.10.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2222c7ba2cbde7fe63032769f6eb7e83ab3227f47d997a8453377709b7fe3a5a", size = 8692668, upload-time = "2025-10-09T00:26:22.967Z" }, + { url = "https://files.pythonhosted.org/packages/e6/e7/664d2b97016f46683a02d854d730cfcf54ff92c1dafa424beebef50f831d/matplotlib-3.10.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e91f61a064c92c307c5a9dc8c05dc9f8a68f0a3be199d9a002a0622e13f874a1", size = 9521051, upload-time = "2025-10-09T00:26:25.041Z" }, + { url = "https://files.pythonhosted.org/packages/a8/a3/37aef1404efa615f49b5758a5e0261c16dd88f389bc1861e722620e4a754/matplotlib-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f1851eab59ca082c95df5a500106bad73672645625e04538b3ad0f69471ffcc", size = 9576878, upload-time = "2025-10-09T00:26:27.478Z" }, + { url = "https://files.pythonhosted.org/packages/33/cd/b145f9797126f3f809d177ca378de57c45413c5099c5990de2658760594a/matplotlib-3.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:6516ce375109c60ceec579e699524e9d504cd7578506f01150f7a6bc174a775e", size = 8115142, upload-time = "2025-10-09T00:26:29.774Z" }, + { url = "https://files.pythonhosted.org/packages/2e/39/63bca9d2b78455ed497fcf51a9c71df200a11048f48249038f06447fa947/matplotlib-3.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:b172db79759f5f9bc13ef1c3ef8b9ee7b37b0247f987fbbbdaa15e4f87fd46a9", size = 7992439, upload-time = "2025-10-09T00:26:40.32Z" }, + { url = "https://files.pythonhosted.org/packages/58/8f/76d5dc21ac64a49e5498d7f0472c0781dae442dd266a67458baec38288ec/matplotlib-3.10.7-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:15112bcbaef211bd663fa935ec33313b948e214454d949b723998a43357b17b0", size = 8252283, upload-time = "2025-10-09T00:27:54.739Z" }, + { url = "https://files.pythonhosted.org/packages/27/0d/9c5d4c2317feb31d819e38c9f947c942f42ebd4eb935fc6fd3518a11eaa7/matplotlib-3.10.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d2a959c640cdeecdd2ec3136e8ea0441da59bcaf58d67e9c590740addba2cb68", size = 8116733, upload-time = "2025-10-09T00:27:56.406Z" }, + { url = "https://files.pythonhosted.org/packages/9a/cc/3fe688ff1355010937713164caacf9ed443675ac48a997bab6ed23b3f7c0/matplotlib-3.10.7-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3886e47f64611046bc1db523a09dd0a0a6bed6081e6f90e13806dd1d1d1b5e91", size = 8693919, upload-time = "2025-10-09T00:27:58.41Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110, upload-time = "2025-10-23T09:00:22.126Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516, upload-time = "2025-10-23T09:00:20.675Z" }, +] + +[[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 = "mergedeep" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, +] + +[[package]] +name = "mistune" +version = "3.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/02/a7fb8b21d4d55ac93cdcde9d3638da5dd0ebdd3a4fed76c7725e10b81cbe/mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164", size = 94588, upload-time = "2025-08-29T07:20:43.594Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481, upload-time = "2025-08-29T07:20:42.218Z" }, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ghp-import" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mergedeep" }, + { name = "mkdocs-get-deps" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "pyyaml" }, + { name = "pyyaml-env-tag" }, + { name = "watchdog" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, +] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mergedeep" }, + { name = "platformdirs" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload-time = "2023-11-20T17:51:09.981Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload-time = "2023-11-20T17:51:08.587Z" }, +] + +[[package]] +name = "mlflow" +version = "2.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "alembic" }, + { name = "docker" }, + { name = "flask" }, + { name = "graphene" }, + { name = "gunicorn", marker = "sys_platform != 'win32'" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "matplotlib" }, + { name = "mlflow-skinny" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "sqlalchemy" }, + { name = "waitress", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2c/22/a2d2fa7d142959720a3c5b5ffcd914be9fe02e299734ddd21c293a797981/mlflow-2.22.0.tar.gz", hash = "sha256:5b8780a8407c1b2ad441a13054f33ed0a0a58df4a69ddada2e30321d287e4f87", size = 28375641, upload-time = "2025-04-24T09:11:44.059Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/8f/b3bdbaf3f060801e5d8b7b7f3b67c79e3d12939c67002f9a618150317a29/mlflow-2.22.0-py3-none-any.whl", hash = "sha256:3ada72e39bd7b381c360aa9baddeb701d41f0b83b5889ddab7fdc6d7a5bc9b52", size = 29002380, upload-time = "2025-04-24T09:11:38.133Z" }, +] + +[[package]] +name = "mlflow-skinny" +version = "2.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cachetools" }, + { name = "click" }, + { name = "cloudpickle" }, + { name = "databricks-sdk" }, + { name = "fastapi" }, + { name = "gitpython" }, + { name = "importlib-metadata" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-sdk" }, + { name = "packaging" }, + { name = "protobuf" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sqlparse" }, + { name = "typing-extensions" }, + { name = "uvicorn" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/16/1e/7d29817fa2370f88550e86ae2be4bee5f9efe82169032dc5b1cab642e5b6/mlflow_skinny-2.22.0.tar.gz", hash = "sha256:774b58970038990650486cd934d46b7038fc390682c3bde70b4e5106f6857cce", size = 5889903, upload-time = "2025-04-24T08:24:27.876Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/eb/53dd2a5db1040a21da2980c382ebe3a9bda2d8af8365c2d01053c924b150/mlflow_skinny-2.22.0-py3-none-any.whl", hash = "sha256:9efc39454f6cc3433e7d804c3df8dab4fbba1abe504c52c05f00ef1d0696fef5", size = 6268849, upload-time = "2025-04-24T08:24:25.487Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/80/1e/5492c365f222f907de1039b91f922b93fa4f764c713ee858d235495d8f50/multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5", size = 101834, upload-time = "2025-10-06T14:52:30.657Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/9e/5c727587644d67b2ed479041e4b1c58e30afc011e3d45d25bbe35781217c/multidict-6.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc", size = 76604, upload-time = "2025-10-06T14:48:54.277Z" }, + { url = "https://files.pythonhosted.org/packages/17/e4/67b5c27bd17c085a5ea8f1ec05b8a3e5cba0ca734bfcad5560fb129e70ca/multidict-6.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721", size = 44715, upload-time = "2025-10-06T14:48:55.445Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6", size = 44332, upload-time = "2025-10-06T14:48:56.706Z" }, + { url = "https://files.pythonhosted.org/packages/31/61/0c2d50241ada71ff61a79518db85ada85fdabfcf395d5968dae1cbda04e5/multidict-6.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c", size = 245212, upload-time = "2025-10-06T14:48:58.042Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e0/919666a4e4b57fff1b57f279be1c9316e6cdc5de8a8b525d76f6598fefc7/multidict-6.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7", size = 246671, upload-time = "2025-10-06T14:49:00.004Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cc/d027d9c5a520f3321b65adea289b965e7bcbd2c34402663f482648c716ce/multidict-6.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7", size = 225491, upload-time = "2025-10-06T14:49:01.393Z" }, + { url = "https://files.pythonhosted.org/packages/75/c4/bbd633980ce6155a28ff04e6a6492dd3335858394d7bb752d8b108708558/multidict-6.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9", size = 257322, upload-time = "2025-10-06T14:49:02.745Z" }, + { url = "https://files.pythonhosted.org/packages/4c/6d/d622322d344f1f053eae47e033b0b3f965af01212de21b10bcf91be991fb/multidict-6.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8", size = 254694, upload-time = "2025-10-06T14:49:04.15Z" }, + { url = "https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd", size = 246715, upload-time = "2025-10-06T14:49:05.967Z" }, + { url = "https://files.pythonhosted.org/packages/78/59/950818e04f91b9c2b95aab3d923d9eabd01689d0dcd889563988e9ea0fd8/multidict-6.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb", size = 243189, upload-time = "2025-10-06T14:49:07.37Z" }, + { url = "https://files.pythonhosted.org/packages/7a/3d/77c79e1934cad2ee74991840f8a0110966d9599b3af95964c0cd79bb905b/multidict-6.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6", size = 237845, upload-time = "2025-10-06T14:49:08.759Z" }, + { url = "https://files.pythonhosted.org/packages/63/1b/834ce32a0a97a3b70f86437f685f880136677ac00d8bce0027e9fd9c2db7/multidict-6.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2", size = 246374, upload-time = "2025-10-06T14:49:10.574Z" }, + { url = "https://files.pythonhosted.org/packages/23/ef/43d1c3ba205b5dec93dc97f3fba179dfa47910fc73aaaea4f7ceb41cec2a/multidict-6.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff", size = 253345, upload-time = "2025-10-06T14:49:12.331Z" }, + { url = "https://files.pythonhosted.org/packages/6b/03/eaf95bcc2d19ead522001f6a650ef32811aa9e3624ff0ad37c445c7a588c/multidict-6.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b", size = 246940, upload-time = "2025-10-06T14:49:13.821Z" }, + { url = "https://files.pythonhosted.org/packages/e8/df/ec8a5fd66ea6cd6f525b1fcbb23511b033c3e9bc42b81384834ffa484a62/multidict-6.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34", size = 242229, upload-time = "2025-10-06T14:49:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a2/59b405d59fd39ec86d1142630e9049243015a5f5291ba49cadf3c090c541/multidict-6.7.0-cp311-cp311-win32.whl", hash = "sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff", size = 41308, upload-time = "2025-10-06T14:49:16.871Z" }, + { url = "https://files.pythonhosted.org/packages/32/0f/13228f26f8b882c34da36efa776c3b7348455ec383bab4a66390e42963ae/multidict-6.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81", size = 46037, upload-time = "2025-10-06T14:49:18.457Z" }, + { url = "https://files.pythonhosted.org/packages/84/1f/68588e31b000535a3207fd3c909ebeec4fb36b52c442107499c18a896a2a/multidict-6.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912", size = 43023, upload-time = "2025-10-06T14:49:19.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "nbclient" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload-time = "2024-12-19T10:32:27.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload-time = "2024-12-19T10:32:24.139Z" }, +] + +[[package]] +name = "nbconvert" +version = "7.16.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload-time = "2025-01-28T09:29:14.724Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload-time = "2025-01-28T09:29:12.551Z" }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload-time = "2024-04-04T11:20:37.371Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload-time = "2024-04-04T11:20:34.895Z" }, +] + +[[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 = "numba" +version = "0.62.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llvmlite" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/20/33dbdbfe60e5fd8e3dbfde299d106279a33d9f8308346022316781368591/numba-0.62.1.tar.gz", hash = "sha256:7b774242aa890e34c21200a1fc62e5b5757d5286267e71103257f4e2af0d5161", size = 2749817, upload-time = "2025-09-29T10:46:31.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/5f/8b3491dd849474f55e33c16ef55678ace1455c490555337899c35826836c/numba-0.62.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:f43e24b057714e480fe44bc6031de499e7cf8150c63eb461192caa6cc8530bc8", size = 2684279, upload-time = "2025-09-29T10:43:37.213Z" }, + { url = "https://files.pythonhosted.org/packages/bf/18/71969149bfeb65a629e652b752b80167fe8a6a6f6e084f1f2060801f7f31/numba-0.62.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:57cbddc53b9ee02830b828a8428757f5c218831ccc96490a314ef569d8342b7b", size = 2687330, upload-time = "2025-09-29T10:43:59.601Z" }, + { url = "https://files.pythonhosted.org/packages/0e/7d/403be3fecae33088027bc8a95dc80a2fda1e3beff3e0e5fc4374ada3afbe/numba-0.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:604059730c637c7885386521bb1b0ddcbc91fd56131a6dcc54163d6f1804c872", size = 3739727, upload-time = "2025-09-29T10:42:45.922Z" }, + { url = "https://files.pythonhosted.org/packages/e0/c3/3d910d08b659a6d4c62ab3cd8cd93c4d8b7709f55afa0d79a87413027ff6/numba-0.62.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6c540880170bee817011757dc9049dba5a29db0c09b4d2349295991fe3ee55f", size = 3445490, upload-time = "2025-09-29T10:43:12.692Z" }, + { url = "https://files.pythonhosted.org/packages/5b/82/9d425c2f20d9f0a37f7cb955945a553a00fa06a2b025856c3550227c5543/numba-0.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:03de6d691d6b6e2b76660ba0f38f37b81ece8b2cc524a62f2a0cfae2bfb6f9da", size = 2745550, upload-time = "2025-09-29T10:44:20.571Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/f4/098d2270d52b41f1bd7db9fc288aaa0400cb48c2a3e2af6fa365d9720947/numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a", size = 20582187, upload-time = "2025-10-15T16:18:11.77Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e7/0e07379944aa8afb49a556a2b54587b828eb41dc9adc56fb7615b678ca53/numpy-2.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e78aecd2800b32e8347ce49316d3eaf04aed849cd5b38e0af39f829a4e59f5eb", size = 21259519, upload-time = "2025-10-15T16:15:19.012Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cb/5a69293561e8819b09e34ed9e873b9a82b5f2ade23dce4c51dc507f6cfe1/numpy-2.3.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fd09cc5d65bda1e79432859c40978010622112e9194e581e3415a3eccc7f43f", size = 14452796, upload-time = "2025-10-15T16:15:23.094Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/ff11611200acd602a1e5129e36cfd25bf01ad8e5cf927baf2e90236eb02e/numpy-2.3.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:1b219560ae2c1de48ead517d085bc2d05b9433f8e49d0955c82e8cd37bd7bf36", size = 5381639, upload-time = "2025-10-15T16:15:25.572Z" }, + { url = "https://files.pythonhosted.org/packages/ea/77/e95c757a6fe7a48d28a009267408e8aa382630cc1ad1db7451b3bc21dbb4/numpy-2.3.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:bafa7d87d4c99752d07815ed7a2c0964f8ab311eb8168f41b910bd01d15b6032", size = 6914296, upload-time = "2025-10-15T16:15:27.079Z" }, + { url = "https://files.pythonhosted.org/packages/a3/d2/137c7b6841c942124eae921279e5c41b1c34bab0e6fc60c7348e69afd165/numpy-2.3.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36dc13af226aeab72b7abad501d370d606326a0029b9f435eacb3b8c94b8a8b7", size = 14591904, upload-time = "2025-10-15T16:15:29.044Z" }, + { url = "https://files.pythonhosted.org/packages/bb/32/67e3b0f07b0aba57a078c4ab777a9e8e6bc62f24fb53a2337f75f9691699/numpy-2.3.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7b2f9a18b5ff9824a6af80de4f37f4ec3c2aab05ef08f51c77a093f5b89adda", size = 16939602, upload-time = "2025-10-15T16:15:31.106Z" }, + { url = "https://files.pythonhosted.org/packages/95/22/9639c30e32c93c4cee3ccdb4b09c2d0fbff4dcd06d36b357da06146530fb/numpy-2.3.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9984bd645a8db6ca15d850ff996856d8762c51a2239225288f08f9050ca240a0", size = 16372661, upload-time = "2025-10-15T16:15:33.546Z" }, + { url = "https://files.pythonhosted.org/packages/12/e9/a685079529be2b0156ae0c11b13d6be647743095bb51d46589e95be88086/numpy-2.3.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:64c5825affc76942973a70acf438a8ab618dbd692b84cd5ec40a0a0509edc09a", size = 18884682, upload-time = "2025-10-15T16:15:36.105Z" }, + { url = "https://files.pythonhosted.org/packages/cf/85/f6f00d019b0cc741e64b4e00ce865a57b6bed945d1bbeb1ccadbc647959b/numpy-2.3.4-cp311-cp311-win32.whl", hash = "sha256:ed759bf7a70342f7817d88376eb7142fab9fef8320d6019ef87fae05a99874e1", size = 6570076, upload-time = "2025-10-15T16:15:38.225Z" }, + { url = "https://files.pythonhosted.org/packages/7d/10/f8850982021cb90e2ec31990291f9e830ce7d94eef432b15066e7cbe0bec/numpy-2.3.4-cp311-cp311-win_amd64.whl", hash = "sha256:faba246fb30ea2a526c2e9645f61612341de1a83fb1e0c5edf4ddda5a9c10996", size = 13089358, upload-time = "2025-10-15T16:15:40.404Z" }, + { url = "https://files.pythonhosted.org/packages/d1/ad/afdd8351385edf0b3445f9e24210a9c3971ef4de8fd85155462fc4321d79/numpy-2.3.4-cp311-cp311-win_arm64.whl", hash = "sha256:4c01835e718bcebe80394fd0ac66c07cbb90147ebbdad3dcecd3f25de2ae7e2c", size = 10462292, upload-time = "2025-10-15T16:15:42.896Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b6/64898f51a86ec88ca1257a59c1d7fd077b60082a119affefcdf1dd0df8ca/numpy-2.3.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6e274603039f924c0fe5cb73438fa9246699c78a6df1bd3decef9ae592ae1c05", size = 21131552, upload-time = "2025-10-15T16:17:55.845Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4c/f135dc6ebe2b6a3c77f4e4838fa63d350f85c99462012306ada1bd4bc460/numpy-2.3.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d149aee5c72176d9ddbc6803aef9c0f6d2ceeea7626574fc68518da5476fa346", size = 14377796, upload-time = "2025-10-15T16:17:58.308Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a4/f33f9c23fcc13dd8412fc8614559b5b797e0aba9d8e01dfa8bae10c84004/numpy-2.3.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:6d34ed9db9e6395bb6cd33286035f73a59b058169733a9db9f85e650b88df37e", size = 5306904, upload-time = "2025-10-15T16:18:00.596Z" }, + { url = "https://files.pythonhosted.org/packages/28/af/c44097f25f834360f9fb960fa082863e0bad14a42f36527b2a121abdec56/numpy-2.3.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:fdebe771ca06bb8d6abce84e51dca9f7921fe6ad34a0c914541b063e9a68928b", size = 6819682, upload-time = "2025-10-15T16:18:02.32Z" }, + { url = "https://files.pythonhosted.org/packages/c5/8c/cd283b54c3c2b77e188f63e23039844f56b23bba1712318288c13fe86baf/numpy-2.3.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e92defe6c08211eb77902253b14fe5b480ebc5112bc741fd5e9cd0608f847", size = 14422300, upload-time = "2025-10-15T16:18:04.271Z" }, + { url = "https://files.pythonhosted.org/packages/b0/f0/8404db5098d92446b3e3695cf41c6f0ecb703d701cb0b7566ee2177f2eee/numpy-2.3.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13b9062e4f5c7ee5c7e5be96f29ba71bc5a37fed3d1d77c37390ae00724d296d", size = 16760806, upload-time = "2025-10-15T16:18:06.668Z" }, + { url = "https://files.pythonhosted.org/packages/95/8e/2844c3959ce9a63acc7c8e50881133d86666f0420bcde695e115ced0920f/numpy-2.3.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:81b3a59793523e552c4a96109dde028aa4448ae06ccac5a76ff6532a85558a7f", size = 12973130, upload-time = "2025-10-15T16:18:09.397Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.38.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/d8/0f354c375628e048bd0570645b310797299754730079853095bf000fba69/opentelemetry_api-1.38.0.tar.gz", hash = "sha256:f4c193b5e8acb0912b06ac5b16321908dd0843d75049c091487322284a3eea12", size = 65242, upload-time = "2025-10-16T08:35:50.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl", hash = "sha256:2891b0197f47124454ab9f0cf58f3be33faca394457ac3e09daba13ff50aa582", size = 65947, upload-time = "2025-10-16T08:35:30.23Z" }, +] + +[[package]] +name = "opentelemetry-sdk" +version = "1.38.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/85/cb/f0eee1445161faf4c9af3ba7b848cc22a50a3d3e2515051ad8628c35ff80/opentelemetry_sdk-1.38.0.tar.gz", hash = "sha256:93df5d4d871ed09cb4272305be4d996236eedb232253e3ab864c8620f051cebe", size = 171942, upload-time = "2025-10-16T08:36:02.257Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl", hash = "sha256:1c66af6564ecc1553d72d811a01df063ff097cdc82ce188da9951f93b8d10f6b", size = 132349, upload-time = "2025-10-16T08:35:46.995Z" }, +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.59b0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/bc/8b9ad3802cd8ac6583a4eb7de7e5d7db004e89cb7efe7008f9c8a537ee75/opentelemetry_semantic_conventions-0.59b0.tar.gz", hash = "sha256:7a6db3f30d70202d5bf9fa4b69bc866ca6a30437287de6c510fb594878aed6b0", size = 129861, upload-time = "2025-10-16T08:36:03.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/7d/c88d7b15ba8fe5c6b8f93be50fc11795e9fc05386c44afaf6b76fe191f9b/opentelemetry_semantic_conventions-0.59b0-py3-none-any.whl", hash = "sha256:35d3b8833ef97d614136e253c1da9342b4c3c083bbaf29ce31d572a1c3825eed", size = 207954, upload-time = "2025-10-16T08:35:48.054Z" }, +] + +[[package]] +name = "orjson" +version = "3.11.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/fe/ed708782d6709cc60eb4c2d8a361a440661f74134675c72990f2c48c785f/orjson-3.11.4.tar.gz", hash = "sha256:39485f4ab4c9b30a3943cfe99e1a213c4776fb69e8abd68f66b83d5a0b0fdc6d", size = 5945188, upload-time = "2025-10-24T15:50:38.027Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/1d/1ea6005fffb56715fd48f632611e163d1604e8316a5bad2288bee9a1c9eb/orjson-3.11.4-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5e59d23cd93ada23ec59a96f215139753fbfe3a4d989549bcb390f8c00370b39", size = 243498, upload-time = "2025-10-24T15:48:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/37/d7/ffed10c7da677f2a9da307d491b9eb1d0125b0307019c4ad3d665fd31f4f/orjson-3.11.4-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:5c3aedecfc1beb988c27c79d52ebefab93b6c3921dbec361167e6559aba2d36d", size = 128961, upload-time = "2025-10-24T15:48:49.571Z" }, + { url = "https://files.pythonhosted.org/packages/a2/96/3e4d10a18866d1368f73c8c44b7fe37cc8a15c32f2a7620be3877d4c55a3/orjson-3.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da9e5301f1c2caa2a9a4a303480d79c9ad73560b2e7761de742ab39fe59d9175", size = 130321, upload-time = "2025-10-24T15:48:50.713Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1f/465f66e93f434f968dd74d5b623eb62c657bdba2332f5a8be9f118bb74c7/orjson-3.11.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8873812c164a90a79f65368f8f96817e59e35d0cc02786a5356f0e2abed78040", size = 129207, upload-time = "2025-10-24T15:48:52.193Z" }, + { url = "https://files.pythonhosted.org/packages/28/43/d1e94837543321c119dff277ae8e348562fe8c0fafbb648ef7cb0c67e521/orjson-3.11.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d7feb0741ebb15204e748f26c9638e6665a5fa93c37a2c73d64f1669b0ddc63", size = 136323, upload-time = "2025-10-24T15:48:54.806Z" }, + { url = "https://files.pythonhosted.org/packages/bf/04/93303776c8890e422a5847dd012b4853cdd88206b8bbd3edc292c90102d1/orjson-3.11.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01ee5487fefee21e6910da4c2ee9eef005bee568a0879834df86f888d2ffbdd9", size = 137440, upload-time = "2025-10-24T15:48:56.326Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ef/75519d039e5ae6b0f34d0336854d55544ba903e21bf56c83adc51cd8bf82/orjson-3.11.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d40d46f348c0321df01507f92b95a377240c4ec31985225a6668f10e2676f9a", size = 136680, upload-time = "2025-10-24T15:48:57.476Z" }, + { url = "https://files.pythonhosted.org/packages/b5/18/bf8581eaae0b941b44efe14fee7b7862c3382fbc9a0842132cfc7cf5ecf4/orjson-3.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95713e5fc8af84d8edc75b785d2386f653b63d62b16d681687746734b4dfc0be", size = 136160, upload-time = "2025-10-24T15:48:59.631Z" }, + { url = "https://files.pythonhosted.org/packages/c4/35/a6d582766d351f87fc0a22ad740a641b0a8e6fc47515e8614d2e4790ae10/orjson-3.11.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad73ede24f9083614d6c4ca9a85fe70e33be7bf047ec586ee2363bc7418fe4d7", size = 140318, upload-time = "2025-10-24T15:49:00.834Z" }, + { url = "https://files.pythonhosted.org/packages/76/b3/5a4801803ab2e2e2d703bce1a56540d9f99a9143fbec7bf63d225044fef8/orjson-3.11.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:842289889de515421f3f224ef9c1f1efb199a32d76d8d2ca2706fa8afe749549", size = 406330, upload-time = "2025-10-24T15:49:02.327Z" }, + { url = "https://files.pythonhosted.org/packages/80/55/a8f682f64833e3a649f620eafefee175cbfeb9854fc5b710b90c3bca45df/orjson-3.11.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3b2427ed5791619851c52a1261b45c233930977e7de8cf36de05636c708fa905", size = 149580, upload-time = "2025-10-24T15:49:03.517Z" }, + { url = "https://files.pythonhosted.org/packages/ad/e4/c132fa0c67afbb3eb88274fa98df9ac1f631a675e7877037c611805a4413/orjson-3.11.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c36e524af1d29982e9b190573677ea02781456b2e537d5840e4538a5ec41907", size = 139846, upload-time = "2025-10-24T15:49:04.761Z" }, + { url = "https://files.pythonhosted.org/packages/54/06/dc3491489efd651fef99c5908e13951abd1aead1257c67f16135f95ce209/orjson-3.11.4-cp311-cp311-win32.whl", hash = "sha256:87255b88756eab4a68ec61837ca754e5d10fa8bc47dc57f75cedfeaec358d54c", size = 135781, upload-time = "2025-10-24T15:49:05.969Z" }, + { url = "https://files.pythonhosted.org/packages/79/b7/5e5e8d77bd4ea02a6ac54c42c818afb01dd31961be8a574eb79f1d2cfb1e/orjson-3.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:e2d5d5d798aba9a0e1fede8d853fa899ce2cb930ec0857365f700dffc2c7af6a", size = 131391, upload-time = "2025-10-24T15:49:07.355Z" }, + { url = "https://files.pythonhosted.org/packages/0f/dc/9484127cc1aa213be398ed735f5f270eedcb0c0977303a6f6ddc46b60204/orjson-3.11.4-cp311-cp311-win_arm64.whl", hash = "sha256:6bb6bb41b14c95d4f2702bce9975fda4516f1db48e500102fc4d8119032ff045", size = 126252, upload-time = "2025-10-24T15:49:08.869Z" }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +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/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" }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454, upload-time = "2024-01-18T20:08:13.726Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663, upload-time = "2024-01-18T20:08:11.28Z" }, +] + +[[package]] +name = "parso" +version = "0.8.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload-time = "2025-08-23T15:15:28.028Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" }, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, +] + +[[package]] +name = "pathvalidate" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/2a/52a8da6fe965dea6192eb716b357558e103aea0a1e9a8352ad575a8406ca/pathvalidate-3.3.1.tar.gz", hash = "sha256:b18c07212bfead624345bb8e1d6141cdcf15a39736994ea0b94035ad2b1ba177", size = 63262, upload-time = "2025-06-15T09:07:20.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl", hash = "sha256:5263baab691f8e1af96092fa5137ee17df5bdfbd6cff1fcac4d6ef4bc2e1735f", size = 24305, upload-time = "2025-06-15T09:07:19.117Z" }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "pillow" +version = "12.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/cace85a1b0c9775a9f8f5d5423c8261c858760e2466c79b2dd184638b056/pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353", size = 47008828, upload-time = "2025-10-15T18:24:14.008Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/5a/a2f6773b64edb921a756eb0729068acad9fc5208a53f4a349396e9436721/pillow-12.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0fd00cac9c03256c8b2ff58f162ebcd2587ad3e1f2e397eab718c47e24d231cc", size = 5289798, upload-time = "2025-10-15T18:21:47.763Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/069b1f8a2e4b5a37493da6c5868531c3f77b85e716ad7a590ef87d58730d/pillow-12.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3475b96f5908b3b16c47533daaa87380c491357d197564e0ba34ae75c0f3257", size = 4650589, upload-time = "2025-10-15T18:21:49.515Z" }, + { url = "https://files.pythonhosted.org/packages/61/e3/2c820d6e9a36432503ead175ae294f96861b07600a7156154a086ba7111a/pillow-12.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:110486b79f2d112cf6add83b28b627e369219388f64ef2f960fef9ebaf54c642", size = 6230472, upload-time = "2025-10-15T18:21:51.052Z" }, + { url = "https://files.pythonhosted.org/packages/4f/89/63427f51c64209c5e23d4d52071c8d0f21024d3a8a487737caaf614a5795/pillow-12.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5269cc1caeedb67e6f7269a42014f381f45e2e7cd42d834ede3c703a1d915fe3", size = 8033887, upload-time = "2025-10-15T18:21:52.604Z" }, + { url = "https://files.pythonhosted.org/packages/f6/1b/c9711318d4901093c15840f268ad649459cd81984c9ec9887756cca049a5/pillow-12.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa5129de4e174daccbc59d0a3b6d20eaf24417d59851c07ebb37aeb02947987c", size = 6343964, upload-time = "2025-10-15T18:21:54.619Z" }, + { url = "https://files.pythonhosted.org/packages/41/1e/db9470f2d030b4995083044cd8738cdd1bf773106819f6d8ba12597d5352/pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bee2a6db3a7242ea309aa7ee8e2780726fed67ff4e5b40169f2c940e7eb09227", size = 7034756, upload-time = "2025-10-15T18:21:56.151Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b0/6177a8bdd5ee4ed87cba2de5a3cc1db55ffbbec6176784ce5bb75aa96798/pillow-12.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:90387104ee8400a7b4598253b4c406f8958f59fcf983a6cea2b50d59f7d63d0b", size = 6458075, upload-time = "2025-10-15T18:21:57.759Z" }, + { url = "https://files.pythonhosted.org/packages/bc/5e/61537aa6fa977922c6a03253a0e727e6e4a72381a80d63ad8eec350684f2/pillow-12.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc91a56697869546d1b8f0a3ff35224557ae7f881050e99f615e0119bf934b4e", size = 7125955, upload-time = "2025-10-15T18:21:59.372Z" }, + { url = "https://files.pythonhosted.org/packages/1f/3d/d5033539344ee3cbd9a4d69e12e63ca3a44a739eb2d4c8da350a3d38edd7/pillow-12.0.0-cp311-cp311-win32.whl", hash = "sha256:27f95b12453d165099c84f8a8bfdfd46b9e4bda9e0e4b65f0635430027f55739", size = 6298440, upload-time = "2025-10-15T18:22:00.982Z" }, + { url = "https://files.pythonhosted.org/packages/4d/42/aaca386de5cc8bd8a0254516957c1f265e3521c91515b16e286c662854c4/pillow-12.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:b583dc9070312190192631373c6c8ed277254aa6e6084b74bdd0a6d3b221608e", size = 6999256, upload-time = "2025-10-15T18:22:02.617Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f1/9197c9c2d5708b785f631a6dfbfa8eb3fb9672837cb92ae9af812c13b4ed/pillow-12.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:759de84a33be3b178a64c8ba28ad5c135900359e85fb662bc6e403ad4407791d", size = 2436025, upload-time = "2025-10-15T18:22:04.598Z" }, + { url = "https://files.pythonhosted.org/packages/1d/b3/582327e6c9f86d037b63beebe981425d6811104cb443e8193824ef1a2f27/pillow-12.0.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b22bd8c974942477156be55a768f7aa37c46904c175be4e158b6a86e3a6b7ca8", size = 5215068, upload-time = "2025-10-15T18:23:59.594Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d6/67748211d119f3b6540baf90f92fae73ae51d5217b171b0e8b5f7e5d558f/pillow-12.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:805ebf596939e48dbb2e4922a1d3852cfc25c38160751ce02da93058b48d252a", size = 4614994, upload-time = "2025-10-15T18:24:01.669Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e1/f8281e5d844c41872b273b9f2c34a4bf64ca08905668c8ae730eedc7c9fa/pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cae81479f77420d217def5f54b5b9d279804d17e982e0f2fa19b1d1e14ab5197", size = 5246639, upload-time = "2025-10-15T18:24:03.403Z" }, + { url = "https://files.pythonhosted.org/packages/94/5a/0d8ab8ffe8a102ff5df60d0de5af309015163bf710c7bb3e8311dd3b3ad0/pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeaefa96c768fc66818730b952a862235d68825c178f1b3ffd4efd7ad2edcb7c", size = 6986839, upload-time = "2025-10-15T18:24:05.344Z" }, + { url = "https://files.pythonhosted.org/packages/20/2e/3434380e8110b76cd9eb00a363c484b050f949b4bbe84ba770bb8508a02c/pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09f2d0abef9e4e2f349305a4f8cc784a8a6c2f58a8c4892eea13b10a943bd26e", size = 5313505, upload-time = "2025-10-15T18:24:07.137Z" }, + { url = "https://files.pythonhosted.org/packages/57/ca/5a9d38900d9d74785141d6580950fe705de68af735ff6e727cb911b64740/pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bdee52571a343d721fb2eb3b090a82d959ff37fc631e3f70422e0c2e029f3e76", size = 5963654, upload-time = "2025-10-15T18:24:09.579Z" }, + { url = "https://files.pythonhosted.org/packages/95/7e/f896623c3c635a90537ac093c6a618ebe1a90d87206e42309cb5d98a1b9e/pillow-12.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b290fd8aa38422444d4b50d579de197557f182ef1068b75f5aa8558638b8d0a5", size = 6997850, upload-time = "2025-10-15T18:24:11.495Z" }, +] + +[[package]] +name = "pip" +version = "25.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/6e/74a3f0179a4a73a53d66ce57fdb4de0080a8baa1de0063de206d6167acc2/pip-25.3.tar.gz", hash = "sha256:8d0538dbbd7babbd207f261ed969c65de439f6bc9e5dbd3b3b9a77f25d95f343", size = 1803014, upload-time = "2025-10-25T00:55:41.394Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/3c/d717024885424591d5376220b5e836c2d5293ce2011523c9de23ff7bf068/pip-25.3-py3-none-any.whl", hash = "sha256:9655943313a94722b7774661c21049070f6bbb0a1516bf02f7c8d5d9201514cd", size = 1778622, upload-time = "2025-10-25T00:55:39.247Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" }, +] + +[[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 = "predicting-outcomes-in-heart-failure" +version = "0.0.1" +source = { editable = "." } +dependencies = [ + { name = "asttokens" }, + { name = "dagshub" }, + { name = "gradio" }, + { name = "great-expectations" }, + { name = "httpx" }, + { name = "imbalanced-learn" }, + { name = "ipykernel" }, + { name = "kagglehub" }, + { name = "loguru" }, + { name = "matplotlib" }, + { name = "mkdocs" }, + { name = "mlflow" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "pip" }, + { name = "pytest" }, + { name = "python-dotenv" }, + { name = "ruff" }, + { name = "scikit-learn" }, + { name = "seaborn" }, + { name = "shap" }, + { name = "tqdm" }, + { name = "typer" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pynblint" }, + { name = "ruff" }, +] + +[package.metadata] +requires-dist = [ + { name = "asttokens", specifier = ">=3.0.0" }, + { name = "dagshub", specifier = ">=0.6.3" }, + { name = "gradio", specifier = ">=6.0.2" }, + { name = "great-expectations", specifier = ">=1.9.0" }, + { name = "httpx", specifier = ">=0.28.1" }, + { name = "imbalanced-learn", specifier = ">=0.14.0" }, + { name = "ipykernel", specifier = ">=7.1.0" }, + { name = "kagglehub", specifier = ">=0.3.13" }, + { name = "loguru" }, + { name = "matplotlib", specifier = ">=3.10.7" }, + { name = "mkdocs" }, + { name = "mlflow", specifier = "==2.22.0" }, + { name = "numpy", specifier = ">=2.3.4" }, + { name = "pandas", specifier = ">=2.3.3" }, + { name = "pip" }, + { name = "pytest" }, + { name = "python-dotenv" }, + { name = "ruff" }, + { name = "scikit-learn", specifier = ">=1.7.2" }, + { name = "seaborn", specifier = ">=0.13.2" }, + { name = "shap", specifier = ">=0.50.0" }, + { name = "tqdm" }, + { name = "typer" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "pynblint", specifier = ">=0.1.6" }, + { name = "ruff", specifier = ">=0.14.2" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, +] + +[[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/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/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.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/ff/64a6c8f420818bb873713988ca5492cba3a7946be57e027ac63495157d97/protobuf-6.33.0.tar.gz", hash = "sha256:140303d5c8d2037730c548f8c7b93b20bb1dc301be280c378b82b8894589c954", size = 443463, upload-time = "2025-10-15T20:39:52.159Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/ee/52b3fa8feb6db4a833dfea4943e175ce645144532e8a90f72571ad85df4e/protobuf-6.33.0-cp310-abi3-win32.whl", hash = "sha256:d6101ded078042a8f17959eccd9236fb7a9ca20d3b0098bbcb91533a5680d035", size = 425593, upload-time = "2025-10-15T20:39:40.29Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c6/7a465f1825872c55e0341ff4a80198743f73b69ce5d43ab18043699d1d81/protobuf-6.33.0-cp310-abi3-win_amd64.whl", hash = "sha256:9a031d10f703f03768f2743a1c403af050b6ae1f3480e9c140f39c45f81b13ee", size = 436882, upload-time = "2025-10-15T20:39:42.841Z" }, + { url = "https://files.pythonhosted.org/packages/e1/a9/b6eee662a6951b9c3640e8e452ab3e09f117d99fc10baa32d1581a0d4099/protobuf-6.33.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:905b07a65f1a4b72412314082c7dbfae91a9e8b68a0cc1577515f8df58ecf455", size = 427521, upload-time = "2025-10-15T20:39:43.803Z" }, + { url = "https://files.pythonhosted.org/packages/10/35/16d31e0f92c6d2f0e77c2a3ba93185130ea13053dd16200a57434c882f2b/protobuf-6.33.0-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:e0697ece353e6239b90ee43a9231318302ad8353c70e6e45499fa52396debf90", size = 324445, upload-time = "2025-10-15T20:39:44.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/eb/2a981a13e35cda8b75b5585aaffae2eb904f8f351bdd3870769692acbd8a/protobuf-6.33.0-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:e0a1715e4f27355afd9570f3ea369735afc853a6c3951a6afe1f80d8569ad298", size = 339159, upload-time = "2025-10-15T20:39:46.186Z" }, + { url = "https://files.pythonhosted.org/packages/21/51/0b1cbad62074439b867b4e04cc09b93f6699d78fd191bed2bbb44562e077/protobuf-6.33.0-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:35be49fd3f4fefa4e6e2aacc35e8b837d6703c37a2168a55ac21e9b1bc7559ef", size = 323172, upload-time = "2025-10-15T20:39:47.465Z" }, + { url = "https://files.pythonhosted.org/packages/07/d1/0a28c21707807c6aacd5dc9c3704b2aa1effbf37adebd8caeaf68b17a636/protobuf-6.33.0-py3-none-any.whl", hash = "sha256:25c9e1963c6734448ea2d308cfa610e692b801304ba0908d7bfa564ac5132995", size = 170477, upload-time = "2025-10-15T20:39:51.311Z" }, +] + +[[package]] +name = "psutil" +version = "7.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/ec/7b8e6b9b1d22708138630ef34c53ab2b61032c04f16adfdbb96791c8c70c/psutil-7.1.2.tar.gz", hash = "sha256:aa225cdde1335ff9684708ee8c72650f6598d5ed2114b9a7c5802030b1785018", size = 487424, upload-time = "2025-10-25T10:46:34.931Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/89/b9f8d47ddbc52d7301fc868e8224e5f44ed3c7f55e6d0f54ecaf5dd9ff5e/psutil-7.1.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c9ba5c19f2d46203ee8c152c7b01df6eec87d883cfd8ee1af2ef2727f6b0f814", size = 237244, upload-time = "2025-10-25T10:47:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c8/7a/8628c2f6b240680a67d73d8742bb9ff39b1820a693740e43096d5dcb01e5/psutil-7.1.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:2a486030d2fe81bec023f703d3d155f4823a10a47c36784c84f1cc7f8d39bedb", size = 238101, upload-time = "2025-10-25T10:47:09.523Z" }, + { url = "https://files.pythonhosted.org/packages/30/28/5e27f4d5a0e347f8e3cc16cd7d35533dbce086c95807f1f0e9cd77e26c10/psutil-7.1.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3efd8fc791492e7808a51cb2b94889db7578bfaea22df931424f874468e389e3", size = 258675, upload-time = "2025-10-25T10:47:11.082Z" }, + { url = "https://files.pythonhosted.org/packages/e5/5c/79cf60c9acf36d087f0db0f82066fca4a780e97e5b3a2e4c38209c03d170/psutil-7.1.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2aeb9b64f481b8eabfc633bd39e0016d4d8bbcd590d984af764d80bf0851b8a", size = 260203, upload-time = "2025-10-25T10:47:13.226Z" }, + { url = "https://files.pythonhosted.org/packages/f7/03/0a464404c51685dcb9329fdd660b1721e076ccd7b3d97dee066bcc9ffb15/psutil-7.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:8e17852114c4e7996fe9da4745c2bdef001ebbf2f260dec406290e66628bdb91", size = 246714, upload-time = "2025-10-25T10:47:15.093Z" }, + { url = "https://files.pythonhosted.org/packages/6a/32/97ca2090f2f1b45b01b6aa7ae161cfe50671de097311975ca6eea3e7aabc/psutil-7.1.2-cp37-abi3-win_arm64.whl", hash = "sha256:3e988455e61c240cc879cb62a008c2699231bf3e3d061d7fce4234463fd2abb4", size = 243742, upload-time = "2025-10-25T10:47:17.302Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, +] + +[[package]] +name = "pyarrow" +version = "19.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7f/09/a9046344212690f0632b9c709f9bf18506522feb333c894d0de81d62341a/pyarrow-19.0.1.tar.gz", hash = "sha256:3bf266b485df66a400f282ac0b6d1b500b9d2ae73314a153dbe97d6d5cc8a99e", size = 1129437, upload-time = "2025-02-18T18:55:57.027Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/55/f1a8d838ec07fe3ca53edbe76f782df7b9aafd4417080eebf0b42aab0c52/pyarrow-19.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cc55d71898ea30dc95900297d191377caba257612f384207fe9f8293b5850f90", size = 30713987, upload-time = "2025-02-18T18:52:20.463Z" }, + { url = "https://files.pythonhosted.org/packages/13/12/428861540bb54c98a140ae858a11f71d041ef9e501e6b7eb965ca7909505/pyarrow-19.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:7a544ec12de66769612b2d6988c36adc96fb9767ecc8ee0a4d270b10b1c51e00", size = 32135613, upload-time = "2025-02-18T18:52:25.29Z" }, + { url = "https://files.pythonhosted.org/packages/2f/8a/23d7cc5ae2066c6c736bce1db8ea7bc9ac3ef97ac7e1c1667706c764d2d9/pyarrow-19.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0148bb4fc158bfbc3d6dfe5001d93ebeed253793fff4435167f6ce1dc4bddeae", size = 41149147, upload-time = "2025-02-18T18:52:30.975Z" }, + { url = "https://files.pythonhosted.org/packages/a2/7a/845d151bb81a892dfb368bf11db584cf8b216963ccce40a5cf50a2492a18/pyarrow-19.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f24faab6ed18f216a37870d8c5623f9c044566d75ec586ef884e13a02a9d62c5", size = 42178045, upload-time = "2025-02-18T18:52:36.859Z" }, + { url = "https://files.pythonhosted.org/packages/a7/31/e7282d79a70816132cf6cae7e378adfccce9ae10352d21c2fecf9d9756dd/pyarrow-19.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:4982f8e2b7afd6dae8608d70ba5bd91699077323f812a0448d8b7abdff6cb5d3", size = 40532998, upload-time = "2025-02-18T18:52:42.578Z" }, + { url = "https://files.pythonhosted.org/packages/b8/82/20f3c290d6e705e2ee9c1fa1d5a0869365ee477e1788073d8b548da8b64c/pyarrow-19.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:49a3aecb62c1be1d822f8bf629226d4a96418228a42f5b40835c1f10d42e4db6", size = 42084055, upload-time = "2025-02-18T18:52:48.749Z" }, + { url = "https://files.pythonhosted.org/packages/ff/77/e62aebd343238863f2c9f080ad2ef6ace25c919c6ab383436b5b81cbeef7/pyarrow-19.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:008a4009efdb4ea3d2e18f05cd31f9d43c388aad29c636112c2966605ba33466", size = 25283133, upload-time = "2025-02-18T18:52:54.549Z" }, +] + +[[package]] +name = "pyasn1" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322, upload-time = "2024-09-10T22:41:42.55Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135, upload-time = "2024-09-11T16:00:36.122Z" }, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" }, +] + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.3" +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/f3/1e/4f0a3233767010308f2fd6bd0814597e3f63f1dc98304a9112b8759df4ff/pydantic-2.12.3.tar.gz", hash = "sha256:1da1c82b0fc140bb0103bc1441ffe062154c8d38491189751ee00fd8ca65ce74", size = 819383, upload-time = "2025-10-17T15:04:21.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/6b/83661fa77dcefa195ad5f8cd9af3d1a7450fd57cc883ad04d65446ac2029/pydantic-2.12.3-py3-none-any.whl", hash = "sha256:6986454a854bc3bc6e5443e1369e06a3a456af9d339eda45510f517d9ea5c6bf", size = 462431, upload-time = "2025-10-17T15:04:19.346Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/18/d0944e8eaaa3efd0a91b0f1fc537d3be55ad35091b6a87638211ba691964/pydantic_core-2.41.4.tar.gz", hash = "sha256:70e47929a9d4a1905a67e4b687d5946026390568a8e952b92824118063cee4d5", size = 457557, upload-time = "2025-10-14T10:23:47.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/4c/f6cbfa1e8efacd00b846764e8484fe173d25b8dab881e277a619177f3384/pydantic_core-2.41.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:28ff11666443a1a8cf2a044d6a545ebffa8382b5f7973f22c36109205e65dc80", size = 2109062, upload-time = "2025-10-14T10:20:04.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/f8/40b72d3868896bfcd410e1bd7e516e762d326201c48e5b4a06446f6cf9e8/pydantic_core-2.41.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61760c3925d4633290292bad462e0f737b840508b4f722247d8729684f6539ae", size = 1916301, upload-time = "2025-10-14T10:20:06.857Z" }, + { url = "https://files.pythonhosted.org/packages/94/4d/d203dce8bee7faeca791671c88519969d98d3b4e8f225da5b96dad226fc8/pydantic_core-2.41.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eae547b7315d055b0de2ec3965643b0ab82ad0106a7ffd29615ee9f266a02827", size = 1968728, upload-time = "2025-10-14T10:20:08.353Z" }, + { url = "https://files.pythonhosted.org/packages/65/f5/6a66187775df87c24d526985b3a5d78d861580ca466fbd9d4d0e792fcf6c/pydantic_core-2.41.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ef9ee5471edd58d1fcce1c80ffc8783a650e3e3a193fe90d52e43bb4d87bff1f", size = 2050238, upload-time = "2025-10-14T10:20:09.766Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b9/78336345de97298cf53236b2f271912ce11f32c1e59de25a374ce12f9cce/pydantic_core-2.41.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15dd504af121caaf2c95cb90c0ebf71603c53de98305621b94da0f967e572def", size = 2249424, upload-time = "2025-10-14T10:20:11.732Z" }, + { url = "https://files.pythonhosted.org/packages/99/bb/a4584888b70ee594c3d374a71af5075a68654d6c780369df269118af7402/pydantic_core-2.41.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a926768ea49a8af4d36abd6a8968b8790f7f76dd7cbd5a4c180db2b4ac9a3a2", size = 2366047, upload-time = "2025-10-14T10:20:13.647Z" }, + { url = "https://files.pythonhosted.org/packages/5f/8d/17fc5de9d6418e4d2ae8c675f905cdafdc59d3bf3bf9c946b7ab796a992a/pydantic_core-2.41.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6916b9b7d134bff5440098a4deb80e4cb623e68974a87883299de9124126c2a8", size = 2071163, upload-time = "2025-10-14T10:20:15.307Z" }, + { url = "https://files.pythonhosted.org/packages/54/e7/03d2c5c0b8ed37a4617430db68ec5e7dbba66358b629cd69e11b4d564367/pydantic_core-2.41.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5cf90535979089df02e6f17ffd076f07237efa55b7343d98760bde8743c4b265", size = 2190585, upload-time = "2025-10-14T10:20:17.3Z" }, + { url = "https://files.pythonhosted.org/packages/be/fc/15d1c9fe5ad9266a5897d9b932b7f53d7e5cfc800573917a2c5d6eea56ec/pydantic_core-2.41.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7533c76fa647fade2d7ec75ac5cc079ab3f34879626dae5689b27790a6cf5a5c", size = 2150109, upload-time = "2025-10-14T10:20:19.143Z" }, + { url = "https://files.pythonhosted.org/packages/26/ef/e735dd008808226c83ba56972566138665b71477ad580fa5a21f0851df48/pydantic_core-2.41.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:37e516bca9264cbf29612539801ca3cd5d1be465f940417b002905e6ed79d38a", size = 2315078, upload-time = "2025-10-14T10:20:20.742Z" }, + { url = "https://files.pythonhosted.org/packages/90/00/806efdcf35ff2ac0f938362350cd9827b8afb116cc814b6b75cf23738c7c/pydantic_core-2.41.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0c19cb355224037c83642429b8ce261ae108e1c5fbf5c028bac63c77b0f8646e", size = 2318737, upload-time = "2025-10-14T10:20:22.306Z" }, + { url = "https://files.pythonhosted.org/packages/41/7e/6ac90673fe6cb36621a2283552897838c020db343fa86e513d3f563b196f/pydantic_core-2.41.4-cp311-cp311-win32.whl", hash = "sha256:09c2a60e55b357284b5f31f5ab275ba9f7f70b7525e18a132ec1f9160b4f1f03", size = 1974160, upload-time = "2025-10-14T10:20:23.817Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9d/7c5e24ee585c1f8b6356e1d11d40ab807ffde44d2db3b7dfd6d20b09720e/pydantic_core-2.41.4-cp311-cp311-win_amd64.whl", hash = "sha256:711156b6afb5cb1cb7c14a2cc2c4a8b4c717b69046f13c6b332d8a0a8f41ca3e", size = 2021883, upload-time = "2025-10-14T10:20:25.48Z" }, + { url = "https://files.pythonhosted.org/packages/33/90/5c172357460fc28b2871eb4a0fb3843b136b429c6fa827e4b588877bf115/pydantic_core-2.41.4-cp311-cp311-win_arm64.whl", hash = "sha256:6cb9cf7e761f4f8a8589a45e49ed3c0d92d1d696a45a6feaee8c904b26efc2db", size = 1968026, upload-time = "2025-10-14T10:20:27.039Z" }, + { url = "https://files.pythonhosted.org/packages/b0/12/5ba58daa7f453454464f92b3ca7b9d7c657d8641c48e370c3ebc9a82dd78/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:a1b2cfec3879afb742a7b0bcfa53e4f22ba96571c9e54d6a3afe1052d17d843b", size = 2122139, upload-time = "2025-10-14T10:22:47.288Z" }, + { url = "https://files.pythonhosted.org/packages/21/fb/6860126a77725c3108baecd10fd3d75fec25191d6381b6eb2ac660228eac/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:d175600d975b7c244af6eb9c9041f10059f20b8bbffec9e33fdd5ee3f67cdc42", size = 1936674, upload-time = "2025-10-14T10:22:49.555Z" }, + { url = "https://files.pythonhosted.org/packages/de/be/57dcaa3ed595d81f8757e2b44a38240ac5d37628bce25fb20d02c7018776/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f184d657fa4947ae5ec9c47bd7e917730fa1cbb78195037e32dcbab50aca5ee", size = 1956398, upload-time = "2025-10-14T10:22:52.19Z" }, + { url = "https://files.pythonhosted.org/packages/2f/1d/679a344fadb9695f1a6a294d739fbd21d71fa023286daeea8c0ed49e7c2b/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ed810568aeffed3edc78910af32af911c835cc39ebbfacd1f0ab5dd53028e5c", size = 2138674, upload-time = "2025-10-14T10:22:54.499Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7d/138e902ed6399b866f7cfe4435d22445e16fff888a1c00560d9dc79a780f/pydantic_core-2.41.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:491535d45cd7ad7e4a2af4a5169b0d07bebf1adfd164b0368da8aa41e19907a5", size = 2104721, upload-time = "2025-10-14T10:23:26.906Z" }, + { url = "https://files.pythonhosted.org/packages/47/13/0525623cf94627f7b53b4c2034c81edc8491cbfc7c28d5447fa318791479/pydantic_core-2.41.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:54d86c0cada6aba4ec4c047d0e348cbad7063b87ae0f005d9f8c9ad04d4a92a2", size = 1931608, upload-time = "2025-10-14T10:23:29.306Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f9/744bc98137d6ef0a233f808bfc9b18cf94624bf30836a18d3b05d08bf418/pydantic_core-2.41.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca1124aced216b2500dc2609eade086d718e8249cb9696660ab447d50a758bd", size = 2132986, upload-time = "2025-10-14T10:23:32.057Z" }, + { url = "https://files.pythonhosted.org/packages/17/c8/629e88920171173f6049386cc71f893dff03209a9ef32b4d2f7e7c264bcf/pydantic_core-2.41.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c9024169becccf0cb470ada03ee578d7348c119a0d42af3dcf9eda96e3a247c", size = 2187516, upload-time = "2025-10-14T10:23:34.871Z" }, + { url = "https://files.pythonhosted.org/packages/2e/0f/4f2734688d98488782218ca61bcc118329bf5de05bb7fe3adc7dd79b0b86/pydantic_core-2.41.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:26895a4268ae5a2849269f4991cdc97236e4b9c010e51137becf25182daac405", size = 2146146, upload-time = "2025-10-14T10:23:37.342Z" }, + { url = "https://files.pythonhosted.org/packages/ed/f2/ab385dbd94a052c62224b99cf99002eee99dbec40e10006c78575aead256/pydantic_core-2.41.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:ca4df25762cf71308c446e33c9b1fdca2923a3f13de616e2a949f38bf21ff5a8", size = 2311296, upload-time = "2025-10-14T10:23:40.145Z" }, + { url = "https://files.pythonhosted.org/packages/fc/8e/e4f12afe1beeb9823bba5375f8f258df0cc61b056b0195fb1cf9f62a1a58/pydantic_core-2.41.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5a28fcedd762349519276c36634e71853b4541079cab4acaaac60c4421827308", size = 2315386, upload-time = "2025-10-14T10:23:42.624Z" }, + { url = "https://files.pythonhosted.org/packages/48/f7/925f65d930802e3ea2eb4d5afa4cb8730c8dc0d2cb89a59dc4ed2fcb2d74/pydantic_core-2.41.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c173ddcd86afd2535e2b695217e82191580663a1d1928239f877f5a1649ef39f", size = 2147775, upload-time = "2025-10-14T10:23:45.406Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/c5/dbbc27b814c71676593d1c3f718e6cd7d4f00652cefa24b75f7aa3efb25e/pydantic_settings-2.11.0.tar.gz", hash = "sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180", size = 188394, upload-time = "2025-09-24T14:19:11.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/d6/887a1ff844e64aa823fb4905978d882a633cfe295c32eacad582b78a7d8b/pydantic_settings-2.11.0-py3-none-any.whl", hash = "sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c", size = 48608, upload-time = "2025-09-24T14:19:10.015Z" }, +] + +[[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.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pynblint" +version = "0.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitpython" }, + { name = "ipython" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "rich" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/1d/85cb08bcb43446ec4c0237bb0718f705c91eae02ad3c729950db9afea20a/pynblint-0.1.6.tar.gz", hash = "sha256:10853c0fc9bf84b85e9227c132f59f9af539771623a3aac99d0d6ababd45e601", size = 21723, upload-time = "2024-08-12T08:53:21.334Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/30/9bcd030408ae80e3a516da13834065d667798a622309fb891d50e77d30d6/pynblint-0.1.6-py3-none-any.whl", hash = "sha256:8bb972696431144768ba6bf238a83f646c3faa4dac2810338ef87fb24d91742c", size = 24356, upload-time = "2024-08-12T08:53:20.164Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.2.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/a5/181488fc2b9d093e3972d2a472855aae8a03f000592dbfce716a512b3359/pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6", size = 1099274, upload-time = "2025-09-21T04:11:06.277Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890, upload-time = "2025-09-21T04:11:04.117Z" }, +] + +[[package]] +name = "pytest" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, +] + +[[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.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221, upload-time = "2025-10-26T15:12:10.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload-time = "2025-10-26T15:12:09.109Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158, upload-time = "2024-12-16T19:45:46.972Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546, upload-time = "2024-12-16T19:45:44.423Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { 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" }, +] + +[[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/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" }, +] + +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, +] + +[[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/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/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 = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions" }, +] +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 = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + +[[package]] +name = "rich" +version = "13.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149, upload-time = "2024-11-01T16:43:57.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424, upload-time = "2024-11-01T16:43:55.817Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.28.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/48/dc/95f074d43452b3ef5d06276696ece4b3b5d696e7c9ad7173c54b1390cd70/rpds_py-0.28.0.tar.gz", hash = "sha256:abd4df20485a0983e2ca334a216249b6186d6e3c1627e106651943dbdb791aea", size = 27419, upload-time = "2025-10-22T22:24:29.327Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/34/058d0db5471c6be7bef82487ad5021ff8d1d1d27794be8730aad938649cf/rpds_py-0.28.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:03065002fd2e287725d95fbc69688e0c6daf6c6314ba38bdbaa3895418e09296", size = 362344, upload-time = "2025-10-22T22:21:39.713Z" }, + { url = "https://files.pythonhosted.org/packages/5d/67/9503f0ec8c055a0782880f300c50a2b8e5e72eb1f94dfc2053da527444dd/rpds_py-0.28.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:28ea02215f262b6d078daec0b45344c89e161eab9526b0d898221d96fdda5f27", size = 348440, upload-time = "2025-10-22T22:21:41.056Z" }, + { url = "https://files.pythonhosted.org/packages/68/2e/94223ee9b32332a41d75b6f94b37b4ce3e93878a556fc5f152cbd856a81f/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25dbade8fbf30bcc551cb352376c0ad64b067e4fc56f90e22ba70c3ce205988c", size = 379068, upload-time = "2025-10-22T22:21:42.593Z" }, + { url = "https://files.pythonhosted.org/packages/b4/25/54fd48f9f680cfc44e6a7f39a5fadf1d4a4a1fd0848076af4a43e79f998c/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c03002f54cc855860bfdc3442928ffdca9081e73b5b382ed0b9e8efe6e5e205", size = 390518, upload-time = "2025-10-22T22:21:43.998Z" }, + { url = "https://files.pythonhosted.org/packages/1b/85/ac258c9c27f2ccb1bd5d0697e53a82ebcf8088e3186d5d2bf8498ee7ed44/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9699fa7990368b22032baf2b2dce1f634388e4ffc03dfefaaac79f4695edc95", size = 525319, upload-time = "2025-10-22T22:21:45.645Z" }, + { url = "https://files.pythonhosted.org/packages/40/cb/c6734774789566d46775f193964b76627cd5f42ecf246d257ce84d1912ed/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9b06fe1a75e05e0713f06ea0c89ecb6452210fd60e2f1b6ddc1067b990e08d9", size = 404896, upload-time = "2025-10-22T22:21:47.544Z" }, + { url = "https://files.pythonhosted.org/packages/1f/53/14e37ce83202c632c89b0691185dca9532288ff9d390eacae3d2ff771bae/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9f83e7b326a3f9ec3ef84cda98fb0a74c7159f33e692032233046e7fd15da2", size = 382862, upload-time = "2025-10-22T22:21:49.176Z" }, + { url = "https://files.pythonhosted.org/packages/6a/83/f3642483ca971a54d60caa4449f9d6d4dbb56a53e0072d0deff51b38af74/rpds_py-0.28.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:0d3259ea9ad8743a75a43eb7819324cdab393263c91be86e2d1901ee65c314e0", size = 398848, upload-time = "2025-10-22T22:21:51.024Z" }, + { url = "https://files.pythonhosted.org/packages/44/09/2d9c8b2f88e399b4cfe86efdf2935feaf0394e4f14ab30c6c5945d60af7d/rpds_py-0.28.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a7548b345f66f6695943b4ef6afe33ccd3f1b638bd9afd0f730dd255c249c9e", size = 412030, upload-time = "2025-10-22T22:21:52.665Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f5/e1cec473d4bde6df1fd3738be8e82d64dd0600868e76e92dfeaebbc2d18f/rpds_py-0.28.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9a40040aa388b037eb39416710fbcce9443498d2eaab0b9b45ae988b53f5c67", size = 559700, upload-time = "2025-10-22T22:21:54.123Z" }, + { url = "https://files.pythonhosted.org/packages/8d/be/73bb241c1649edbf14e98e9e78899c2c5e52bbe47cb64811f44d2cc11808/rpds_py-0.28.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8f60c7ea34e78c199acd0d3cda37a99be2c861dd2b8cf67399784f70c9f8e57d", size = 584581, upload-time = "2025-10-22T22:21:56.102Z" }, + { url = "https://files.pythonhosted.org/packages/9c/9c/ffc6e9218cd1eb5c2c7dbd276c87cd10e8c2232c456b554169eb363381df/rpds_py-0.28.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1571ae4292649100d743b26d5f9c63503bb1fedf538a8f29a98dce2d5ba6b4e6", size = 549981, upload-time = "2025-10-22T22:21:58.253Z" }, + { url = "https://files.pythonhosted.org/packages/5f/50/da8b6d33803a94df0149345ee33e5d91ed4d25fc6517de6a25587eae4133/rpds_py-0.28.0-cp311-cp311-win32.whl", hash = "sha256:5cfa9af45e7c1140af7321fa0bef25b386ee9faa8928c80dc3a5360971a29e8c", size = 214729, upload-time = "2025-10-22T22:21:59.625Z" }, + { url = "https://files.pythonhosted.org/packages/12/fd/b0f48c4c320ee24c8c20df8b44acffb7353991ddf688af01eef5f93d7018/rpds_py-0.28.0-cp311-cp311-win_amd64.whl", hash = "sha256:dd8d86b5d29d1b74100982424ba53e56033dc47720a6de9ba0259cf81d7cecaa", size = 223977, upload-time = "2025-10-22T22:22:01.092Z" }, + { url = "https://files.pythonhosted.org/packages/b4/21/c8e77a2ac66e2ec4e21f18a04b4e9a0417ecf8e61b5eaeaa9360a91713b4/rpds_py-0.28.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e27d3a5709cc2b3e013bf93679a849213c79ae0573f9b894b284b55e729e120", size = 217326, upload-time = "2025-10-22T22:22:02.944Z" }, + { url = "https://files.pythonhosted.org/packages/ae/bc/b43f2ea505f28119bd551ae75f70be0c803d2dbcd37c1b3734909e40620b/rpds_py-0.28.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f5e7101145427087e493b9c9b959da68d357c28c562792300dd21a095118ed16", size = 363913, upload-time = "2025-10-22T22:24:07.129Z" }, + { url = "https://files.pythonhosted.org/packages/28/f2/db318195d324c89a2c57dc5195058cbadd71b20d220685c5bd1da79ee7fe/rpds_py-0.28.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:31eb671150b9c62409a888850aaa8e6533635704fe2b78335f9aaf7ff81eec4d", size = 350452, upload-time = "2025-10-22T22:24:08.754Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f2/1391c819b8573a4898cedd6b6c5ec5bc370ce59e5d6bdcebe3c9c1db4588/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48b55c1f64482f7d8bd39942f376bfdf2f6aec637ee8c805b5041e14eeb771db", size = 380957, upload-time = "2025-10-22T22:24:10.826Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5c/e5de68ee7eb7248fce93269833d1b329a196d736aefb1a7481d1e99d1222/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24743a7b372e9a76171f6b69c01aedf927e8ac3e16c474d9fe20d552a8cb45c7", size = 391919, upload-time = "2025-10-22T22:24:12.559Z" }, + { url = "https://files.pythonhosted.org/packages/fb/4f/2376336112cbfeb122fd435d608ad8d5041b3aed176f85a3cb32c262eb80/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:389c29045ee8bbb1627ea190b4976a310a295559eaf9f1464a1a6f2bf84dde78", size = 528541, upload-time = "2025-10-22T22:24:14.197Z" }, + { url = "https://files.pythonhosted.org/packages/68/53/5ae232e795853dd20da7225c5dd13a09c0a905b1a655e92bdf8d78a99fd9/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23690b5827e643150cf7b49569679ec13fe9a610a15949ed48b85eb7f98f34ec", size = 405629, upload-time = "2025-10-22T22:24:16.001Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2d/351a3b852b683ca9b6b8b38ed9efb2347596973849ba6c3a0e99877c10aa/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f0c9266c26580e7243ad0d72fc3e01d6b33866cfab5084a6da7576bcf1c4f72", size = 384123, upload-time = "2025-10-22T22:24:17.585Z" }, + { url = "https://files.pythonhosted.org/packages/e0/15/870804daa00202728cc91cb8e2385fa9f1f4eb49857c49cfce89e304eae6/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4c6c4db5d73d179746951486df97fd25e92396be07fc29ee8ff9a8f5afbdfb27", size = 400923, upload-time = "2025-10-22T22:24:19.512Z" }, + { url = "https://files.pythonhosted.org/packages/53/25/3706b83c125fa2a0bccceac951de3f76631f6bd0ee4d02a0ed780712ef1b/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3b695a8fa799dd2cfdb4804b37096c5f6dba1ac7f48a7fbf6d0485bcd060316", size = 413767, upload-time = "2025-10-22T22:24:21.316Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f9/ce43dbe62767432273ed2584cef71fef8411bddfb64125d4c19128015018/rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:6aa1bfce3f83baf00d9c5fcdbba93a3ab79958b4c7d7d1f55e7fe68c20e63912", size = 561530, upload-time = "2025-10-22T22:24:22.958Z" }, + { url = "https://files.pythonhosted.org/packages/46/c9/ffe77999ed8f81e30713dd38fd9ecaa161f28ec48bb80fa1cd9118399c27/rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b0f9dceb221792b3ee6acb5438eb1f02b0cb2c247796a72b016dcc92c6de829", size = 585453, upload-time = "2025-10-22T22:24:24.779Z" }, + { url = "https://files.pythonhosted.org/packages/ed/d2/4a73b18821fd4669762c855fd1f4e80ceb66fb72d71162d14da58444a763/rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5d0145edba8abd3db0ab22b5300c99dc152f5c9021fab861be0f0544dc3cbc5f", size = 552199, upload-time = "2025-10-22T22:24:26.54Z" }, +] + +[[package]] +name = "rsa" +version = "4.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/8a/22b7beea3ee0d44b1916c0c1cb0ee3af23b700b6da9f04991899d0c555d4/rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75", size = 29034, upload-time = "2025-04-16T09:51:18.218Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762", size = 34696, upload-time = "2025-04-16T09:51:17.142Z" }, +] + +[[package]] +name = "ruamel-yaml" +version = "0.18.16" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ruamel-yaml-clib", marker = "platform_python_implementation == 'CPython'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/c7/ee630b29e04a672ecfc9b63227c87fd7a37eb67c1bf30fe95376437f897c/ruamel.yaml-0.18.16.tar.gz", hash = "sha256:a6e587512f3c998b2225d68aa1f35111c29fad14aed561a26e73fab729ec5e5a", size = 147269, upload-time = "2025-10-22T17:54:02.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl", hash = "sha256:048f26d64245bae57a4f9ef6feb5b552a386830ef7a826f235ffb804c59efbba", size = 119858, upload-time = "2025-10-22T17:53:59.012Z" }, +] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/e9/39ec4d4b3f91188fad1842748f67d4e749c77c37e353c4e545052ee8e893/ruamel.yaml.clib-0.2.14.tar.gz", hash = "sha256:803f5044b13602d58ea378576dd75aa759f52116a0232608e8fdada4da33752e", size = 225394, upload-time = "2025-09-22T19:51:23.753Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/9f/3c51e9578b8c36fcc4bdd271a1a5bb65963a74a4b6ad1a989768a22f6c2a/ruamel.yaml.clib-0.2.14-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5bae1a073ca4244620425cd3d3aa9746bde590992b98ee8c7c8be8c597ca0d4e", size = 270207, upload-time = "2025-09-23T14:24:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/4a/16/cb02815bc2ae9c66760c0c061d23c7358f9ba51dae95ac85247662b7fbe2/ruamel.yaml.clib-0.2.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:0a54e5e40a7a691a426c2703b09b0d61a14294d25cfacc00631aa6f9c964df0d", size = 137780, upload-time = "2025-09-22T19:50:37.734Z" }, + { url = "https://files.pythonhosted.org/packages/31/c6/fc687cd1b93bff8e40861eea46d6dc1a6a778d9a085684e4045ff26a8e40/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:10d9595b6a19778f3269399eff6bab642608e5966183abc2adbe558a42d4efc9", size = 641590, upload-time = "2025-09-22T19:50:41.978Z" }, + { url = "https://files.pythonhosted.org/packages/45/5d/65a2bc08b709b08576b3f307bf63951ee68a8e047cbbda6f1c9864ecf9a7/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dba72975485f2b87b786075e18a6e5d07dc2b4d8973beb2732b9b2816f1bad70", size = 738090, upload-time = "2025-09-22T19:50:39.152Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d0/a70a03614d9a6788a3661ab1538879ed2aae4e84d861f101243116308a37/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29757bdb7c142f9595cc1b62ec49a3d1c83fab9cef92db52b0ccebaad4eafb98", size = 700744, upload-time = "2025-09-22T19:50:40.811Z" }, + { url = "https://files.pythonhosted.org/packages/77/30/c93fa457611f79946d5cb6cc97493ca5425f3f21891d7b1f9b44eaa1b38e/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:557df28dbccf79b152fe2d1b935f6063d9cc431199ea2b0e84892f35c03bb0ee", size = 742321, upload-time = "2025-09-23T18:42:48.916Z" }, + { url = "https://files.pythonhosted.org/packages/40/85/e2c54ad637117cd13244a4649946eaa00f32edcb882d1f92df90e079ab00/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:26a8de280ab0d22b6e3ec745b4a5a07151a0f74aad92dd76ab9c8d8d7087720d", size = 743805, upload-time = "2025-09-22T19:50:43.58Z" }, + { url = "https://files.pythonhosted.org/packages/81/50/f899072c38877d8ef5382e0b3d47f8c4346226c1f52d6945d6f64fec6a2f/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e501c096aa3889133d674605ebd018471bc404a59cbc17da3c5924421c54d97c", size = 769529, upload-time = "2025-09-22T19:50:45.707Z" }, + { url = "https://files.pythonhosted.org/packages/99/7c/96d4b5075e30c65ea2064e40c2d657c7c235d7b6ef18751cf89a935b9041/ruamel.yaml.clib-0.2.14-cp311-cp311-win32.whl", hash = "sha256:915748cfc25b8cfd81b14d00f4bfdb2ab227a30d6d43459034533f4d1c207a2a", size = 100256, upload-time = "2025-09-22T19:50:48.26Z" }, + { url = "https://files.pythonhosted.org/packages/7d/8c/73ee2babd04e8bfcf1fd5c20aa553d18bf0ebc24b592b4f831d12ae46cc0/ruamel.yaml.clib-0.2.14-cp311-cp311-win_amd64.whl", hash = "sha256:4ccba93c1e5a40af45b2f08e4591969fa4697eae951c708f3f83dcbf9f6c6bb1", size = 118234, upload-time = "2025-09-22T19:50:47.019Z" }, +] + +[[package]] +name = "ruff" +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/34/8218a19b2055b80601e8fd201ec723c74c7fe1ca06d525a43ed07b6d8e85/ruff-0.14.2.tar.gz", hash = "sha256:98da787668f239313d9c902ca7c523fe11b8ec3f39345553a51b25abc4629c96", size = 5539663, upload-time = "2025-10-23T19:37:00.956Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/dd/23eb2db5ad9acae7c845700493b72d3ae214dce0b226f27df89216110f2b/ruff-0.14.2-py3-none-linux_armv6l.whl", hash = "sha256:7cbe4e593505bdec5884c2d0a4d791a90301bc23e49a6b1eb642dd85ef9c64f1", size = 12533390, upload-time = "2025-10-23T19:36:18.044Z" }, + { url = "https://files.pythonhosted.org/packages/5a/8c/5f9acff43ddcf3f85130d0146d0477e28ccecc495f9f684f8f7119b74c0d/ruff-0.14.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8d54b561729cee92f8d89c316ad7a3f9705533f5903b042399b6ae0ddfc62e11", size = 12887187, upload-time = "2025-10-23T19:36:22.664Z" }, + { url = "https://files.pythonhosted.org/packages/99/fa/047646491479074029665022e9f3dc6f0515797f40a4b6014ea8474c539d/ruff-0.14.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5c8753dfa44ebb2cde10ce5b4d2ef55a41fb9d9b16732a2c5df64620dbda44a3", size = 11925177, upload-time = "2025-10-23T19:36:24.778Z" }, + { url = "https://files.pythonhosted.org/packages/15/8b/c44cf7fe6e59ab24a9d939493a11030b503bdc2a16622cede8b7b1df0114/ruff-0.14.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d0bbeffb8d9f4fccf7b5198d566d0bad99a9cb622f1fc3467af96cb8773c9e3", size = 12358285, upload-time = "2025-10-23T19:36:26.979Z" }, + { url = "https://files.pythonhosted.org/packages/45/01/47701b26254267ef40369aea3acb62a7b23e921c27372d127e0f3af48092/ruff-0.14.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7047f0c5a713a401e43a88d36843d9c83a19c584e63d664474675620aaa634a8", size = 12303832, upload-time = "2025-10-23T19:36:29.192Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5c/ae7244ca4fbdf2bee9d6405dcd5bc6ae51ee1df66eb7a9884b77b8af856d/ruff-0.14.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bf8d2f9aa1602599217d82e8e0af7fd33e5878c4d98f37906b7c93f46f9a839", size = 13036995, upload-time = "2025-10-23T19:36:31.861Z" }, + { url = "https://files.pythonhosted.org/packages/27/4c/0860a79ce6fd4c709ac01173f76f929d53f59748d0dcdd662519835dae43/ruff-0.14.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1c505b389e19c57a317cf4b42db824e2fca96ffb3d86766c1c9f8b96d32048a7", size = 14512649, upload-time = "2025-10-23T19:36:33.915Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7f/d365de998069720a3abfc250ddd876fc4b81a403a766c74ff9bde15b5378/ruff-0.14.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a307fc45ebd887b3f26b36d9326bb70bf69b01561950cdcc6c0bdf7bb8e0f7cc", size = 14088182, upload-time = "2025-10-23T19:36:36.983Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ea/d8e3e6b209162000a7be1faa41b0a0c16a133010311edc3329753cc6596a/ruff-0.14.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61ae91a32c853172f832c2f40bd05fd69f491db7289fb85a9b941ebdd549781a", size = 13599516, upload-time = "2025-10-23T19:36:39.208Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ea/c7810322086db68989fb20a8d5221dd3b79e49e396b01badca07b433ab45/ruff-0.14.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1967e40286f63ee23c615e8e7e98098dedc7301568bd88991f6e544d8ae096", size = 13272690, upload-time = "2025-10-23T19:36:41.453Z" }, + { url = "https://files.pythonhosted.org/packages/a9/39/10b05acf8c45786ef501d454e00937e1b97964f846bf28883d1f9619928a/ruff-0.14.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2877f02119cdebf52a632d743a2e302dea422bfae152ebe2f193d3285a3a65df", size = 13496497, upload-time = "2025-10-23T19:36:43.61Z" }, + { url = "https://files.pythonhosted.org/packages/59/a1/1f25f8301e13751c30895092485fada29076e5e14264bdacc37202e85d24/ruff-0.14.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e681c5bc777de5af898decdcb6ba3321d0d466f4cb43c3e7cc2c3b4e7b843a05", size = 12266116, upload-time = "2025-10-23T19:36:45.625Z" }, + { url = "https://files.pythonhosted.org/packages/5c/fa/0029bfc9ce16ae78164e6923ef392e5f173b793b26cc39aa1d8b366cf9dc/ruff-0.14.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e21be42d72e224736f0c992cdb9959a2fa53c7e943b97ef5d081e13170e3ffc5", size = 12281345, upload-time = "2025-10-23T19:36:47.618Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ab/ece7baa3c0f29b7683be868c024f0838770c16607bea6852e46b202f1ff6/ruff-0.14.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b8264016f6f209fac16262882dbebf3f8be1629777cf0f37e7aff071b3e9b92e", size = 12629296, upload-time = "2025-10-23T19:36:49.789Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7f/638f54b43f3d4e48c6a68062794e5b367ddac778051806b9e235dfb7aa81/ruff-0.14.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5ca36b4cb4db3067a3b24444463ceea5565ea78b95fe9a07ca7cb7fd16948770", size = 13371610, upload-time = "2025-10-23T19:36:51.882Z" }, + { url = "https://files.pythonhosted.org/packages/8d/35/3654a973ebe5b32e1fd4a08ed2d46755af7267da7ac710d97420d7b8657d/ruff-0.14.2-py3-none-win32.whl", hash = "sha256:41775927d287685e08f48d8eb3f765625ab0b7042cc9377e20e64f4eb0056ee9", size = 12415318, upload-time = "2025-10-23T19:36:53.961Z" }, + { url = "https://files.pythonhosted.org/packages/71/30/3758bcf9e0b6a4193a6f51abf84254aba00887dfa8c20aba18aa366c5f57/ruff-0.14.2-py3-none-win_amd64.whl", hash = "sha256:0df3424aa5c3c08b34ed8ce099df1021e3adaca6e90229273496b839e5a7e1af", size = 13565279, upload-time = "2025-10-23T19:36:56.578Z" }, + { url = "https://files.pythonhosted.org/packages/2e/5d/aa883766f8ef9ffbe6aa24f7192fb71632f31a30e77eb39aa2b0dc4290ac/ruff-0.14.2-py3-none-win_arm64.whl", hash = "sha256:ea9d635e83ba21569fbacda7e78afbfeb94911c9434aff06192d9bc23fd5495a", size = 12554956, upload-time = "2025-10-23T19:36:58.714Z" }, +] + +[[package]] +name = "s3transfer" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/62/74/8d69dcb7a9efe8baa2046891735e5dfe433ad558ae23d9e3c14c633d1d58/s3transfer-0.14.0.tar.gz", hash = "sha256:eff12264e7c8b4985074ccce27a3b38a485bb7f7422cc8046fee9be4983e4125", size = 151547, upload-time = "2025-09-09T19:23:31.089Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl", hash = "sha256:ea3b790c7077558ed1f02a3072fb3cb992bbbd253392f4b6e9e8976941c7d456", size = 85712, upload-time = "2025-09-09T19:23:30.041Z" }, +] + +[[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 = "scikit-learn" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +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/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" }, +] + +[[package]] +name = "scipy" +version = "1.16.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4c/3b/546a6f0bfe791bbb7f8d591613454d15097e53f906308ec6f7c1ce588e8e/scipy-1.16.2.tar.gz", hash = "sha256:af029b153d243a80afb6eabe40b0a07f8e35c9adc269c019f364ad747f826a6b", size = 30580599, upload-time = "2025-09-11T17:48:08.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/ef/37ed4b213d64b48422df92560af7300e10fe30b5d665dd79932baebee0c6/scipy-1.16.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:6ab88ea43a57da1af33292ebd04b417e8e2eaf9d5aa05700be8d6e1b6501cd92", size = 36619956, upload-time = "2025-09-11T17:39:20.5Z" }, + { url = "https://files.pythonhosted.org/packages/85/ab/5c2eba89b9416961a982346a4d6a647d78c91ec96ab94ed522b3b6baf444/scipy-1.16.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c95e96c7305c96ede73a7389f46ccd6c659c4da5ef1b2789466baeaed3622b6e", size = 28931117, upload-time = "2025-09-11T17:39:29.06Z" }, + { url = "https://files.pythonhosted.org/packages/80/d1/eed51ab64d227fe60229a2d57fb60ca5898cfa50ba27d4f573e9e5f0b430/scipy-1.16.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:87eb178db04ece7c698220d523c170125dbffebb7af0345e66c3554f6f60c173", size = 20921997, upload-time = "2025-09-11T17:39:34.892Z" }, + { url = "https://files.pythonhosted.org/packages/be/7c/33ea3e23bbadde96726edba6bf9111fb1969d14d9d477ffa202c67bec9da/scipy-1.16.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:4e409eac067dcee96a57fbcf424c13f428037827ec7ee3cb671ff525ca4fc34d", size = 23523374, upload-time = "2025-09-11T17:39:40.846Z" }, + { url = "https://files.pythonhosted.org/packages/96/0b/7399dc96e1e3f9a05e258c98d716196a34f528eef2ec55aad651ed136d03/scipy-1.16.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e574be127bb760f0dad24ff6e217c80213d153058372362ccb9555a10fc5e8d2", size = 33583702, upload-time = "2025-09-11T17:39:49.011Z" }, + { url = "https://files.pythonhosted.org/packages/1a/bc/a5c75095089b96ea72c1bd37a4497c24b581ec73db4ef58ebee142ad2d14/scipy-1.16.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f5db5ba6188d698ba7abab982ad6973265b74bb40a1efe1821b58c87f73892b9", size = 35883427, upload-time = "2025-09-11T17:39:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/ab/66/e25705ca3d2b87b97fe0a278a24b7f477b4023a926847935a1a71488a6a6/scipy-1.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec6e74c4e884104ae006d34110677bfe0098203a3fec2f3faf349f4cb05165e3", size = 36212940, upload-time = "2025-09-11T17:40:06.013Z" }, + { url = "https://files.pythonhosted.org/packages/d6/fd/0bb911585e12f3abdd603d721d83fc1c7492835e1401a0e6d498d7822b4b/scipy-1.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:912f46667d2d3834bc3d57361f854226475f695eb08c08a904aadb1c936b6a88", size = 38865092, upload-time = "2025-09-11T17:40:15.143Z" }, + { url = "https://files.pythonhosted.org/packages/d6/73/c449a7d56ba6e6f874183759f8483cde21f900a8be117d67ffbb670c2958/scipy-1.16.2-cp311-cp311-win_amd64.whl", hash = "sha256:91e9e8a37befa5a69e9cacbe0bcb79ae5afb4a0b130fd6db6ee6cc0d491695fa", size = 38687626, upload-time = "2025-09-11T17:40:24.041Z" }, + { url = "https://files.pythonhosted.org/packages/68/72/02f37316adf95307f5d9e579023c6899f89ff3a051fa079dbd6faafc48e5/scipy-1.16.2-cp311-cp311-win_arm64.whl", hash = "sha256:f3bf75a6dcecab62afde4d1f973f1692be013110cad5338007927db8da73249c", size = 25503506, upload-time = "2025-09-11T17:40:30.703Z" }, +] + +[[package]] +name = "seaborn" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696, upload-time = "2024-01-25T13:21:52.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914, upload-time = "2024-01-25T13:21:49.598Z" }, +] + +[[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 = "semver" +version = "3.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/d1/d3159231aec234a59dd7d601e9dd9fe96f3afff15efd33c1070019b26132/semver-3.0.4.tar.gz", hash = "sha256:afc7d8c584a5ed0a11033af086e8af226a9c0b206f313e0301f8dd7b6b589602", size = 269730, upload-time = "2025-01-24T13:19:27.617Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl", hash = "sha256:9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746", size = 17912, upload-time = "2025-01-24T13:19:24.949Z" }, +] + +[[package]] +name = "shap" +version = "0.50.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cloudpickle" }, + { name = "numba" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "slicer" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2b/2c/9ccbfbdf5ceeb914317f9691ef1fca3118d4a997eb5e79bcd8992f56c938/shap-0.50.0.tar.gz", hash = "sha256:bdc559acf7f647bc3bb22c6a1fea9f50716ed357ad595bc357b43082ae4dc6b9", size = 4087800, upload-time = "2025-11-11T18:36:53.363Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/ae/6231a667492887d775fddc0f248d48a9d6cc2cd981ea888217f0cd97acfa/shap-0.50.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:70a0e9c3b13a2b900ab4777a56d1e6cacddfd95f67cf382cdde24d376fbe13f4", size = 558401, upload-time = "2025-11-11T18:35:56.693Z" }, + { url = "https://files.pythonhosted.org/packages/11/e0/e0f9916c5a709f06645187aa6431a6a3b707a66c551f5a8e87d5b5d2e01f/shap-0.50.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f1fe9e75a948386d7a444e910bc472f2febf04d0f2175b5c03db9d5e0c2724", size = 556027, upload-time = "2025-11-11T18:35:58.766Z" }, + { url = "https://files.pythonhosted.org/packages/91/91/962c63a6c9fc90210573b2194f773c7efcff1db12b2d13f6698ce90db483/shap-0.50.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a5ccc465c0f9e005dde341823b1cdad9dfcff6786f7d04e29606af6f2d51290", size = 1045372, upload-time = "2025-11-11T18:36:00.396Z" }, + { url = "https://files.pythonhosted.org/packages/1b/c1/5166e6a382d6c2b83abd25b5c70dcd984ca37bedd304abc98e5ca9c6968c/shap-0.50.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e68f6129ddb59313da00d72843511352dc7e79512faec961644079504bbeb707", size = 1053133, upload-time = "2025-11-11T18:36:02.147Z" }, + { url = "https://files.pythonhosted.org/packages/84/a6/fa0de80073efc607032a30edae53426baa1078d7c7d546ea2a8dd8c55408/shap-0.50.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8135bd24594f5fdf16f8fe5cbc2a81544c5c5c76f6b8a152eded16c361857da6", size = 2016590, upload-time = "2025-11-11T18:36:03.654Z" }, + { url = "https://files.pythonhosted.org/packages/9b/4b/c5e104b11f04a08bd18730c5b75900fccac781d793557e9703f82254fbed/shap-0.50.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:807fc35ec82daba11da92d99607fbfc6471c211ec36b6329ae4611f355549bc8", size = 2086006, upload-time = "2025-11-11T18:36:05.822Z" }, + { url = "https://files.pythonhosted.org/packages/77/03/58e199cf59056d68b4a227ce4b2b09eeb0c9bd1d002b9e28fb574eed6200/shap-0.50.0-cp311-cp311-win_amd64.whl", hash = "sha256:f5d0e2df7142393791c10a201947ca06972eb3c599c48a33697ef6c405413267", size = 547991, upload-time = "2025-11-11T18:36:07.402Z" }, +] + +[[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 = "slicer" +version = "0.0.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/f9/b4bce2825b39b57760b361e6131a3dacee3d8951c58cb97ad120abb90317/slicer-0.0.8.tar.gz", hash = "sha256:2e7553af73f0c0c2d355f4afcc3ecf97c6f2156fcf4593955c3f56cf6c4d6eb7", size = 14894, upload-time = "2024-03-09T23:35:26.826Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/81/9ef641ff4e12cbcca30e54e72fb0951a2ba195d0cda0ba4100e532d929db/slicer-0.0.8-py3-none-any.whl", hash = "sha256:6c206258543aecd010d497dc2eca9d2805860a0b3758673903456b7df7934dc3", size = 15251, upload-time = "2024-03-09T07:03:07.708Z" }, +] + +[[package]] +name = "smmap" +version = "5.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload-time = "2025-01-02T07:14:40.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload-time = "2025-01-02T07:14:38.724Z" }, +] + +[[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 = "soupsieve" +version = "2.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472, upload-time = "2025-08-27T15:39:51.78Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679, upload-time = "2025-08-27T15:39:50.179Z" }, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.44" +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/f0/f2/840d7b9496825333f532d2e3976b8eadbf52034178aac53630d09fe6e1ef/sqlalchemy-2.0.44.tar.gz", hash = "sha256:0ae7454e1ab1d780aee69fd2aae7d6b8670a581d8847f2d1e0f7ddfbf47e5a22", size = 9819830, upload-time = "2025-10-10T14:39:12.935Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/81/15d7c161c9ddf0900b076b55345872ed04ff1ed6a0666e5e94ab44b0163c/sqlalchemy-2.0.44-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fe3917059c7ab2ee3f35e77757062b1bea10a0b6ca633c58391e3f3c6c488dd", size = 2140517, upload-time = "2025-10-10T15:36:15.64Z" }, + { url = "https://files.pythonhosted.org/packages/d4/d5/4abd13b245c7d91bdf131d4916fd9e96a584dac74215f8b5bc945206a974/sqlalchemy-2.0.44-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:de4387a354ff230bc979b46b2207af841dc8bf29847b6c7dbe60af186d97aefa", size = 2130738, upload-time = "2025-10-10T15:36:16.91Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3c/8418969879c26522019c1025171cefbb2a8586b6789ea13254ac602986c0/sqlalchemy-2.0.44-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3678a0fb72c8a6a29422b2732fe423db3ce119c34421b5f9955873eb9b62c1e", size = 3304145, upload-time = "2025-10-10T15:34:19.569Z" }, + { url = "https://files.pythonhosted.org/packages/94/2d/fdb9246d9d32518bda5d90f4b65030b9bf403a935cfe4c36a474846517cb/sqlalchemy-2.0.44-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cf6872a23601672d61a68f390e44703442639a12ee9dd5a88bbce52a695e46e", size = 3304511, upload-time = "2025-10-10T15:47:05.088Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fb/40f2ad1da97d5c83f6c1269664678293d3fe28e90ad17a1093b735420549/sqlalchemy-2.0.44-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:329aa42d1be9929603f406186630135be1e7a42569540577ba2c69952b7cf399", size = 3235161, upload-time = "2025-10-10T15:34:21.193Z" }, + { url = "https://files.pythonhosted.org/packages/95/cb/7cf4078b46752dca917d18cf31910d4eff6076e5b513c2d66100c4293d83/sqlalchemy-2.0.44-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:70e03833faca7166e6a9927fbee7c27e6ecde436774cd0b24bbcc96353bce06b", size = 3261426, upload-time = "2025-10-10T15:47:07.196Z" }, + { url = "https://files.pythonhosted.org/packages/f8/3b/55c09b285cb2d55bdfa711e778bdffdd0dc3ffa052b0af41f1c5d6e582fa/sqlalchemy-2.0.44-cp311-cp311-win32.whl", hash = "sha256:253e2f29843fb303eca6b2fc645aca91fa7aa0aa70b38b6950da92d44ff267f3", size = 2105392, upload-time = "2025-10-10T15:38:20.051Z" }, + { url = "https://files.pythonhosted.org/packages/c7/23/907193c2f4d680aedbfbdf7bf24c13925e3c7c292e813326c1b84a0b878e/sqlalchemy-2.0.44-cp311-cp311-win_amd64.whl", hash = "sha256:7a8694107eb4308a13b425ca8c0e67112f8134c846b6e1f722698708741215d5", size = 2130293, upload-time = "2025-10-10T15:38:21.601Z" }, + { url = "https://files.pythonhosted.org/packages/9c/5e/6a29fa884d9fb7ddadf6b69490a9d45fded3b38541713010dad16b77d015/sqlalchemy-2.0.44-py3-none-any.whl", hash = "sha256:19de7ca1246fbef9f9d1bff8f1ab25641569df226364a0e40457dc5457c54b05", size = 1928718, upload-time = "2025-10-10T15:29:45.32Z" }, +] + +[[package]] +name = "sqlparse" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/40/edede8dd6977b0d3da179a342c198ed100dd2aba4be081861ee5911e4da4/sqlparse-0.5.3.tar.gz", hash = "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272", size = 84999, upload-time = "2024-12-10T12:05:30.728Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl", hash = "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca", size = 44415, upload-time = "2024-12-10T12:05:27.824Z" }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "starlette" +version = "0.49.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1b/3f/507c21db33b66fb027a332f2cb3abbbe924cc3a79ced12f01ed8645955c9/starlette-0.49.1.tar.gz", hash = "sha256:481a43b71e24ed8c43b11ea02f5353d77840e01480881b8cb5a26b8cae64a8cb", size = 2654703, upload-time = "2025-10-28T17:34:10.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/da/545b75d420bb23b5d494b0517757b351963e974e79933f01e05c929f20a6/starlette-0.49.1-py3-none-any.whl", hash = "sha256:d92ce9f07e4a3caa3ac13a79523bd18e3bc0042bb8ff2d759a8e7dd0e1859875", size = 74175, upload-time = "2025-10-28T17:34:09.13Z" }, +] + +[[package]] +name = "tenacity" +version = "9.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload-time = "2025-04-02T08:25:09.966Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload-time = "2025-04-02T08:25:07.678Z" }, +] + +[[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 = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, +] + +[[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 = "toolz" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613, upload-time = "2025-10-17T04:03:21.661Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093, upload-time = "2025-10-17T04:03:20.435Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821, upload-time = "2025-08-08T18:27:00.78Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563, upload-time = "2025-08-08T18:26:42.945Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729, upload-time = "2025-08-08T18:26:44.473Z" }, + { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295, upload-time = "2025-08-08T18:26:46.021Z" }, + { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644, upload-time = "2025-08-08T18:26:47.625Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878, upload-time = "2025-08-08T18:26:50.599Z" }, + { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549, upload-time = "2025-08-08T18:26:51.864Z" }, + { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973, upload-time = "2025-08-08T18:26:53.625Z" }, + { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954, upload-time = "2025-08-08T18:26:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023, upload-time = "2025-08-08T18:26:56.677Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427, upload-time = "2025-08-08T18:26:57.91Z" }, + { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456, upload-time = "2025-08-08T18:26:59.207Z" }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, +] + +[[package]] +name = "treelib" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/31/145bdbee73d7ee4ac4e879c37faa196a32208b288ca4f308c1ad8db3f010/treelib-1.8.0.tar.gz", hash = "sha256:e1be2c6b66ffbfae85079fc4c76fb4909946d01d915ee29ff6795de53aed5d55", size = 28607, upload-time = "2025-06-29T15:06:49.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/24/32361f5d0e2eff7ff1881ac6833b6b090cfe34515b1ee9082636cbe69442/treelib-1.8.0-py3-none-any.whl", hash = "sha256:5235d1ebf988c5026f26ce6e5e0cd470007f16d4978185f5c9b3eee8a25aef81", size = 30728, upload-time = "2025-06-29T15:06:48.248Z" }, +] + +[[package]] +name = "typer" +version = "0.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/58/a79003b91ac2c6890fc5d90145c662fd5771c6f11447f116b63300436bc9/typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722", size = 98953, upload-time = "2024-08-24T21:17:57.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/2b/886d13e742e514f704c33c4caa7df0f3b89e5a25ef8db02aa9ca3d9535d5/typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b", size = 47288, upload-time = "2024-08-24T21:17:55.451Z" }, +] + +[[package]] +name = "typer-slim" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/45/81b94a52caed434b94da65729c03ad0fb7665fab0f7db9ee54c94e541403/typer_slim-0.20.0.tar.gz", hash = "sha256:9fc6607b3c6c20f5c33ea9590cbeb17848667c51feee27d9e314a579ab07d1a3", size = 106561, upload-time = "2025-10-20T17:03:46.642Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/dd/5cbf31f402f1cc0ab087c94d4669cfa55bd1e818688b910631e131d74e75/typer_slim-0.20.0-py3-none-any.whl", hash = "sha256:f42a9b7571a12b97dddf364745d29f12221865acef7a2680065f9bb29c7dc89d", size = 47087, upload-time = "2025-10-20T17:03:44.546Z" }, +] + +[[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-inspect" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825, upload-time = "2023-05-24T20:25:47.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827, upload-time = "2023-05-24T20:25:45.287Z" }, +] + +[[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 = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, +] + +[[package]] +name = "tzlocal" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tzdata", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/2e/c14812d3d4d9cd1773c6be938f89e5735a1f11a9f184ac3639b93cef35d5/tzlocal-5.3.1.tar.gz", hash = "sha256:cceffc7edecefea1f595541dbd6e990cb1ea3d19bf01b2809f362a03dd7921fd", size = 30761, upload-time = "2025-03-05T21:17:41.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl", hash = "sha256:eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d", size = 18026, upload-time = "2025-03-05T21:17:39.857Z" }, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.38.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/ce/f06b84e2697fef4688ca63bdb2fdf113ca0a3be33f94488f2cadb690b0cf/uvicorn-0.38.0.tar.gz", hash = "sha256:fd97093bdd120a2609fc0d3afe931d4d4ad688b6e75f0f929fde1bc36fe0e91d", size = 80605, upload-time = "2025-10-18T13:46:44.63Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl", hash = "sha256:48c0afd214ceb59340075b4a052ea1ee91c16fbc2a9b1469cca0e54566977b02", size = 68109, upload-time = "2025-10-18T13:46:42.958Z" }, +] + +[[package]] +name = "waitress" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/cb/04ddb054f45faa306a230769e868c28b8065ea196891f09004ebace5b184/waitress-3.0.2.tar.gz", hash = "sha256:682aaaf2af0c44ada4abfb70ded36393f0e307f4ab9456a215ce0020baefc31f", size = 179901, upload-time = "2024-11-16T20:02:35.195Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/57/a27182528c90ef38d82b636a11f606b0cbb0e17588ed205435f8affe3368/waitress-3.0.2-py3-none-any.whl", hash = "sha256:c56d67fd6e87c2ee598b76abdd4e96cfad1f24cacdea5078d382b1f9d7b5ed2e", size = 56232, upload-time = "2024-11-16T20:02:33.858Z" }, +] + +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, + { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, + { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.2.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/30/6b0809f4510673dc723187aeaf24c7f5459922d01e2f794277a3dfb90345/wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605", size = 102293, upload-time = "2025-09-22T16:29:53.023Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286, upload-time = "2025-09-22T16:29:51.641Z" }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, +] + +[[package]] +name = "werkzeug" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925, upload-time = "2024-11-08T15:52:18.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498, upload-time = "2024-11-08T15:52:16.132Z" }, +] + +[[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 = "yarl" +version = "1.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71", size = 187169, upload-time = "2025-10-06T14:12:55.963Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/27/5ab13fc84c76a0250afd3d26d5936349a35be56ce5785447d6c423b26d92/yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511", size = 141607, upload-time = "2025-10-06T14:09:16.298Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a1/d065d51d02dc02ce81501d476b9ed2229d9a990818332242a882d5d60340/yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6", size = 94027, upload-time = "2025-10-06T14:09:17.786Z" }, + { url = "https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028", size = 94963, upload-time = "2025-10-06T14:09:19.662Z" }, + { url = "https://files.pythonhosted.org/packages/68/fe/2c1f674960c376e29cb0bec1249b117d11738db92a6ccc4a530b972648db/yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d", size = 368406, upload-time = "2025-10-06T14:09:21.402Z" }, + { url = "https://files.pythonhosted.org/packages/95/26/812a540e1c3c6418fec60e9bbd38e871eaba9545e94fa5eff8f4a8e28e1e/yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503", size = 336581, upload-time = "2025-10-06T14:09:22.98Z" }, + { url = "https://files.pythonhosted.org/packages/0b/f5/5777b19e26fdf98563985e481f8be3d8a39f8734147a6ebf459d0dab5a6b/yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65", size = 388924, upload-time = "2025-10-06T14:09:24.655Z" }, + { url = "https://files.pythonhosted.org/packages/86/08/24bd2477bd59c0bbd994fe1d93b126e0472e4e3df5a96a277b0a55309e89/yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e", size = 392890, upload-time = "2025-10-06T14:09:26.617Z" }, + { url = "https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d", size = 365819, upload-time = "2025-10-06T14:09:28.544Z" }, + { url = "https://files.pythonhosted.org/packages/30/2d/f715501cae832651d3282387c6a9236cd26bd00d0ff1e404b3dc52447884/yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7", size = 363601, upload-time = "2025-10-06T14:09:30.568Z" }, + { url = "https://files.pythonhosted.org/packages/f8/f9/a678c992d78e394e7126ee0b0e4e71bd2775e4334d00a9278c06a6cce96a/yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967", size = 358072, upload-time = "2025-10-06T14:09:32.528Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d1/b49454411a60edb6fefdcad4f8e6dbba7d8019e3a508a1c5836cba6d0781/yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed", size = 385311, upload-time = "2025-10-06T14:09:34.634Z" }, + { url = "https://files.pythonhosted.org/packages/87/e5/40d7a94debb8448c7771a916d1861d6609dddf7958dc381117e7ba36d9e8/yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6", size = 381094, upload-time = "2025-10-06T14:09:36.268Z" }, + { url = "https://files.pythonhosted.org/packages/35/d8/611cc282502381ad855448643e1ad0538957fc82ae83dfe7762c14069e14/yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e", size = 370944, upload-time = "2025-10-06T14:09:37.872Z" }, + { url = "https://files.pythonhosted.org/packages/2d/df/fadd00fb1c90e1a5a8bd731fa3d3de2e165e5a3666a095b04e31b04d9cb6/yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca", size = 81804, upload-time = "2025-10-06T14:09:39.359Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f7/149bb6f45f267cb5c074ac40c01c6b3ea6d8a620d34b337f6321928a1b4d/yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b", size = 86858, upload-time = "2025-10-06T14:09:41.068Z" }, + { url = "https://files.pythonhosted.org/packages/2b/13/88b78b93ad3f2f0b78e13bfaaa24d11cbc746e93fe76d8c06bf139615646/yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376", size = 81637, upload-time = "2025-10-06T14:09:42.712Z" }, + { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, +] + +[[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" }, +]