diff --git a/Qt5_requirements64.txt b/Qt5_requirements64.txt
deleted file mode 100644
index a72667c1..00000000
--- a/Qt5_requirements64.txt
+++ /dev/null
@@ -1,373 +0,0 @@
-# the essential
-wheel
-pywin32
-
-# compilers
-cython
-pycparser
-cffi
-numba
-maturin
-
-# done in pre-step in mkl
-numpy
-scipy
-numexpr
-##mkl_service
-
-# pytorch eco-system
-Torch
-torchvision
-torchaudio
-botorch
-fastai
-dask_ml
-
-#LLM huggingface
-openai
-transformers[torch]
-accelerate
-
-
-# complementary tools
-mypy
-black
-pep8
-twine
-pytest
-coverage
-hypothesis
-pybind11
-flit
-poetry
-virtualenv
-pympler
-
-sqlite_bro
-baresql
-idlex
-
-# scientific
-matplotlib
-sympy
-
-scikit_learn
-scikit_image
-
-SQLAlchemy
-alembic
-
-#statistic
-statsmodels
-pmdarima
-pymc
-
-# to become skrub
-dirty_cat
-
-pandas
-# pandas-datareader
-xarray
-
-#pdf
-pdfrw
-reportlab
-
-#git
-gitdb
-gitpython
-
-# Jupyter
-jupyter
-# jupyterlab, ipython
-papermill
-ipython_sql
-ipympl
-ipyleaflet
-ipycanvas
-#not popular jupyterlab_rise
-
-jedi
-
-# gui
-seaborn
-altair
-plotnine
-plotly
-bokeh
-datashader
-holoviews
-mpld3
-networkx
-bqplot
-imageio
-imageio_ffmpeg
-hvplot
-wordcloud
-panel
-
-
-# gui geographic
-geopandas
-geopy
-pydeck
-# geoviews has no success
-gdal
-
-#solvers
-pycosat
-ecos
-qpsolvers
-cvxpy
-pulp
-
-# Qt5
-
-# QT
-spyder
-pyzo
-pyqtgraph
-qtconsole
-guiqwt
-PythonQwt
-guidata
-formlayout
-folium
-
-# web
-Flask
-Django
-python_dotenv
-uvicorn
-beautifulsoup4
-regex
-lxml
-html5lib
-requests
-datasette
-yarl
-xmltodict
-pystache
-pysocks
-pyjwt
-mako
-
-# parallelize (and replace celery)
-joblib
-dask[complete]
-dask_image
-cloudpickle
-fastparquet
-
-# write & read QRcode
-python-barcode
-qrcode
-opencv-python
-
-# ports
-pyodbc
-pyserial
-# pywinusb to replace per puysb+libusb-package ?
-pywinusb
-
-#rust packages
-duckdb
-polars
-
-# excel
-xlsxwriter
-openpyxl
-
-# connect to other langages
-julia
-pythonnet
-clrmagic
-
-ptpython
-
-# async
-trio
-trio-asyncio
-
-# large lange models
-llm
-llm_gpt4all
-llm_llama_cpp
-llm_markov
-huggingface_hub
-
-imbalanced-learn
-
-
-fastapi
-
-
-# needs recent wheel for altai5
-#great_expectations
-
-datasette_graphql
-sqlite_utils
-db.py
-aiosqlite
-
-
-# compression
-zstandard
-
-#2023-08-22 fuzz replacements
-rapidfuzz
-
-# dashboards
-streamlit
-dash
-
-#popular 2023-08-23
-greenlet
-Markdown
-docopt
-PyOpenGL
-Sphinx
-sphinx_rtd_theme
-rx
-bottleneck
-pystache
-pypandoc
-scikit-optimize
-fuzzywuzzy
-loky
-astropy
-snuggs
-rasterio
-flask-session
-python-multipart
-filterpy
-requests_ntlm
-
-swifter
-emcee
-zarr
-pyflux
-snakeviz
-nbdime
-simplegeneric
-ipydatagrid
-
-simpy
-supersmoother
-mpl_scatter_density
-ppci
-nltk
-simplejson
-sounddevice
-pygame
-moviepy
-altair-transform
-altair_data_server
-pygad
-xgboost
-xlwings
-cvxopt
-mpmath
-#azure
-azure-identity
-azure-cosmos
-azure-core
-sspyrs
-
-# sql - data
-adodbapi
-
-
-sqlparse
-
-mysql_connector_python
-pg8000
-
-pymongo
-redis
-
-#hdf files
-h5py
-tables
-netCDF4
-# not_popular python-hdf4
-
-cytoolz
-
-blosc
-
-brewer2mpl
-
-PyAudio
-
-lmfit
-
-# less popular cartographic
-mercantile
-pyepsg
-
-#preparing parquet
-python_snappy
-brotli
-
-feather_format
-
-jupyter_sphinx
-
-streamz
-
-vega_datasets
-
-
-gmpy2
-
-mlxtend
-
-quantecon
-
-quart
-
-hypercorn
-
-umap-learn
-flask-sqlalchemy
-
-nlopt
-
-httpie
-flask-Mail
-
-lz4
-
-jupyter_bokeh
-
-pydeck
-
-wasmer
-wasmer_compiler_cranelift
-wasmer_compiler_singlepass
-
-nbval
-
-## onnxruntime
-
-pynndescent
-
-quadprog
-
-orjson
-
-jupyter_packaging
-
-deap
-
-tbats
-
-missingno
-
-# for flask
-waitress
-
-
-
-
diff --git a/README.rst b/README.rst
index 1294e96b..45ea6512 100644
--- a/README.rst
+++ b/README.rst
@@ -1,35 +1,40 @@
WinPython tools
===============
-Copyright @ 2012-2013 Pierre Raybaut
+Copyright 2012-2013 Pierre Raybaut
-Copyright @ 2014-2024+ The Winpython development team https://github.com/winpython/
+Copyright 2014-2025+ The Winpython development team: https://github.com/winpython/
Licensed under the terms of the MIT License
-(see winpython/__init__.py for details)
+(see wppm/__init__.py for details)
Overview
--------
WinPython is a portable distribution of the Python programming
-language for Windows (https://winpython.github.io).
+language for Windows: https://winpython.github.io
-This is the `winpython` Python package, not the distribution itself.
+This is the `wppm` Python package and build toolchain repository, not the distribution itself.
It includes two main features:
WinPython Package Manager (WPPM)
- a complementary tool to navigate provided package list or register WinPython.
- pip is the recommanded way to add or remove packages
+ a complementary tool to navigate provided packages, install packages from included Wheelhouse, or register WinPython.
+ pip is the recommanded way to add or remove packages otherwise
WinPython build toolchain
- make.py is the script used to
+ generate_a_winpython_distro.bat and make.py are the toolchain used to
build a WinPython distribution from (almost) scratch.
+WinPython set of Wheel
+ You can get also the equivalent of the WinPython distribution by using one of the provided pylock.toml
+ or by using provided requirements-with-hash.txt until pip does support pylock.toml files
+
+
Dependencies
------------
-* Python3 >= 3.8
+* Python3 >= 3.10
Requirements
@@ -38,26 +43,40 @@ Requirements
* installer can be 7-Zip or nothing (just .zip-it)
-Installation
-------------
+Wppm build
+----------
From the source package (see section 'Building dependencies'), you may
-install WinPython using the following commands:
+build WPPM using the following commands:
+
+.. code-block:: bash
+
+ python -m pip install flit
+ python -m flit build
+
+Winpython Distribution wheels installation
+------------------------------------------
+
+To only install the wheels assembled per WinPython Distribution, you may
+
+.. code-block:: bash
+
+ python -m pip install --no-deps --require-hashes https://github.com/winpython/winpython/releases/download/16.6.20250620final/requir.64-3_13_5_0slim.txt
-**python -m pip install flit**
+A pylock file is also available, when you package manager can handle it
-**python -m flit build**
+.. code-block:: text
-**python -m pip install --no-index --trusted-host=None --find-links=.\dist winpython**
+ https://github.com/winpython/winpython/releases/download/16.6.20250620final/pylock.64-3_13_5_0slim.toml
But the easiest way to install the last stable release of WinPython is
-by using an executable installer: https://winpython.github.io/
+by using a zipped distribution with or without auto-extractor: https://winpython.github.io/
-More informations
------------------
+More information
+----------------
* Downloads: https://sourceforge.net/projects/winpython/files/ or https://github.com/winpython/winpython/releases
-* Development, bug reports and feature requests: https://github.com/winpython/winpython
+* Development, bug reports, discussions and feature requests: https://github.com/winpython/winpython
-* Discussions: https://groups.google.com/group/winpython
+* Discussions: https://github.com/winpython/winpython/discussions
diff --git a/build_winpython_meta.py b/build_winpython_meta.py
new file mode 100644
index 00000000..4ad25b5a
--- /dev/null
+++ b/build_winpython_meta.py
@@ -0,0 +1,102 @@
+import os
+import sys
+# Use tomllib if available (Python 3.11+), otherwise fall back to tomli
+try:
+ import tomllib # Python 3.11+
+except ImportError:
+ try:
+ import tomli as tomllib # For older Python versions
+ except ImportError:
+ print("Please install tomli for Python < 3.11: pip install tomli")
+ sys.exit(1)
+
+#import yaml
+import subprocess
+from pathlib import Path
+
+def load_builds(config_file):
+ with open(config_file, "rb") as f:
+ config = tomllib.load(f)
+ builds = config["builds"]
+ python_versions = config.get("pythons", {})
+ return builds, python_versions
+ #with open(config_file, "r", encoding="utf-8") as f:
+ # return yaml.safe_load(f)["builds"]
+
+def run_build(build, python_versions):
+ print(f"\n=== Building WinPython: {build['name']} ===")
+ print(build)
+
+ root_dir_for_builds = build["root_dir_for_builds"]
+ my_python_target = build["python_target"]
+ my_flavor = build["flavor"]
+ my_arch = str(build["arch"])
+ my_create_installer = build.get("create_installer", "True")
+ my_requirements = build.get("requirements", "")
+ my_source_dirs = build.get("source_dirs", "")
+ my_find_links = build.get("find_links", "")
+ my_toolsdirs = build.get("toolsdirs", "")
+ #my_install_options = build.get("install_options", "")
+ wheelhousereq = build.get("wheelhousereq", "")
+
+ # Get Python release info from TOML [pythons]
+ py_target = my_python_target
+ vinfo = python_versions.get(py_target, {})
+ my_python_target_release = vinfo.get("python_target_release", "")
+ my_release = vinfo.get("release", "")
+ my_release_level = vinfo.get("my_release_level", "b0")
+ mandatory_requirements = vinfo.get("mandatory_requirements", os.path.join(os.getcwd(), "mandatory_requirements.txt"))
+
+ # Get Python release info from TOML [pythons]
+ my_constraints = build.get("my_constraints", r"C:\WinP\constraints.txt")
+ target_python_exe = build.get("target_python_exe", "python.exe")
+
+ # Build directory logic
+ my_basedir = f"{root_dir_for_builds}\\bd{my_python_target}"
+ my_WINPYDIRBASE = f"{my_basedir}\\bu{my_flavor}\\WPy{my_arch}-{my_python_target_release}{my_release}{my_release_level}"
+
+ # Build env paths (customize as needed) already defined per the launcher of that script...
+
+ my_python_exe = Path(sys.executable)
+ my_buildenvi = str(my_python_exe.parent)
+
+ my_archive_dir = os.path.join(os.getcwd(), "WinPython_build_logs")
+ os.makedirs(my_archive_dir, exist_ok=True)
+
+ my_requirements_pre = build.get("my_requirements_pre", mandatory_requirements)
+
+ # Build command
+ build_cmd = [
+ str(my_python_exe),
+ "-m", "winpython.build_winpython",
+ "--buildenv", my_buildenvi,
+ "--python-target", my_python_target,
+ "--release", my_release,
+ "--release-level", my_release_level,
+ "--winpydirbase", my_WINPYDIRBASE,
+ "--flavor", my_flavor,
+ "--source_dirs", my_source_dirs,
+ "--tools_dirs", my_toolsdirs,
+ "--log-dir", my_archive_dir,
+ "--mandatory-req", mandatory_requirements,
+ "--pre-req", my_requirements_pre,
+ "--requirements", my_requirements,
+ "--constraints", my_constraints,
+ "--find-links", my_find_links,
+ "--wheelhousereq", wheelhousereq,
+ "--create-installer", my_create_installer,
+ #"--install-options", env["my_install_options"],
+ ]
+
+ print("Running build command:")
+ print(" ".join(build_cmd))
+ subprocess.run(build_cmd, cwd=os.getcwd(), check=False)
+
+def main():
+ config_file = sys.argv[1] if len(sys.argv) > 1 else "winpython_buildsZZZ.toml"
+ builds, python_versions = load_builds(config_file)
+ for build in builds:
+ run_build(build, python_versions)
+
+if __name__ == "__main__":
+ main()
diff --git a/changelogs/WinPython-64bit-3.12.6.0.md b/changelogs/WinPython-64bit-3.12.6.0.md
new file mode 100644
index 00000000..04bfa915
--- /dev/null
+++ b/changelogs/WinPython-64bit-3.12.6.0.md
@@ -0,0 +1,550 @@
+## WinPython 3.12.6.0
+
+The following packages are included in WinPython-64bit v3.12.6.0 .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Nodejs](https://nodejs.org) | v20.15.1 | a JavaScript runtime built on Chrome's V8 JavaScript engine
+[npmjs](https://www.npmjs.com/) | 10.7.0 | a package manager for JavaScript
+[Pandoc](https://pandoc.org/) | 3.1.9 | a universal document converter
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.6 | Python programming language with standard library
+[about_time](https://pypi.org/project/about_time) | 4.2.1 | Easily measure timing and throughput of code blocks, with beautiful human friendly representations.
+[absl_py](https://pypi.org/project/absl_py) | 2.0.0 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[accelerate](https://pypi.org/project/accelerate) | 0.28.0 | Accelerate
+[adbc_driver_manager](https://pypi.org/project/adbc_driver_manager) | 0.11.0 | A generic entrypoint for ADBC drivers.
+[adodbapi](https://pypi.org/project/adodbapi) | 2.6.1.3 | A pure Python package implementing PEP 249 DB-API using Microsoft ADO.
+[affine](https://pypi.org/project/affine) | 2.3.1 | Matrices describing affine transformation of the plane.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohttp](https://pypi.org/project/aiohttp) | 3.9.5 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.1 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.13.1 | A database migration tool for SQLAlchemy.
+[alive_progress](https://pypi.org/project/alive_progress) | 3.1.5 | A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!
+[altair](https://pypi.org/project/altair) | 5.4.1 | Vega-Altair: A declarative statistical visualization library for Python.
+[aniso8601](https://pypi.org/project/aniso8601) | 9.0.1 | A library for parsing ISO 8601 strings.
+[annotated_types](https://pypi.org/project/annotated_types) | 0.6.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anyio](https://pypi.org/project/anyio) | 4.4.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.12 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argon2_cffi](https://pypi.org/project/argon2_cffi) | 23.1.0 | Argon2 for Python
+[argon2_cffi_bindings](https://pypi.org/project/argon2_cffi_bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array_api_compat](https://pypi.org/project/array_api_compat) | 1.8 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi_csrf](https://pypi.org/project/asgi_csrf) | 0.9 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 0.9.31 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.1.0 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.0 | Astronomy and astrophysics core library
+[astropy_iers_data](https://pypi.org/project/astropy_iers_data) | 0.2024.4.29.0.28.48 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[async_lru](https://pypi.org/project/async_lru) | 2.0.4 | Simple LRU cache for asyncio
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 23.2.0 | Classes Without Boilerplate
+[autograd](https://pypi.org/project/autograd) | 1.6.2 | Efficiently computes derivatives of numpy code.
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure_core](https://pypi.org/project/azure_core) | 1.30.2 | Microsoft Azure Core Library for Python
+[azure_cosmos](https://pypi.org/project/azure_cosmos) | 4.7.0 | Microsoft Azure Cosmos Client Library for Python
+[azure_identity](https://pypi.org/project/azure_identity) | 1.16.1 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.15.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 0.8.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.0.1 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.12.2 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 24.8.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.1.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.7.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.5.1 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.7.2 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.1 | A simple, correct Python build frontend
+[cachelib](https://pypi.org/project/cachelib) | 0.13.0 | A collection of cache libraries in the same API interface.
+[cachetools](https://pypi.org/project/cachetools) | 5.3.3 | Extensible memoizing collections and decorators
+[cartopy](https://pypi.org/project/cartopy) | 0.23.0 | A Python library for cartographic visualizations with Matplotlib
+[certifi](https://pypi.org/project/certifi) | 2024.6.2 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.16.0 | Foreign Function Interface for Python calling C code.
+[cftime](https://pypi.org/project/cftime) | 1.6.3 | Time-handling functionality from netcdf4-python
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset_normalizer](https://pypi.org/project/charset_normalizer) | 3.3.2 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.9.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.7 | Composable command line interface toolkit
+[click_default_group](https://pypi.org/project/click_default_group) | 1.2.4 | click_default_group
+[click_plugins](https://pypi.org/project/click_plugins) | 1.1.1 | An extension module for click to enable registering CLI commands via setuptools entry-points.
+[cligj](https://pypi.org/project/cligj) | 0.7.2 | Click params for commmand line interfaces to GeoJSON
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.0.0 | Pickler class to extend the standard pickle.Pickler functionality
+[clr_loader](https://pypi.org/project/clr_loader) | 0.2.6 | Generic pure Python loader for .NET runtimes
+[clrmagic](https://pypi.org/project/clrmagic) | 0.0.1a2 | IPython cell magic to use .NET languages
+[cma](https://pypi.org/project/cma) | 3.2.2 | CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.8.2 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.2.1 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g
+[coverage](https://pypi.org/project/coverage) | 7.5.3 | Code coverage measurement for Python
+[cryptography](https://pypi.org/project/cryptography) | 41.0.5 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.5.0 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.0.11 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 0.12.3 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2024.7.1 | Parallel PyData with Task Scheduling
+[dask_expr](https://pypi.org/project/dask_expr) | 1.1.9 | High Level Expressions for Dask
+[datasette](https://pypi.org/project/datasette) | 0.64.8 | An open source multi-tool for exploring and publishing data
+[datasette_graphql](https://pypi.org/project/datasette_graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.16.3 | Data visualization toolchain based on aggregating into a grid
+[db_py](https://pypi.org/project/db_py) | 0.5.4b1 | a db package that doesn't suck
+[deap](https://pypi.org/project/deap) | 1.4.1 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.0 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[deprecated](https://pypi.org/project/deprecated) | 1.2.13 | Python @deprecated decorator to deprecate old python classes, functions or methods.
+[diff_match_patch](https://pypi.org/project/diff_match_patch) | 20230430 | Diff Match and Patch
+[dill](https://pypi.org/project/dill) | 0.3.7 | serialize all of Python
+[dirty_cat](https://pypi.org/project/dirty_cat) | 0.4.1 | Machine learning with dirty categories.
+[distlib](https://pypi.org/project/distlib) | 0.3.8 | Distribution utilities
+[distributed](https://pypi.org/project/distributed) | 2024.7.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.8.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.0.7 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.6.1 | DNS toolkit
+[docopt](https://pypi.org/project/docopt) | 0.6.2 | Pythonic argument parser, that will make you smile
+[docstring_to_markdown](https://pypi.org/project/docstring_to_markdown) | 0.13 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.20.1 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.0.0 | DuckDB in-process database
+[ecos](https://pypi.org/project/ecos) | 2.0.13 | This is the Python package for ECOS: Embedded Cone Solver. See Github page for more information.
+[email_validator](https://pypi.org/project/email_validator) | 2.2.0 | A robust email address syntax and deliverability validation library.
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et_xmlfile](https://pypi.org/project/et_xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[executing](https://pypi.org/project/executing) | 2.0.1 | Get the currently executing AST node of a frame, and other information
+[fast_histogram](https://pypi.org/project/fast_histogram) | 0.14 | Fast simple 1D and 2D histograms
+[fastapi](https://pypi.org/project/fastapi) | 0.111.1 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastapi_cli](https://pypi.org/project/fastapi_cli) | 0.0.4 | Run and manage FastAPI apps from the command line with FastAPI CLI. đ
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.18.0 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.14.0 | A platform independent file lock.
+[filterpy](https://pypi.org/project/filterpy) | 1.4.5 | Kalman filtering and optimal estimation library
+[fiona](https://pypi.org/project/fiona) | 1.9.5 | Fiona reads and writes spatial data files
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.0.3 | A simple framework for building complex web applications.
+[flask_mail](https://pypi.org/project/flask_mail) | 0.9.1 | Flask extension for sending email
+[flask_session](https://pypi.org/project/flask_session) | 0.5.0 | Server-side session support for Flask
+[flask_sqlalchemy](https://pypi.org/project/flask_sqlalchemy) | 3.0.5 | Add SQLAlchemy support to your Flask application.
+[flit](https://pypi.org/project/flit) | 3.9.0 | A simple packaging tool for simple packages.
+[flit_core](https://pypi.org/project/flit_core) | 3.9.0 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.17.0 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.51.0 | Tools to manipulate font files
+[formlayout](https://pypi.org/project/formlayout) | 1.2.1a1 | The most easy way to create Qt form dialogs and widgets with Python
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.4.1 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2024.6.1 | File-system specification
+[future](https://pypi.org/project/future) | 0.18.2 | Clean single-source support for Python 3 and 2
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 0.14.4 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.10 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.32 | GitPython is a Python library used to interact with Git repositories
+[grapheme](https://pypi.org/project/grapheme) | 0.6.0 | Unicode grapheme helpers
+[graphene](https://pypi.org/project/graphene) | 3.3 | GraphQL Framework for Python
+[graphql_core](https://pypi.org/project/graphql_core) | 3.2.3 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql_relay](https://pypi.org/project/graphql_relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.0.3 | Lightweight in-process concurrent programming
+[guidata](https://pypi.org/project/guidata) | 3.6.2 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.1.0 | HTTP/2 State-Machine based protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.10.0 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.25.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.19.1 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.0.0 | Pure-Python HPACK header compression
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.5 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.3 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httptools](https://pypi.org/project/httptools) | 0.6.1 | A collection of framework independent HTTP protocol utils.
+[httpx](https://pypi.org/project/httpx) | 0.27.0 | The next generation HTTP client.
+[huggingface_hub](https://pypi.org/project/huggingface_hub) | 0.24.5 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.10.0 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.16.0 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.0.1 | HTTP/2 framing layer for Python
+[hypothesis](https://pypi.org/project/hypothesis) | 6.108.5 | A library for property-based testing
+[idna](https://pypi.org/project/idna) | 3.7 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.33.1 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced_learn](https://pypi.org/project/imbalanced_learn) | 0.12.3 | Toolbox for imbalanced dataset in machine learning.
+[immutabledict](https://pypi.org/project/immutabledict) | 4.2.0 | Immutable wrapper around dictionaries (a fork of frozendict)
+[importlib_metadata](https://pypi.org/project/importlib_metadata) | 7.1.0 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.0.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.0.2 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.2 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.4 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.26.0 | IPython: Productive Interactive Computing
+[ipython_genutils](https://pypi.org/project/ipython_genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython_sql](https://pypi.org/project/ipython_sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.5 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 1.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco_classes](https://pypi.org/project/jaraco_classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco_context](https://pypi.org/project/jaraco_context) | 5.3.0 | Useful decorators and context managers
+[jaraco_functools](https://pypi.org/project/jaraco_functools) | 4.0.1 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.1 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.0.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.2 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.5.0 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.9.14 | A Python implementation of the JSON5 data format.
+[jsonpointer](https://pypi.org/project/jsonpointer) | 2.4 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.19.2 | An implementation of JSON Schema validation for Python
+[jsonschema_specifications](https://pypi.org/project/jsonschema_specifications) | 2023.12.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.0.0 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter_bokeh](https://pypi.org/project/jupyter_bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter_client](https://pypi.org/project/jupyter_client) | 8.6.2 | Jupyter protocol implementation and client libraries
+[jupyter_console](https://pypi.org/project/jupyter_console) | 6.6.3 | Jupyter terminal console
+[jupyter_core](https://pypi.org/project/jupyter_core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter_events](https://pypi.org/project/jupyter_events) | 0.10.0 | Jupyter Event System library
+[jupyter_leaflet](https://pypi.org/project/jupyter_leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter_lsp](https://pypi.org/project/jupyter_lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter_server](https://pypi.org/project/jupyter_server) | 2.14.2 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter_server_terminals](https://pypi.org/project/jupyter_server_terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.2.5 | JupyterLab computational environment
+[jupyterlab_pygments](https://pypi.org/project/jupyterlab_pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab_server](https://pypi.org/project/jupyterlab_server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab_widgets](https://pypi.org/project/jupyterlab_widgets) | 3.0.13 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.5.0 | Multi-backend Keras.
+[keyring](https://pypi.org/project/keyring) | 25.2.1 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.5 | A fast implementation of the Cassowary constraint solver
+[kornia](https://pypi.org/project/kornia) | 0.7.2 | Open Source Differentiable Computer Vision Library for PyTorch
+[kornia_rs](https://pypi.org/project/kornia_rs) | 0.1.3 | Low level implementations for computer vision in Rust
+[lazy_loader](https://pypi.org/project/lazy_loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[lightning](https://pypi.org/project/lightning) | 2.4.0 | The Deep Learning framework to train, deploy, and ship AI products Lightning fast.
+[lightning_utilities](https://pypi.org/project/lightning_utilities) | 0.11.6 | Lightning toolbox for across the our ecosystem.
+[linkify_it_py](https://pypi.org/project/linkify_it_py) | 2.0.2 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.43.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.1 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[lxml](https://pypi.org/project/lxml) | 5.2.2 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.5 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.5.1 | Python implementation of John Gruber's Markdown.
+[markdown_it_py](https://pypi.org/project/markdown_it_py) | 2.2.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 2.1.1 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.9.2 | Python plotting package
+[matplotlib_inline](https://pypi.org/project/matplotlib_inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.7.0 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mdit_py_plugins](https://pypi.org/project/mdit_py_plugins) | 0.3.5 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.1 | Missing data visualization module for Python.
+[mistune](https://pypi.org/project/mistune) | 2.0.5 | A sane Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml_dtypes](https://pypi.org/project/ml_dtypes) | 0.4.0 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.22.0 | Machine Learning Library Extensions
+[more_itertools](https://pypi.org/project/more_itertools) | 10.2.0 | More routines for operating on iterables, beyond itertools
+[mpl_scatter_density](https://pypi.org/project/mpl_scatter_density) | 0.7 | Matplotlib helpers to make density scatter plots
+[mpld3](https://pypi.org/project/mpld3) | 0.5.8 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal_extensions](https://pypi.org/project/msal_extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.0.4 | MessagePack serializer
+[msvc_runtime](https://pypi.org/project/msvc_runtime) | 14.40.33807 | Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories
+[multidict](https://pypi.org/project/multidict) | 6.0.5 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mutagen](https://pypi.org/project/mutagen) | 1.47.0 | read and write audio tags for many formats
+[mypy](https://pypi.org/project/mypy) | 1.11.1 | Optional static typing for Python
+[mypy_extensions](https://pypi.org/project/mypy_extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql_connector_python](https://pypi.org/project/mysql_connector_python) | 8.0.21 | MySQL driver written in Python
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.5.5 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.0 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.1 | Converting Jupyter Notebooks (.ipynb files) to other formats
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest_asyncio](https://pypi.org/project/nest_asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[netcdf4](https://pypi.org/project/netcdf4) | 1.7.1.post2 | Provides an object-oriented python interface to the netCDF version 4 library
+[networkx](https://pypi.org/project/networkx) | 3.3 | Python package for creating and manipulating graphs and networks
+[nltk](https://pypi.org/project/nltk) | 3.8.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.2.1 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook_shim](https://pypi.org/project/notebook_shim) | 0.2.4 | A shim layer for notebook traits and config
+[ntlm_auth](https://pypi.org/project/ntlm_auth) | 1.5.0 | Creates NTLM authentication structures
+[numba](https://pypi.org/project/numba) | 0.60.0 | compiling Python code using LLVM
+[numexpr](https://pypi.org/project/numexpr) | 2.10.1 | Fast numerical expression evaluator for NumPy
+[numpy](https://pypi.org/project/numpy) | 2.0.1 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.6.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.42.0 | The official Python library for the openai API
+[opencv_python](https://pypi.org/project/opencv_python) | 4.10.0.84 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.2 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[optree](https://pypi.org/project/optree) | 0.11.0 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 3.6.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.9.15 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[ortools](https://pypi.org/project/ortools) | 9.10.4067 | Google OR-Tools python libraries and modules
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.1 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.2 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.0 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.5.0b4 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.1.1 | Make your Python code clearer and more reliable by declaring Parameters.
+[paramiko](https://pypi.org/project/paramiko) | 2.8.0 | SSH2 protocol library
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.0 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.11.0 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 0.5.6 | A Python package for describing statistical models and for building design matrices.
+[pdfrw](https://pypi.org/project/pdfrw) | 0.4.post2 | PDF file reader/writer library
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.8.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.23.0 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 10.4.0 | Python Imaging Library (Fork)
+[pint](https://pypi.org/project/pint) | 0.23 | Physical quantities module
+[pip](https://pypi.org/project/pip) | 24.2 | The PyPA recommended tool for installing Python packages.
+[pkginfo](https://pypi.org/project/pkginfo) | 1.9.6 | Query metadata from sdists / bdists / installed packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.2.2 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 5.23.0 | An open-source, interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.6.2 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[pmdarima](https://pypi.org/project/pmdarima) | 2.0.4 | Python's forecast::auto.arima equivalent
+[polars](https://pypi.org/project/polars) | 1.6.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[ppci](https://pypi.org/project/ppci) | 0.5.9 | A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python
+[prettytable](https://pypi.org/project/prettytable) | 3.3.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus_client](https://pypi.org/project/prometheus_client) | 0.18.0 | Python client for the Prometheus monitoring system.
+[prompt_toolkit](https://pypi.org/project/prompt_toolkit) | 3.0.47 | Library for building powerful interactive command lines in Python
+[protobuf](https://pypi.org/project/protobuf) | 5.27.3 |
+[psutil](https://pypi.org/project/psutil) | 5.9.8 | Cross-platform lib for process and system monitoring in Python.
+[psygnal](https://pypi.org/project/psygnal) | 0.11.1 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pulp](https://pypi.org/project/pulp) | 2.6.0 | PuLP is an LP modeler written in python
+[pure_eval](https://pypi.org/project/pure_eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 17.0.0 | Python library for Apache Arrow
+[pyaudio](https://pypi.org/project/pyaudio) | 0.2.14 | Cross-platform audio I/O with PortAudio
+[pybars3](https://pypi.org/project/pybars3) | 0.9.7 | Handlebars.js templating for Python 3 and 2
+[pybind11](https://pypi.org/project/pybind11) | 2.13.1 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycosat](https://pypi.org/project/pycosat) | 0.6.6 | bindings to picosat (a SAT solver)
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pycryptodomex](https://pypi.org/project/pycryptodomex) | 3.20.0 | Cryptographic library for Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.8.2 | Data validation using Python type hints
+[pydantic_core](https://pypi.org/project/pydantic_core) | 2.20.1 | Core functionality for Pydantic validation and serialization
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyepsg](https://pypi.org/project/pyepsg) | 0.4.0 | Easy access to the EPSG database via http://epsg.io/
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.4 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygame](https://pypi.org/project/pygame) | 2.5.2 | Python Game Development
+[pygments](https://pypi.org/project/pygments) | 2.18.0 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.8.0 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.1.0 | python code static checker
+[pylint_venv](https://pypi.org/project/pylint_venv) | 3.0.3 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls_spyder](https://pypi.org/project/pyls_spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymeta3](https://pypi.org/project/pymeta3) | 0.5.1 | Pattern-matching language based on OMeta for Python 3 and 2
+[pymongo](https://pypi.org/project/pymongo) | 4.7.2 | Python driver for MongoDB
+[pymoo](https://pypi.org/project/pymoo) | 0.6.1.3 | Multi-Objective Optimization in Python
+[pympler](https://pypi.org/project/pympler) | 1.0.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.12 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.1.0 | DB API module for ODBC
+[pyomo](https://pypi.org/project/pyomo) | 6.8.0 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.5 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.1.2 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 3.15.2 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pypng](https://pypi.org/project/pypng) | 0.20220715.0 | Pure Python library for saving and loading PNG images
+[pyproj](https://pypi.org/project/pyproj) | 3.6.1 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.10 | Python bindings for the Qt cross platform application toolkit
+[pyqt5_qt5](https://pypi.org/project/pyqt5_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5_sip](https://pypi.org/project/pyqt5_sip) | 12.13.0 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.6 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine_qt5](https://pypi.org/project/pyqtwebengine_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pyshp](https://pypi.org/project/pyshp) | 2.3.1 | Pure Python read/write support for ESRI Shapefile format
+[pysimplegui](https://pypi.org/project/pysimplegui) | 4.60.4 | Python GUIs for Humans
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pytest](https://pypi.org/project/pytest) | 8.2.2 | pytest: simple powerful testing with Python
+[python_barcode](https://pypi.org/project/python_barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python_dateutil](https://pypi.org/project/python_dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python_dotenv](https://pypi.org/project/python_dotenv) | 1.0.1 | Read key-value pairs from a .env file and set them as environment variables
+[python_json_logger](https://pypi.org/project/python_json_logger) | 2.0.7 | A python library adding a json log formatter
+[python_lsp_black](https://pypi.org/project/python_lsp_black) | 2.0.0 | Black plugin for the Python LSP Server
+[python_lsp_jsonrpc](https://pypi.org/project/python_lsp_jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python_lsp_server](https://pypi.org/project/python_lsp_server) | 1.12.0 | Python Language Server for the Language Server Protocol
+[python_multipart](https://pypi.org/project/python_multipart) | 0.0.9 | A streaming multipart parser for Python
+[python_slugify](https://pypi.org/project/python_slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonnet](https://pypi.org/project/pythonnet) | 3.0.3 | .NET and Mono integration for Python
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.12.7 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytorch_lightning](https://pypi.org/project/pytorch_lightning) | 2.3.3 | PyTorch Lightning is the lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate.
+[pytz](https://pypi.org/project/pytz) | 2024.1 | World timezone definitions, modern and historical
+[pyviz_comms](https://pypi.org/project/pyviz_comms) | 3.0.3 | A JupyterLab extension for rendering HoloViz content.
+[pywin32](https://pypi.org/project/pywin32) | 306 | Python for Window Extensions
+[pywin32_ctypes](https://pypi.org/project/pywin32_ctypes) | 0.2.2 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.12 | Pseudo terminal support for Windows from Python.
+[pywinusb](https://pypi.org/project/pywinusb) | 0.4.2 | A package that simplifies USB/HID communications on windows
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.1 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.0.3 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qpsolvers](https://pypi.org/project/qpsolvers) | 4.3.0 | Quadratic programming solvers in Python with a unified API.
+[qrcode](https://pypi.org/project/qrcode) | 7.4.2 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.2 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.3.1 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.5.2 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.1 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.19.4 | A Python ASGI web microframework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.9.3 | rapid fuzzy string matching
+[rasterio](https://pypi.org/project/rasterio) | 1.3.10 | Fast and direct raster I/O for use with Numpy and SciPy
+[readme_renderer](https://pypi.org/project/readme_renderer) | 35.0 | readme_renderer is a library for rendering "readme" descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.0.3 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.35.1 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2023.10.3 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.2.2 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.31.0 | Python HTTP for Humans.
+[requests_ntlm](https://pypi.org/project/requests_ntlm) | 1.1.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests_toolbelt](https://pypi.org/project/requests_toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339_validator](https://pypi.org/project/rfc3339_validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986_validator](https://pypi.org/project/rfc3986_validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 13.7.1 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.12.0 | a python refactoring library...
+[rpds_py](https://pypi.org/project/rpds_py) | 0.13.2 | Python bindings to Rust's persistent data structures (rpds)
+[rtree](https://pypi.org/project/rtree) | 1.1.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.1.1 | Reactive Extensions (Rx) for Python
+[safetensors](https://pypi.org/project/safetensors) | 0.4.3 |
+[scikit_image](https://pypi.org/project/scikit_image) | 0.24.0 | Image processing in Python
+[scikit_learn](https://pypi.org/project/scikit_learn) | 1.5.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.14.1 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.1 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.4.post1 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.2 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 72.2.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.0.4 | Manipulation and analysis of geometric objects
+[shellingham](https://pypi.org/project/shellingham) | 1.5.0.post1 | Tool to Detect Surrounding Shell
+[simplegeneric](https://pypi.org/project/simplegeneric) | 0.8.1 | Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
+[simplejson](https://pypi.org/project/simplejson) | 3.19.2 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.0.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[smmap](https://pypi.org/project/smmap) | 5.0.0 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.0 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[snuggs](https://pypi.org/project/snuggs) | 1.4.7 | Snuggs are s-expressions for Numpy
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.4.6 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.5 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 7.3.7 | Python documentation generator
+[sphinx_rtd_theme](https://pypi.org/project/sphinx_rtd_theme) | 2.0.0 | Read the Docs theme for Sphinx
+[sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) | 1.0.8 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) | 1.0.6 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) | 2.0.5 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib_jquery](https://pypi.org/project/sphinxcontrib_jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib_jsmath](https://pypi.org/project/sphinxcontrib_jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) | 1.0.7 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib_serializinghtml](https://pypi.org/project/sphinxcontrib_serializinghtml) | 1.1.9 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 5.5.6 | The Scientific Python Development Environment
+[spyder_kernels](https://pypi.org/project/spyder_kernels) | 2.5.2 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.30 | Database Abstraction Library
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite_fts4](https://pypi.org/project/sqlite_fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite_utils](https://pypi.org/project/sqlite_utils) | 3.37 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.4.3 | A non-validating SQL parser.
+[sspyrs](https://pypi.org/project/sspyrs) | 0.3 | Lightweight interface for SSRS reports to python
+[stack_data](https://pypi.org/project/stack_data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.37.2 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.2 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.37.1 | A faster way to build and share data apps
+[streamz](https://pypi.org/project/streamz) | 0.6.3 | Streams
+[swifter](https://pypi.org/project/swifter) | 1.3.4 | A package which efficiently applies any function to a pandas dataframe or series in the fastest available manner
+[sympy](https://pypi.org/project/sympy) | 1.13.2 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tbats](https://pypi.org/project/tbats) | 1.1.0 | BATS and TBATS for time series forecasting
+[tblib](https://pypi.org/project/tblib) | 3.0.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 8.5.0 | Retry code until it succeeds
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text_unidecode](https://pypi.org/project/text_unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.2 | Compute distance between the two texts.
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.5.0 | threadpoolctl
+[three_merge](https://pypi.org/project/three_merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2024.7.2 | Read and write TIFF files
+[tinycss2](https://pypi.org/project/tinycss2) | 1.3.0 | A tiny CSS parser
+[tokenizers](https://pypi.org/project/tokenizers) | 0.19.1 |
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.0.1 | A lil' TOML parser
+[tomli_w](https://pypi.org/project/tomli_w) | 1.0.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.12.3 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 0.12.0 | List processing tools and functional utilities
+[torch](https://pypi.org/project/torch) | 2.4.1 | Tensors and Dynamic neural networks in Python with strong GPU acceleration
+[torchaudio](https://pypi.org/project/torchaudio) | 2.4.1 | An audio package for PyTorch
+[torchmetrics](https://pypi.org/project/torchmetrics) | 1.4.1 | PyTorch native Metrics
+[tornado](https://pypi.org/project/tornado) | 6.4.1 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.66.4 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[transformers](https://pypi.org/project/transformers) | 4.44.0 | State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow
+[trio](https://pypi.org/project/trio) | 0.26.2 | A friendly Python library for async concurrency and I/O
+[trove_classifiers](https://pypi.org/project/trove_classifiers) | 2023.2.20 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 4.0.1 | Collection of utilities for publishing packages on PyPI
+[typer](https://pypi.org/project/typer) | 0.12.3 | Typer, build great CLIs. Easy to code. Based on Python type hints.
+[types_python_dateutil](https://pypi.org/project/types_python_dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[typing_extensions](https://pypi.org/project/typing_extensions) | 4.12.2 | Backported and Experimental Type Hints for Python 3.8+
+[tzdata](https://pypi.org/project/tzdata) | 2024.1 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.2 | tzinfo object for the local timezone
+[uc_micro_py](https://pypi.org/project/uc_micro_py) | 1.0.1 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.8.0 | Ultra fast JSON encoder and decoder for Python
+[umap_learn](https://pypi.org/project/umap_learn) | 0.5.6 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.1.7 | Transparent calculations with uncertainties on the quantities involved (aka error propagation); fast calculation of derivatives
+[uri_template](https://pypi.org/project/uri_template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.0.3 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.30.3 | The lightning-fast ASGI server.
+[vega_datasets](https://pypi.org/project/vega_datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[virtualenv](https://pypi.org/project/virtualenv) | 20.26.2 | Virtual Python Environment builder
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 4.0.1 | Filesystem events monitoring
+[watchfiles](https://pypi.org/project/watchfiles) | 0.21.0 | Simple, modern and high performance file watching and code reload in python.
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 1.12 | A library for working with color names and color values formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket_client](https://pypi.org/project/websocket_client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 12.0 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.0.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.2 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.13 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 10.7.20240908 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.3 | A little word cloud generator
+[wrapt](https://pypi.org/project/wrapt) | 1.16.0 | Module for decorators, wrappers and monkey patching.
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2024.7.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.1.9 | A Python module for creating Excel XLSX files.
+[xlwings](https://pypi.org/project/xlwings) | 0.24.7 | Make Excel fly: Interact with Excel from Python and vice versa.
+[xmltodict](https://pypi.org/project/xmltodict) | 0.13.0 | Makes working with XML feel like you are working with JSON
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.7.2 | Yet another URL library
+[yt_dlp](https://pypi.org/project/yt_dlp) | 2023.7.6 | A youtube-dl fork with additional features and patches
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.17.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
diff --git a/changelogs/WinPython-64bit-3.12.6.0_History.md b/changelogs/WinPython-64bit-3.12.6.0_History.md
new file mode 100644
index 00000000..18527fdf
--- /dev/null
+++ b/changelogs/WinPython-64bit-3.12.6.0_History.md
@@ -0,0 +1,187 @@
+ï»ż## History of changes for WinPython-64bit 3.12.6.0
+
+The following changes were made to WinPython-64bit distribution since version 3.12.4.1.
+
+
+### Tools
+
+Upgraded packages:
+
+ * [Nodejs](https://nodejs.org) v20.12.2 â v20.15.1 (a JavaScript runtime built on Chrome's V8 JavaScript engine)
+ * [npmjs](https://www.npmjs.com/) 10.5.0 â 10.7.0 (a package manager for JavaScript)
+
+### Python packages
+
+New packages:
+
+ * [immutabledict](https://pypi.org/project/immutabledict) 4.2.0 (Immutable wrapper around dictionaries (a fork of frozendict))
+ * [jiter](https://pypi.org/project/jiter) 0.5.0 (Fast iterable JSON parser.)
+ * [narwhals](https://pypi.org/project/narwhals) 1.5.5 (Extremely lightweight compatibility layer between dataframe libraries)
+ * [types_python_dateutil](https://pypi.org/project/types_python_dateutil) 2.9.0.20240316 (Typing stubs for python-dateutil)
+
+Upgraded packages:
+
+ * [altair](https://pypi.org/project/altair) 5.3.0 â 5.4.1 (Vega-Altair: A declarative statistical visualization library for Python.)
+ * [array_api_compat](https://pypi.org/project/array_api_compat) 1.7.1 â 1.8 (A wrapper around NumPy and other array libraries to make them compatible with the Array API standard)
+ * [arrow](https://pypi.org/project/arrow) 1.2.2 â 1.3.0 (Better dates & times for Python)
+ * [azure_core](https://pypi.org/project/azure_core) 1.30.1 â 1.30.2 (Microsoft Azure Core Library for Python)
+ * [azure_cosmos](https://pypi.org/project/azure_cosmos) 4.6.0 â 4.7.0 (Microsoft Azure Cosmos Client Library for Python)
+ * [azure_identity](https://pypi.org/project/azure_identity) 1.16.0 â 1.16.1 (Microsoft Azure Identity Library for Python)
+ * [black](https://pypi.org/project/black) 24.4.2 â 24.8.0 (The uncompromising code formatter.)
+ * [bokeh](https://pypi.org/project/bokeh) 3.4.1 â 3.5.1 (Interactive plots and applications in the browser from Python)
+ * [cython](https://pypi.org/project/cython) 3.0.10 â 3.0.11 (The Cython compiler for writing C extensions in the Python language.)
+ * [dask](https://pypi.org/project/dask) 2024.5.2 â 2024.7.1 (Parallel PyData with Task Scheduling)
+ * [dask_expr](https://pypi.org/project/dask_expr) 1.1.2 â 1.1.9 (High Level Expressions for Dask )
+ * [datasette](https://pypi.org/project/datasette) 0.64.6 â 0.64.8 (An open source multi-tool for exploring and publishing data)
+ * [datashader](https://pypi.org/project/datashader) 0.16.2 â 0.16.3 (Data visualization toolchain based on aggregating into a grid)
+ * [decorator](https://pypi.org/project/decorator) 4.4.2 â 5.1.1 (Decorators for Humans)
+ * [diff_match_patch](https://pypi.org/project/diff_match_patch) 20200713 â 20230430 (Diff Match and Patch)
+ * [distributed](https://pypi.org/project/distributed) 2024.5.2 â 2024.7.1 (Distributed scheduler for Dask)
+ * [django](https://pypi.org/project/django) 5.0.6 â 5.0.7 (A high-level Python web framework that encourages rapid development and clean, pragmatic design.)
+ * [email_validator](https://pypi.org/project/email_validator) 2.1.1 â 2.2.0 (A robust email address syntax and deliverability validation library.)
+ * [fastapi](https://pypi.org/project/fastapi) 0.111.0 â 0.111.1 (FastAPI framework, high performance, easy to learn, fast to code, ready for production)
+ * [flake8](https://pypi.org/project/flake8) 7.0.0 â 7.1.1 (the modular source code checker: pep8 pyflakes and co)
+ * [folium](https://pypi.org/project/folium) 0.16.0 â 0.17.0 (Make beautiful maps with Leaflet.js & Python)
+ * [fsspec](https://pypi.org/project/fsspec) 2024.3.1 â 2024.6.1 (File-system specification)
+ * [guidata](https://pypi.org/project/guidata) 3.5.0 â 3.6.2 (Automatic GUI generation for easy dataset editing and display)
+ * [hatchling](https://pypi.org/project/hatchling) 1.24.2 â 1.25.0 (Modern, extensible Python build backend)
+ * [holoviews](https://pypi.org/project/holoviews) 1.19.0 â 1.19.1 (A high-level plotting API for the PyData ecosystem built on HoloViews.)
+ * [httpie](https://pypi.org/project/httpie) 3.2.2 â 3.2.3 (HTTPie: modern, user-friendly command-line HTTP client for the API era.)
+ * [huggingface_hub](https://pypi.org/project/huggingface_hub) 0.23.0 â 0.24.5 (Client library to download and publish models, datasets and other repos on the huggingface.co hub)
+ * [hypothesis](https://pypi.org/project/hypothesis) 6.100.5 â 6.108.5 (A library for property-based testing)
+ * [ipykernel](https://pypi.org/project/ipykernel) 6.29.4 â 6.29.5 (IPython Kernel for Jupyter)
+ * [ipyleaflet](https://pypi.org/project/ipyleaflet) 0.19.1 â 0.19.2 (A Jupyter widget for dynamic Leaflet maps)
+ * [ipython](https://pypi.org/project/ipython) 8.25.0 â 8.26.0 (IPython: Productive Interactive Computing)
+ * [ipywidgets](https://pypi.org/project/ipywidgets) 8.1.2 â 8.1.5 (Jupyter interactive widgets)
+ * [jupyter_leaflet](https://pypi.org/project/jupyter_leaflet) 0.19.1 â 0.19.2 (ipyleaflet extensions for JupyterLab and Jupyter Notebook)
+ * [jupyter_server](https://pypi.org/project/jupyter_server) 2.14.1 â 2.14.2 (The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.)
+ * [jupyterlab](https://pypi.org/project/jupyterlab) 4.2.2 â 4.2.5 (JupyterLab computational environment)
+ * [jupyterlab_server](https://pypi.org/project/jupyterlab_server) 2.27.2 â 2.27.3 (A set of server components for JupyterLab and JupyterLab like applications.)
+ * [jupyterlab_widgets](https://pypi.org/project/jupyterlab_widgets) 3.0.11 â 3.0.13 (Jupyter interactive widgets for JupyterLab)
+ * [keras](https://pypi.org/project/keras) 3.3.3 â 3.5.0 (Multi-backend Keras.)
+ * [lightning](https://pypi.org/project/lightning) 2.2.1 â 2.4.0 (The Deep Learning framework to train, deploy, and ship AI products Lightning fast.)
+ * [lightning_utilities](https://pypi.org/project/lightning_utilities) 0.10.0 â 0.11.6 (Lightning toolbox for across the our ecosystem.)
+ * [mako](https://pypi.org/project/mako) 1.2.0 â 1.3.5 (A super-fast templating language that borrows the best ideas from the existing templating languages.)
+ * [matplotlib](https://pypi.org/project/matplotlib) 3.9.0 â 3.9.2 (Python plotting package)
+ * [maturin](https://pypi.org/project/maturin) 1.5.1 â 1.7.0 (Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages)
+ * [msal](https://pypi.org/project/msal) 1.24.1 â 1.30.0 (The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us)
+ * [msal_extensions](https://pypi.org/project/msal_extensions) 1.0.0 â 1.2.0 (Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an)
+ * [mypy](https://pypi.org/project/mypy) 1.10.0 â 1.11.1 (Optional static typing for Python)
+ * [netcdf4](https://pypi.org/project/netcdf4) 1.6.5 â 1.7.1.post2 (Provides an object-oriented python interface to the netCDF version 4 library)
+ * [numexpr](https://pypi.org/project/numexpr) 2.10.0 â 2.10.1 (Fast numerical expression evaluator for NumPy)
+ * [numpy](https://pypi.org/project/numpy) 1.26.4 â 2.0.1 (Fundamental package for array computing in Python)
+ * [openai](https://pypi.org/project/openai) 1.33.0 â 1.42.0 (The official Python library for the openai API)
+ * [opencv_python](https://pypi.org/project/opencv_python) 4.10.0.82 â 4.10.0.84 (Wrapper package for OpenCV python bindings.)
+ * [ortools](https://pypi.org/project/ortools) 9.8.3296 â 9.10.4067 (Google OR-Tools python libraries and modules)
+ * [panel](https://pypi.org/project/panel) 1.4.4 â 1.5.0b4 (The powerful data exploration & web app framework for Python.)
+ * [param](https://pypi.org/project/param) 2.1.0 â 2.1.1 (Make your Python code clearer and more reliable by declaring Parameters.)
+ * [pillow](https://pypi.org/project/pillow) 10.3.0 â 10.4.0 (Python Imaging Library (Fork))
+ * [pip](https://pypi.org/project/pip) 24.0 â 24.2 (The PyPA recommended tool for installing Python packages.)
+ * [plotly](https://pypi.org/project/plotly) 5.22.0 â 5.23.0 (An open-source, interactive data visualization library for Python)
+ * [plotpy](https://pypi.org/project/plotpy) 2.3.0 â 2.6.2 (Curve and image plotting tools for Python/Qt applications)
+ * [polars](https://pypi.org/project/polars) 0.20.31 â 1.6.0 (Blazingly fast DataFrame library)
+ * [prompt_toolkit](https://pypi.org/project/prompt_toolkit) 3.0.43 â 3.0.47 (Library for building powerful interactive command lines in Python)
+ * [protobuf](https://pypi.org/project/protobuf) 4.25.1 â 5.27.3 ()
+ * [ptpython](https://pypi.org/project/ptpython) 3.0.26 â 3.0.29 (Python REPL build on top of prompt_toolkit)
+ * [pyarrow](https://pypi.org/project/pyarrow) 16.1.0 â 17.0.0 (Python library for Apache Arrow)
+ * [pybind11](https://pypi.org/project/pybind11) 2.12.0 â 2.13.1 (Seamless operability between C++11 and Python)
+ * [pycodestyle](https://pypi.org/project/pycodestyle) 2.11.1 â 2.12.0 (Python style guide checker)
+ * [pydantic](https://pypi.org/project/pydantic) 2.7.1 â 2.8.2 (Data validation using Python type hints)
+ * [pydantic_core](https://pypi.org/project/pydantic_core) 2.18.2 â 2.20.1 (Core functionality for Pydantic validation and serialization)
+ * [pymoo](https://pypi.org/project/pymoo) 0.6.1.1 â 0.6.1.3 (Multi-Objective Optimization in Python)
+ * [pyomo](https://pypi.org/project/pyomo) 6.7.2 â 6.8.0 (Pyomo: Python Optimization Modeling Objects)
+ * [pytest](https://pypi.org/project/pytest) 8.2.0 â 8.2.2 (pytest: simple powerful testing with Python)
+ * [Python](http://www.python.org/) 3.12.4 â 3.12.6 (Python programming language with standard library)
+ * [python_lsp_server](https://pypi.org/project/python_lsp_server) 1.11.0 â 1.12.0 (Python Language Server for the Language Server Protocol)
+ * [python_slugify](https://pypi.org/project/python_slugify) 6.1.2 â 8.0.4 (A Python slugify application that also handles Unicode)
+ * [pythonqwt](https://pypi.org/project/pythonqwt) 0.12.1 â 0.12.7 (Qt plotting widgets for Python)
+ * [pytorch_lightning](https://pypi.org/project/pytorch_lightning) 2.2.1 â 2.3.3 (PyTorch Lightning is the lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate.)
+ * [pytz](https://pypi.org/project/pytz) 2023.3 â 2024.1 (World timezone definitions, modern and historical)
+ * [pyviz_comms](https://pypi.org/project/pyviz_comms) 3.0.2 â 3.0.3 (A JupyterLab extension for rendering HoloViz content.)
+ * [quantecon](https://pypi.org/project/quantecon) 0.5.3 â 0.7.2 (Import the main names to top level.)
+ * [rapidfuzz](https://pypi.org/project/rapidfuzz) 3.5.2 â 3.9.3 (rapid fuzzy string matching)
+ * [redis](https://pypi.org/project/redis) 4.3.1 â 5.0.3 (Python client for Redis database and key-value store)
+ * [referencing](https://pypi.org/project/referencing) 0.31.1 â 0.35.1 (JSON Referencing + Python)
+ * [reportlab](https://pypi.org/project/reportlab) 4.2.0 â 4.2.2 (The Reportlab Toolkit)
+ * [safetensors](https://pypi.org/project/safetensors) 0.4.2 â 0.4.3 ()
+ * [scikit_image](https://pypi.org/project/scikit_image) 0.23.2 â 0.24.0 (Image processing in Python)
+ * [scikit_learn](https://pypi.org/project/scikit_learn) 1.5.0 â 1.5.1 (A set of python modules for machine learning and data mining)
+ * [scipy](https://pypi.org/project/scipy) 1.13.1 â 1.14.1 (Fundamental algorithms for scientific computing in Python)
+ * [setuptools](https://pypi.org/project/setuptools) 69.5.1 â 72.2.0 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [sphinx](https://pypi.org/project/sphinx) 7.2.6 â 7.3.7 (Python documentation generator)
+ * [sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) 1.0.2 â 1.0.8 (sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books)
+ * [sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) 1.0.2 â 1.0.6 (sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents)
+ * [sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) 2.0.0 â 2.0.5 (sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files)
+ * [sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) 1.0.3 â 1.0.7 (sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents)
+ * [spyder](https://pypi.org/project/spyder) 5.5.5 â 5.5.6 (The Scientific Python Development Environment)
+ * [sqlalchemy](https://pypi.org/project/sqlalchemy) 2.0.28 â 2.0.30 (Database Abstraction Library)
+ * [sqlite_utils](https://pypi.org/project/sqlite_utils) 3.36 â 3.37 (CLI tool and Python library for manipulating SQLite databases)
+ * [streamlit](https://pypi.org/project/streamlit) 1.35.0 â 1.37.1 (A faster way to build and share data apps)
+ * [sympy](https://pypi.org/project/sympy) 1.12.1 â 1.13.2 (Computer algebra system (CAS) in Python)
+ * [tblib](https://pypi.org/project/tblib) 1.7.0 â 3.0.0 (Traceback serialization library.)
+ * [tenacity](https://pypi.org/project/tenacity) 8.1.0 â 8.5.0 (Retry code until it succeeds)
+ * [textdistance](https://pypi.org/project/textdistance) 4.5.0 â 4.6.2 (Compute distance between the two texts.)
+ * [tifffile](https://pypi.org/project/tifffile) 2023.7.18 â 2024.7.2 (Read and write TIFF files)
+ * [tinycss2](https://pypi.org/project/tinycss2) 1.1.1 â 1.3.0 (A tiny CSS parser)
+ * [tokenizers](https://pypi.org/project/tokenizers) 0.15.1 â 0.19.1 ()
+ * [torch](https://pypi.org/project/torch) 2.2.2 â 2.4.1 (Tensors and Dynamic neural networks in Python with strong GPU acceleration)
+ * [torchaudio](https://pypi.org/project/torchaudio) 2.2.2 â 2.4.1 (An audio package for PyTorch)
+ * [torchmetrics](https://pypi.org/project/torchmetrics) 1.3.2 â 1.4.1 (PyTorch native Metrics)
+ * [tornado](https://pypi.org/project/tornado) 6.4 â 6.4.1 (Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.)
+ * [transformers](https://pypi.org/project/transformers) 4.38.2 â 4.44.0 (State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow)
+ * [trio](https://pypi.org/project/trio) 0.25.1 â 0.26.2 (A friendly Python library for async concurrency and I/O)
+ * [typing_extensions](https://pypi.org/project/typing_extensions) 4.9.0 â 4.12.2 (Backported and Experimental Type Hints for Python 3.8+)
+ * [tzdata](https://pypi.org/project/tzdata) 2022.7 â 2024.1 (Provider of IANA time zone data)
+ * [tzlocal](https://pypi.org/project/tzlocal) 4.2 â 5.2 (tzinfo object for the local timezone)
+ * [umap_learn](https://pypi.org/project/umap_learn) 0.5.1 â 0.5.6 (Uniform Manifold Approximation and Projection)
+ * [uri_template](https://pypi.org/project/uri_template) 1.2.0 â 1.3.0 (RFC 6570 URI Template Processor)
+ * [uvicorn](https://pypi.org/project/uvicorn) 0.29.0 â 0.30.3 (The lightning-fast ASGI server.)
+ * [waitress](https://pypi.org/project/waitress) 2.1.2 â 3.0.0 (Waitress WSGI server)
+ * [watchdog](https://pypi.org/project/watchdog) 2.2.0 â 4.0.1 (Filesystem events monitoring)
+ * [wheel](https://pypi.org/project/wheel) 0.43.0 â 0.44.0 (A built-package format for Python)
+ * [widgetsnbextension](https://pypi.org/project/widgetsnbextension) 4.0.10 â 4.0.13 (Jupyter interactive widgets for Jupyter Notebook)
+ * [winpython](https://pypi.org/project/winpython) 8.2.20240618 â 10.7.20240908 (WinPython distribution tools, including WPPM)
+ * [wrapt](https://pypi.org/project/wrapt) 1.14.1 â 1.16.0 (Module for decorators, wrappers and monkey patching.)
+ * [xarray](https://pypi.org/project/xarray) 2024.6.0 â 2024.7.0 (N-D labeled arrays and datasets in Python)
+ * [zstandard](https://pypi.org/project/zstandard) 0.22.0 â 0.23.0 (Zstandard bindings for Python)
+
+Removed packages:
+
+ * [altair_data_server](https://pypi.org/project/altair_data_server) 0.4.1 (A background data server for Altair charts.)
+ * [altair_transform](https://pypi.org/project/altair_transform) 0.2.0 (A python engine for evaluating Altair transforms.)
+ * [async_timeout](https://pypi.org/project/async_timeout) 4.0.3 (Timeout context manager for asyncio programs)
+ * [botorch](https://pypi.org/project/botorch) 0.9.5 (Bayesian Optimization in PyTorch)
+ * [dash](https://pypi.org/project/dash) 2.17.0 (A Python framework for building reactive web-apps. Developed by Plotly.)
+ * [dash_core_components](https://pypi.org/project/dash_core_components) 2.0.0 (Core component suite for Dash)
+ * [dash_html_components](https://pypi.org/project/dash_html_components) 2.0.0 (Vanilla HTML components for Dash)
+ * [dash_table](https://pypi.org/project/dash_table) 5.0.0 (Dash table)
+ * [dask_image](https://pypi.org/project/dask_image) 2024.5.3 (Distributed image processing)
+ * [gdal](https://pypi.org/project/gdal) 3.7.3 (GDAL: Geospatial Data Abstraction Library)
+ * [gpytorch](https://pypi.org/project/gpytorch) 1.11 (An implementation of Gaussian Processes in Pytorch)
+ * [imageio_ffmpeg](https://pypi.org/project/imageio_ffmpeg) 0.4.8 (FFMPEG wrapper for Python)
+ * [jaxtyping](https://pypi.org/project/jaxtyping) 0.2.22 (Type annotations and runtime checking for shape and dtype of JAX arrays, and PyTrees.)
+ * [jsonpatch](https://pypi.org/project/jsonpatch) 1.33 (Apply JSON-Patches (RFC 6902) )
+ * [langchain](https://pypi.org/project/langchain) 0.2.5 (Building applications with LLMs through composability)
+ * [langchain_core](https://pypi.org/project/langchain_core) 0.2.7 (Building applications with LLMs through composability)
+ * [langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) 0.2.1 (LangChain text splitting utilities)
+ * [langsmith](https://pypi.org/project/langsmith) 0.1.77 (Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.)
+ * [linear_operator](https://pypi.org/project/linear_operator) 0.5.1 (A linear operator implementation, primarily designed for finite-dimensional positive definite operators (i.e. kernel matrices).)
+ * [moviepy](https://pypi.org/project/moviepy) 1.0.3 (Video editing with Python)
+ * [opt_einsum](https://pypi.org/project/opt_einsum) 3.3.0 (Optimizing numpys einsum function)
+ * [pims](https://pypi.org/project/pims) 0.6.1 (Python Image Sequence)
+ * [portpicker](https://pypi.org/project/portpicker) 1.5.0 (A library to choose unique available network ports.)
+ * [proglog](https://pypi.org/project/proglog) 0.1.10 (Log and progress bar manager for console, notebooks, web...)
+ * [pyro_api](https://pypi.org/project/pyro_api) 0.1.2 (Generic API for dispatch to Pyro backends.)
+ * [pyro_ppl](https://pypi.org/project/pyro_ppl) 1.9.0 (A Python library for probabilistic modeling and inference)
+ * [pytz_deprecation_shim](https://pypi.org/project/pytz_deprecation_shim) 0.1.0.post0 (Shims to make deprecation of pytz easier)
+ * [retrying](https://pypi.org/project/retrying) 1.3.4 (Retrying)
+ * [slicerator](https://pypi.org/project/slicerator) 1.1.0 (A lazy-loading, fancy-sliceable iterable.)
+ * [torchvision](https://pypi.org/project/torchvision) 0.17.2 (image and video datasets and models for torch deep learning)
+ * [typeguard](https://pypi.org/project/typeguard) 2.13.3 (Run-time type checker for Python)
+ * [wasmer](https://pypi.org/project/wasmer) 1.1.0 (Python extension to run WebAssembly binaries)
+ * [wasmer_compiler_cranelift](https://pypi.org/project/wasmer_compiler_cranelift) 1.1.0 (Python extension to run WebAssembly binaries)
+ * [wasmer_compiler_singlepass](https://pypi.org/project/wasmer_compiler_singlepass) 1.1.0 (Python extension to run WebAssembly binaries)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.11.9.0.md b/changelogs/WinPythondot-64bit-3.11.9.0.md
new file mode 100644
index 00000000..9e748825
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.11.9.0.md
@@ -0,0 +1,29 @@
+## WinPython 3.11.9.0dot
+
+The following packages are included in WinPython-64bit v3.11.9.0dot .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.11.9 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[msvc_runtime](https://pypi.org/project/msvc_runtime) | 14.40.33807 | Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories
+[packaging](https://pypi.org/project/packaging) | 24.1 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 24.2 | The PyPA recommended tool for installing Python packages.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 72.2.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 10.7.20240908 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.11.9.0_History.md b/changelogs/WinPythondot-64bit-3.11.9.0_History.md
new file mode 100644
index 00000000..ad7c0e81
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.11.9.0_History.md
@@ -0,0 +1,27 @@
+ï»ż## History of changes for WinPython-64bit 3.11.9.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.11.6.0dot.
+
+
+### Python packages
+
+New packages:
+
+ * [build](https://pypi.org/project/build) 1.2.1 (A simple, correct Python build frontend)
+ * [colorama](https://pypi.org/project/colorama) 0.4.6 (Cross-platform colored terminal text.)
+ * [packaging](https://pypi.org/project/packaging) 24.1 (Core utilities for Python packages)
+ * [pyproject_hooks](https://pypi.org/project/pyproject_hooks) 1.1.0 (Wrappers to call pyproject.toml-based build backend hooks.)
+
+Upgraded packages:
+
+ * [msvc_runtime](https://pypi.org/project/msvc_runtime) 14.36.32532 â 14.40.33807 (Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories)
+ * [pip](https://pypi.org/project/pip) 23.2.1 â 24.2 (The PyPA recommended tool for installing Python packages.)
+ * [Python](http://www.python.org/) 3.11.6 â 3.11.9 (Python programming language with standard library)
+ * [setuptools](https://pypi.org/project/setuptools) 68.2.2 â 72.2.0 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [sqlite_bro](https://pypi.org/project/sqlite_bro) 0.12.2 â 0.13.1 (a graphic SQLite Client in 1 Python file)
+ * [wheel](https://pypi.org/project/wheel) 0.40.0 â 0.44.0 (A built-package format for Python)
+ * [winpython](https://pypi.org/project/winpython) 7.0.20231126 â 10.7.20240908 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.12.10.0.md b/changelogs/WinPythondot-64bit-3.12.10.0.md
new file mode 100644
index 00000000..31153ea2
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.10.0.md
@@ -0,0 +1,29 @@
+## WinPython 3.12.10.0dot
+
+The following packages are included in WinPython-64bit v3.12.10.0dot .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.10 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 25.0.1 | The PyPA recommended tool for installing Python packages.
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 75.8.2 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 15.3.20250425 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.12.10.0_History.md b/changelogs/WinPythondot-64bit-3.12.10.0_History.md
new file mode 100644
index 00000000..aef40183
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.10.0_History.md
@@ -0,0 +1,22 @@
+ï»ż## History of changes for WinPython-64bit 3.12.10.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.12.9.0dot.
+
+
+
+### Python packages
+
+New packages:
+
+ * [sv-ttk](https://pypi.org/project/sv-ttk) 2.6.0 (A gorgeous theme for Tkinter, based on Windows 11's UI)
+
+Upgraded packages:
+
+ * [pip](https://pypi.org/project/pip) 24.3.1 â 25.0.1 (The PyPA recommended tool for installing Python packages.)
+ * [Python](http://www.python.org/) 3.12.9 â 3.12.10 (Python programming language with standard library)
+ * [setuptools](https://pypi.org/project/setuptools) 75.6.0 â 75.8.2 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [winpython](https://pypi.org/project/winpython) 13.1.20250215 â 15.3.20250425 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.12.10.1.md b/changelogs/WinPythondot-64bit-3.12.10.1.md
new file mode 100644
index 00000000..75cf9d16
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.10.1.md
@@ -0,0 +1,36 @@
+## WinPython 3.12.10.1dot
+
+The following packages are included in WinPython-64bit v3.12.10.1dot 3.10.11.1dot.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.10 | Python programming language with standard library
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 25.0 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 16.5.20250614 | WinPython distribution tools, including WPPM
+
+
+### WheelHouse packages
+
+Name | Version | Description
+-----|---------|------------
+
+
+
diff --git a/changelogs/WinPythondot-64bit-3.12.10.1_History.md b/changelogs/WinPythondot-64bit-3.12.10.1_History.md
new file mode 100644
index 00000000..1b70bafc
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.10.1_History.md
@@ -0,0 +1,34 @@
+## History of changes for WinPython-64bit 3.12.10.1dot
+
+The following changes were made to WinPython-64bit distribution since version 3.12.10.0dot.
+
+
+
+
+### Tools
+
+
+New packages:
+ * Python 3.12.10 (Python programming language with standard library)
+
+### Python packages
+
+
+Upgraded packages:
+ * packaging 24.2 â 25.0 (Core utilities for Python packages)
+ * pip 25.0.1 â 25.1.1 (The PyPA recommended tool for installing Python packages.)
+ * setuptools 75.8.2 â 79.0.1 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * winpython 15.3.20250425 â 16.5.20250614 (WinPython distribution tools, including WPPM)
+
+Removed packages:
+ * Python 3.12.10 (Python programming language with standard library)
+
+### WheelHouse packages
+
+
+No differences found.
+
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.12.6.0.md b/changelogs/WinPythondot-64bit-3.12.6.0.md
new file mode 100644
index 00000000..735c729d
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.6.0.md
@@ -0,0 +1,29 @@
+## WinPython 3.12.6.0dot
+
+The following packages are included in WinPython-64bit v3.12.6.0dot .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.6 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[msvc_runtime](https://pypi.org/project/msvc_runtime) | 14.40.33807 | Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories
+[packaging](https://pypi.org/project/packaging) | 24.1 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 24.2 | The PyPA recommended tool for installing Python packages.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 72.2.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 10.7.20240908 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.12.6.0_History.md b/changelogs/WinPythondot-64bit-3.12.6.0_History.md
new file mode 100644
index 00000000..25ef2ad3
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.6.0_History.md
@@ -0,0 +1,18 @@
+ï»ż## History of changes for WinPython-64bit 3.12.6.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.12.4.1dot.
+
+
+### Python packages
+
+Upgraded packages:
+
+ * [pip](https://pypi.org/project/pip) 24.0 â 24.2 (The PyPA recommended tool for installing Python packages.)
+ * [Python](http://www.python.org/) 3.12.4 â 3.12.6 (Python programming language with standard library)
+ * [setuptools](https://pypi.org/project/setuptools) 69.5.1 â 72.2.0 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [wheel](https://pypi.org/project/wheel) 0.43.0 â 0.44.0 (A built-package format for Python)
+ * [winpython](https://pypi.org/project/winpython) 8.2.20240618 â 10.7.20240908 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.12.8.0.md b/changelogs/WinPythondot-64bit-3.12.8.0.md
new file mode 100644
index 00000000..6546f300
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.8.0.md
@@ -0,0 +1,28 @@
+## WinPython 3.12.8.0dot
+
+The following packages are included in WinPython-64bit v3.12.8.0dot .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.8 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 11.2.20241228 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.12.8.0_History.md b/changelogs/WinPythondot-64bit-3.12.8.0_History.md
new file mode 100644
index 00000000..9a86e325
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.8.0_History.md
@@ -0,0 +1,23 @@
+ï»ż## History of changes for WinPython-64bit 3.12.8.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.12.6.0dot.
+
+
+### Python packages
+
+Upgraded packages:
+
+ * [build](https://pypi.org/project/build) 1.2.1 â 1.2.2.post1 (A simple, correct Python build frontend)
+ * [packaging](https://pypi.org/project/packaging) 24.1 â 24.2 (Core utilities for Python packages)
+ * [pip](https://pypi.org/project/pip) 24.2 â 24.3.1 (The PyPA recommended tool for installing Python packages.)
+ * [Python](http://www.python.org/) 3.12.6 â 3.12.8 (Python programming language with standard library)
+ * [setuptools](https://pypi.org/project/setuptools) 72.2.0 â 75.6.0 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [winpython](https://pypi.org/project/winpython) 10.7.20240908 â 11.2.20241228 (WinPython distribution tools, including WPPM)
+
+Removed packages:
+
+ * [msvc_runtime](https://pypi.org/project/msvc_runtime) 14.40.33807 (Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.12.8.1.md b/changelogs/WinPythondot-64bit-3.12.8.1.md
new file mode 100644
index 00000000..4c75f289
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.8.1.md
@@ -0,0 +1,28 @@
+## WinPython 3.12.8.1dot
+
+The following packages are included in WinPython-64bit v3.12.8.1dot b3.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.8 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 11.5.20250126 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.12.8.1_History.md b/changelogs/WinPythondot-64bit-3.12.8.1_History.md
new file mode 100644
index 00000000..4276ca3f
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.8.1_History.md
@@ -0,0 +1,14 @@
+ï»ż## History of changes for WinPython-64bit 3.12.8.1dot
+
+The following changes were made to WinPython-64bit distribution since version 3.12.8.0dot.
+
+
+### Python packages
+
+Upgraded packages:
+
+ * [winpython](https://pypi.org/project/winpython) 11.2.20241228 â 11.5.20250126 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.12.9.0.md b/changelogs/WinPythondot-64bit-3.12.9.0.md
new file mode 100644
index 00000000..7d8615bd
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.9.0.md
@@ -0,0 +1,28 @@
+## WinPython 3.12.9.0dot
+
+The following packages are included in WinPython-64bit v3.12.9.0dot .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.9 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 13.1.20250215 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.12.9.0_History.md b/changelogs/WinPythondot-64bit-3.12.9.0_History.md
new file mode 100644
index 00000000..4685d221
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.12.9.0_History.md
@@ -0,0 +1,16 @@
+ï»ż## History of changes for WinPython-64bit 3.12.9.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.12.8.0dot.
+
+
+### Python packages
+
+Upgraded packages:
+
+ * [Python](http://www.python.org/) 3.12.8 â 3.12.9 (Python programming language with standard library)
+ * [wheel](https://pypi.org/project/wheel) 0.44.0 â 0.45.1 (A built-package format for Python)
+ * [winpython](https://pypi.org/project/winpython) 11.2.20241228 â 13.1.20250215 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.13.0.1.md b/changelogs/WinPythondot-64bit-3.13.0.1.md
new file mode 100644
index 00000000..46bda9b2
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.0.1.md
@@ -0,0 +1,30 @@
+## WinPython 3.13.0.1dot
+
+The following packages are included in WinPython-64bit v3.13.0.1dot rc2.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.0 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[interpreters_pep_734](https://pypi.org/project/interpreters_pep_734) | 0.1.0 | Use this module to try out multiple interpreters and a per-interpreter GIL in Python 3.13+. Do not use this for anything important yet.
+[msvc_runtime](https://pypi.org/project/msvc_runtime) | 14.40.33807 | Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories
+[packaging](https://pypi.org/project/packaging) | 24.1 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 24.2 | The PyPA recommended tool for installing Python packages.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 72.2.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 10.7.20240908 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.13.0.1_History.md b/changelogs/WinPythondot-64bit-3.13.0.1_History.md
new file mode 100644
index 00000000..78bf8e19
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.0.1_History.md
@@ -0,0 +1,17 @@
+ï»ż## History of changes for WinPython-64bit 3.13.0.1dot
+
+The following changes were made to WinPython-64bit distribution since version 3.13.0.0dot.
+
+
+### Python packages
+
+Upgraded packages:
+
+ * [pip](https://pypi.org/project/pip) 24.0 â 24.2 (The PyPA recommended tool for installing Python packages.)
+ * [setuptools](https://pypi.org/project/setuptools) 69.5.1 â 72.2.0 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [wheel](https://pypi.org/project/wheel) 0.43.0 â 0.44.0 (A built-package format for Python)
+ * [winpython](https://pypi.org/project/winpython) 8.2.20240618 â 10.7.20240908 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.13.1.0.md b/changelogs/WinPythondot-64bit-3.13.1.0.md
new file mode 100644
index 00000000..da971e87
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.1.0.md
@@ -0,0 +1,28 @@
+## WinPython 3.13.1.0dot
+
+The following packages are included in WinPython-64bit v3.13.1.0dot .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.1 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 11.2.20241228 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.13.1.0_History.md b/changelogs/WinPythondot-64bit-3.13.1.0_History.md
new file mode 100644
index 00000000..a5bdd349
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.1.0_History.md
@@ -0,0 +1,24 @@
+ï»ż## History of changes for WinPython-64bit 3.13.1.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.13.0.1dot.
+
+
+### Python packages
+
+Upgraded packages:
+
+ * [build](https://pypi.org/project/build) 1.2.1 â 1.2.2.post1 (A simple, correct Python build frontend)
+ * [packaging](https://pypi.org/project/packaging) 24.1 â 24.2 (Core utilities for Python packages)
+ * [pip](https://pypi.org/project/pip) 24.2 â 24.3.1 (The PyPA recommended tool for installing Python packages.)
+ * [Python](http://www.python.org/) 3.13.0 â 3.13.1 (Python programming language with standard library)
+ * [setuptools](https://pypi.org/project/setuptools) 72.2.0 â 75.6.0 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [winpython](https://pypi.org/project/winpython) 10.7.20240908 â 11.2.20241228 (WinPython distribution tools, including WPPM)
+
+Removed packages:
+
+ * [interpreters_pep_734](https://pypi.org/project/interpreters_pep_734) 0.1.0 (Use this module to try out multiple interpreters and a per-interpreter GIL in Python 3.13+. Do not use this for anything important yet.)
+ * [msvc_runtime](https://pypi.org/project/msvc_runtime) 14.40.33807 (Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.13.1.1.md b/changelogs/WinPythondot-64bit-3.13.1.1.md
new file mode 100644
index 00000000..b711c0ef
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.1.1.md
@@ -0,0 +1,28 @@
+## WinPython 3.13.1.1dot
+
+The following packages are included in WinPython-64bit v3.13.1.1dot b3.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.1 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 11.5.20250126 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.13.1.1_History.md b/changelogs/WinPythondot-64bit-3.13.1.1_History.md
new file mode 100644
index 00000000..32a5992a
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.1.1_History.md
@@ -0,0 +1,14 @@
+ï»ż## History of changes for WinPython-64bit 3.13.1.1dot
+
+The following changes were made to WinPython-64bit distribution since version 3.13.1.0dot.
+
+
+### Python packages
+
+Upgraded packages:
+
+ * [winpython](https://pypi.org/project/winpython) 11.2.20241228 â 11.5.20250126 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.13.2.0.md b/changelogs/WinPythondot-64bit-3.13.2.0.md
new file mode 100644
index 00000000..ccbfa9a8
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.2.0.md
@@ -0,0 +1,28 @@
+## WinPython 3.13.2.0dot
+
+The following packages are included in WinPython-64bit v3.13.2.0dot .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.2 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 13.1.20250222 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.13.2.0_History.md b/changelogs/WinPythondot-64bit-3.13.2.0_History.md
new file mode 100644
index 00000000..b4bbb942
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.2.0_History.md
@@ -0,0 +1,16 @@
+ï»ż## History of changes for WinPython-64bit 3.13.2.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.13.1.1dot.
+
+
+### Python packages
+
+Upgraded packages:
+
+ * [Python](http://www.python.org/) 3.13.1 â 3.13.2 (Python programming language with standard library)
+ * [wheel](https://pypi.org/project/wheel) 0.44.0 â 0.45.1 (A built-package format for Python)
+ * [winpython](https://pypi.org/project/winpython) 11.5.20250126 â 13.1.20250222 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.13.3.0.md b/changelogs/WinPythondot-64bit-3.13.3.0.md
new file mode 100644
index 00000000..210bbc6d
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.3.0.md
@@ -0,0 +1,29 @@
+## WinPython 3.13.3.0dot
+
+The following packages are included in WinPython-64bit v3.13.3.0dot .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.3 | Python programming language with standard library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 25.0.1 | The PyPA recommended tool for installing Python packages.
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 75.8.2 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 15.3.20250425 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythondot-64bit-3.13.3.0_History.md b/changelogs/WinPythondot-64bit-3.13.3.0_History.md
new file mode 100644
index 00000000..105c04ff
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.3.0_History.md
@@ -0,0 +1,22 @@
+ï»ż## History of changes for WinPython-64bit 3.13.3.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.13.2.0dot.
+
+
+
+### Python packages
+
+New packages:
+
+ * [sv-ttk](https://pypi.org/project/sv-ttk) 2.6.0 (A gorgeous theme for Tkinter, based on Windows 11's UI)
+
+Upgraded packages:
+
+ * [pip](https://pypi.org/project/pip) 24.3.1 â 25.0.1 (The PyPA recommended tool for installing Python packages.)
+ * [Python](http://www.python.org/) 3.13.2 â 3.13.3 (Python programming language with standard library)
+ * [setuptools](https://pypi.org/project/setuptools) 75.6.0 â 75.8.2 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [winpython](https://pypi.org/project/winpython) 13.1.20250222 â 15.3.20250425 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.13.5.0.md b/changelogs/WinPythondot-64bit-3.13.5.0.md
new file mode 100644
index 00000000..e012294a
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.5.0.md
@@ -0,0 +1,36 @@
+## WinPython 3.13.5.0dot
+
+The following packages are included in WinPython-64bit v3.13.5.0dot 3.10.11.1dot.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.5 | Python programming language with standard library
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 25.0 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 16.6.20250620 | WinPython distribution tools, including WPPM
+
+
+### WheelHouse packages
+
+Name | Version | Description
+-----|---------|------------
+
+
+
diff --git a/changelogs/WinPythondot-64bit-3.13.5.0_History.md b/changelogs/WinPythondot-64bit-3.13.5.0_History.md
new file mode 100644
index 00000000..fb07f130
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.13.5.0_History.md
@@ -0,0 +1,34 @@
+ï»ż## History of changes for WinPython-64bit 3.13.5.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.13.3.0dot.
+
+
+
+
+### Tools
+
+
+New packages:
+ * Python 3.13.5 (Python programming language with standard library)
+
+### Python packages
+
+
+Upgraded packages:
+ * packaging 24.2 â 25.0 (Core utilities for Python packages)
+ * pip 25.0.1 â 25.1.1 (The PyPA recommended tool for installing Python packages.)
+ * setuptools 75.8.2 â 79.0.1 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * winpython 15.3.20250425 â 16.6.20250620 (WinPython distribution tools, including WPPM)
+
+Removed packages:
+ * Python 3.13.3 (Python programming language with standard library)
+
+### WheelHouse packages
+
+
+No differences found.
+
+
+
+
+* * *
diff --git a/changelogs/WinPythondot-64bit-3.14.0.0.md b/changelogs/WinPythondot-64bit-3.14.0.0.md
new file mode 100644
index 00000000..32acdb7e
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.14.0.0.md
@@ -0,0 +1,36 @@
+## WinPython 3.14.0.0dot
+
+The following packages are included in WinPython-64bit v3.14.0.0dot b3.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.14.0b3 | Python programming language with standard library
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 25.0 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 16.6.20250620 | WinPython distribution tools, including WPPM
+
+
+### WheelHouse packages
+
+Name | Version | Description
+-----|---------|------------
+
+
+
diff --git a/changelogs/WinPythondot-64bit-3.14.0.0_History.md b/changelogs/WinPythondot-64bit-3.14.0.0_History.md
new file mode 100644
index 00000000..d692feba
--- /dev/null
+++ b/changelogs/WinPythondot-64bit-3.14.0.0_History.md
@@ -0,0 +1,26 @@
+## History of changes for WinPython-64bit 3.14.0.0dot
+
+The following changes were made to WinPython-64bit distribution since version 3.13.5.0dot.
+
+
+
+
+### Tools
+
+
+Upgraded packages:
+
+### Python packages
+
+
+No differences found.
+
+### WheelHouse packages
+
+
+No differences found.
+
+
+
+
+* * *
diff --git a/changelogs/WinPythonfree-64bit-3.13.0.1.md b/changelogs/WinPythonfree-64bit-3.13.0.1.md
new file mode 100644
index 00000000..f9e34344
--- /dev/null
+++ b/changelogs/WinPythonfree-64bit-3.13.0.1.md
@@ -0,0 +1,47 @@
+## WinPython 3.13.0.1free
+
+The following packages are included in WinPython-64bit v3.13.0.1free rc2.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.0 | Python programming language with standard library
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[build](https://pypi.org/project/build) | 1.2.1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[cython](https://pypi.org/project/cython) | 3.1.0a0 | The Cython compiler for writing C extensions in the Python language.
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[executing](https://pypi.org/project/executing) | 2.0.1 | Get the currently executing AST node of a frame, and other information
+[interpreters_pep_734](https://pypi.org/project/interpreters_pep_734) | 0.1.0 | Use this module to try out multiple interpreters and a per-interpreter GIL in Python 3.13+. Do not use this for anything important yet.
+[ipython](https://pypi.org/project/ipython) | 8.26.0 | IPython: Productive Interactive Computing
+[jedi](https://pypi.org/project/jedi) | 0.19.1 | An autocompletion tool for Python that can be used for text editors.
+[matplotlib_inline](https://pypi.org/project/matplotlib_inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[msvc_runtime](https://pypi.org/project/msvc_runtime) | 14.40.33807 | Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories
+[packaging](https://pypi.org/project/packaging) | 24.1 | Core utilities for Python packages
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[pip](https://pypi.org/project/pip) | 24.2 | The PyPA recommended tool for installing Python packages.
+[prompt_toolkit](https://pypi.org/project/prompt_toolkit) | 3.0.47 | Library for building powerful interactive command lines in Python
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[pure_eval](https://pypi.org/project/pure_eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pygments](https://pypi.org/project/pygments) | 2.18.0 | Pygments is a syntax highlighting package written in Python.
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 72.2.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[stack_data](https://pypi.org/project/stack_data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 10.7.20240908 | WinPython distribution tools, including WPPM
+
+
diff --git a/changelogs/WinPythonfree-64bit-3.13.0.1_History.md b/changelogs/WinPythonfree-64bit-3.13.0.1_History.md
new file mode 100644
index 00000000..549ef276
--- /dev/null
+++ b/changelogs/WinPythonfree-64bit-3.13.0.1_History.md
@@ -0,0 +1,24 @@
+ï»ż## History of changes for WinPython-64bit 3.13.0.1free
+
+The following changes were made to WinPython-64bit distribution since version 3.13.0.0free.
+
+
+### Python packages
+
+New packages:
+
+ * [cython](https://pypi.org/project/cython) 3.1.0a0 (The Cython compiler for writing C extensions in the Python language.)
+
+Upgraded packages:
+
+ * [ipython](https://pypi.org/project/ipython) 8.25.0 â 8.26.0 (IPython: Productive Interactive Computing)
+ * [pip](https://pypi.org/project/pip) 24.1b1 â 24.2 (The PyPA recommended tool for installing Python packages.)
+ * [prompt_toolkit](https://pypi.org/project/prompt_toolkit) 3.0.43 â 3.0.47 (Library for building powerful interactive command lines in Python)
+ * [ptpython](https://pypi.org/project/ptpython) 3.0.26 â 3.0.29 (Python REPL build on top of prompt_toolkit)
+ * [setuptools](https://pypi.org/project/setuptools) 69.5.1 â 72.2.0 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [wheel](https://pypi.org/project/wheel) 0.43.0 â 0.44.0 (A built-package format for Python)
+ * [winpython](https://pypi.org/project/winpython) 8.2.20240618 â 10.7.20240908 (WinPython distribution tools, including WPPM)
+
+
+
+* * *
diff --git a/changelogs/WinPythonfree-64bit-3.14.0.0.md b/changelogs/WinPythonfree-64bit-3.14.0.0.md
new file mode 100644
index 00000000..763af9fc
--- /dev/null
+++ b/changelogs/WinPythonfree-64bit-3.14.0.0.md
@@ -0,0 +1,36 @@
+## WinPython 3.14.0.0free
+
+The following packages are included in WinPython-64bit v3.14.0.0free b3.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.14.0b3 | Python programming language with standard library
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 25.0 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 16.6.20250620 | WinPython distribution tools, including WPPM
+
+
+### WheelHouse packages
+
+Name | Version | Description
+-----|---------|------------
+
+
+
diff --git a/changelogs/WinPythonfree-64bit-3.14.0.0_History.md b/changelogs/WinPythonfree-64bit-3.14.0.0_History.md
new file mode 100644
index 00000000..e70c94b5
--- /dev/null
+++ b/changelogs/WinPythonfree-64bit-3.14.0.0_History.md
@@ -0,0 +1,58 @@
+## History of changes for WinPython-64bit 3.14.0.0free
+
+The following changes were made to WinPython-64bit distribution since version 3.13.0.1free.
+
+
+
+
+### Tools
+
+
+New packages:
+ * Python 3.14.0b3 (Python programming language with standard library)
+
+### Python packages
+
+
+New packages:
+ * sv-ttk 2.6.0 (A gorgeous theme for Tkinter, based on Windows 11's UI)
+
+Upgraded packages:
+ * build 1.2.1 â 1.2.2.post1 (A simple, correct Python build frontend)
+ * packaging 24.1 â 25.0 (Core utilities for Python packages)
+ * pip 24.2 â 25.1.1 (The PyPA recommended tool for installing Python packages.)
+ * setuptools 72.2.0 â 79.0.1 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * wheel 0.44.0 â 0.45.1 (A built-package format for Python)
+ * winpython 10.7.20240908 â 16.6.20250620 (WinPython distribution tools, including WPPM)
+
+Removed packages:
+ * Python 3.13.0 (Python programming language with standard library)
+ * appdirs 1.4.4 (A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".)
+ * asttokens 2.4.1 (Annotate AST trees with source code positions)
+ * cython 3.1.0a0 (The Cython compiler for writing C extensions in the Python language.)
+ * decorator 5.1.1 (Decorators for Humans)
+ * executing 2.0.1 (Get the currently executing AST node of a frame, and other information)
+ * interpreters_pep_734 0.1.0 (Use this module to try out multiple interpreters and a per-interpreter GIL in Python 3.13+. Do not use this for anything important yet.)
+ * ipython 8.26.0 (IPython: Productive Interactive Computing)
+ * jedi 0.19.1 (An autocompletion tool for Python that can be used for text editors.)
+ * matplotlib_inline 0.1.7 (Inline Matplotlib backend for Jupyter)
+ * msvc_runtime 14.40.33807 (Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories)
+ * parso 0.8.4 (A Python Parser)
+ * prompt_toolkit 3.0.47 (Library for building powerful interactive command lines in Python)
+ * ptpython 3.0.29 (Python REPL build on top of prompt_toolkit)
+ * pure_eval 0.2.2 (Safely evaluate AST nodes without side effects)
+ * pygments 2.18.0 (Pygments is a syntax highlighting package written in Python.)
+ * six 1.16.0 (Python 2 and 3 compatibility utilities)
+ * stack_data 0.6.3 (Extract data from python stack frames and tracebacks for informative displays)
+ * traitlets 5.14.1 (Traitlets Python configuration system)
+ * wcwidth 0.2.13 (Measures the displayed width of unicode strings in a terminal)
+
+### WheelHouse packages
+
+
+No differences found.
+
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.12.10.0.md b/changelogs/WinPythonslim-64bit-3.12.10.0.md
new file mode 100644
index 00000000..a8084d3f
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.10.0.md
@@ -0,0 +1,515 @@
+## WinPython 3.12.10.0slim
+
+The following packages are included in WinPython-64bit v3.12.10.0slim .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Pandoc](https://pandoc.org) | 3.1.9 | an universal document converter
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.10 | Python programming language with standard library
+[absl-py](https://pypi.org/project/absl-py) | 2.0.0 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc-driver-manager](https://pypi.org/project/adbc-driver-manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.4.4 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.11 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.1 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.15.1 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[aniso8601](https://pypi.org/project/aniso8601) | 9.0.1 | A library for parsing ISO 8601 strings.
+[annotated-types](https://pypi.org/project/annotated-types) | 0.6.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.49.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.8.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.12 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argon2-cffi](https://pypi.org/project/argon2-cffi) | 23.1.0 | Argon2 for Python
+[argon2-cffi-bindings](https://pypi.org/project/argon2-cffi-bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array-api-compat](https://pypi.org/project/array-api-compat) | 1.11.1 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi-csrf](https://pypi.org/project/asgi-csrf) | 0.9 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 0.9.31 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.1.0 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy-iers-data](https://pypi.org/project/astropy-iers-data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[async-lru](https://pypi.org/project/async-lru) | 2.0.4 | Simple LRU cache for asyncio
+[asyncssh](https://pypi.org/project/asyncssh) | 2.20.0 | AsyncSSH: Asynchronous SSHv2 client and server library
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 23.2.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure-core](https://pypi.org/project/azure-core) | 1.32.0 | Microsoft Azure Core Library for Python
+[azure-cosmos](https://pypi.org/project/azure-cosmos) | 4.9.0 | Microsoft Azure Cosmos Client Library for Python
+[azure-identity](https://pypi.org/project/azure-identity) | 1.21.0 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.16.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 1.0.0 | playing SQL directly on Python datas
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.12.2 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 25.1.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.1.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.9.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.7.2 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.0 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachetools](https://pypi.org/project/cachetools) | 5.5.2 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2025.1.31 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset-normalizer](https://pypi.org/project/charset-normalizer) | 3.4.0 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.10.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.8 | Composable command line interface toolkit
+[click-default-group](https://pypi.org/project/click-default-group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.1.1 | Pickler class to extend the standard pickle.Pickler functionality
+[cohere](https://pypi.org/project/cohere) | 5.13.12 |
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.8.2 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.1 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g.
+[cryptography](https://pypi.org/project/cryptography) | 44.0.0 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.4 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.0.12 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 1.0.1 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2025.3.0 | Parallel PyData with Task Scheduling
+[datasette](https://pypi.org/project/datasette) | 0.65.1 | An open source multi-tool for exploring and publishing data
+[datasette-graphql](https://pypi.org/project/datasette-graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.17.0 | Data visualization toolchain based on aggregating into a grid
+[deap](https://pypi.org/project/deap) | 1.4.2 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.0 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[deprecated](https://pypi.org/project/deprecated) | 1.2.14 | Python @deprecated decorator to deprecate old python classes, functions or methods.
+[diff-match-patch](https://pypi.org/project/diff-match-patch) | 20241021 | Repackaging of Google's Diff Match and Patch libraries.
+[dill](https://pypi.org/project/dill) | 0.3.9 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2025.3.0 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.8.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.0.7 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.6.1 | DNS toolkit
+[docstring-to-markdown](https://pypi.org/project/docstring-to-markdown) | 0.15 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.21.2 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.2.2 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et-xmlfile](https://pypi.org/project/et-xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval-type-backport](https://pypi.org/project/eval-type-backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.0.1 | Get the currently executing AST node of a frame, and other information
+[faker](https://pypi.org/project/faker) | 36.1.1 | Faker is a Python package that generates fake data for you.
+[fast-histogram](https://pypi.org/project/fast-histogram) | 0.14 | Fast simple 1D and 2D histograms
+[fastapi](https://pypi.org/project/fastapi) | 0.115.8 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastavro](https://pypi.org/project/fastavro) | 1.10.0 | Fast read/write of AVRO files
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.18.0 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.17.0 | A platform independent file lock.
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.1.0 | A simple framework for building complex web applications.
+[flexcache](https://pypi.org/project/flexcache) | 0.3 | Saves and loads to the cache a transformed versions of a source object.
+[flexparser](https://pypi.org/project/flexparser) | 0.4 | Parsing made fun ... using typing.
+[flit](https://pypi.org/project/flit) | 3.10.1 | A simple packaging tool for simple packages.
+[flit-core](https://pypi.org/project/flit-core) | 3.10.1 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.19.5 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.55.3 | Tools to manipulate font files
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2024.6.1 | File-system specification
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 1.0.1 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.10 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.32 | GitPython is a Python library used to interact with Git repositories
+[google-auth](https://pypi.org/project/google-auth) | 2.37.0 | Google Authentication Library
+[graphene](https://pypi.org/project/graphene) | 3.3 | GraphQL Framework for Python
+[graphql-core](https://pypi.org/project/graphql-core) | 3.2.3 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql-relay](https://pypi.org/project/graphql-relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.5.5 | Signatures for entire Python programs.
+[groq](https://pypi.org/project/groq) | 0.13.1 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.7.1 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.1.0 | HTTP/2 State-Machine based protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.20.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.1.0 | Pure-Python HPACK header encoding
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.5 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.27.2 | The next generation HTTP client.
+[httpx-sse](https://pypi.org/project/httpx-sse) | 0.4.0 | Consume Server-Sent Event (SSE) messages with HTTPX.
+[huggingface-hub](https://pypi.org/project/huggingface-hub) | 0.29.3 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.11.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.17.3 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.1.0 | Pure-Python HTTP/2 framing
+[hypothesis](https://pypi.org/project/hypothesis) | 6.130.4 | A library for property-based testing
+[id](https://pypi.org/project/id) | 1.5.0 | A tool for generating OIDC identities
+[idna](https://pypi.org/project/idna) | 3.10 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.37.0 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced-learn](https://pypi.org/project/imbalanced-learn) | 0.13.0 | Toolbox for imbalanced dataset in machine learning
+[importlib-metadata](https://pypi.org/project/importlib-metadata) | 8.6.1 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.0.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.0.2 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.3 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.7 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.34.0 | IPython: Productive Interactive Computing
+[ipython-genutils](https://pypi.org/project/ipython-genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython-sql](https://pypi.org/project/ipython-sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.6 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 2.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco-classes](https://pypi.org/project/jaraco-classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco-context](https://pypi.org/project/jaraco-context) | 6.0.1 | Useful decorators and context managers
+[jaraco-functools](https://pypi.org/project/jaraco-functools) | 4.1.0 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.2 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.2 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.8.2 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.9.14 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpath-python](https://pypi.org/project/jsonpath-python) | 1.0.6 | A more powerful JSONPath implementation in modern python
+[jsonpointer](https://pypi.org/project/jsonpointer) | 2.4 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.19.2 | An implementation of JSON Schema validation for Python
+[jsonschema-specifications](https://pypi.org/project/jsonschema-specifications) | 2023.12.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter-bokeh](https://pypi.org/project/jupyter-bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter-client](https://pypi.org/project/jupyter-client) | 8.6.3 | Jupyter protocol implementation and client libraries
+[jupyter-console](https://pypi.org/project/jupyter-console) | 6.6.3 | Jupyter terminal console
+[jupyter-core](https://pypi.org/project/jupyter-core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter-events](https://pypi.org/project/jupyter-events) | 0.12.0 | Jupyter Event System library
+[jupyter-leaflet](https://pypi.org/project/jupyter-leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter-lsp](https://pypi.org/project/jupyter-lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter-server](https://pypi.org/project/jupyter-server) | 2.14.2 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter-server-terminals](https://pypi.org/project/jupyter-server-terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.4.1 | JupyterLab computational environment
+[jupyterlab-pygments](https://pypi.org/project/jupyterlab-pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab-server](https://pypi.org/project/jupyterlab-server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab-widgets](https://pypi.org/project/jupyterlab-widgets) | 3.0.14 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.9.2 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.6.0 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.8 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.23 | Building applications with LLMs through composability
+[langchain-core](https://pypi.org/project/langchain-core) | 0.3.51 | Building applications with LLMs through composability
+[langchain-text-splitters](https://pypi.org/project/langchain-text-splitters) | 0.3.8 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.3.24 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy-loader](https://pypi.org/project/lazy-loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify-it-py](https://pypi.org/project/linkify-it-py) | 2.0.2 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.1 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire-api](https://pypi.org/project/logfire-api) | 3.5.3 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.5 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.7 | Python implementation of John Gruber's Markdown.
+[markdown-it-py](https://pypi.org/project/markdown-it-py) | 2.2.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 3.0.2 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.1 | Python plotting package
+[matplotlib-inline](https://pypi.org/project/matplotlib-inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.8.1 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mdit-py-plugins](https://pypi.org/project/mdit-py-plugins) | 0.3.5 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.1 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.2.5 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 2.0.5 | A sane Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml-dtypes](https://pypi.org/project/ml-dtypes) | 0.5.0 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.23.3 | Machine Learning Library Extensions
+[more-itertools](https://pypi.org/project/more-itertools) | 10.2.0 | More routines for operating on iterables, beyond itertools
+[mpl-scatter-density](https://pypi.org/project/mpl-scatter-density) | 0.7 | Matplotlib helpers to make density scatter plots
+[mpld3](https://pypi.org/project/mpld3) | 0.5.8 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal-extensions](https://pypi.org/project/msal-extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.1.0 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.1.0 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mypy](https://pypi.org/project/mypy) | 1.15.0 | Optional static typing for Python
+[mypy-extensions](https://pypi.org/project/mypy-extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql-connector-python](https://pypi.org/project/mysql-connector-python) | 9.2.0 | A self-contained Python driver for communicating with MySQL servers, using an API that is compliant with the Python Database API Specification v
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.30.0 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.0 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.1 | Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest-asyncio](https://pypi.org/project/nest-asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nh3](https://pypi.org/project/nh3) | 0.2.18 | Python bindings to the ammonia HTML sanitization library.
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.4.0 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook-shim](https://pypi.org/project/notebook-shim) | 0.2.4 | A shim layer for notebook traits and config
+[numba](https://pypi.org/project/numba) | 0.61.2 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.2.4 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.6.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.72.0 | The official Python library for the openai API
+[opencv-python](https://pypi.org/project/opencv-python) | 4.11.0.86 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.2 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[optree](https://pypi.org/project/optree) | 0.14.0 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 3.6.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.12 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post3 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.0 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.6.2 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.2.0 | Make your Python code clearer and more reliable by declaring Parameters.
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.0 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.11.0 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 0.5.6 | A Python package for describing statistical models and for building design matrices.
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.8.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.23.0 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.1.0 | Python Imaging Library (Fork)
+[pip](https://pypi.org/project/pip) | 25.0.1 | The PyPA recommended tool for installing Python packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.3.6 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 6.0.1 | An open-source interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.2 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.27.1 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[prettytable](https://pypi.org/project/prettytable) | 3.3.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[prince](https://pypi.org/project/prince) | 0.15.0 | Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus-client](https://pypi.org/project/prometheus-client) | 0.21.1 | Python client for the Prometheus monitoring system.
+[prompt-toolkit](https://pypi.org/project/prompt-toolkit) | 3.0.50 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.2.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 5.27.3 |
+[psutil](https://pypi.org/project/psutil) | 5.9.8 | Cross-platform lib for process and system monitoring in Python.
+[psygnal](https://pypi.org/project/psygnal) | 0.11.1 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure-eval](https://pypi.org/project/pure-eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 19.0.1 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.6.1 | Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)
+[pyasn1-modules](https://pypi.org/project/pyasn1-modules) | 0.4.1 | A collection of ASN.1-based protocols modules
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.10.6 | Data validation using Python type hints
+[pydantic-ai](https://pypi.org/project/pydantic-ai) | 0.0.24 | Agent Framework / shim to use Pydantic with LLMs
+[pydantic-ai-slim](https://pypi.org/project/pydantic-ai-slim) | 0.0.24 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic-core](https://pypi.org/project/pydantic-core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydantic-graph](https://pypi.org/project/pydantic-graph) | 0.0.24 | Graph and state machine library
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.4 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygithub](https://pypi.org/project/pygithub) | 2.6.1 | Use the full Github API v3
+[pygments](https://pypi.org/project/pygments) | 2.19.1 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.10.1 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.1.0 | python code static checker
+[pylint-venv](https://pypi.org/project/pylint-venv) | 3.0.3 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls-spyder](https://pypi.org/project/pyls-spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.12 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyogrio](https://pypi.org/project/pyogrio) | 0.10.0 | Vectorized spatial vector file format I/O using GDAL/OGR
+[pyomo](https://pypi.org/project/pyomo) | 6.9.1 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.15 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.2.1 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 5.1.0 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pyproj](https://pypi.org/project/pyproj) | 3.7.0 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.10 | Python bindings for the Qt cross platform application toolkit
+[pyqt5-qt5](https://pypi.org/project/pyqt5-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5-sip](https://pypi.org/project/pyqt5-sip) | 12.16.1 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.6 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine-qt5](https://pypi.org/project/pyqtwebengine-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pyspnego](https://pypi.org/project/pyspnego) | 0.11.2 | Windows Negotiate Authentication Client and Server
+[pytest](https://pypi.org/project/pytest) | 8.3.4 | pytest: simple powerful testing with Python
+[python-barcode](https://pypi.org/project/python-barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python-dateutil](https://pypi.org/project/python-dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python-dotenv](https://pypi.org/project/python-dotenv) | 1.0.1 | Read key-value pairs from a .env file and set them as environment variables
+[python-json-logger](https://pypi.org/project/python-json-logger) | 2.0.7 | A python library adding a json log formatter
+[python-lsp-black](https://pypi.org/project/python-lsp-black) | 2.0.0 | Black plugin for the Python LSP Server
+[python-lsp-jsonrpc](https://pypi.org/project/python-lsp-jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python-lsp-server](https://pypi.org/project/python-lsp-server) | 1.12.0 | Python Language Server for the Language Server Protocol
+[python-multipart](https://pypi.org/project/python-multipart) | 0.0.9 | A streaming multipart parser for Python
+[python-slugify](https://pypi.org/project/python-slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.4 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2024.2 | World timezone definitions, modern and historical
+[pyuca](https://pypi.org/project/pyuca) | 1.2 | a Python implementation of the Unicode Collation Algorithm
+[pyusb](https://pypi.org/project/pyusb) | 1.3.1 | Easy USB access for Python
+[pyviz-comms](https://pypi.org/project/pyviz-comms) | 3.0.3 | A JupyterLab extension for rendering HoloViz content.
+[pywavelets](https://pypi.org/project/pywavelets) | 1.8.0 | PyWavelets, wavelet transform module
+[pywin32](https://pypi.org/project/pywin32) | 308 | Python for Window Extensions
+[pywin32-ctypes](https://pypi.org/project/pywin32-ctypes) | 0.2.2 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.14 | Pseudo terminal support for Windows from Python.
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.2.1 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post5 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 8.0 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.2 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.4.0 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.6.1 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.1 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.20.0 | A Python ASGI web framework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.9.6 | rapid fuzzy string matching
+[readme-renderer](https://pypi.org/project/readme-renderer) | 44.0 | readme_renderer is a library for rendering readme descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.0.8 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.35.1 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.2.5 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests-ntlm](https://pypi.org/project/requests-ntlm) | 1.3.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests-toolbelt](https://pypi.org/project/requests-toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339-validator](https://pypi.org/project/rfc3339-validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986-validator](https://pypi.org/project/rfc3986-validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 13.9.4 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.12.0 | a python refactoring library...
+[rpds-py](https://pypi.org/project/rpds-py) | 0.22.3 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.3.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.2.0 | Reactive Extensions (Rx) for Python
+[scikit-image](https://pypi.org/project/scikit-image) | 0.25.2 | Image processing in Python
+[scikit-learn](https://pypi.org/project/scikit-learn) | 1.6.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.15.2 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.5 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7.post2 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.3 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 75.8.2 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.0.6 | Manipulation and analysis of geometric objects
+[shellingham](https://pypi.org/project/shellingham) | 1.5.4 | Tool to Detect Surrounding Shell
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.1.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[sklearn-compat](https://pypi.org/project/sklearn-compat) | 0.1.3 | Ease support for compatible scikit-learn estimators across versions
+[skrub](https://pypi.org/project/skrub) | 0.5.1 | Prepping tables for machine learning
+[smmap](https://pypi.org/project/smmap) | 5.0.0 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.0 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.5.1 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.6 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 7.3.7 | Python documentation generator
+[sphinx-rtd-theme](https://pypi.org/project/sphinx-rtd-theme) | 3.0.2 | Read the Docs theme for Sphinx
+[sphinxcontrib-applehelp](https://pypi.org/project/sphinxcontrib-applehelp) | 2.0.0 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib-devhelp](https://pypi.org/project/sphinxcontrib-devhelp) | 2.0.0 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib-htmlhelp](https://pypi.org/project/sphinxcontrib-htmlhelp) | 2.1.0 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib-jquery](https://pypi.org/project/sphinxcontrib-jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib-jsmath](https://pypi.org/project/sphinxcontrib-jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib-qthelp](https://pypi.org/project/sphinxcontrib-qthelp) | 2.0.0 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib-serializinghtml](https://pypi.org/project/sphinxcontrib-serializinghtml) | 2.0.0 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 6.0.5 | The Scientific Python Development Environment
+[spyder-kernels](https://pypi.org/project/spyder-kernels) | 3.0.3 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.38 | Database Abstraction Library
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite-fts4](https://pypi.org/project/sqlite-fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite-utils](https://pypi.org/project/sqlite-utils) | 3.38 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.5.3 | A non-validating SQL parser.
+[squarify](https://pypi.org/project/squarify) | 0.4.4 | Pure Python implementation of the squarify treemap layout algorithm
+[sspilib](https://pypi.org/project/sspilib) | 0.2.0 | SSPI API bindings for Python
+[stack-data](https://pypi.org/project/stack-data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.45.3 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.44.0 | A faster way to build and share data apps
+[superqt](https://pypi.org/project/superqt) | 0.7.1 | Missing widgets and components for PyQt/PySide
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[sympy](https://pypi.org/project/sympy) | 1.13.3 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.0.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 9.0.0 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 2.5.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text-unidecode](https://pypi.org/project/text-unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.3 | Compute distance between the two texts.
+[thefuzz](https://pypi.org/project/thefuzz) | 0.22.1 | Fuzzy string matching in python
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.5.0 | threadpoolctl
+[three-merge](https://pypi.org/project/three-merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2025.1.10 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.8.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.4.0 | A tiny CSS parser
+[tokenizers](https://pypi.org/project/tokenizers) | 0.21.0 |
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.2.1 | A lil' TOML parser
+[tomli-w](https://pypi.org/project/tomli-w) | 1.2.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.13.2 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 1.0.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.4.2 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.66.4 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.29.0 | A friendly Python library for async concurrency and I/O
+[trove-classifiers](https://pypi.org/project/trove-classifiers) | 2024.10.21.16 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 6.1.0 | Collection of utilities for publishing packages on PyPI
+[typer](https://pypi.org/project/typer) | 0.15.2 | Typer, build great CLIs. Easy to code. Based on Python type hints.
+[types-python-dateutil](https://pypi.org/project/types-python-dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[types-requests](https://pypi.org/project/types-requests) | 2.32.0.20241016 | Typing stubs for requests
+[typing-extensions](https://pypi.org/project/typing-extensions) | 4.12.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing-inspect](https://pypi.org/project/typing-inspect) | 0.9.0 | Runtime inspection utilities for typing module.
+[tzdata](https://pypi.org/project/tzdata) | 2024.1 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.2 | tzinfo object for the local timezone
+[uc-micro-py](https://pypi.org/project/uc-micro-py) | 1.0.1 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap-learn](https://pypi.org/project/umap-learn) | 0.5.6 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.2.2 | calculations with values with uncertainties, error propagation
+[uri-template](https://pypi.org/project/uri-template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.2.3 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.34.0 | The lightning-fast ASGI server.
+[vega-datasets](https://pypi.org/project/vega-datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 6.0.0 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 24.11.1 | A library for working with the color formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket-client](https://pypi.org/project/websocket-client) | 1.8.0 | WebSocket client for Python with low level API options
+[werkzeug](https://pypi.org/project/werkzeug) | 3.1.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.7 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.14 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 15.3.20250425 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wrapt](https://pypi.org/project/wrapt) | 1.16.0 | Module for decorators, wrappers and monkey patching.
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2025.3.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.1.9 | A Python module for creating Excel XLSX files.
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt-dlp](https://pypi.org/project/yt-dlp) | 2025.2.19 | A feature-rich command-line audio/video downloader
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.21.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.12.10.0_History.md b/changelogs/WinPythonslim-64bit-3.12.10.0_History.md
new file mode 100644
index 00000000..07147b6d
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.10.0_History.md
@@ -0,0 +1,147 @@
+ï»ż## History of changes for WinPython-64bit 3.12.10.0slim
+
+The following changes were made to WinPython-64bit distribution since version 3.12.9.0slim.
+
+
+
+### Tools
+
+New packages:
+
+ * [Pandoc](https://pandoc.org) 3.1.9 (an universal document converter)
+
+### Python packages
+
+New packages:
+
+ * [asyncssh](https://pypi.org/project/asyncssh) 2.20.0 (AsyncSSH: Asynchronous SSHv2 client and server library)
+ * [deprecated](https://pypi.org/project/deprecated) 1.2.14 (Python @deprecated decorator to deprecate old python classes, functions or methods.)
+ * [flexcache](https://pypi.org/project/flexcache) 0.3 (Saves and loads to the cache a transformed versions of a source object.)
+ * [flexparser](https://pypi.org/project/flexparser) 0.4 (Parsing made fun ... using typing.)
+ * [id](https://pypi.org/project/id) 1.5.0 (A tool for generating OIDC identities)
+ * [pygithub](https://pypi.org/project/pygithub) 2.6.1 (Use the full Github API v3)
+ * [pyuca](https://pypi.org/project/pyuca) 1.2 (a Python implementation of the Unicode Collation Algorithm)
+ * [shellingham](https://pypi.org/project/shellingham) 1.5.4 (Tool to Detect Surrounding Shell)
+ * [skrub](https://pypi.org/project/skrub) 0.5.1 (Prepping tables for machine learning)
+ * [superqt](https://pypi.org/project/superqt) 0.7.1 (Missing widgets and components for PyQt/PySide)
+ * [sv-ttk](https://pypi.org/project/sv-ttk) 2.6.0 (A gorgeous theme for Tkinter, based on Windows 11's UI)
+ * [typer](https://pypi.org/project/typer) 0.15.2 (Typer, build great CLIs. Easy to code. Based on Python type hints.)
+ * [wrapt](https://pypi.org/project/wrapt) 1.16.0 (Module for decorators, wrappers and monkey patching.)
+
+Upgraded packages:
+
+ * [alembic](https://pypi.org/project/alembic) 1.13.1 â 1.15.1 (A database migration tool for SQLAlchemy.)
+ * [anthropic](https://pypi.org/project/anthropic) 0.42.0 â 0.49.0 (The official Python library for the anthropic API)
+ * [anyio](https://pypi.org/project/anyio) 4.7.0 â 4.8.0 (High level compatibility layer for multiple asynchronous event loop implementations)
+ * [array-api-compat](https://pypi.org/project/array-api-compat) 1.10.0 â 1.11.1 (A wrapper around NumPy and other array libraries to make them compatible with the Array API standard)
+ * [azure-core](https://pypi.org/project/azure-core) 1.30.2 â 1.32.0 (Microsoft Azure Core Library for Python)
+ * [azure-cosmos](https://pypi.org/project/azure-cosmos) 4.7.0 â 4.9.0 (Microsoft Azure Cosmos Client Library for Python)
+ * [azure-identity](https://pypi.org/project/azure-identity) 1.16.1 â 1.21.0 (Microsoft Azure Identity Library for Python)
+ * [black](https://pypi.org/project/black) 24.10.0 â 25.1.0 (The uncompromising code formatter.)
+ * [bokeh](https://pypi.org/project/bokeh) 3.6.3 â 3.7.2 (Interactive plots and applications in the browser from Python)
+ * [cachetools](https://pypi.org/project/cachetools) 5.4.0 â 5.5.2 (Extensible memoizing collections and decorators)
+ * [certifi](https://pypi.org/project/certifi) 2024.6.2 â 2025.1.31 (Python package for providing Mozilla's CA Bundle.)
+ * [click](https://pypi.org/project/click) 8.1.7 â 8.1.8 (Composable command line interface toolkit)
+ * [cloudpickle](https://pypi.org/project/cloudpickle) 3.0.0 â 3.1.1 (Pickler class to extend the standard pickle.Pickler functionality)
+ * [cvxpy](https://pypi.org/project/cvxpy) 1.6.0 â 1.6.4 (A domain-specific language for modeling convex optimization problems in Python.)
+ * [cython](https://pypi.org/project/cython) 3.0.11 â 3.0.12 (The Cython compiler for writing C extensions in the Python language.)
+ * [dask](https://pypi.org/project/dask) 2024.12.1 â 2025.3.0 (Parallel PyData with Task Scheduling)
+ * [datasette](https://pypi.org/project/datasette) 0.64.8 â 0.65.1 (An open source multi-tool for exploring and publishing data)
+ * [datashader](https://pypi.org/project/datashader) 0.16.3 â 0.17.0 (Data visualization toolchain based on aggregating into a grid)
+ * [diff-match-patch](https://pypi.org/project/diff-match-patch) 20230430 â 20241021 (Repackaging of Google's Diff Match and Patch libraries.)
+ * [distributed](https://pypi.org/project/distributed) 2024.12.1 â 2025.3.0 (Distributed scheduler for Dask)
+ * [docstring-to-markdown](https://pypi.org/project/docstring-to-markdown) 0.13 â 0.15 (On the fly conversion of Python docstrings to markdown)
+ * [duckdb](https://pypi.org/project/duckdb) 1.2.0 â 1.2.2 (DuckDB in-process database)
+ * [faker](https://pypi.org/project/faker) 33.3.1 â 36.1.1 (Faker is a Python package that generates fake data for you.)
+ * [fastapi](https://pypi.org/project/fastapi) 0.115.6 â 0.115.8 (FastAPI framework, high performance, easy to learn, fast to code, ready for production)
+ * [filelock](https://pypi.org/project/filelock) 3.14.0 â 3.17.0 (A platform independent file lock.)
+ * [folium](https://pypi.org/project/folium) 0.18.0 â 0.19.5 (Make beautiful maps with Leaflet.js & Python)
+ * [holoviews](https://pypi.org/project/holoviews) 1.20.0 â 1.20.2 (A high-level plotting API for the PyData ecosystem built on HoloViews.)
+ * [hpack](https://pypi.org/project/hpack) 4.0.0 â 4.1.0 (Pure-Python HPACK header encoding)
+ * [huggingface-hub](https://pypi.org/project/huggingface-hub) 0.28.1 â 0.29.3 (Client library to download and publish models, datasets and other repos on the huggingface.co hub)
+ * [hypercorn](https://pypi.org/project/hypercorn) 0.16.0 â 0.17.3 (A ASGI Server based on Hyper libraries and inspired by Gunicorn)
+ * [hyperframe](https://pypi.org/project/hyperframe) 6.0.1 â 6.1.0 (Pure-Python HTTP/2 framing)
+ * [hypothesis](https://pypi.org/project/hypothesis) 6.122.3 â 6.130.4 (A library for property-based testing)
+ * [idna](https://pypi.org/project/idna) 3.7 â 3.10 (Internationalized Domain Names in Applications (IDNA))
+ * [imageio](https://pypi.org/project/imageio) 2.33.1 â 2.37.0 (Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.)
+ * [importlib-metadata](https://pypi.org/project/importlib-metadata) 7.1.0 â 8.6.1 (Read metadata from Python packages)
+ * [ipympl](https://pypi.org/project/ipympl) 0.9.6 â 0.9.7 (Matplotlib Jupyter Extension)
+ * [ipython](https://pypi.org/project/ipython) 8.32.0 â 8.34.0 (IPython: Productive Interactive Computing)
+ * [ipywidgets](https://pypi.org/project/ipywidgets) 8.1.5 â 8.1.6 (Jupyter interactive widgets)
+ * [jupyter-client](https://pypi.org/project/jupyter-client) 8.6.2 â 8.6.3 (Jupyter protocol implementation and client libraries)
+ * [jupyter-events](https://pypi.org/project/jupyter-events) 0.10.0 â 0.12.0 (Jupyter Event System library)
+ * [jupyterlab](https://pypi.org/project/jupyterlab) 4.3.5 â 4.4.1 (JupyterLab computational environment)
+ * [jupyterlab-widgets](https://pypi.org/project/jupyterlab-widgets) 3.0.13 â 3.0.14 (Jupyter interactive widgets for JupyterLab)
+ * [keras](https://pypi.org/project/keras) 3.8.0 â 3.9.2 (Multi-backend Keras)
+ * [langchain](https://pypi.org/project/langchain) 0.3.18 â 0.3.23 (Building applications with LLMs through composability)
+ * [langchain-core](https://pypi.org/project/langchain-core) 0.3.34 â 0.3.51 (Building applications with LLMs through composability)
+ * [langchain-text-splitters](https://pypi.org/project/langchain-text-splitters) 0.3.6 â 0.3.8 (LangChain text splitting utilities)
+ * [langsmith](https://pypi.org/project/langsmith) 0.2.11 â 0.3.24 (Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.)
+ * [markdown](https://pypi.org/project/markdown) 3.5.1 â 3.7 (Python implementation of John Gruber's Markdown.)
+ * [matplotlib](https://pypi.org/project/matplotlib) 3.10.0 â 3.10.1 (Python plotting package)
+ * [mypy](https://pypi.org/project/mypy) 1.14.0 â 1.15.0 (Optional static typing for Python)
+ * [mysql-connector-python](https://pypi.org/project/mysql-connector-python) 8.0.21 â 9.2.0 (A self-contained Python driver for communicating with MySQL servers, using an API that is compliant with the Python Database API Specification v)
+ * [narwhals](https://pypi.org/project/narwhals) 1.21.1 â 1.30.0 (Extremely lightweight compatibility layer between dataframe libraries)
+ * [notebook](https://pypi.org/project/notebook) 7.3.1 â 7.4.0 (Jupyter Notebook - A web-based notebook environment for interactive computing)
+ * [numba](https://pypi.org/project/numba) 0.61.0 â 0.61.2 (compiling Python code using LLVM)
+ * [numpy](https://pypi.org/project/numpy) 2.1.3 â 2.2.4 (Fundamental package for array computing in Python)
+ * [openai](https://pypi.org/project/openai) 1.61.1 â 1.72.0 (The official Python library for the openai API)
+ * [opencv-python](https://pypi.org/project/opencv-python) 4.10.0.84 â 4.11.0.86 (Wrapper package for OpenCV python bindings.)
+ * [optree](https://pypi.org/project/optree) 0.13.1 â 0.14.0 (Optimized PyTree Utilities.)
+ * [panel](https://pypi.org/project/panel) 1.6.0 â 1.6.2 (The powerful data exploration & web app framework for Python.)
+ * [param](https://pypi.org/project/param) 2.1.1 â 2.2.0 (Make your Python code clearer and more reliable by declaring Parameters.)
+ * [pip](https://pypi.org/project/pip) 24.3.1 â 25.0.1 (The PyPA recommended tool for installing Python packages.)
+ * [platformdirs](https://pypi.org/project/platformdirs) 4.2.2 â 4.3.6 (A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.)
+ * [plotly](https://pypi.org/project/plotly) 5.24.1 â 6.0.1 (An open-source interactive data visualization library for Python)
+ * [polars](https://pypi.org/project/polars) 1.22.0 â 1.27.1 (Blazingly fast DataFrame library)
+ * [prometheus-client](https://pypi.org/project/prometheus-client) 0.18.0 â 0.21.1 (Python client for the Prometheus monitoring system.)
+ * [prompt-toolkit](https://pypi.org/project/prompt-toolkit) 3.0.48 â 3.0.50 (Library for building powerful interactive command lines in Python)
+ * [pyarrow](https://pypi.org/project/pyarrow) 19.0.0 â 19.0.1 (Python library for Apache Arrow)
+ * [pyasn1](https://pypi.org/project/pyasn1) 0.4.8 â 0.6.1 (Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208))
+ * [pyasn1-modules](https://pypi.org/project/pyasn1-modules) 0.2.8 â 0.4.1 (A collection of ASN.1-based protocols modules)
+ * [pyjwt](https://pypi.org/project/pyjwt) 2.8.0 â 2.10.1 (JSON Web Token implementation in Python)
+ * [pympler](https://pypi.org/project/pympler) 1.0.1 â 1.1 (A development tool to measure, monitor and analyze the memory behavior of Python objects.)
+ * [pyomo](https://pypi.org/project/pyomo) 6.8.2 â 6.9.1 (Pyomo: Python Optimization Modeling Objects)
+ * [pypandoc](https://pypi.org/project/pypandoc) 1.5 â 1.15 (Thin wrapper for pandoc.)
+ * [pytest](https://pypi.org/project/pytest) 8.2.2 â 8.3.4 (pytest: simple powerful testing with Python)
+ * [Python](http://www.python.org/) 3.12.9 â 3.12.10 (Python programming language with standard library)
+ * [pytz](https://pypi.org/project/pytz) 2024.1 â 2024.2 (World timezone definitions, modern and historical)
+ * [pyzmq](https://pypi.org/project/pyzmq) 26.2.0 â 26.2.1 (Python bindings for 0MQ)
+ * [qtawesome](https://pypi.org/project/qtawesome) 1.3.1 â 1.4.0 (FontAwesome icons in PyQt and PySide applications)
+ * [qtconsole](https://pypi.org/project/qtconsole) 5.5.2 â 5.6.1 (Jupyter Qt console)
+ * [quart](https://pypi.org/project/quart) 0.19.4 â 0.20.0 (A Python ASGI web framework with the same API as Flask)
+ * [rtree](https://pypi.org/project/rtree) 1.1.0 â 1.3.0 (R-Tree spatial index for Python GIS)
+ * [rx](https://pypi.org/project/rx) 3.1.1 â 3.2.0 (Reactive Extensions (Rx) for Python)
+ * [scikit-image](https://pypi.org/project/scikit-image) 0.25.0 â 0.25.2 (Image processing in Python)
+ * [scipy](https://pypi.org/project/scipy) 1.15.1 â 1.15.2 (Fundamental algorithms for scientific computing in Python)
+ * [send2trash](https://pypi.org/project/send2trash) 1.8.2 â 1.8.3 (Send file to trash natively under Mac OS X, Windows and Linux)
+ * [setuptools](https://pypi.org/project/setuptools) 75.6.0 â 75.8.2 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [simpy](https://pypi.org/project/simpy) 4.0.1 â 4.1.1 (Event discrete, process based simulation for Python.)
+ * [spyder](https://pypi.org/project/spyder) 5.5.6 â 6.0.5 (The Scientific Python Development Environment)
+ * [spyder-kernels](https://pypi.org/project/spyder-kernels) 2.5.2 â 3.0.3 (Jupyter kernels for Spyder's console)
+ * [sqlalchemy](https://pypi.org/project/sqlalchemy) 2.0.35 â 2.0.38 (Database Abstraction Library)
+ * [starlette](https://pypi.org/project/starlette) 0.41.3 â 0.45.3 (The little ASGI library that shines.)
+ * [streamlit](https://pypi.org/project/streamlit) 1.41.1 â 1.44.0 (A faster way to build and share data apps)
+ * [tomli-w](https://pypi.org/project/tomli-w) 1.1.0 â 1.2.0 (A lil' TOML writer)
+ * [trio](https://pypi.org/project/trio) 0.28.0 â 0.29.0 (A friendly Python library for async concurrency and I/O)
+ * [twine](https://pypi.org/project/twine) 6.0.1 â 6.1.0 (Collection of utilities for publishing packages on PyPI)
+ * [widgetsnbextension](https://pypi.org/project/widgetsnbextension) 4.0.13 â 4.0.14 (Jupyter interactive widgets for Jupyter Notebook)
+ * [winpython](https://pypi.org/project/winpython) 13.1.20250222 â 15.3.20250425 (WinPython distribution tools, including WPPM)
+ * [xarray](https://pypi.org/project/xarray) 2025.1.1 â 2025.3.0 (N-D labeled arrays and datasets in Python)
+ * [yt-dlp](https://pypi.org/project/yt-dlp) 2023.7.6 â 2025.2.19 (A feature-rich command-line audio/video downloader)
+
+Removed packages:
+
+ * [bcrypt](https://pypi.org/project/bcrypt) 4.0.1 (Modern password hashing for your software and your servers)
+ * [dask_expr](https://pypi.org/project/dask_expr) 1.1.21 (High Level Expressions for Dask )
+ * [mutagen](https://pypi.org/project/mutagen) 1.47.0 (read and write audio tags for many formats)
+ * [paramiko](https://pypi.org/project/paramiko) 2.8.0 (SSH2 protocol library)
+ * [pint](https://pypi.org/project/pint) 0.23 (Physical quantities module)
+ * [pkginfo](https://pypi.org/project/pkginfo) 1.11.2 (Query metadata from sdists / bdists / installed packages.)
+ * [pycryptodomex](https://pypi.org/project/pycryptodomex) 3.20.0 (Cryptographic library for Python)
+ * [streamz](https://pypi.org/project/streamz) 0.6.3 (Streams)
+ * [websockets](https://pypi.org/project/websockets) 14.2 (An implementation of the WebSocket Protocol (RFC 6455 & 7692))
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.12.10.1.md b/changelogs/WinPythonslim-64bit-3.12.10.1.md
new file mode 100644
index 00000000..7c78fc18
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.10.1.md
@@ -0,0 +1,528 @@
+## WinPython 3.12.10.1slim
+
+The following packages are included in WinPython-64bit v3.12.10.1slim 3.10.11.1dot.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Pandoc](https://pandoc.org) | 3.1.9 | an universal document converter
+[Python](http://www.python.org/) | 3.12.10 | Python programming language with standard library
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[absl-py](https://pypi.org/project/absl-py) | 2.2.2 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc-driver-manager](https://pypi.org/project/adbc-driver-manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.6.1 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.18 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.2 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.15.2 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[annotated-types](https://pypi.org/project/annotated-types) | 0.7.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.51.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.9.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.18 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argcomplete](https://pypi.org/project/argcomplete) | 3.6.2 | Bash tab completion for argparse
+[argon2-cffi](https://pypi.org/project/argon2-cffi) | 23.1.0 | Argon2 for Python
+[argon2-cffi-bindings](https://pypi.org/project/argon2-cffi-bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array-api-compat](https://pypi.org/project/array-api-compat) | 1.12.0 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi-csrf](https://pypi.org/project/asgi-csrf) | 0.11 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 1.0.5 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.3.9 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy-iers-data](https://pypi.org/project/astropy-iers-data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 3.0.0 | Annotate AST trees with source code positions
+[async-lru](https://pypi.org/project/async-lru) | 2.0.5 | Simple LRU cache for asyncio
+[asyncssh](https://pypi.org/project/asyncssh) | 2.20.0 | AsyncSSH: Asynchronous SSHv2 client and server library
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 25.3.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure-core](https://pypi.org/project/azure-core) | 1.32.0 | Microsoft Azure Core Library for Python
+[azure-cosmos](https://pypi.org/project/azure-cosmos) | 4.9.0 | Microsoft Azure Cosmos Client Library for Python
+[azure-identity](https://pypi.org/project/azure-identity) | 1.21.0 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.17.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 1.0.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.3.0 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.13.3 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 25.1.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.2.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.9.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.7.3 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.1 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachetools](https://pypi.org/project/cachetools) | 5.5.2 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2025.1.31 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset-normalizer](https://pypi.org/project/charset-normalizer) | 3.4.2 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.10.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.8 | Composable command line interface toolkit
+[click-default-group](https://pypi.org/project/click-default-group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.1.1 | Pickler class to extend the standard pickle.Pickler functionality
+[cohere](https://pypi.org/project/cohere) | 5.15.0 |
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.9.0 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.2 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g.
+[cryptography](https://pypi.org/project/cryptography) | 44.0.0 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.4 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.1.1 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 1.0.1 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2025.4.1 | Parallel PyData with Task Scheduling
+[datasette](https://pypi.org/project/datasette) | 0.65.1 | An open source multi-tool for exploring and publishing data
+[datasette-graphql](https://pypi.org/project/datasette-graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.17.0 | Data visualization toolchain based on aggregating into a grid
+[deap](https://pypi.org/project/deap) | 1.4.2 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.13 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.2.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[deprecated](https://pypi.org/project/deprecated) | 1.2.14 | Python @deprecated decorator to deprecate old python classes, functions or methods.
+[diff-match-patch](https://pypi.org/project/diff-match-patch) | 20241021 | Repackaging of Google's Diff Match and Patch libraries.
+[dill](https://pypi.org/project/dill) | 0.4.0 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2025.4.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.9.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.2 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.7.0 | DNS toolkit
+[docstring-to-markdown](https://pypi.org/project/docstring-to-markdown) | 0.17 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.21.2 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.3.0 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et-xmlfile](https://pypi.org/project/et-xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval-type-backport](https://pypi.org/project/eval-type-backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.2.0 | Get the currently executing AST node of a frame, and other information
+[faker](https://pypi.org/project/faker) | 37.1.0 | Faker is a Python package that generates fake data for you.
+[fasta2a](https://pypi.org/project/fasta2a) | 0.2.9 | Convert an AI Agent into a A2A server! âš
+[fastapi](https://pypi.org/project/fastapi) | 0.115.12 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastavro](https://pypi.org/project/fastavro) | 1.10.0 | Fast read/write of AVRO files
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.21.1 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.18.0 | A platform independent file lock.
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.1.0 | A simple framework for building complex web applications.
+[flexcache](https://pypi.org/project/flexcache) | 0.3 | Saves and loads to the cache a transformed versions of a source object.
+[flexparser](https://pypi.org/project/flexparser) | 0.4 | Parsing made fun ... using typing.
+[flit](https://pypi.org/project/flit) | 3.12.0 | A simple packaging tool for simple packages.
+[flit-core](https://pypi.org/project/flit-core) | 3.12.0 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.19.5 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.57.0 | Tools to manipulate font files
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2025.3.2 | File-system specification
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 1.0.1 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.12 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.44 | GitPython is a Python library used to interact with Git repositories
+[google-auth](https://pypi.org/project/google-auth) | 2.38.0 | Google Authentication Library
+[google-genai](https://pypi.org/project/google-genai) | 1.16.1 | GenAI Python SDK
+[graphene](https://pypi.org/project/graphene) | 3.4.3 | GraphQL Framework for Python
+[graphql-core](https://pypi.org/project/graphql-core) | 3.2.6 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql-relay](https://pypi.org/project/graphql-relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.7.2 | Signatures for entire Python programs.
+[groq](https://pypi.org/project/groq) | 0.25.0 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.9.0 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.2.0 | Pure-Python HTTP/2 protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.20.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.1.0 | Pure-Python HPACK header encoding
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.7 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.28.1 | The next generation HTTP client.
+[httpx-sse](https://pypi.org/project/httpx-sse) | 0.4.0 | Consume Server-Sent Event (SSE) messages with HTTPX.
+[huggingface-hub](https://pypi.org/project/huggingface-hub) | 0.33.0 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12.1 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.11.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.17.3 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.1.0 | Pure-Python HTTP/2 framing
+[hypothesis](https://pypi.org/project/hypothesis) | 6.130.4 | A library for property-based testing
+[id](https://pypi.org/project/id) | 1.5.0 | A tool for generating OIDC identities
+[idna](https://pypi.org/project/idna) | 3.10 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.37.0 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced-learn](https://pypi.org/project/imbalanced-learn) | 0.13.0 | Toolbox for imbalanced dataset in machine learning
+[importlib-metadata](https://pypi.org/project/importlib-metadata) | 8.6.1 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.1.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.1.0 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.3 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.7 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.36.0 | IPython: Productive Interactive Computing
+[ipython-genutils](https://pypi.org/project/ipython-genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython-sql](https://pypi.org/project/ipython-sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.6 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 2.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco-classes](https://pypi.org/project/jaraco-classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco-context](https://pypi.org/project/jaraco-context) | 6.0.1 | Useful decorators and context managers
+[jaraco-functools](https://pypi.org/project/jaraco-functools) | 4.1.0 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.2 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.6 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.9.0 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.10.0 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpointer](https://pypi.org/project/jsonpointer) | 3.0.0 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.23.0 | An implementation of JSON Schema validation for Python
+[jsonschema-specifications](https://pypi.org/project/jsonschema-specifications) | 2024.10.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter-bokeh](https://pypi.org/project/jupyter-bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter-client](https://pypi.org/project/jupyter-client) | 8.6.3 | Jupyter protocol implementation and client libraries
+[jupyter-console](https://pypi.org/project/jupyter-console) | 6.6.3 | Jupyter terminal console
+[jupyter-core](https://pypi.org/project/jupyter-core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter-events](https://pypi.org/project/jupyter-events) | 0.12.0 | Jupyter Event System library
+[jupyter-leaflet](https://pypi.org/project/jupyter-leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter-lsp](https://pypi.org/project/jupyter-lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter-server](https://pypi.org/project/jupyter-server) | 2.15.0 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter-server-terminals](https://pypi.org/project/jupyter-server-terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.4.2 | JupyterLab computational environment
+[jupyterlab-pygments](https://pypi.org/project/jupyterlab-pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab-server](https://pypi.org/project/jupyterlab-server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab-widgets](https://pypi.org/project/jupyterlab-widgets) | 3.0.14 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.10.0 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.6.0 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.8 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.25 | Building applications with LLMs through composability
+[langchain-core](https://pypi.org/project/langchain-core) | 0.3.59 | Building applications with LLMs through composability
+[langchain-text-splitters](https://pypi.org/project/langchain-text-splitters) | 0.3.8 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.3.42 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy-loader](https://pypi.org/project/lazy-loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify-it-py](https://pypi.org/project/linkify-it-py) | 2.0.3 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.3 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire-api](https://pypi.org/project/logfire-api) | 3.12.0 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.9 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.7 | Python implementation of John Gruber's Markdown.
+[markdown-it-py](https://pypi.org/project/markdown-it-py) | 3.0.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 3.0.2 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.3 | Python plotting package
+[matplotlib-inline](https://pypi.org/project/matplotlib-inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.8.3 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mcp](https://pypi.org/project/mcp) | 1.9.3 | Model Context Protocol SDK
+[mdit-py-plugins](https://pypi.org/project/mdit-py-plugins) | 0.4.2 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.2 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.8.1 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 3.1.3 | A sane and fast Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml-dtypes](https://pypi.org/project/ml-dtypes) | 0.5.1 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.23.3 | Machine Learning Library Extensions
+[more-itertools](https://pypi.org/project/more-itertools) | 10.6.0 | More routines for operating on iterables, beyond itertools
+[mpld3](https://pypi.org/project/mpld3) | 0.5.10 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal-extensions](https://pypi.org/project/msal-extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.1.0 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.4.3 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mypy](https://pypi.org/project/mypy) | 1.15.0 | Optional static typing for Python
+[mypy-extensions](https://pypi.org/project/mypy-extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql-connector-python](https://pypi.org/project/mysql-connector-python) | 9.2.0 | A self-contained Python driver for communicating with MySQL servers, using an API that is compliant with the Python Database API Specification v
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.36.0 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.2 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.6 | Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest-asyncio](https://pypi.org/project/nest-asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nh3](https://pypi.org/project/nh3) | 0.2.18 | Python bindings to the ammonia HTML sanitization library.
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.4.2 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook-shim](https://pypi.org/project/notebook-shim) | 0.2.4 | A shim layer for notebook traits and config
+[numba](https://pypi.org/project/numba) | 0.61.2 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.2.6 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.8.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.82.0 | The official Python library for the openai API
+[opencv-python](https://pypi.org/project/opencv-python) | 4.11.0.86 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.5 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[opentelemetry-api](https://pypi.org/project/opentelemetry-api) | 1.32.1 | OpenTelemetry Python API
+[optree](https://pypi.org/project/optree) | 0.14.1 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 4.2.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.16 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post3 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.1 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.6.3 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.2.0 | Make your Python code clearer and more reliable by declaring Parameters.
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.2 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.12.1 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 1.0.1 | A Python package for describing statistical models and for building design matrices.
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.9.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.31.2 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.1.0 | Python Imaging Library (Fork)
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.3.7 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 6.0.1 | An open-source interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.4 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.31.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[prettytable](https://pypi.org/project/prettytable) | 3.16.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[prince](https://pypi.org/project/prince) | 0.16.0 | Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus-client](https://pypi.org/project/prometheus-client) | 0.21.1 | Python client for the Prometheus monitoring system.
+[prompt-toolkit](https://pypi.org/project/prompt-toolkit) | 3.0.51 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.3.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 6.30.2 |
+[psutil](https://pypi.org/project/psutil) | 7.0.0 | Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7.
+[psygnal](https://pypi.org/project/psygnal) | 0.12.0 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure-eval](https://pypi.org/project/pure-eval) | 0.2.3 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 20.0.0 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.6.1 | Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)
+[pyasn1-modules](https://pypi.org/project/pyasn1-modules) | 0.4.1 | A collection of ASN.1-based protocols modules
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.10.6 | Data validation using Python type hints
+[pydantic-ai-slim](https://pypi.org/project/pydantic-ai-slim) | 0.2.9 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic-core](https://pypi.org/project/pydantic-core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydantic-evals](https://pypi.org/project/pydantic-evals) | 0.2.9 | Framework for evaluating stochastic code execution, especially code making use of LLMs
+[pydantic-graph](https://pypi.org/project/pydantic-graph) | 0.2.9 | Graph and state machine library
+[pydantic-settings](https://pypi.org/project/pydantic-settings) | 2.8.1 | Settings management using Pydantic
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.5 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygithub](https://pypi.org/project/pygithub) | 2.6.1 | Use the full Github API v3
+[pygments](https://pypi.org/project/pygments) | 2.19.1 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.10.1 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.3.6 | python code static checker
+[pylint-venv](https://pypi.org/project/pylint-venv) | 3.0.4 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls-spyder](https://pypi.org/project/pyls-spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.13 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyogrio](https://pypi.org/project/pyogrio) | 0.10.0 | Vectorized spatial vector file format I/O using GDAL/OGR
+[pyomo](https://pypi.org/project/pyomo) | 6.9.2 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.15 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.2.3 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 5.4.0 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pyproj](https://pypi.org/project/pyproj) | 3.7.0 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.11 | Python bindings for the Qt cross platform application toolkit
+[pyqt5-qt5](https://pypi.org/project/pyqt5-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5-sip](https://pypi.org/project/pyqt5-sip) | 12.17.0 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.7 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine-qt5](https://pypi.org/project/pyqtwebengine-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pyspnego](https://pypi.org/project/pyspnego) | 0.11.2 | Windows Negotiate Authentication Client and Server
+[pytest](https://pypi.org/project/pytest) | 8.3.5 | pytest: simple powerful testing with Python
+[python-barcode](https://pypi.org/project/python-barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python-dateutil](https://pypi.org/project/python-dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python-dotenv](https://pypi.org/project/python-dotenv) | 1.1.0 | Read key-value pairs from a .env file and set them as environment variables
+[python-json-logger](https://pypi.org/project/python-json-logger) | 3.3.0 | JSON Log Formatter for the Python Logging Package
+[python-lsp-black](https://pypi.org/project/python-lsp-black) | 2.0.0 | Black plugin for the Python LSP Server
+[python-lsp-jsonrpc](https://pypi.org/project/python-lsp-jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python-lsp-server](https://pypi.org/project/python-lsp-server) | 1.12.2 | Python Language Server for the Language Server Protocol
+[python-multipart](https://pypi.org/project/python-multipart) | 0.0.20 | A streaming multipart parser for Python
+[python-slugify](https://pypi.org/project/python-slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.5 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2025.2 | World timezone definitions, modern and historical
+[pyuca](https://pypi.org/project/pyuca) | 1.2 | a Python implementation of the Unicode Collation Algorithm
+[pyusb](https://pypi.org/project/pyusb) | 1.3.1 | Easy USB access for Python
+[pyviz-comms](https://pypi.org/project/pyviz-comms) | 3.0.4 | A JupyterLab extension for rendering HoloViz content.
+[pywavelets](https://pypi.org/project/pywavelets) | 1.8.0 | PyWavelets, wavelet transform module
+[pywin32](https://pypi.org/project/pywin32) | 310 | Python for Window Extensions
+[pywin32-ctypes](https://pypi.org/project/pywin32-ctypes) | 0.2.3 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.15 | Pseudo terminal support for Windows from Python.
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.4.0 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post5 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 8.0 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.4 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.4.0 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.6.1 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.3 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.20.0 | A Python ASGI web framework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.13.0 | rapid fuzzy string matching
+[readme-renderer](https://pypi.org/project/readme-renderer) | 44.0 | readme_renderer is a library for rendering readme descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.2.1 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.36.2 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.3.1 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests-ntlm](https://pypi.org/project/requests-ntlm) | 1.3.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests-toolbelt](https://pypi.org/project/requests-toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339-validator](https://pypi.org/project/rfc3339-validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986-validator](https://pypi.org/project/rfc3986-validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 14.0.0 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.13.0 | a python refactoring library...
+[rpds-py](https://pypi.org/project/rpds-py) | 0.24.0 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.4.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.2.0 | Reactive Extensions (Rx) for Python
+[scikit-image](https://pypi.org/project/scikit-image) | 0.25.2 | Image processing in Python
+[scikit-learn](https://pypi.org/project/scikit-learn) | 1.6.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.15.3 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.5 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7.post2 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.3 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.1.0 | Manipulation and analysis of geometric objects
+[shellingham](https://pypi.org/project/shellingham) | 1.5.4 | Tool to Detect Surrounding Shell
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.1.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.17.0 | Python 2 and 3 compatibility utilities
+[sklearn-compat](https://pypi.org/project/sklearn-compat) | 0.1.3 | Ease support for compatible scikit-learn estimators across versions
+[skrub](https://pypi.org/project/skrub) | 0.5.3 | Prepping tables for machine learning
+[smmap](https://pypi.org/project/smmap) | 5.0.2 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.1 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.5.1 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.6 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 8.1.3 | Python documentation generator
+[sphinx-rtd-theme](https://pypi.org/project/sphinx-rtd-theme) | 3.0.2 | Read the Docs theme for Sphinx
+[sphinxcontrib-applehelp](https://pypi.org/project/sphinxcontrib-applehelp) | 2.0.0 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib-devhelp](https://pypi.org/project/sphinxcontrib-devhelp) | 2.0.0 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib-htmlhelp](https://pypi.org/project/sphinxcontrib-htmlhelp) | 2.1.0 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib-jquery](https://pypi.org/project/sphinxcontrib-jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib-jsmath](https://pypi.org/project/sphinxcontrib-jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib-qthelp](https://pypi.org/project/sphinxcontrib-qthelp) | 2.0.0 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib-serializinghtml](https://pypi.org/project/sphinxcontrib-serializinghtml) | 2.0.0 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 6.0.7 | The Scientific Python Development Environment
+[spyder-kernels](https://pypi.org/project/spyder-kernels) | 3.0.5 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.40 | Database Abstraction Library
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite-fts4](https://pypi.org/project/sqlite-fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite-utils](https://pypi.org/project/sqlite-utils) | 3.38 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.5.3 | A non-validating SQL parser.
+[squarify](https://pypi.org/project/squarify) | 0.4.4 | Pure Python implementation of the squarify treemap layout algorithm
+[sse-starlette](https://pypi.org/project/sse-starlette) | 2.2.1 | SSE plugin for Starlette
+[sspilib](https://pypi.org/project/sspilib) | 0.2.0 | SSPI API bindings for Python
+[stack-data](https://pypi.org/project/stack-data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.46.2 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.46.0 | A faster way to build and share data apps
+[superqt](https://pypi.org/project/superqt) | 0.7.3 | Missing widgets and components for PyQt/PySide
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[sympy](https://pypi.org/project/sympy) | 1.14.0 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.1.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 9.1.2 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 3.1.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text-unidecode](https://pypi.org/project/text-unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.3 | Compute distance between the two texts.
+[thefuzz](https://pypi.org/project/thefuzz) | 0.22.1 | Fuzzy string matching in python
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.6.0 | threadpoolctl
+[three-merge](https://pypi.org/project/three-merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2025.3.30 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.9.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.4.0 | A tiny CSS parser
+[tokenizers](https://pypi.org/project/tokenizers) | 0.21.1 |
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.2.1 | A lil' TOML parser
+[tomli-w](https://pypi.org/project/tomli-w) | 1.2.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.13.2 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 1.0.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.5.1 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.67.1 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.3 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.30.0 | A friendly Python library for async concurrency and I/O
+[trove-classifiers](https://pypi.org/project/trove-classifiers) | 2025.5.9.12 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 6.1.0 | Collection of utilities for publishing packages on PyPI
+[typer](https://pypi.org/project/typer) | 0.15.2 | Typer, build great CLIs. Easy to code. Based on Python type hints.
+[types-python-dateutil](https://pypi.org/project/types-python-dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[types-requests](https://pypi.org/project/types-requests) | 2.32.0.20250328 | Typing stubs for requests
+[typing-extensions](https://pypi.org/project/typing-extensions) | 4.13.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing-inspection](https://pypi.org/project/typing-inspection) | 0.4.0 | Runtime typing introspection tools
+[tzdata](https://pypi.org/project/tzdata) | 2025.2 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.3.1 | tzinfo object for the local timezone
+[uc-micro-py](https://pypi.org/project/uc-micro-py) | 1.0.3 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap-learn](https://pypi.org/project/umap-learn) | 0.5.7 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.2.2 | calculations with values with uncertainties, error propagation
+[uri-template](https://pypi.org/project/uri-template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.4.0 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.34.2 | The lightning-fast ASGI server.
+[vega-datasets](https://pypi.org/project/vega-datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 6.0.0 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 24.11.1 | A library for working with the color formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket-client](https://pypi.org/project/websocket-client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 14.2 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.1.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.7 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.14 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 16.6.20250620 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wrapt](https://pypi.org/project/wrapt) | 1.16.0 | Module for decorators, wrappers and monkey patching.
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2025.4.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.2.3 | A Python module for creating Excel XLSX files.
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt-dlp](https://pypi.org/project/yt-dlp) | 2025.2.19 | A feature-rich command-line audio/video downloader
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.21.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
+### WheelHouse packages
+
+Name | Version | Description
+-----|---------|------------
+
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.12.10.1_History.md b/changelogs/WinPythonslim-64bit-3.12.10.1_History.md
new file mode 100644
index 00000000..27c73ef0
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.10.1_History.md
@@ -0,0 +1,201 @@
+## History of changes for WinPython-64bit 3.12.10.1slim
+
+The following changes were made to WinPython-64bit distribution since version 3.12.10.0slim.
+
+
+
+
+### Tools
+
+
+New packages:
+ * Python 3.12.10 (Python programming language with standard library)
+
+### Python packages
+
+
+New packages:
+ * argcomplete 3.6.2 (Bash tab completion for argparse)
+ * bcrypt 4.3.0 (Modern password hashing for your software and your servers)
+ * fasta2a 0.2.9 (Convert an AI Agent into a A2A server! âš)
+ * google-genai 1.16.1 (GenAI Python SDK)
+ * mcp 1.9.3 (Model Context Protocol SDK)
+ * opentelemetry-api 1.32.1 (OpenTelemetry Python API)
+ * pydantic-evals 0.2.9 (Framework for evaluating stochastic code execution, especially code making use of LLMs)
+ * pydantic-settings 2.8.1 (Settings management using Pydantic)
+ * sse-starlette 2.2.1 (SSE plugin for Starlette)
+ * typing-inspection 0.4.0 (Runtime typing introspection tools)
+ * websockets 14.2 (An implementation of the WebSocket Protocol (RFC 6455 & 7692))
+
+Upgraded packages:
+ * aiohappyeyeballs 2.4.4 â 2.6.1 (Happy Eyeballs for asyncio)
+ * aiohttp 3.11.11 â 3.11.18 (Async http client/server framework (asyncio))
+ * aiosignal 1.3.1 â 1.3.2 (aiosignal: a list of registered asynchronous callbacks)
+ * alembic 1.15.1 â 1.15.2 (A database migration tool for SQLAlchemy.)
+ * anthropic 0.49.0 â 0.51.0 (The official Python library for the anthropic API)
+ * anyio 4.8.0 â 4.9.0 (High level compatibility layer for multiple asynchronous event loop implementations)
+ * anywidget 0.9.12 â 0.9.18 (custom jupyter widgets made easy)
+ * asteval 0.9.31 â 1.0.5 (Safe, minimalistic evaluator of python expression using ast module)
+ * astroid 3.1.0 â 3.3.9 (An abstract syntax tree for Python with inference support.)
+ * asttokens 2.4.1 â 3.0.0 (Annotate AST trees with source code positions)
+ * attrs 23.2.0 â 25.3.0 (Classes Without Boilerplate)
+ * babel 2.16.0 â 2.17.0 (Internationalization utilities)
+ * beautifulsoup4 4.12.2 â 4.13.3 (Screen-scraping library)
+ * bleach 6.1.0 â 6.2.0 (An easy safelist-based HTML-sanitizing tool.)
+ * bokeh 3.7.2 â 3.7.3 (Interactive plots and applications in the browser from Python)
+ * branca 0.8.0 â 0.8.1 (Generate complex HTML+JS pages with Python)
+ * cohere 5.13.12 â 5.15.0 ()
+ * colorlog 6.8.2 â 6.9.0 (Add colours to the output of Python's logging module.)
+ * contourpy 1.3.1 â 1.3.2 (Python library for calculating contours of 2D quadrilateral grids)
+ * cython 3.0.12 â 3.1.1 (The Cython compiler for writing C extensions in the Python language.)
+ * dask 2025.3.0 â 2025.4.1 (Parallel PyData with Task Scheduling)
+ * debugpy 1.8.0 â 1.8.13 (An implementation of the Debug Adapter Protocol for Python)
+ * decorator 5.1.1 â 5.2.1 (Decorators for Humans)
+ * dill 0.3.9 â 0.4.0 (serialize all of Python)
+ * distributed 2025.3.0 â 2025.4.1 (Distributed scheduler for Dask)
+ * distro 1.8.0 â 1.9.0 (Distro - an OS platform information API)
+ * django 5.0.7 â 5.2 (A high-level Python web framework that encourages rapid development and clean, pragmatic design.)
+ * dnspython 2.6.1 â 2.7.0 (DNS toolkit)
+ * duckdb 1.2.2 â 1.3.0 (DuckDB in-process database)
+ * executing 2.0.1 â 2.2.0 (Get the currently executing AST node of a frame, and other information)
+ * faker 36.1.1 â 37.1.0 (Faker is a Python package that generates fake data for you.)
+ * fastapi 0.115.8 â 0.115.12 (FastAPI framework, high performance, easy to learn, fast to code, ready for production)
+ * fastjsonschema 2.18.0 â 2.21.1 (Fastest Python implementation of JSON schema)
+ * filelock 3.17.0 â 3.18.0 (A platform independent file lock.)
+ * flit 3.10.1 â 3.12.0 (A simple packaging tool for simple packages.)
+ * fonttools 4.55.3 â 4.57.0 (Tools to manipulate font files)
+ * fsspec 2024.6.1 â 2025.3.2 (File-system specification)
+ * gitdb 4.0.10 â 4.0.12 (Git Object Database)
+ * gitpython 3.1.32 â 3.1.44 (GitPython is a Python library used to interact with Git repositories)
+ * graphene 3.3 â 3.4.3 (GraphQL Framework for Python)
+ * griffe 1.5.5 â 1.7.2 (Signatures for entire Python programs.)
+ * groq 0.13.1 â 0.25.0 (The official Python library for the groq API)
+ * guidata 3.7.1 â 3.9.0 (Automatic GUI generation for easy dataset editing and display)
+ * h2 4.1.0 â 4.2.0 (Pure-Python HTTP/2 protocol implementation)
+ * httpcore 1.0.5 â 1.0.7 (A minimal low-level HTTP client.)
+ * httpx 0.27.2 â 0.28.1 (The next generation HTTP client.)
+ * hupper 1.12 â 1.12.1 (Integrated process monitor for developing and reloading daemons.)
+ * iniconfig 2.0.0 â 2.1.0 (brain-dead simple config-ini parsing)
+ * intervaltree 3.0.2 â 3.1.0 (Editable interval tree data structure for Python 2 and 3)
+ * ipython 8.34.0 â 8.36.0 (IPython: Productive Interactive Computing)
+ * jinja2 3.1.2 â 3.1.6 (A very fast and expressive template engine.)
+ * jiter 0.8.2 â 0.9.0 (Fast iterable JSON parser.)
+ * json5 0.9.14 â 0.10.0 (A Python implementation of the JSON5 data format.)
+ * jsonpointer 2.4 â 3.0.0 (Identify specific nodes in a JSON document (RFC 6901))
+ * jsonschema 4.19.2 â 4.23.0 (An implementation of JSON Schema validation for Python)
+ * jupyterlab 4.4.1 â 4.4.2 (JupyterLab computational environment)
+ * keras 3.9.2 â 3.10.0 (Multi-backend Keras)
+ * langchain 0.3.23 â 0.3.25 (Building applications with LLMs through composability)
+ * langsmith 0.3.24 â 0.3.42 (Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.)
+ * lmfit 1.3.1 â 1.3.3 (Least-Squares Minimization with Bounds and Constraints)
+ * mako 1.3.5 â 1.3.9 (A super-fast templating language that borrows the best ideas from the existing templating languages.)
+ * matplotlib 3.10.1 â 3.10.3 (Python plotting package)
+ * maturin 1.8.1 â 1.8.3 (Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages)
+ * missingno 0.5.1 â 0.5.2 (Missing data visualization module for Python.)
+ * mistralai 1.2.5 â 1.8.1 (Python Client SDK for the Mistral AI API.)
+ * mistune 2.0.5 â 3.1.3 (A sane and fast Markdown parser with useful plugins and renderers)
+ * mpld3 0.5.8 â 0.5.10 (D3 Viewer for Matplotlib)
+ * multidict 6.1.0 â 6.4.3 (multidict implementation)
+ * narwhals 1.30.0 â 1.36.0 (Extremely lightweight compatibility layer between dataframe libraries)
+ * nbclient 0.10.0 â 0.10.2 (A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.)
+ * nbconvert 7.16.1 â 7.16.6 (Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.)
+ * notebook 7.4.0 â 7.4.2 (Jupyter Notebook - A web-based notebook environment for interactive computing)
+ * numpy 2.2.4 â 2.2.6 (Fundamental package for array computing in Python)
+ * numpydoc 1.6.0 â 1.8.0 (Sphinx extension to support docstrings in Numpy format)
+ * openai 1.72.0 â 1.82.0 (The official Python library for the openai API)
+ * openpyxl 3.1.2 â 3.1.5 (A Python library to read/write Excel 2010 xlsx/xlsm files)
+ * optree 0.14.0 â 0.14.1 (Optimized PyTree Utilities.)
+ * optuna 3.6.1 â 4.2.1 (A hyperparameter optimization framework)
+ * orjson 3.10.12 â 3.10.16 (Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy)
+ * pandocfilters 1.5.0 â 1.5.1 (Utilities for writing pandoc filters in python)
+ * panel 1.6.2 â 1.6.3 (The powerful data exploration & web app framework for Python.)
+ * partd 1.4.0 â 1.4.2 (Appendable key-value storage)
+ * pathspec 0.11.0 â 0.12.1 (Utility library for gitignore style pattern matching of file paths.)
+ * patsy 0.5.6 â 1.0.1 (A Python package for describing statistical models and for building design matrices.)
+ * pexpect 4.8.0 â 4.9.0 (Pexpect allows easy control of interactive console applications.)
+ * pg8000 1.23.0 â 1.31.2 (PostgreSQL interface library)
+ * pip 25.0.1 â 25.1.1 (The PyPA recommended tool for installing Python packages.)
+ * platformdirs 4.3.6 â 4.3.7 (A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.)
+ * plotpy 2.7.2 â 2.7.4 (Curve and image plotting tools for Python/Qt applications)
+ * polars 1.27.1 â 1.31.0 (Blazingly fast DataFrame library)
+ * prettytable 3.3.0 â 3.16.0 (A simple Python library for easily displaying tabular data in a visually appealing ASCII table format)
+ * prince 0.15.0 â 0.16.0 (Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA)
+ * propcache 0.2.1 â 0.3.1 (Accelerated property cache)
+ * protobuf 5.27.3 â 6.30.2 ()
+ * psutil 5.9.8 â 7.0.0 (Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7.)
+ * psygnal 0.11.1 â 0.12.0 (Fast python callback/event system modeled after Qt Signals)
+ * pyarrow 19.0.1 â 20.0.0 (Python library for Apache Arrow)
+ * pyerfa 2.0.1.4 â 2.0.1.5 (Python bindings for ERFA)
+ * pylint 3.1.0 â 3.3.6 (python code static checker)
+ * pynndescent 0.5.12 â 0.5.13 (Nearest Neighbor Descent)
+ * pyomo 6.9.1 â 6.9.2 (Pyomo: Python Optimization Modeling Objects)
+ * pyparsing 3.2.1 â 3.2.3 (pyparsing module - Classes and methods to define and execute parsing grammars)
+ * pypdf 5.1.0 â 5.4.0 (A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files)
+ * pyqt5 5.15.10 â 5.15.11 (Python bindings for the Qt cross platform application toolkit)
+ * pyqtwebengine 5.15.6 â 5.15.7 (Python bindings for the Qt WebEngine framework)
+ * pytest 8.3.4 â 8.3.5 (pytest: simple powerful testing with Python)
+ * pythonqwt 0.14.4 â 0.14.5 (Qt plotting widgets for Python)
+ * pytz 2024.2 â 2025.2 (World timezone definitions, modern and historical)
+ * pywin32 308 â 310 (Python for Window Extensions)
+ * pywinpty 2.0.14 â 2.0.15 (Pseudo terminal support for Windows from Python.)
+ * pyzmq 26.2.1 â 26.4.0 (Python bindings for 0MQ)
+ * qstylizer 0.2.2 â 0.2.4 (Stylesheet Generator for PyQt{4-5}/PySide{1-2})
+ * qtpy 2.4.1 â 2.4.3 (Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).)
+ * rapidfuzz 3.9.6 â 3.13.0 (rapid fuzzy string matching)
+ * redis 5.0.8 â 5.2.1 (Python client for Redis database and key-value store)
+ * referencing 0.35.1 â 0.36.2 (JSON Referencing + Python)
+ * reportlab 4.2.5 â 4.3.1 (The Reportlab Toolkit)
+ * rich 13.9.4 â 14.0.0 (Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal)
+ * rope 1.12.0 â 1.13.0 (a python refactoring library...)
+ * rtree 1.3.0 â 1.4.0 (R-Tree spatial index for Python GIS)
+ * scipy 1.15.2 â 1.15.3 (Fundamental algorithms for scientific computing in Python)
+ * setuptools 75.8.2 â 79.0.1 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * shapely 2.0.6 â 2.1.0 (Manipulation and analysis of geometric objects)
+ * six 1.16.0 â 1.17.0 (Python 2 and 3 compatibility utilities)
+ * skrub 0.5.1 â 0.5.3 (Prepping tables for machine learning)
+ * smmap 5.0.0 â 5.0.2 (A pure Python implementation of a sliding window memory map manager)
+ * sniffio 1.3.0 â 1.3.1 (Sniff out which async library your code is running under)
+ * sphinx 7.3.7 â 8.1.3 (Python documentation generator)
+ * spyder 6.0.5 â 6.0.7 (The Scientific Python Development Environment)
+ * sqlalchemy 2.0.38 â 2.0.40 (Database Abstraction Library)
+ * starlette 0.45.3 â 0.46.2 (The little ASGI library that shines.)
+ * streamlit 1.44.0 â 1.46.0 (A faster way to build and share data apps)
+ * superqt 0.7.1 â 0.7.3 (Missing widgets and components for PyQt/PySide)
+ * sympy 1.13.3 â 1.14.0 (Computer algebra system (CAS) in Python)
+ * tblib 3.0.0 â 3.1.0 (Traceback serialization library.)
+ * tenacity 9.0.0 â 9.1.2 (Retry code until it succeeds)
+ * termcolor 2.5.0 â 3.1.0 (ANSI color formatting for output in terminal)
+ * threadpoolctl 3.5.0 â 3.6.0 (threadpoolctl)
+ * tifffile 2025.1.10 â 2025.3.30 (Read and write TIFF files)
+ * tiktoken 0.8.0 â 0.9.0 (tiktoken is a fast BPE tokeniser for use with OpenAI's models)
+ * tokenizers 0.21.0 â 0.21.1 ()
+ * tornado 6.4.2 â 6.5.1 (Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.)
+ * tqdm 4.66.4 â 4.67.1 (Fast, Extensible Progress Meter)
+ * traitlets 5.14.1 â 5.14.3 (Traitlets Python configuration system)
+ * trio 0.29.0 â 0.30.0 (A friendly Python library for async concurrency and I/O)
+ * tzdata 2024.1 â 2025.2 (Provider of IANA time zone data)
+ * tzlocal 5.2 â 5.3.1 (tzinfo object for the local timezone)
+ * urllib3 2.2.3 â 2.4.0 (HTTP library with thread-safe connection pooling, file post, and more.)
+ * uvicorn 0.34.0 â 0.34.2 (The lightning-fast ASGI server.)
+ * winpython 15.3.20250425 â 16.6.20250620 (WinPython distribution tools, including WPPM)
+ * xarray 2025.3.0 â 2025.4.0 (N-D labeled arrays and datasets in Python)
+ * xlsxwriter 3.1.9 â 3.2.3 (A Python module for creating Excel XLSX files.)
+
+Removed packages:
+ * Python 3.12.10 (Python programming language with standard library)
+ * aniso8601 9.0.1 (A library for parsing ISO 8601 strings.)
+ * fast-histogram 0.14 (Fast simple 1D and 2D histograms)
+ * jsonpath-python 1.0.6 (A more powerful JSONPath implementation in modern python)
+ * mpl-scatter-density 0.7 (Matplotlib helpers to make density scatter plots)
+ * pydantic-ai 0.0.24 (Agent Framework / shim to use Pydantic with LLMs)
+ * typing-inspect 0.9.0 (Runtime inspection utilities for typing module.)
+
+### WheelHouse packages
+
+
+No differences found.
+
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.12.6.0.md b/changelogs/WinPythonslim-64bit-3.12.6.0.md
new file mode 100644
index 00000000..b770c938
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.6.0.md
@@ -0,0 +1,528 @@
+## WinPython 3.12.6.0slim
+
+The following packages are included in WinPython-64bit v3.12.6.0slim .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Pandoc](https://pandoc.org/) | 3.1.9 | a universal document converter
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.6 | Python programming language with standard library
+[about_time](https://pypi.org/project/about_time) | 4.2.1 | Easily measure timing and throughput of code blocks, with beautiful human friendly representations.
+[absl_py](https://pypi.org/project/absl_py) | 2.0.0 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc_driver_manager](https://pypi.org/project/adbc_driver_manager) | 0.11.0 | A generic entrypoint for ADBC drivers.
+[adodbapi](https://pypi.org/project/adodbapi) | 2.6.1.3 | A pure Python package implementing PEP 249 DB-API using Microsoft ADO.
+[affine](https://pypi.org/project/affine) | 2.3.1 | Matrices describing affine transformation of the plane.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohttp](https://pypi.org/project/aiohttp) | 3.9.5 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.1 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.13.1 | A database migration tool for SQLAlchemy.
+[alive_progress](https://pypi.org/project/alive_progress) | 3.1.5 | A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!
+[altair](https://pypi.org/project/altair) | 5.4.1 | Vega-Altair: A declarative statistical visualization library for Python.
+[aniso8601](https://pypi.org/project/aniso8601) | 9.0.1 | A library for parsing ISO 8601 strings.
+[annotated_types](https://pypi.org/project/annotated_types) | 0.6.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anyio](https://pypi.org/project/anyio) | 4.4.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.12 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argon2_cffi](https://pypi.org/project/argon2_cffi) | 23.1.0 | Argon2 for Python
+[argon2_cffi_bindings](https://pypi.org/project/argon2_cffi_bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array_api_compat](https://pypi.org/project/array_api_compat) | 1.8 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi_csrf](https://pypi.org/project/asgi_csrf) | 0.9 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 0.9.31 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.1.0 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.0 | Astronomy and astrophysics core library
+[astropy_iers_data](https://pypi.org/project/astropy_iers_data) | 0.2024.4.29.0.28.48 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[async_lru](https://pypi.org/project/async_lru) | 2.0.4 | Simple LRU cache for asyncio
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 23.2.0 | Classes Without Boilerplate
+[autograd](https://pypi.org/project/autograd) | 1.6.2 | Efficiently computes derivatives of numpy code.
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure_core](https://pypi.org/project/azure_core) | 1.30.2 | Microsoft Azure Core Library for Python
+[azure_cosmos](https://pypi.org/project/azure_cosmos) | 4.7.0 | Microsoft Azure Cosmos Client Library for Python
+[azure_identity](https://pypi.org/project/azure_identity) | 1.16.1 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.15.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 0.8.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.0.1 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.12.2 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 24.8.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.1.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.7.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.5.1 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.7.2 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.1 | A simple, correct Python build frontend
+[cachelib](https://pypi.org/project/cachelib) | 0.13.0 | A collection of cache libraries in the same API interface.
+[cachetools](https://pypi.org/project/cachetools) | 5.3.3 | Extensible memoizing collections and decorators
+[cartopy](https://pypi.org/project/cartopy) | 0.23.0 | A Python library for cartographic visualizations with Matplotlib
+[certifi](https://pypi.org/project/certifi) | 2024.6.2 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.16.0 | Foreign Function Interface for Python calling C code.
+[cftime](https://pypi.org/project/cftime) | 1.6.3 | Time-handling functionality from netcdf4-python
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset_normalizer](https://pypi.org/project/charset_normalizer) | 3.3.2 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.9.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.7 | Composable command line interface toolkit
+[click_default_group](https://pypi.org/project/click_default_group) | 1.2.4 | click_default_group
+[click_plugins](https://pypi.org/project/click_plugins) | 1.1.1 | An extension module for click to enable registering CLI commands via setuptools entry-points.
+[cligj](https://pypi.org/project/cligj) | 0.7.2 | Click params for commmand line interfaces to GeoJSON
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.0.0 | Pickler class to extend the standard pickle.Pickler functionality
+[clr_loader](https://pypi.org/project/clr_loader) | 0.2.6 | Generic pure Python loader for .NET runtimes
+[clrmagic](https://pypi.org/project/clrmagic) | 0.0.1a2 | IPython cell magic to use .NET languages
+[cma](https://pypi.org/project/cma) | 3.2.2 | CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.8.2 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.2.1 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g
+[cryptography](https://pypi.org/project/cryptography) | 41.0.5 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.5.0 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.0.11 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 0.12.3 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2024.7.1 | Parallel PyData with Task Scheduling
+[dask_expr](https://pypi.org/project/dask_expr) | 1.1.9 | High Level Expressions for Dask
+[datasette](https://pypi.org/project/datasette) | 0.64.8 | An open source multi-tool for exploring and publishing data
+[datasette_graphql](https://pypi.org/project/datasette_graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.16.3 | Data visualization toolchain based on aggregating into a grid
+[db_py](https://pypi.org/project/db_py) | 0.5.4b1 | a db package that doesn't suck
+[deap](https://pypi.org/project/deap) | 1.4.1 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.0 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[deprecated](https://pypi.org/project/deprecated) | 1.2.13 | Python @deprecated decorator to deprecate old python classes, functions or methods.
+[diff_match_patch](https://pypi.org/project/diff_match_patch) | 20230430 | Diff Match and Patch
+[dill](https://pypi.org/project/dill) | 0.3.7 | serialize all of Python
+[dirty_cat](https://pypi.org/project/dirty_cat) | 0.4.1 | Machine learning with dirty categories.
+[distributed](https://pypi.org/project/distributed) | 2024.7.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.8.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.0.7 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.6.1 | DNS toolkit
+[docopt](https://pypi.org/project/docopt) | 0.6.2 | Pythonic argument parser, that will make you smile
+[docstring_to_markdown](https://pypi.org/project/docstring_to_markdown) | 0.13 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.20.1 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.0.0 | DuckDB in-process database
+[ecos](https://pypi.org/project/ecos) | 2.0.13 | This is the Python package for ECOS: Embedded Cone Solver. See Github page for more information.
+[email_validator](https://pypi.org/project/email_validator) | 2.2.0 | A robust email address syntax and deliverability validation library.
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et_xmlfile](https://pypi.org/project/et_xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[executing](https://pypi.org/project/executing) | 2.0.1 | Get the currently executing AST node of a frame, and other information
+[fast_histogram](https://pypi.org/project/fast_histogram) | 0.14 | Fast simple 1D and 2D histograms
+[fastapi](https://pypi.org/project/fastapi) | 0.111.1 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastapi_cli](https://pypi.org/project/fastapi_cli) | 0.0.4 | Run and manage FastAPI apps from the command line with FastAPI CLI. đ
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.18.0 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.14.0 | A platform independent file lock.
+[filterpy](https://pypi.org/project/filterpy) | 1.4.5 | Kalman filtering and optimal estimation library
+[fiona](https://pypi.org/project/fiona) | 1.9.5 | Fiona reads and writes spatial data files
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.0.3 | A simple framework for building complex web applications.
+[flask_mail](https://pypi.org/project/flask_mail) | 0.9.1 | Flask extension for sending email
+[flask_session](https://pypi.org/project/flask_session) | 0.5.0 | Server-side session support for Flask
+[flask_sqlalchemy](https://pypi.org/project/flask_sqlalchemy) | 3.0.5 | Add SQLAlchemy support to your Flask application.
+[flit](https://pypi.org/project/flit) | 3.9.0 | A simple packaging tool for simple packages.
+[flit_core](https://pypi.org/project/flit_core) | 3.9.0 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.17.0 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.51.0 | Tools to manipulate font files
+[formlayout](https://pypi.org/project/formlayout) | 1.2.1a1 | The most easy way to create Qt form dialogs and widgets with Python
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.4.1 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2024.6.1 | File-system specification
+[future](https://pypi.org/project/future) | 0.18.2 | Clean single-source support for Python 3 and 2
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 0.14.4 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.10 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.32 | GitPython is a Python library used to interact with Git repositories
+[grapheme](https://pypi.org/project/grapheme) | 0.6.0 | Unicode grapheme helpers
+[graphene](https://pypi.org/project/graphene) | 3.3 | GraphQL Framework for Python
+[graphql_core](https://pypi.org/project/graphql_core) | 3.2.3 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql_relay](https://pypi.org/project/graphql_relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.0.3 | Lightweight in-process concurrent programming
+[guidata](https://pypi.org/project/guidata) | 3.6.2 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.1.0 | HTTP/2 State-Machine based protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.10.0 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.25.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.19.1 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.0.0 | Pure-Python HPACK header compression
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.5 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.3 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httptools](https://pypi.org/project/httptools) | 0.6.1 | A collection of framework independent HTTP protocol utils.
+[httpx](https://pypi.org/project/httpx) | 0.27.0 | The next generation HTTP client.
+[huggingface_hub](https://pypi.org/project/huggingface_hub) | 0.24.5 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.10.0 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.16.0 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.0.1 | HTTP/2 framing layer for Python
+[hypothesis](https://pypi.org/project/hypothesis) | 6.108.5 | A library for property-based testing
+[idna](https://pypi.org/project/idna) | 3.7 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.33.1 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced_learn](https://pypi.org/project/imbalanced_learn) | 0.12.3 | Toolbox for imbalanced dataset in machine learning.
+[importlib_metadata](https://pypi.org/project/importlib_metadata) | 7.1.0 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.0.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.0.2 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.2 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.4 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.26.0 | IPython: Productive Interactive Computing
+[ipython_genutils](https://pypi.org/project/ipython_genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython_sql](https://pypi.org/project/ipython_sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.5 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 1.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco_classes](https://pypi.org/project/jaraco_classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco_context](https://pypi.org/project/jaraco_context) | 5.3.0 | Useful decorators and context managers
+[jaraco_functools](https://pypi.org/project/jaraco_functools) | 4.0.1 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.1 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.0.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.2 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.5.0 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.9.14 | A Python implementation of the JSON5 data format.
+[jsonpointer](https://pypi.org/project/jsonpointer) | 2.4 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.19.2 | An implementation of JSON Schema validation for Python
+[jsonschema_specifications](https://pypi.org/project/jsonschema_specifications) | 2023.12.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.0.0 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter_bokeh](https://pypi.org/project/jupyter_bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter_client](https://pypi.org/project/jupyter_client) | 8.6.2 | Jupyter protocol implementation and client libraries
+[jupyter_console](https://pypi.org/project/jupyter_console) | 6.6.3 | Jupyter terminal console
+[jupyter_core](https://pypi.org/project/jupyter_core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter_events](https://pypi.org/project/jupyter_events) | 0.10.0 | Jupyter Event System library
+[jupyter_leaflet](https://pypi.org/project/jupyter_leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter_lsp](https://pypi.org/project/jupyter_lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter_server](https://pypi.org/project/jupyter_server) | 2.14.2 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter_server_terminals](https://pypi.org/project/jupyter_server_terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.2.5 | JupyterLab computational environment
+[jupyterlab_pygments](https://pypi.org/project/jupyterlab_pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab_server](https://pypi.org/project/jupyterlab_server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab_widgets](https://pypi.org/project/jupyterlab_widgets) | 3.0.13 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.5.0 | Multi-backend Keras.
+[keyring](https://pypi.org/project/keyring) | 25.2.1 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.5 | A fast implementation of the Cassowary constraint solver
+[lazy_loader](https://pypi.org/project/lazy_loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify_it_py](https://pypi.org/project/linkify_it_py) | 2.0.2 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.43.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.1 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[lxml](https://pypi.org/project/lxml) | 5.2.2 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.5 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.5.1 | Python implementation of John Gruber's Markdown.
+[markdown_it_py](https://pypi.org/project/markdown_it_py) | 2.2.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 2.1.1 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.9.2 | Python plotting package
+[matplotlib_inline](https://pypi.org/project/matplotlib_inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.7.0 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mdit_py_plugins](https://pypi.org/project/mdit_py_plugins) | 0.3.5 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.1 | Missing data visualization module for Python.
+[mistune](https://pypi.org/project/mistune) | 2.0.5 | A sane Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml_dtypes](https://pypi.org/project/ml_dtypes) | 0.4.0 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.22.0 | Machine Learning Library Extensions
+[more_itertools](https://pypi.org/project/more_itertools) | 10.2.0 | More routines for operating on iterables, beyond itertools
+[mpl_scatter_density](https://pypi.org/project/mpl_scatter_density) | 0.7 | Matplotlib helpers to make density scatter plots
+[mpld3](https://pypi.org/project/mpld3) | 0.5.8 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal_extensions](https://pypi.org/project/msal_extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.0.4 | MessagePack serializer
+[msvc_runtime](https://pypi.org/project/msvc_runtime) | 14.40.33807 | Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories
+[multidict](https://pypi.org/project/multidict) | 6.0.5 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mutagen](https://pypi.org/project/mutagen) | 1.47.0 | read and write audio tags for many formats
+[mypy](https://pypi.org/project/mypy) | 1.11.1 | Optional static typing for Python
+[mypy_extensions](https://pypi.org/project/mypy_extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql_connector_python](https://pypi.org/project/mysql_connector_python) | 8.0.21 | MySQL driver written in Python
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.5.5 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.0 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.1 | Converting Jupyter Notebooks (.ipynb files) to other formats
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest_asyncio](https://pypi.org/project/nest_asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[netcdf4](https://pypi.org/project/netcdf4) | 1.7.1.post2 | Provides an object-oriented python interface to the netCDF version 4 library
+[networkx](https://pypi.org/project/networkx) | 3.3 | Python package for creating and manipulating graphs and networks
+[nltk](https://pypi.org/project/nltk) | 3.8.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.2.1 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook_shim](https://pypi.org/project/notebook_shim) | 0.2.4 | A shim layer for notebook traits and config
+[ntlm_auth](https://pypi.org/project/ntlm_auth) | 1.5.0 | Creates NTLM authentication structures
+[numba](https://pypi.org/project/numba) | 0.60.0 | compiling Python code using LLVM
+[numexpr](https://pypi.org/project/numexpr) | 2.10.1 | Fast numerical expression evaluator for NumPy
+[numpy](https://pypi.org/project/numpy) | 2.0.1 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.6.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.42.0 | The official Python library for the openai API
+[opencv_python](https://pypi.org/project/opencv_python) | 4.10.0.84 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.2 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[optree](https://pypi.org/project/optree) | 0.11.0 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 3.6.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.9.15 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.1 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.2 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.0 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.5.0b4 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.1.1 | Make your Python code clearer and more reliable by declaring Parameters.
+[paramiko](https://pypi.org/project/paramiko) | 2.8.0 | SSH2 protocol library
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.0 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.11.0 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 0.5.6 | A Python package for describing statistical models and for building design matrices.
+[pdfrw](https://pypi.org/project/pdfrw) | 0.4.post2 | PDF file reader/writer library
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.8.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.23.0 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 10.4.0 | Python Imaging Library (Fork)
+[pint](https://pypi.org/project/pint) | 0.23 | Physical quantities module
+[pip](https://pypi.org/project/pip) | 24.2 | The PyPA recommended tool for installing Python packages.
+[pkginfo](https://pypi.org/project/pkginfo) | 1.9.6 | Query metadata from sdists / bdists / installed packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.2.2 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 5.23.0 | An open-source, interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.6.2 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[pmdarima](https://pypi.org/project/pmdarima) | 2.0.4 | Python's forecast::auto.arima equivalent
+[polars](https://pypi.org/project/polars) | 1.6.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[ppci](https://pypi.org/project/ppci) | 0.5.9 | A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python
+[prettytable](https://pypi.org/project/prettytable) | 3.3.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus_client](https://pypi.org/project/prometheus_client) | 0.18.0 | Python client for the Prometheus monitoring system.
+[prompt_toolkit](https://pypi.org/project/prompt_toolkit) | 3.0.47 | Library for building powerful interactive command lines in Python
+[protobuf](https://pypi.org/project/protobuf) | 5.27.3 |
+[psutil](https://pypi.org/project/psutil) | 5.9.8 | Cross-platform lib for process and system monitoring in Python.
+[psygnal](https://pypi.org/project/psygnal) | 0.11.1 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pulp](https://pypi.org/project/pulp) | 2.6.0 | PuLP is an LP modeler written in python
+[pure_eval](https://pypi.org/project/pure_eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 17.0.0 | Python library for Apache Arrow
+[pyaudio](https://pypi.org/project/pyaudio) | 0.2.14 | Cross-platform audio I/O with PortAudio
+[pybars3](https://pypi.org/project/pybars3) | 0.9.7 | Handlebars.js templating for Python 3 and 2
+[pybind11](https://pypi.org/project/pybind11) | 2.13.1 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycosat](https://pypi.org/project/pycosat) | 0.6.6 | bindings to picosat (a SAT solver)
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pycryptodomex](https://pypi.org/project/pycryptodomex) | 3.20.0 | Cryptographic library for Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.8.2 | Data validation using Python type hints
+[pydantic_core](https://pypi.org/project/pydantic_core) | 2.20.1 | Core functionality for Pydantic validation and serialization
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.4 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygments](https://pypi.org/project/pygments) | 2.18.0 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.8.0 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.1.0 | python code static checker
+[pylint_venv](https://pypi.org/project/pylint_venv) | 3.0.3 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls_spyder](https://pypi.org/project/pyls_spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymeta3](https://pypi.org/project/pymeta3) | 0.5.1 | Pattern-matching language based on OMeta for Python 3 and 2
+[pymongo](https://pypi.org/project/pymongo) | 4.7.2 | Python driver for MongoDB
+[pymoo](https://pypi.org/project/pymoo) | 0.6.1.3 | Multi-Objective Optimization in Python
+[pympler](https://pypi.org/project/pympler) | 1.0.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.12 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.1.0 | DB API module for ODBC
+[pyomo](https://pypi.org/project/pyomo) | 6.8.0 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.5 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.1.2 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 3.15.2 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pypng](https://pypi.org/project/pypng) | 0.20220715.0 | Pure Python library for saving and loading PNG images
+[pyproj](https://pypi.org/project/pyproj) | 3.6.1 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.10 | Python bindings for the Qt cross platform application toolkit
+[pyqt5_qt5](https://pypi.org/project/pyqt5_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5_sip](https://pypi.org/project/pyqt5_sip) | 12.13.0 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.6 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine_qt5](https://pypi.org/project/pyqtwebengine_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pyshp](https://pypi.org/project/pyshp) | 2.3.1 | Pure Python read/write support for ESRI Shapefile format
+[pysimplegui](https://pypi.org/project/pysimplegui) | 4.60.4 | Python GUIs for Humans
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pytest](https://pypi.org/project/pytest) | 8.2.2 | pytest: simple powerful testing with Python
+[python_barcode](https://pypi.org/project/python_barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python_dateutil](https://pypi.org/project/python_dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python_dotenv](https://pypi.org/project/python_dotenv) | 1.0.1 | Read key-value pairs from a .env file and set them as environment variables
+[python_json_logger](https://pypi.org/project/python_json_logger) | 2.0.7 | A python library adding a json log formatter
+[python_lsp_black](https://pypi.org/project/python_lsp_black) | 2.0.0 | Black plugin for the Python LSP Server
+[python_lsp_jsonrpc](https://pypi.org/project/python_lsp_jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python_lsp_server](https://pypi.org/project/python_lsp_server) | 1.12.0 | Python Language Server for the Language Server Protocol
+[python_multipart](https://pypi.org/project/python_multipart) | 0.0.9 | A streaming multipart parser for Python
+[python_slugify](https://pypi.org/project/python_slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonnet](https://pypi.org/project/pythonnet) | 3.0.3 | .NET and Mono integration for Python
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.12.7 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2024.1 | World timezone definitions, modern and historical
+[pyviz_comms](https://pypi.org/project/pyviz_comms) | 3.0.3 | A JupyterLab extension for rendering HoloViz content.
+[pywin32](https://pypi.org/project/pywin32) | 306 | Python for Window Extensions
+[pywin32_ctypes](https://pypi.org/project/pywin32_ctypes) | 0.2.2 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.12 | Pseudo terminal support for Windows from Python.
+[pywinusb](https://pypi.org/project/pywinusb) | 0.4.2 | A package that simplifies USB/HID communications on windows
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.1 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.0.3 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qrcode](https://pypi.org/project/qrcode) | 7.4.2 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.2 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.3.1 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.5.2 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.1 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.19.4 | A Python ASGI web microframework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.9.3 | rapid fuzzy string matching
+[rasterio](https://pypi.org/project/rasterio) | 1.3.10 | Fast and direct raster I/O for use with Numpy and SciPy
+[readme_renderer](https://pypi.org/project/readme_renderer) | 35.0 | readme_renderer is a library for rendering "readme" descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.0.3 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.35.1 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2023.10.3 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.2.2 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.31.0 | Python HTTP for Humans.
+[requests_ntlm](https://pypi.org/project/requests_ntlm) | 1.1.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests_toolbelt](https://pypi.org/project/requests_toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339_validator](https://pypi.org/project/rfc3339_validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986_validator](https://pypi.org/project/rfc3986_validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 13.7.1 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.12.0 | a python refactoring library...
+[rpds_py](https://pypi.org/project/rpds_py) | 0.13.2 | Python bindings to Rust's persistent data structures (rpds)
+[rtree](https://pypi.org/project/rtree) | 1.1.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.1.1 | Reactive Extensions (Rx) for Python
+[scikit_image](https://pypi.org/project/scikit_image) | 0.24.0 | Image processing in Python
+[scikit_learn](https://pypi.org/project/scikit_learn) | 1.5.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.14.1 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.1 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.4.post1 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.2 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 72.2.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.0.4 | Manipulation and analysis of geometric objects
+[shellingham](https://pypi.org/project/shellingham) | 1.5.0.post1 | Tool to Detect Surrounding Shell
+[simplegeneric](https://pypi.org/project/simplegeneric) | 0.8.1 | Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
+[simplejson](https://pypi.org/project/simplejson) | 3.19.2 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.0.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[smmap](https://pypi.org/project/smmap) | 5.0.0 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.0 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[snuggs](https://pypi.org/project/snuggs) | 1.4.7 | Snuggs are s-expressions for Numpy
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.4.6 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.5 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 7.3.7 | Python documentation generator
+[sphinx_rtd_theme](https://pypi.org/project/sphinx_rtd_theme) | 2.0.0 | Read the Docs theme for Sphinx
+[sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) | 1.0.8 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) | 1.0.6 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) | 2.0.5 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib_jquery](https://pypi.org/project/sphinxcontrib_jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib_jsmath](https://pypi.org/project/sphinxcontrib_jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) | 1.0.7 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib_serializinghtml](https://pypi.org/project/sphinxcontrib_serializinghtml) | 1.1.9 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 5.5.6 | The Scientific Python Development Environment
+[spyder_kernels](https://pypi.org/project/spyder_kernels) | 2.5.2 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.30 | Database Abstraction Library
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite_fts4](https://pypi.org/project/sqlite_fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite_utils](https://pypi.org/project/sqlite_utils) | 3.37 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.4.3 | A non-validating SQL parser.
+[sspyrs](https://pypi.org/project/sspyrs) | 0.3 | Lightweight interface for SSRS reports to python
+[stack_data](https://pypi.org/project/stack_data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.37.2 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.2 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.37.1 | A faster way to build and share data apps
+[streamz](https://pypi.org/project/streamz) | 0.6.3 | Streams
+[swifter](https://pypi.org/project/swifter) | 1.3.4 | A package which efficiently applies any function to a pandas dataframe or series in the fastest available manner
+[sympy](https://pypi.org/project/sympy) | 1.13.2 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tbats](https://pypi.org/project/tbats) | 1.1.0 | BATS and TBATS for time series forecasting
+[tblib](https://pypi.org/project/tblib) | 3.0.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 8.5.0 | Retry code until it succeeds
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text_unidecode](https://pypi.org/project/text_unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.2 | Compute distance between the two texts.
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.5.0 | threadpoolctl
+[three_merge](https://pypi.org/project/three_merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2024.7.2 | Read and write TIFF files
+[tinycss2](https://pypi.org/project/tinycss2) | 1.3.0 | A tiny CSS parser
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.0.1 | A lil' TOML parser
+[tomli_w](https://pypi.org/project/tomli_w) | 1.0.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.12.3 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 0.12.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.4.1 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.66.4 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.26.2 | A friendly Python library for async concurrency and I/O
+[trove_classifiers](https://pypi.org/project/trove_classifiers) | 2023.2.20 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 4.0.1 | Collection of utilities for publishing packages on PyPI
+[typer](https://pypi.org/project/typer) | 0.12.3 | Typer, build great CLIs. Easy to code. Based on Python type hints.
+[types_python_dateutil](https://pypi.org/project/types_python_dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[typing_extensions](https://pypi.org/project/typing_extensions) | 4.12.2 | Backported and Experimental Type Hints for Python 3.8+
+[tzdata](https://pypi.org/project/tzdata) | 2024.1 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.2 | tzinfo object for the local timezone
+[uc_micro_py](https://pypi.org/project/uc_micro_py) | 1.0.1 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.8.0 | Ultra fast JSON encoder and decoder for Python
+[umap_learn](https://pypi.org/project/umap_learn) | 0.5.6 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.1.7 | Transparent calculations with uncertainties on the quantities involved (aka error propagation); fast calculation of derivatives
+[uri_template](https://pypi.org/project/uri_template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.0.3 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.30.3 | The lightning-fast ASGI server.
+[vega_datasets](https://pypi.org/project/vega_datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 4.0.1 | Filesystem events monitoring
+[watchfiles](https://pypi.org/project/watchfiles) | 0.21.0 | Simple, modern and high performance file watching and code reload in python.
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 1.12 | A library for working with color names and color values formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket_client](https://pypi.org/project/websocket_client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 12.0 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.0.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.2 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.13 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 10.7.20240908 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.3 | A little word cloud generator
+[wrapt](https://pypi.org/project/wrapt) | 1.16.0 | Module for decorators, wrappers and monkey patching.
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2024.7.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.1.9 | A Python module for creating Excel XLSX files.
+[xlwings](https://pypi.org/project/xlwings) | 0.24.7 | Make Excel fly: Interact with Excel from Python and vice versa.
+[xmltodict](https://pypi.org/project/xmltodict) | 0.13.0 | Makes working with XML feel like you are working with JSON
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.7.2 | Yet another URL library
+[yt_dlp](https://pypi.org/project/yt_dlp) | 2023.7.6 | A youtube-dl fork with additional features and patches
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.17.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.12.6.0_History.md b/changelogs/WinPythonslim-64bit-3.12.6.0_History.md
new file mode 100644
index 00000000..1f2dbdde
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.6.0_History.md
@@ -0,0 +1,195 @@
+ï»ż## History of changes for WinPython-64bit 3.12.6.0slim
+
+The following changes were made to WinPython-64bit distribution since version 3.12.4.1. (non-slim)
+
+
+### Tools
+
+Removed packages:
+
+ * [Nodejs](https://nodejs.org) v20.12.2 (a JavaScript runtime built on Chrome's V8 JavaScript engine)
+ * [npmjs](https://www.npmjs.com/) 10.5.0 (a package manager for JavaScript)
+
+### Python packages
+
+New packages:
+
+ * [jiter](https://pypi.org/project/jiter) 0.5.0 (Fast iterable JSON parser.)
+ * [narwhals](https://pypi.org/project/narwhals) 1.5.5 (Extremely lightweight compatibility layer between dataframe libraries)
+ * [types_python_dateutil](https://pypi.org/project/types_python_dateutil) 2.9.0.20240316 (Typing stubs for python-dateutil)
+
+Upgraded packages:
+
+ * [altair](https://pypi.org/project/altair) 5.3.0 â 5.4.1 (Vega-Altair: A declarative statistical visualization library for Python.)
+ * [array_api_compat](https://pypi.org/project/array_api_compat) 1.7.1 â 1.8 (A wrapper around NumPy and other array libraries to make them compatible with the Array API standard)
+ * [arrow](https://pypi.org/project/arrow) 1.2.2 â 1.3.0 (Better dates & times for Python)
+ * [azure_core](https://pypi.org/project/azure_core) 1.30.1 â 1.30.2 (Microsoft Azure Core Library for Python)
+ * [azure_cosmos](https://pypi.org/project/azure_cosmos) 4.6.0 â 4.7.0 (Microsoft Azure Cosmos Client Library for Python)
+ * [azure_identity](https://pypi.org/project/azure_identity) 1.16.0 â 1.16.1 (Microsoft Azure Identity Library for Python)
+ * [black](https://pypi.org/project/black) 24.4.2 â 24.8.0 (The uncompromising code formatter.)
+ * [bokeh](https://pypi.org/project/bokeh) 3.4.1 â 3.5.1 (Interactive plots and applications in the browser from Python)
+ * [cython](https://pypi.org/project/cython) 3.0.10 â 3.0.11 (The Cython compiler for writing C extensions in the Python language.)
+ * [dask](https://pypi.org/project/dask) 2024.5.2 â 2024.7.1 (Parallel PyData with Task Scheduling)
+ * [dask_expr](https://pypi.org/project/dask_expr) 1.1.2 â 1.1.9 (High Level Expressions for Dask )
+ * [datasette](https://pypi.org/project/datasette) 0.64.6 â 0.64.8 (An open source multi-tool for exploring and publishing data)
+ * [datashader](https://pypi.org/project/datashader) 0.16.2 â 0.16.3 (Data visualization toolchain based on aggregating into a grid)
+ * [decorator](https://pypi.org/project/decorator) 4.4.2 â 5.1.1 (Decorators for Humans)
+ * [diff_match_patch](https://pypi.org/project/diff_match_patch) 20200713 â 20230430 (Diff Match and Patch)
+ * [distributed](https://pypi.org/project/distributed) 2024.5.2 â 2024.7.1 (Distributed scheduler for Dask)
+ * [django](https://pypi.org/project/django) 5.0.6 â 5.0.7 (A high-level Python web framework that encourages rapid development and clean, pragmatic design.)
+ * [email_validator](https://pypi.org/project/email_validator) 2.1.1 â 2.2.0 (A robust email address syntax and deliverability validation library.)
+ * [fastapi](https://pypi.org/project/fastapi) 0.111.0 â 0.111.1 (FastAPI framework, high performance, easy to learn, fast to code, ready for production)
+ * [flake8](https://pypi.org/project/flake8) 7.0.0 â 7.1.1 (the modular source code checker: pep8 pyflakes and co)
+ * [folium](https://pypi.org/project/folium) 0.16.0 â 0.17.0 (Make beautiful maps with Leaflet.js & Python)
+ * [fsspec](https://pypi.org/project/fsspec) 2024.3.1 â 2024.6.1 (File-system specification)
+ * [guidata](https://pypi.org/project/guidata) 3.5.0 â 3.6.2 (Automatic GUI generation for easy dataset editing and display)
+ * [hatchling](https://pypi.org/project/hatchling) 1.24.2 â 1.25.0 (Modern, extensible Python build backend)
+ * [holoviews](https://pypi.org/project/holoviews) 1.19.0 â 1.19.1 (A high-level plotting API for the PyData ecosystem built on HoloViews.)
+ * [httpie](https://pypi.org/project/httpie) 3.2.2 â 3.2.3 (HTTPie: modern, user-friendly command-line HTTP client for the API era.)
+ * [huggingface_hub](https://pypi.org/project/huggingface_hub) 0.23.0 â 0.24.5 (Client library to download and publish models, datasets and other repos on the huggingface.co hub)
+ * [hypothesis](https://pypi.org/project/hypothesis) 6.100.5 â 6.108.5 (A library for property-based testing)
+ * [ipykernel](https://pypi.org/project/ipykernel) 6.29.4 â 6.29.5 (IPython Kernel for Jupyter)
+ * [ipyleaflet](https://pypi.org/project/ipyleaflet) 0.19.1 â 0.19.2 (A Jupyter widget for dynamic Leaflet maps)
+ * [ipython](https://pypi.org/project/ipython) 8.25.0 â 8.26.0 (IPython: Productive Interactive Computing)
+ * [ipywidgets](https://pypi.org/project/ipywidgets) 8.1.2 â 8.1.5 (Jupyter interactive widgets)
+ * [jupyter_leaflet](https://pypi.org/project/jupyter_leaflet) 0.19.1 â 0.19.2 (ipyleaflet extensions for JupyterLab and Jupyter Notebook)
+ * [jupyter_server](https://pypi.org/project/jupyter_server) 2.14.1 â 2.14.2 (The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.)
+ * [jupyterlab](https://pypi.org/project/jupyterlab) 4.2.2 â 4.2.5 (JupyterLab computational environment)
+ * [jupyterlab_server](https://pypi.org/project/jupyterlab_server) 2.27.2 â 2.27.3 (A set of server components for JupyterLab and JupyterLab like applications.)
+ * [jupyterlab_widgets](https://pypi.org/project/jupyterlab_widgets) 3.0.11 â 3.0.13 (Jupyter interactive widgets for JupyterLab)
+ * [keras](https://pypi.org/project/keras) 3.3.3 â 3.5.0 (Multi-backend Keras.)
+ * [mako](https://pypi.org/project/mako) 1.2.0 â 1.3.5 (A super-fast templating language that borrows the best ideas from the existing templating languages.)
+ * [matplotlib](https://pypi.org/project/matplotlib) 3.9.0 â 3.9.2 (Python plotting package)
+ * [maturin](https://pypi.org/project/maturin) 1.5.1 â 1.7.0 (Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages)
+ * [msal](https://pypi.org/project/msal) 1.24.1 â 1.30.0 (The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us)
+ * [msal_extensions](https://pypi.org/project/msal_extensions) 1.0.0 â 1.2.0 (Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an)
+ * [mypy](https://pypi.org/project/mypy) 1.10.0 â 1.11.1 (Optional static typing for Python)
+ * [netcdf4](https://pypi.org/project/netcdf4) 1.6.5 â 1.7.1.post2 (Provides an object-oriented python interface to the netCDF version 4 library)
+ * [numexpr](https://pypi.org/project/numexpr) 2.10.0 â 2.10.1 (Fast numerical expression evaluator for NumPy)
+ * [numpy](https://pypi.org/project/numpy) 1.26.4 â 2.0.1 (Fundamental package for array computing in Python)
+ * [openai](https://pypi.org/project/openai) 1.33.0 â 1.42.0 (The official Python library for the openai API)
+ * [opencv_python](https://pypi.org/project/opencv_python) 4.10.0.82 â 4.10.0.84 (Wrapper package for OpenCV python bindings.)
+ * [panel](https://pypi.org/project/panel) 1.4.4 â 1.5.0b4 (The powerful data exploration & web app framework for Python.)
+ * [param](https://pypi.org/project/param) 2.1.0 â 2.1.1 (Make your Python code clearer and more reliable by declaring Parameters.)
+ * [pillow](https://pypi.org/project/pillow) 10.3.0 â 10.4.0 (Python Imaging Library (Fork))
+ * [pip](https://pypi.org/project/pip) 24.0 â 24.2 (The PyPA recommended tool for installing Python packages.)
+ * [plotly](https://pypi.org/project/plotly) 5.22.0 â 5.23.0 (An open-source, interactive data visualization library for Python)
+ * [plotpy](https://pypi.org/project/plotpy) 2.3.0 â 2.6.2 (Curve and image plotting tools for Python/Qt applications)
+ * [polars](https://pypi.org/project/polars) 0.20.31 â 1.6.0 (Blazingly fast DataFrame library)
+ * [prompt_toolkit](https://pypi.org/project/prompt_toolkit) 3.0.43 â 3.0.47 (Library for building powerful interactive command lines in Python)
+ * [protobuf](https://pypi.org/project/protobuf) 4.25.1 â 5.27.3 ()
+ * [ptpython](https://pypi.org/project/ptpython) 3.0.26 â 3.0.29 (Python REPL build on top of prompt_toolkit)
+ * [pyarrow](https://pypi.org/project/pyarrow) 16.1.0 â 17.0.0 (Python library for Apache Arrow)
+ * [pybind11](https://pypi.org/project/pybind11) 2.12.0 â 2.13.1 (Seamless operability between C++11 and Python)
+ * [pycodestyle](https://pypi.org/project/pycodestyle) 2.11.1 â 2.12.0 (Python style guide checker)
+ * [pydantic](https://pypi.org/project/pydantic) 2.7.1 â 2.8.2 (Data validation using Python type hints)
+ * [pydantic_core](https://pypi.org/project/pydantic_core) 2.18.2 â 2.20.1 (Core functionality for Pydantic validation and serialization)
+ * [pymoo](https://pypi.org/project/pymoo) 0.6.1.1 â 0.6.1.3 (Multi-Objective Optimization in Python)
+ * [pyomo](https://pypi.org/project/pyomo) 6.7.2 â 6.8.0 (Pyomo: Python Optimization Modeling Objects)
+ * [pytest](https://pypi.org/project/pytest) 8.2.0 â 8.2.2 (pytest: simple powerful testing with Python)
+ * [Python](http://www.python.org/) 3.12.4 â 3.12.6 (Python programming language with standard library)
+ * [python_lsp_server](https://pypi.org/project/python_lsp_server) 1.11.0 â 1.12.0 (Python Language Server for the Language Server Protocol)
+ * [python_slugify](https://pypi.org/project/python_slugify) 6.1.2 â 8.0.4 (A Python slugify application that also handles Unicode)
+ * [pythonqwt](https://pypi.org/project/pythonqwt) 0.12.1 â 0.12.7 (Qt plotting widgets for Python)
+ * [pytz](https://pypi.org/project/pytz) 2023.3 â 2024.1 (World timezone definitions, modern and historical)
+ * [pyviz_comms](https://pypi.org/project/pyviz_comms) 3.0.2 â 3.0.3 (A JupyterLab extension for rendering HoloViz content.)
+ * [quantecon](https://pypi.org/project/quantecon) 0.5.3 â 0.7.2 (Import the main names to top level.)
+ * [rapidfuzz](https://pypi.org/project/rapidfuzz) 3.5.2 â 3.9.3 (rapid fuzzy string matching)
+ * [redis](https://pypi.org/project/redis) 4.3.1 â 5.0.3 (Python client for Redis database and key-value store)
+ * [referencing](https://pypi.org/project/referencing) 0.31.1 â 0.35.1 (JSON Referencing + Python)
+ * [reportlab](https://pypi.org/project/reportlab) 4.2.0 â 4.2.2 (The Reportlab Toolkit)
+ * [scikit_image](https://pypi.org/project/scikit_image) 0.23.2 â 0.24.0 (Image processing in Python)
+ * [scikit_learn](https://pypi.org/project/scikit_learn) 1.5.0 â 1.5.1 (A set of python modules for machine learning and data mining)
+ * [scipy](https://pypi.org/project/scipy) 1.13.1 â 1.14.1 (Fundamental algorithms for scientific computing in Python)
+ * [setuptools](https://pypi.org/project/setuptools) 69.5.1 â 72.2.0 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [sphinx](https://pypi.org/project/sphinx) 7.2.6 â 7.3.7 (Python documentation generator)
+ * [sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) 1.0.2 â 1.0.8 (sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books)
+ * [sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) 1.0.2 â 1.0.6 (sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents)
+ * [sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) 2.0.0 â 2.0.5 (sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files)
+ * [sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) 1.0.3 â 1.0.7 (sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents)
+ * [spyder](https://pypi.org/project/spyder) 5.5.5 â 5.5.6 (The Scientific Python Development Environment)
+ * [sqlalchemy](https://pypi.org/project/sqlalchemy) 2.0.28 â 2.0.30 (Database Abstraction Library)
+ * [sqlite_utils](https://pypi.org/project/sqlite_utils) 3.36 â 3.37 (CLI tool and Python library for manipulating SQLite databases)
+ * [streamlit](https://pypi.org/project/streamlit) 1.35.0 â 1.37.1 (A faster way to build and share data apps)
+ * [sympy](https://pypi.org/project/sympy) 1.12.1 â 1.13.2 (Computer algebra system (CAS) in Python)
+ * [tblib](https://pypi.org/project/tblib) 1.7.0 â 3.0.0 (Traceback serialization library.)
+ * [tenacity](https://pypi.org/project/tenacity) 8.1.0 â 8.5.0 (Retry code until it succeeds)
+ * [textdistance](https://pypi.org/project/textdistance) 4.5.0 â 4.6.2 (Compute distance between the two texts.)
+ * [tifffile](https://pypi.org/project/tifffile) 2023.7.18 â 2024.7.2 (Read and write TIFF files)
+ * [tinycss2](https://pypi.org/project/tinycss2) 1.1.1 â 1.3.0 (A tiny CSS parser)
+ * [tornado](https://pypi.org/project/tornado) 6.4 â 6.4.1 (Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.)
+ * [trio](https://pypi.org/project/trio) 0.25.1 â 0.26.2 (A friendly Python library for async concurrency and I/O)
+ * [typing_extensions](https://pypi.org/project/typing_extensions) 4.9.0 â 4.12.2 (Backported and Experimental Type Hints for Python 3.8+)
+ * [tzdata](https://pypi.org/project/tzdata) 2022.7 â 2024.1 (Provider of IANA time zone data)
+ * [tzlocal](https://pypi.org/project/tzlocal) 4.2 â 5.2 (tzinfo object for the local timezone)
+ * [umap_learn](https://pypi.org/project/umap_learn) 0.5.1 â 0.5.6 (Uniform Manifold Approximation and Projection)
+ * [uri_template](https://pypi.org/project/uri_template) 1.2.0 â 1.3.0 (RFC 6570 URI Template Processor)
+ * [uvicorn](https://pypi.org/project/uvicorn) 0.29.0 â 0.30.3 (The lightning-fast ASGI server.)
+ * [waitress](https://pypi.org/project/waitress) 2.1.2 â 3.0.0 (Waitress WSGI server)
+ * [watchdog](https://pypi.org/project/watchdog) 2.2.0 â 4.0.1 (Filesystem events monitoring)
+ * [wheel](https://pypi.org/project/wheel) 0.43.0 â 0.44.0 (A built-package format for Python)
+ * [widgetsnbextension](https://pypi.org/project/widgetsnbextension) 4.0.10 â 4.0.13 (Jupyter interactive widgets for Jupyter Notebook)
+ * [winpython](https://pypi.org/project/winpython) 8.2.20240618 â 10.7.20240908 (WinPython distribution tools, including WPPM)
+ * [wrapt](https://pypi.org/project/wrapt) 1.14.1 â 1.16.0 (Module for decorators, wrappers and monkey patching.)
+ * [xarray](https://pypi.org/project/xarray) 2024.6.0 â 2024.7.0 (N-D labeled arrays and datasets in Python)
+ * [zstandard](https://pypi.org/project/zstandard) 0.22.0 â 0.23.0 (Zstandard bindings for Python)
+
+Removed packages:
+
+ * [accelerate](https://pypi.org/project/accelerate) 0.28.0 (Accelerate)
+ * [altair_data_server](https://pypi.org/project/altair_data_server) 0.4.1 (A background data server for Altair charts.)
+ * [altair_transform](https://pypi.org/project/altair_transform) 0.2.0 (A python engine for evaluating Altair transforms.)
+ * [async_timeout](https://pypi.org/project/async_timeout) 4.0.3 (Timeout context manager for asyncio programs)
+ * [botorch](https://pypi.org/project/botorch) 0.9.5 (Bayesian Optimization in PyTorch)
+ * [coverage](https://pypi.org/project/coverage) 7.5.3 (Code coverage measurement for Python)
+ * [dash](https://pypi.org/project/dash) 2.17.0 (A Python framework for building reactive web-apps. Developed by Plotly.)
+ * [dash_core_components](https://pypi.org/project/dash_core_components) 2.0.0 (Core component suite for Dash)
+ * [dash_html_components](https://pypi.org/project/dash_html_components) 2.0.0 (Vanilla HTML components for Dash)
+ * [dash_table](https://pypi.org/project/dash_table) 5.0.0 (Dash table)
+ * [dask_image](https://pypi.org/project/dask_image) 2024.5.3 (Distributed image processing)
+ * [distlib](https://pypi.org/project/distlib) 0.3.8 (Distribution utilities)
+ * [gdal](https://pypi.org/project/gdal) 3.7.3 (GDAL: Geospatial Data Abstraction Library)
+ * [gpytorch](https://pypi.org/project/gpytorch) 1.11 (An implementation of Gaussian Processes in Pytorch)
+ * [imageio_ffmpeg](https://pypi.org/project/imageio_ffmpeg) 0.4.8 (FFMPEG wrapper for Python)
+ * [jaxtyping](https://pypi.org/project/jaxtyping) 0.2.22 (Type annotations and runtime checking for shape and dtype of JAX arrays, and PyTrees.)
+ * [jsonpatch](https://pypi.org/project/jsonpatch) 1.33 (Apply JSON-Patches (RFC 6902) )
+ * [kornia](https://pypi.org/project/kornia) 0.7.2 (Open Source Differentiable Computer Vision Library for PyTorch)
+ * [kornia_rs](https://pypi.org/project/kornia_rs) 0.1.3 (Low level implementations for computer vision in Rust)
+ * [langchain](https://pypi.org/project/langchain) 0.2.5 (Building applications with LLMs through composability)
+ * [langchain_core](https://pypi.org/project/langchain_core) 0.2.7 (Building applications with LLMs through composability)
+ * [langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) 0.2.1 (LangChain text splitting utilities)
+ * [langsmith](https://pypi.org/project/langsmith) 0.1.77 (Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.)
+ * [lightning](https://pypi.org/project/lightning) 2.2.1 (The Deep Learning framework to train, deploy, and ship AI products Lightning fast.)
+ * [lightning_utilities](https://pypi.org/project/lightning_utilities) 0.10.0 (PyTorch Lightning Sample project.)
+ * [linear_operator](https://pypi.org/project/linear_operator) 0.5.1 (A linear operator implementation, primarily designed for finite-dimensional positive definite operators (i.e. kernel matrices).)
+ * [moviepy](https://pypi.org/project/moviepy) 1.0.3 (Video editing with Python)
+ * [opt_einsum](https://pypi.org/project/opt_einsum) 3.3.0 (Optimizing numpys einsum function)
+ * [ortools](https://pypi.org/project/ortools) 9.8.3296 (Google OR-Tools python libraries and modules)
+ * [pims](https://pypi.org/project/pims) 0.6.1 (Python Image Sequence)
+ * [portpicker](https://pypi.org/project/portpicker) 1.5.0 (A library to choose unique available network ports.)
+ * [proglog](https://pypi.org/project/proglog) 0.1.10 (Log and progress bar manager for console, notebooks, web...)
+ * [pyepsg](https://pypi.org/project/pyepsg) 0.4.0 (Easy access to the EPSG database via http://epsg.io/)
+ * [pygame](https://pypi.org/project/pygame) 2.5.2 (Python Game Development)
+ * [pyro_api](https://pypi.org/project/pyro_api) 0.1.2 (Generic API for dispatch to Pyro backends.)
+ * [pyro_ppl](https://pypi.org/project/pyro_ppl) 1.9.0 (A Python library for probabilistic modeling and inference)
+ * [pytorch_lightning](https://pypi.org/project/pytorch_lightning) 2.2.1 (PyTorch Lightning is the lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate.)
+ * [pytz_deprecation_shim](https://pypi.org/project/pytz_deprecation_shim) 0.1.0.post0 (Shims to make deprecation of pytz easier)
+ * [qpsolvers](https://pypi.org/project/qpsolvers) 4.3.0 (Quadratic programming solvers in Python with a unified API.)
+ * [retrying](https://pypi.org/project/retrying) 1.3.4 (Retrying)
+ * [safetensors](https://pypi.org/project/safetensors) 0.4.2 (Fast and Safe Tensor serialization)
+ * [slicerator](https://pypi.org/project/slicerator) 1.1.0 (A lazy-loading, fancy-sliceable iterable.)
+ * [tokenizers](https://pypi.org/project/tokenizers) 0.15.1 (Fast and Customizable Tokenizers)
+ * [torch](https://pypi.org/project/torch) 2.2.2 (Tensors and Dynamic neural networks in Python with strong GPU acceleration)
+ * [torchaudio](https://pypi.org/project/torchaudio) 2.2.2 (An audio package for PyTorch)
+ * [torchmetrics](https://pypi.org/project/torchmetrics) 1.3.2 (PyTorch native Metrics)
+ * [torchvision](https://pypi.org/project/torchvision) 0.17.2 (image and video datasets and models for torch deep learning)
+ * [transformers](https://pypi.org/project/transformers) 4.38.2 (State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow)
+ * [typeguard](https://pypi.org/project/typeguard) 2.13.3 (Run-time type checker for Python)
+ * [virtualenv](https://pypi.org/project/virtualenv) 20.26.2 (Virtual Python Environment builder)
+ * [wasmer](https://pypi.org/project/wasmer) 1.1.0 (Python extension to run WebAssembly binaries)
+ * [wasmer_compiler_cranelift](https://pypi.org/project/wasmer_compiler_cranelift) 1.1.0 (Python extension to run WebAssembly binaries)
+ * [wasmer_compiler_singlepass](https://pypi.org/project/wasmer_compiler_singlepass) 1.1.0 (Python extension to run WebAssembly binaries)
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.12.8.0.md b/changelogs/WinPythonslim-64bit-3.12.8.0.md
new file mode 100644
index 00000000..0d5a676a
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.8.0.md
@@ -0,0 +1,542 @@
+## WinPython 3.12.8.0slim
+
+The following packages are included in WinPython-64bit v3.12.8.0slim .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Pandoc](https://pandoc.org/) | 3.1.9 | a universal document converter
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.8 | Python programming language with standard library
+[about_time](https://pypi.org/project/about_time) | 4.2.1 | Easily measure timing and throughput of code blocks, with beautiful human friendly representations.
+[absl_py](https://pypi.org/project/absl_py) | 2.0.0 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc_driver_manager](https://pypi.org/project/adbc_driver_manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[adodbapi](https://pypi.org/project/adodbapi) | 2.6.1.3 | A pure Python package implementing PEP 249 DB-API using Microsoft ADO.
+[affine](https://pypi.org/project/affine) | 2.3.1 | Matrices describing affine transformation of the plane.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.4.4 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.11 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.1 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.13.1 | A database migration tool for SQLAlchemy.
+[alive_progress](https://pypi.org/project/alive_progress) | 3.1.5 | A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[aniso8601](https://pypi.org/project/aniso8601) | 9.0.1 | A library for parsing ISO 8601 strings.
+[annotated_types](https://pypi.org/project/annotated_types) | 0.6.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.42.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.7.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.12 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argon2_cffi](https://pypi.org/project/argon2_cffi) | 23.1.0 | Argon2 for Python
+[argon2_cffi_bindings](https://pypi.org/project/argon2_cffi_bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array_api_compat](https://pypi.org/project/array_api_compat) | 1.8 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi_csrf](https://pypi.org/project/asgi_csrf) | 0.9 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 0.9.31 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.1.0 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy_iers_data](https://pypi.org/project/astropy_iers_data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[async_lru](https://pypi.org/project/async_lru) | 2.0.4 | Simple LRU cache for asyncio
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 23.2.0 | Classes Without Boilerplate
+[autograd](https://pypi.org/project/autograd) | 1.6.2 | Efficiently computes derivatives of numpy code.
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure_core](https://pypi.org/project/azure_core) | 1.30.2 | Microsoft Azure Core Library for Python
+[azure_cosmos](https://pypi.org/project/azure_cosmos) | 4.7.0 | Microsoft Azure Cosmos Client Library for Python
+[azure_identity](https://pypi.org/project/azure_identity) | 1.16.1 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.16.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 0.8.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.0.1 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.12.2 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 24.10.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.1.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.7.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.6.1 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.0 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachelib](https://pypi.org/project/cachelib) | 0.13.0 | A collection of cache libraries in the same API interface.
+[cachetools](https://pypi.org/project/cachetools) | 5.4.0 | Extensible memoizing collections and decorators
+[cartopy](https://pypi.org/project/cartopy) | 0.23.0 | A Python library for cartographic visualizations with Matplotlib
+[certifi](https://pypi.org/project/certifi) | 2024.6.2 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[cftime](https://pypi.org/project/cftime) | 1.6.3 | Time-handling functionality from netcdf4-python
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset_normalizer](https://pypi.org/project/charset_normalizer) | 3.4.0 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.9.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.7 | Composable command line interface toolkit
+[click_default_group](https://pypi.org/project/click_default_group) | 1.2.4 | click_default_group
+[click_plugins](https://pypi.org/project/click_plugins) | 1.1.1 | An extension module for click to enable registering CLI commands via setuptools entry-points.
+[cligj](https://pypi.org/project/cligj) | 0.7.2 | Click params for commmand line interfaces to GeoJSON
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.0.0 | Pickler class to extend the standard pickle.Pickler functionality
+[clr_loader](https://pypi.org/project/clr_loader) | 0.2.6 | Generic pure Python loader for .NET runtimes
+[clrmagic](https://pypi.org/project/clrmagic) | 0.0.1a2 | IPython cell magic to use .NET languages
+[cma](https://pypi.org/project/cma) | 3.2.2 | CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.8.2 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.1 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g
+[cryptography](https://pypi.org/project/cryptography) | 41.0.5 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.0 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.0.11 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 0.12.3 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2024.12.1 | Parallel PyData with Task Scheduling
+[dask_expr](https://pypi.org/project/dask_expr) | 1.1.21 | High Level Expressions for Dask
+[datasette](https://pypi.org/project/datasette) | 0.64.8 | An open source multi-tool for exploring and publishing data
+[datasette_graphql](https://pypi.org/project/datasette_graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.16.3 | Data visualization toolchain based on aggregating into a grid
+[db_py](https://pypi.org/project/db_py) | 0.5.4b1 | a db package that doesn't suck
+[deap](https://pypi.org/project/deap) | 1.4.1 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.0 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[deprecated](https://pypi.org/project/deprecated) | 1.2.13 | Python @deprecated decorator to deprecate old python classes, functions or methods.
+[diff_match_patch](https://pypi.org/project/diff_match_patch) | 20230430 | Diff Match and Patch
+[dill](https://pypi.org/project/dill) | 0.3.7 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2024.12.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.8.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.0.7 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.6.1 | DNS toolkit
+[docopt](https://pypi.org/project/docopt) | 0.6.2 | Pythonic argument parser, that will make you smile
+[docstring_to_markdown](https://pypi.org/project/docstring_to_markdown) | 0.13 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.20.1 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.1.3 | DuckDB in-process database
+[ecos](https://pypi.org/project/ecos) | 2.0.13 | This is the Python package for ECOS: Embedded Cone Solver. See Github page for more information.
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et_xmlfile](https://pypi.org/project/et_xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval_type_backport](https://pypi.org/project/eval_type_backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.0.1 | Get the currently executing AST node of a frame, and other information
+[fast_histogram](https://pypi.org/project/fast_histogram) | 0.14 | Fast simple 1D and 2D histograms
+[fastapi](https://pypi.org/project/fastapi) | 0.115.6 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.18.0 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.14.0 | A platform independent file lock.
+[filterpy](https://pypi.org/project/filterpy) | 1.4.5 | Kalman filtering and optimal estimation library
+[fiona](https://pypi.org/project/fiona) | 1.10.1 | Fiona reads and writes spatial data files
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.0.3 | A simple framework for building complex web applications.
+[flask_mail](https://pypi.org/project/flask_mail) | 0.9.1 | Flask extension for sending email
+[flask_session](https://pypi.org/project/flask_session) | 0.5.0 | Server-side session support for Flask
+[flask_sqlalchemy](https://pypi.org/project/flask_sqlalchemy) | 3.0.5 | Add SQLAlchemy support to your Flask application.
+[flit](https://pypi.org/project/flit) | 3.9.0 | A simple packaging tool for simple packages.
+[flit_core](https://pypi.org/project/flit_core) | 3.9.0 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.18.0 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.55.3 | Tools to manipulate font files
+[formlayout](https://pypi.org/project/formlayout) | 1.2.1a1 | The most easy way to create Qt form dialogs and widgets with Python
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2024.6.1 | File-system specification
+[future](https://pypi.org/project/future) | 0.18.2 | Clean single-source support for Python 3 and 2
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 0.14.4 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.10 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.32 | GitPython is a Python library used to interact with Git repositories
+[google_auth](https://pypi.org/project/google_auth) | 2.37.0 | Google Authentication Library
+[grapheme](https://pypi.org/project/grapheme) | 0.6.0 | Unicode grapheme helpers
+[graphene](https://pypi.org/project/graphene) | 3.3 | GraphQL Framework for Python
+[graphql_core](https://pypi.org/project/graphql_core) | 3.2.3 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql_relay](https://pypi.org/project/graphql_relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.5.4 | Signatures for entire Python programs
+[groq](https://pypi.org/project/groq) | 0.13.1 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.7.1 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.1.0 | HTTP/2 State-Machine based protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.20.0 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.0.0 | Pure-Python HPACK header compression
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.5 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.27.2 | The next generation HTTP client.
+[huggingface_hub](https://pypi.org/project/huggingface_hub) | 0.27.0 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.11.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.16.0 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.0.1 | HTTP/2 framing layer for Python
+[hypothesis](https://pypi.org/project/hypothesis) | 6.108.5 | A library for property-based testing
+[idna](https://pypi.org/project/idna) | 3.7 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.33.1 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced_learn](https://pypi.org/project/imbalanced_learn) | 0.12.3 | Toolbox for imbalanced dataset in machine learning.
+[importlib_metadata](https://pypi.org/project/importlib_metadata) | 7.1.0 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.0.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.0.2 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.2 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.4 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.26.0 | IPython: Productive Interactive Computing
+[ipython_genutils](https://pypi.org/project/ipython_genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython_sql](https://pypi.org/project/ipython_sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.5 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 1.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco_classes](https://pypi.org/project/jaraco_classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco_context](https://pypi.org/project/jaraco_context) | 5.3.0 | Useful decorators and context managers
+[jaraco_functools](https://pypi.org/project/jaraco_functools) | 4.0.1 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.1 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.2 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.8.2 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.9.14 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpath_python](https://pypi.org/project/jsonpath_python) | 1.0.6 | A more powerful JSONPath implementation in modern python
+[jsonpointer](https://pypi.org/project/jsonpointer) | 2.4 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.19.2 | An implementation of JSON Schema validation for Python
+[jsonschema_specifications](https://pypi.org/project/jsonschema_specifications) | 2023.12.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter_bokeh](https://pypi.org/project/jupyter_bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter_client](https://pypi.org/project/jupyter_client) | 8.6.2 | Jupyter protocol implementation and client libraries
+[jupyter_console](https://pypi.org/project/jupyter_console) | 6.6.3 | Jupyter terminal console
+[jupyter_core](https://pypi.org/project/jupyter_core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter_events](https://pypi.org/project/jupyter_events) | 0.10.0 | Jupyter Event System library
+[jupyter_leaflet](https://pypi.org/project/jupyter_leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter_lsp](https://pypi.org/project/jupyter_lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter_server](https://pypi.org/project/jupyter_server) | 2.14.2 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter_server_terminals](https://pypi.org/project/jupyter_server_terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.3.4 | JupyterLab computational environment
+[jupyterlab_pygments](https://pypi.org/project/jupyterlab_pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab_server](https://pypi.org/project/jupyterlab_server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab_widgets](https://pypi.org/project/jupyterlab_widgets) | 3.0.13 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.7.0 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.2.1 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.7 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.13 | Building applications with LLMs through composability
+[langchain_core](https://pypi.org/project/langchain_core) | 0.3.28 | Building applications with LLMs through composability
+[langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) | 0.3.4 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.2.6 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy_loader](https://pypi.org/project/lazy_loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify_it_py](https://pypi.org/project/linkify_it_py) | 2.0.2 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0rc2 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.1 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire_api](https://pypi.org/project/logfire_api) | 2.11.0 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.5 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.5.1 | Python implementation of John Gruber's Markdown.
+[markdown_it_py](https://pypi.org/project/markdown_it_py) | 2.2.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 2.1.1 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.0 | Python plotting package
+[matplotlib_inline](https://pypi.org/project/matplotlib_inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.7.0 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mdit_py_plugins](https://pypi.org/project/mdit_py_plugins) | 0.3.5 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.1 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.2.5 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 2.0.5 | A sane Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml_dtypes](https://pypi.org/project/ml_dtypes) | 0.5.0 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.22.0 | Machine Learning Library Extensions
+[more_itertools](https://pypi.org/project/more_itertools) | 10.2.0 | More routines for operating on iterables, beyond itertools
+[mpl_scatter_density](https://pypi.org/project/mpl_scatter_density) | 0.7 | Matplotlib helpers to make density scatter plots
+[mpld3](https://pypi.org/project/mpld3) | 0.5.8 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal_extensions](https://pypi.org/project/msal_extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.0.4 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.1.0 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mutagen](https://pypi.org/project/mutagen) | 1.47.0 | read and write audio tags for many formats
+[mypy](https://pypi.org/project/mypy) | 1.14.0 | Optional static typing for Python
+[mypy_extensions](https://pypi.org/project/mypy_extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql_connector_python](https://pypi.org/project/mysql_connector_python) | 8.0.21 | MySQL driver written in Python
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.15.2 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.0 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.1 | Converting Jupyter Notebooks (.ipynb files) to other formats
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest_asyncio](https://pypi.org/project/nest_asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[netcdf4](https://pypi.org/project/netcdf4) | 1.7.1.post2 | Provides an object-oriented python interface to the netCDF version 4 library
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.3.1 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook_shim](https://pypi.org/project/notebook_shim) | 0.2.4 | A shim layer for notebook traits and config
+[ntlm_auth](https://pypi.org/project/ntlm_auth) | 1.5.0 | Creates NTLM authentication structures
+[numba](https://pypi.org/project/numba) | 0.61.0rc2 | compiling Python code using LLVM
+[numexpr](https://pypi.org/project/numexpr) | 2.10.1 | Fast numerical expression evaluator for NumPy
+[numpy](https://pypi.org/project/numpy) | 2.1.3 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.6.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.58.1 | The official Python library for the openai API
+[opencv_python](https://pypi.org/project/opencv_python) | 4.10.0.84 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.2 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[optree](https://pypi.org/project/optree) | 0.13.1 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 3.6.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.12 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post1 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.0 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.5.4 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.1.1 | Make your Python code clearer and more reliable by declaring Parameters.
+[paramiko](https://pypi.org/project/paramiko) | 2.8.0 | SSH2 protocol library
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.0 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.11.0 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 0.5.6 | A Python package for describing statistical models and for building design matrices.
+[pdfrw](https://pypi.org/project/pdfrw) | 0.4.post2 | PDF file reader/writer library
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.8.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.23.0 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.0.0 | Python Imaging Library (Fork)
+[pint](https://pypi.org/project/pint) | 0.23 | Physical quantities module
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pkginfo](https://pypi.org/project/pkginfo) | 1.11.2 | Query metadata from sdists / bdists / installed packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.2.2 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 5.24.1 | An open-source, interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.0 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.18.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[ppci](https://pypi.org/project/ppci) | 0.5.9 | A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python
+[prettytable](https://pypi.org/project/prettytable) | 3.3.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus_client](https://pypi.org/project/prometheus_client) | 0.18.0 | Python client for the Prometheus monitoring system.
+[prompt_toolkit](https://pypi.org/project/prompt_toolkit) | 3.0.48 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.2.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 5.27.3 |
+[psutil](https://pypi.org/project/psutil) | 5.9.8 | Cross-platform lib for process and system monitoring in Python.
+[psygnal](https://pypi.org/project/psygnal) | 0.11.1 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pulp](https://pypi.org/project/pulp) | 2.6.0 | PuLP is an LP modeler written in python
+[pure_eval](https://pypi.org/project/pure_eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 18.1.0 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.4.8 | ASN.1 types and codecs
+[pyasn1_modules](https://pypi.org/project/pyasn1_modules) | 0.2.8 | A collection of ASN.1-based protocols modules.
+[pyaudio](https://pypi.org/project/pyaudio) | 0.2.14 | Cross-platform audio I/O with PortAudio
+[pybars3](https://pypi.org/project/pybars3) | 0.9.7 | Handlebars.js templating for Python 3 and 2
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycosat](https://pypi.org/project/pycosat) | 0.6.6 | bindings to picosat (a SAT solver)
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pycryptodomex](https://pypi.org/project/pycryptodomex) | 3.20.0 | Cryptographic library for Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.10.4 | Data validation using Python type hints
+[pydantic_ai](https://pypi.org/project/pydantic_ai) | 0.0.15 | Agent Framework / shim to use Pydantic with LLMs
+[pydantic_ai_slim](https://pypi.org/project/pydantic_ai_slim) | 0.0.15 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic_core](https://pypi.org/project/pydantic_core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.4 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygments](https://pypi.org/project/pygments) | 2.18.0 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.8.0 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.1.0 | python code static checker
+[pylint_venv](https://pypi.org/project/pylint_venv) | 3.0.3 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls_spyder](https://pypi.org/project/pyls_spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymeta3](https://pypi.org/project/pymeta3) | 0.5.1 | Pattern-matching language based on OMeta for Python 3 and 2
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pymoo](https://pypi.org/project/pymoo) | 0.6.1.3 | Multi-Objective Optimization in Python
+[pympler](https://pypi.org/project/pympler) | 1.0.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.12 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyomo](https://pypi.org/project/pyomo) | 6.8.0 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.5 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.1.2 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 3.15.2 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pypng](https://pypi.org/project/pypng) | 0.20220715.0 | Pure Python library for saving and loading PNG images
+[pyproj](https://pypi.org/project/pyproj) | 3.6.1 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.10 | Python bindings for the Qt cross platform application toolkit
+[pyqt5_qt5](https://pypi.org/project/pyqt5_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5_sip](https://pypi.org/project/pyqt5_sip) | 12.13.0 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.6 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine_qt5](https://pypi.org/project/pyqtwebengine_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pyshp](https://pypi.org/project/pyshp) | 2.3.1 | Pure Python read/write support for ESRI Shapefile format
+[pysimplegui](https://pypi.org/project/pysimplegui) | 4.60.4 | Python GUIs for Humans
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pytest](https://pypi.org/project/pytest) | 8.2.2 | pytest: simple powerful testing with Python
+[python_barcode](https://pypi.org/project/python_barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python_dateutil](https://pypi.org/project/python_dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python_dotenv](https://pypi.org/project/python_dotenv) | 1.0.1 | Read key-value pairs from a .env file and set them as environment variables
+[python_json_logger](https://pypi.org/project/python_json_logger) | 2.0.7 | A python library adding a json log formatter
+[python_lsp_black](https://pypi.org/project/python_lsp_black) | 2.0.0 | Black plugin for the Python LSP Server
+[python_lsp_jsonrpc](https://pypi.org/project/python_lsp_jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python_lsp_server](https://pypi.org/project/python_lsp_server) | 1.12.0 | Python Language Server for the Language Server Protocol
+[python_multipart](https://pypi.org/project/python_multipart) | 0.0.9 | A streaming multipart parser for Python
+[python_slugify](https://pypi.org/project/python_slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonnet](https://pypi.org/project/pythonnet) | 3.0.3 | .NET and Mono integration for Python
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.2 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2024.1 | World timezone definitions, modern and historical
+[pyviz_comms](https://pypi.org/project/pyviz_comms) | 3.0.3 | A JupyterLab extension for rendering HoloViz content.
+[pywin32](https://pypi.org/project/pywin32) | 308 | Python for Window Extensions
+[pywin32_ctypes](https://pypi.org/project/pywin32_ctypes) | 0.2.2 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.14 | Pseudo terminal support for Windows from Python.
+[pywinusb](https://pypi.org/project/pywinusb) | 0.4.2 | A package that simplifies USB/HID communications on windows
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.2.0 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post4 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 7.4.2 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.2 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.3.1 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.5.2 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.1 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.19.4 | A Python ASGI web microframework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.9.6 | rapid fuzzy string matching
+[rasterio](https://pypi.org/project/rasterio) | 1.3.10 | Fast and direct raster I/O for use with Numpy and SciPy
+[readme_renderer](https://pypi.org/project/readme_renderer) | 35.0 | readme_renderer is a library for rendering "readme" descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.0.3 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.35.1 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.2.2 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests_ntlm](https://pypi.org/project/requests_ntlm) | 1.1.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests_toolbelt](https://pypi.org/project/requests_toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339_validator](https://pypi.org/project/rfc3339_validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986_validator](https://pypi.org/project/rfc3986_validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 13.9.4 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.12.0 | a python refactoring library...
+[rpds_py](https://pypi.org/project/rpds_py) | 0.22.3 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.1.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.1.1 | Reactive Extensions (Rx) for Python
+[scikit_image](https://pypi.org/project/scikit_image) | 0.25.0 | Image processing in Python
+[scikit_learn](https://pypi.org/project/scikit_learn) | 1.6.0 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.14.1 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.1 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.2 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.0.4 | Manipulation and analysis of geometric objects
+[simplegeneric](https://pypi.org/project/simplegeneric) | 0.8.1 | Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.0.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[smmap](https://pypi.org/project/smmap) | 5.0.0 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.0 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[snuggs](https://pypi.org/project/snuggs) | 1.4.7 | Snuggs are s-expressions for Numpy
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.4.6 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.5 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 7.3.7 | Python documentation generator
+[sphinx_rtd_theme](https://pypi.org/project/sphinx_rtd_theme) | 2.0.0 | Read the Docs theme for Sphinx
+[sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) | 1.0.8 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) | 1.0.6 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) | 2.0.5 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib_jquery](https://pypi.org/project/sphinxcontrib_jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib_jsmath](https://pypi.org/project/sphinxcontrib_jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) | 1.0.7 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib_serializinghtml](https://pypi.org/project/sphinxcontrib_serializinghtml) | 1.1.9 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 5.5.6 | The Scientific Python Development Environment
+[spyder_kernels](https://pypi.org/project/spyder_kernels) | 2.5.2 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.35 | Database Abstraction Library
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite_fts4](https://pypi.org/project/sqlite_fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite_utils](https://pypi.org/project/sqlite_utils) | 3.37 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.4.3 | A non-validating SQL parser.
+[sspyrs](https://pypi.org/project/sspyrs) | 0.3 | Lightweight interface for SSRS reports to python
+[stack_data](https://pypi.org/project/stack_data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.41.3 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.41.1 | A faster way to build and share data apps
+[streamz](https://pypi.org/project/streamz) | 0.6.3 | Streams
+[sympy](https://pypi.org/project/sympy) | 1.13.2 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.0.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 8.5.0 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 2.5.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text_unidecode](https://pypi.org/project/text_unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.2 | Compute distance between the two texts.
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.5.0 | threadpoolctl
+[three_merge](https://pypi.org/project/three_merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2024.7.2 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.8.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.3.0 | A tiny CSS parser
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.0.1 | A lil' TOML parser
+[tomli_w](https://pypi.org/project/tomli_w) | 1.0.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.12.3 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 0.12.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.4.1 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.66.4 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.27.0 | A friendly Python library for async concurrency and I/O
+[trove_classifiers](https://pypi.org/project/trove_classifiers) | 2024.10.21.16 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 4.0.1 | Collection of utilities for publishing packages on PyPI
+[types_python_dateutil](https://pypi.org/project/types_python_dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[typing_extensions](https://pypi.org/project/typing_extensions) | 4.12.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing_inspect](https://pypi.org/project/typing_inspect) | 0.9.0 | Runtime inspection utilities for typing module.
+[tzdata](https://pypi.org/project/tzdata) | 2024.1 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.2 | tzinfo object for the local timezone
+[uc_micro_py](https://pypi.org/project/uc_micro_py) | 1.0.1 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap_learn](https://pypi.org/project/umap_learn) | 0.5.6 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.1.7 | Transparent calculations with uncertainties on the quantities involved (aka error propagation); fast calculation of derivatives
+[uri_template](https://pypi.org/project/uri_template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.0.3 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.30.3 | The lightning-fast ASGI server.
+[vega_datasets](https://pypi.org/project/vega_datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 4.0.1 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 1.12 | A library for working with color names and color values formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket_client](https://pypi.org/project/websocket_client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 13.1 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.0.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.2 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.13 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 11.2.20241228 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wrapt](https://pypi.org/project/wrapt) | 1.16.0 | Module for decorators, wrappers and monkey patching.
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2024.11.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.1.9 | A Python module for creating Excel XLSX files.
+[xlwings](https://pypi.org/project/xlwings) | 0.24.7 | Make Excel fly: Interact with Excel from Python and vice versa.
+[xmltodict](https://pypi.org/project/xmltodict) | 0.13.0 | Makes working with XML feel like you are working with JSON
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt_dlp](https://pypi.org/project/yt_dlp) | 2023.7.6 | A youtube-dl fork with additional features and patches
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.17.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.12.8.0_History.md b/changelogs/WinPythonslim-64bit-3.12.8.0_History.md
new file mode 100644
index 00000000..a109c52b
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.8.0_History.md
@@ -0,0 +1,154 @@
+ï»ż## History of changes for WinPython-64bit 3.12.8.0slim
+
+The following changes were made to WinPython-64bit distribution since version 3.12.6.0slim.
+
+
+### Python packages
+
+New packages:
+
+ * [aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) 2.4.4 (Happy Eyeballs for asyncio)
+ * [anthropic](https://pypi.org/project/anthropic) 0.42.0 (The official Python library for the anthropic API)
+ * [eval_type_backport](https://pypi.org/project/eval_type_backport) 0.2.2 (Like `typing._eval_type`, but lets older Python versions use newer typing features.)
+ * [google_auth](https://pypi.org/project/google_auth) 2.37.0 (Google Authentication Library)
+ * [griffe](https://pypi.org/project/griffe) 1.5.4 (Signatures for entire Python programs)
+ * [groq](https://pypi.org/project/groq) 0.13.1 (The official Python library for the groq API)
+ * [jsonpatch](https://pypi.org/project/jsonpatch) 1.33 (Apply JSON-Patches (RFC 6902) )
+ * [jsonpath_python](https://pypi.org/project/jsonpath_python) 1.0.6 (A more powerful JSONPath implementation in modern python)
+ * [langchain](https://pypi.org/project/langchain) 0.3.13 (Building applications with LLMs through composability)
+ * [langchain_core](https://pypi.org/project/langchain_core) 0.3.28 (Building applications with LLMs through composability)
+ * [langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) 0.3.4 (LangChain text splitting utilities)
+ * [langsmith](https://pypi.org/project/langsmith) 0.2.6 (Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.)
+ * [logfire_api](https://pypi.org/project/logfire_api) 2.11.0 (Shim for the Logfire SDK which does nothing unless Logfire is installed)
+ * [mistralai](https://pypi.org/project/mistralai) 1.2.5 (Python Client SDK for the Mistral AI API.)
+ * [osqp](https://pypi.org/project/osqp) 0.6.7.post1 (OSQP: The Operator Splitting QP Solver)
+ * [propcache](https://pypi.org/project/propcache) 0.2.1 (Accelerated property cache)
+ * [pyasn1](https://pypi.org/project/pyasn1) 0.4.8 (ASN.1 types and codecs)
+ * [pyasn1_modules](https://pypi.org/project/pyasn1_modules) 0.2.8 (A collection of ASN.1-based protocols modules.)
+ * [pydantic_ai](https://pypi.org/project/pydantic_ai) 0.0.15 (Agent Framework / shim to use Pydantic with LLMs)
+ * [pydantic_ai_slim](https://pypi.org/project/pydantic_ai_slim) 0.0.15 (Agent Framework / shim to use Pydantic with LLMs, slim package)
+ * [qdldl](https://pypi.org/project/qdldl) 0.1.7.post4 (QDLDL, a free LDL factorization routine.)
+ * [rsa](https://pypi.org/project/rsa) 4.7.2 (Pure-Python RSA implementation)
+ * [termcolor](https://pypi.org/project/termcolor) 2.5.0 (ANSI color formatting for output in terminal)
+ * [tiktoken](https://pypi.org/project/tiktoken) 0.8.0 (tiktoken is a fast BPE tokeniser for use with OpenAI's models)
+ * [typing_inspect](https://pypi.org/project/typing_inspect) 0.9.0 (Runtime inspection utilities for typing module.)
+
+Upgraded packages:
+
+ * [adbc_driver_manager](https://pypi.org/project/adbc_driver_manager) 0.11.0 â 1.3.0 (A generic entrypoint for ADBC drivers.)
+ * [aiohttp](https://pypi.org/project/aiohttp) 3.9.5 â 3.11.11 (Async http client/server framework (asyncio))
+ * [altair](https://pypi.org/project/altair) 5.4.1 â 5.5.0 (Vega-Altair: A declarative statistical visualization library for Python.)
+ * [anyio](https://pypi.org/project/anyio) 4.4.0 â 4.7.0 (High level compatibility layer for multiple asynchronous event loop implementations)
+ * [astropy](https://pypi.org/project/astropy) 6.1.0 â 6.1.6 (Astronomy and astrophysics core library)
+ * [astropy_iers_data](https://pypi.org/project/astropy_iers_data) 0.2024.4.29.0.28.48 â 0.2024.12.23.0.33.24 (IERS Earth Rotation and Leap Second tables for the astropy core package)
+ * [babel](https://pypi.org/project/babel) 2.15.0 â 2.16.0 (Internationalization utilities)
+ * [black](https://pypi.org/project/black) 24.8.0 â 24.10.0 (The uncompromising code formatter.)
+ * [bokeh](https://pypi.org/project/bokeh) 3.5.1 â 3.6.1 (Interactive plots and applications in the browser from Python)
+ * [branca](https://pypi.org/project/branca) 0.7.2 â 0.8.0 (Generate complex HTML+JS pages with Python)
+ * [build](https://pypi.org/project/build) 1.2.1 â 1.2.2.post1 (A simple, correct Python build frontend)
+ * [cachetools](https://pypi.org/project/cachetools) 5.3.3 â 5.4.0 (Extensible memoizing collections and decorators)
+ * [cffi](https://pypi.org/project/cffi) 1.16.0 â 1.17.1 (Foreign Function Interface for Python calling C code.)
+ * [charset_normalizer](https://pypi.org/project/charset_normalizer) 3.3.2 â 3.4.0 (The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.)
+ * [contourpy](https://pypi.org/project/contourpy) 1.2.1 â 1.3.1 (Python library for calculating contours of 2D quadrilateral grids)
+ * [cvxpy](https://pypi.org/project/cvxpy) 1.5.0 â 1.6.0 (A domain-specific language for modeling convex optimization problems in Python.)
+ * [dask](https://pypi.org/project/dask) 2024.7.1 â 2024.12.1 (Parallel PyData with Task Scheduling)
+ * [dask_expr](https://pypi.org/project/dask_expr) 1.1.9 â 1.1.21 (High Level Expressions for Dask )
+ * [distributed](https://pypi.org/project/distributed) 2024.7.1 â 2024.12.1 (Distributed scheduler for Dask)
+ * [duckdb](https://pypi.org/project/duckdb) 1.0.0 â 1.1.3 (DuckDB in-process database)
+ * [fastapi](https://pypi.org/project/fastapi) 0.111.1 â 0.115.6 (FastAPI framework, high performance, easy to learn, fast to code, ready for production)
+ * [fiona](https://pypi.org/project/fiona) 1.9.5 â 1.10.1 (Fiona reads and writes spatial data files)
+ * [folium](https://pypi.org/project/folium) 0.17.0 â 0.18.0 (Make beautiful maps with Leaflet.js & Python)
+ * [fonttools](https://pypi.org/project/fonttools) 4.51.0 â 4.55.3 (Tools to manipulate font files)
+ * [frozenlist](https://pypi.org/project/frozenlist) 1.4.1 â 1.5.0 (A list-like structure which implements collections.abc.MutableSequence)
+ * [greenlet](https://pypi.org/project/greenlet) 3.0.3 â 3.1.1 (Lightweight in-process concurrent programming)
+ * [guidata](https://pypi.org/project/guidata) 3.6.2 â 3.7.1 (Automatic GUI generation for easy dataset editing and display)
+ * [h5py](https://pypi.org/project/h5py) 3.10.0 â 3.12.1 (Read and write HDF5 files from Python)
+ * [hatchling](https://pypi.org/project/hatchling) 1.25.0 â 1.27.0 (Modern, extensible Python build backend)
+ * [holoviews](https://pypi.org/project/holoviews) 1.19.1 â 1.20.0 (A high-level plotting API for the PyData ecosystem built on HoloViews.)
+ * [httpie](https://pypi.org/project/httpie) 3.2.3 â 3.2.4 (HTTPie: modern, user-friendly command-line HTTP client for the API era.)
+ * [httpx](https://pypi.org/project/httpx) 0.27.0 â 0.27.2 (The next generation HTTP client.)
+ * [huggingface_hub](https://pypi.org/project/huggingface_hub) 0.24.5 â 0.27.0 (Client library to download and publish models, datasets and other repos on the huggingface.co hub)
+ * [hvplot](https://pypi.org/project/hvplot) 0.10.0 â 0.11.2 (A high-level plotting API for the PyData ecosystem built on HoloViews.)
+ * [jellyfish](https://pypi.org/project/jellyfish) 1.0.3 â 1.1.3 (Approximate and phonetic matching of strings.)
+ * [jiter](https://pypi.org/project/jiter) 0.5.0 â 0.8.2 (Fast iterable JSON parser.)
+ * [jupyter](https://pypi.org/project/jupyter) 1.0.0 â 1.1.1 (Jupyter metapackage. Install all the Jupyter components in one go.)
+ * [jupyterlab](https://pypi.org/project/jupyterlab) 4.2.5 â 4.3.4 (JupyterLab computational environment)
+ * [keras](https://pypi.org/project/keras) 3.5.0 â 3.7.0 (Multi-backend Keras)
+ * [kiwisolver](https://pypi.org/project/kiwisolver) 1.4.5 â 1.4.7 (A fast implementation of the Cassowary constraint solver)
+ * [llvmlite](https://pypi.org/project/llvmlite) 0.43.0 â 0.44.0rc2 (lightweight wrapper around basic LLVM functionality)
+ * [lxml](https://pypi.org/project/lxml) 5.2.2 â 5.3.0 (Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.)
+ * [matplotlib](https://pypi.org/project/matplotlib) 3.9.2 â 3.10.0 (Python plotting package)
+ * [ml_dtypes](https://pypi.org/project/ml_dtypes) 0.4.0 â 0.5.0 ()
+ * [multidict](https://pypi.org/project/multidict) 6.0.5 â 6.1.0 (multidict implementation)
+ * [mypy](https://pypi.org/project/mypy) 1.11.1 â 1.14.0 (Optional static typing for Python)
+ * [narwhals](https://pypi.org/project/narwhals) 1.5.5 â 1.15.2 (Extremely lightweight compatibility layer between dataframe libraries)
+ * [networkx](https://pypi.org/project/networkx) 3.3 â 3.4.2 (Python package for creating and manipulating graphs and networks)
+ * [nltk](https://pypi.org/project/nltk) 3.8.1 â 3.9.1 (Natural Language Toolkit)
+ * [notebook](https://pypi.org/project/notebook) 7.2.1 â 7.3.1 (Jupyter Notebook - A web-based notebook environment for interactive computing)
+ * [numba](https://pypi.org/project/numba) 0.60.0 â 0.61.0rc2 (compiling Python code using LLVM)
+ * [numpy](https://pypi.org/project/numpy) 2.0.1 â 2.1.3 (Fundamental package for array computing in Python)
+ * [openai](https://pypi.org/project/openai) 1.42.0 â 1.58.1 (The official Python library for the openai API)
+ * [optree](https://pypi.org/project/optree) 0.11.0 â 0.13.1 (Optimized PyTree Utilities.)
+ * [orjson](https://pypi.org/project/orjson) 3.9.15 â 3.10.12 (Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy)
+ * [packaging](https://pypi.org/project/packaging) 24.1 â 24.2 (Core utilities for Python packages)
+ * [pandas](https://pypi.org/project/pandas) 2.2.2 â 2.2.3 (Powerful data structures for data analysis, time series, and statistics)
+ * [panel](https://pypi.org/project/panel) 1.5.0b4 â 1.5.4 (The powerful data exploration & web app framework for Python.)
+ * [pillow](https://pypi.org/project/pillow) 10.4.0 â 11.0.0 (Python Imaging Library (Fork))
+ * [pip](https://pypi.org/project/pip) 24.2 â 24.3.1 (The PyPA recommended tool for installing Python packages.)
+ * [pkginfo](https://pypi.org/project/pkginfo) 1.9.6 â 1.11.2 (Query metadata from sdists / bdists / installed packages.)
+ * [plotly](https://pypi.org/project/plotly) 5.23.0 â 5.24.1 (An open-source, interactive data visualization library for Python)
+ * [plotpy](https://pypi.org/project/plotpy) 2.6.2 â 2.7.0 (Curve and image plotting tools for Python/Qt applications)
+ * [polars](https://pypi.org/project/polars) 1.6.0 â 1.18.0 (Blazingly fast DataFrame library)
+ * [prompt_toolkit](https://pypi.org/project/prompt_toolkit) 3.0.47 â 3.0.48 (Library for building powerful interactive command lines in Python)
+ * [pyarrow](https://pypi.org/project/pyarrow) 17.0.0 â 18.1.0 (Python library for Apache Arrow)
+ * [pybind11](https://pypi.org/project/pybind11) 2.13.1 â 2.13.6 (Seamless operability between C++11 and Python)
+ * [pydantic](https://pypi.org/project/pydantic) 2.8.2 â 2.10.4 (Data validation using Python type hints)
+ * [pydantic_core](https://pypi.org/project/pydantic_core) 2.20.1 â 2.27.2 (Core functionality for Pydantic validation and serialization)
+ * [pymongo](https://pypi.org/project/pymongo) 4.7.2 â 4.10.1 (Python driver for MongoDB )
+ * [pyodbc](https://pypi.org/project/pyodbc) 5.1.0 â 5.2.0 (DB API module for ODBC)
+ * [Python](http://www.python.org/) 3.12.6 â 3.12.8 (Python programming language with standard library)
+ * [pythonqwt](https://pypi.org/project/pythonqwt) 0.12.7 â 0.14.2 (Qt plotting widgets for Python)
+ * [pywin32](https://pypi.org/project/pywin32) 306 â 308 (Python for Window Extensions)
+ * [pywinpty](https://pypi.org/project/pywinpty) 2.0.12 â 2.0.14 (Pseudo terminal support for Windows from Python.)
+ * [pyyaml](https://pypi.org/project/pyyaml) 6.0.1 â 6.0.2 (YAML parser and emitter for Python)
+ * [pyzmq](https://pypi.org/project/pyzmq) 26.0.3 â 26.2.0 (Python bindings for 0MQ)
+ * [rapidfuzz](https://pypi.org/project/rapidfuzz) 3.9.3 â 3.9.6 (rapid fuzzy string matching)
+ * [regex](https://pypi.org/project/regex) 2023.10.3 â 2024.11.6 (Alternative regular expression module, to replace re.)
+ * [requests](https://pypi.org/project/requests) 2.31.0 â 2.32.3 (Python HTTP for Humans.)
+ * [rich](https://pypi.org/project/rich) 13.7.1 â 13.9.4 (Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal)
+ * [rpds_py](https://pypi.org/project/rpds_py) 0.13.2 â 0.22.3 (Python bindings to Rust's persistent data structures (rpds))
+ * [scikit_image](https://pypi.org/project/scikit_image) 0.24.0 â 0.25.0 (Image processing in Python)
+ * [scikit_learn](https://pypi.org/project/scikit_learn) 1.5.1 â 1.6.0 (A set of python modules for machine learning and data mining)
+ * [scs](https://pypi.org/project/scs) 3.2.4.post1 â 3.2.7 (Splitting conic solver)
+ * [setuptools](https://pypi.org/project/setuptools) 72.2.0 â 75.6.0 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [simplejson](https://pypi.org/project/simplejson) 3.19.2 â 3.19.3 (Simple, fast, extensible JSON encoder/decoder for Python)
+ * [sqlalchemy](https://pypi.org/project/sqlalchemy) 2.0.30 â 2.0.35 (Database Abstraction Library)
+ * [starlette](https://pypi.org/project/starlette) 0.37.2 â 0.41.3 (The little ASGI library that shines.)
+ * [statsmodels](https://pypi.org/project/statsmodels) 0.14.2 â 0.14.4 (Statistical computations and models for Python)
+ * [streamlit](https://pypi.org/project/streamlit) 1.37.1 â 1.41.1 (A faster way to build and share data apps)
+ * [trio](https://pypi.org/project/trio) 0.26.2 â 0.27.0 (A friendly Python library for async concurrency and I/O)
+ * [trove_classifiers](https://pypi.org/project/trove_classifiers) 2023.2.20 â 2024.10.21.16 (Canonical source for classifiers on PyPI (pypi.org).)
+ * [ujson](https://pypi.org/project/ujson) 5.8.0 â 5.10.0 (Ultra fast JSON encoder and decoder for Python)
+ * [websockets](https://pypi.org/project/websockets) 12.0 â 13.1 (An implementation of the WebSocket Protocol (RFC 6455 & 7692))
+ * [winpython](https://pypi.org/project/winpython) 10.7.20240908 â 11.2.20241228 (WinPython distribution tools, including WPPM)
+ * [wordcloud](https://pypi.org/project/wordcloud) 1.9.3 â 1.9.4 (A little word cloud generator)
+ * [xarray](https://pypi.org/project/xarray) 2024.7.0 â 2024.11.0 (N-D labeled arrays and datasets in Python)
+ * [yarl](https://pypi.org/project/yarl) 1.7.2 â 1.18.3 (Yet another URL library)
+
+Removed packages:
+
+ * [dirty_cat](https://pypi.org/project/dirty_cat) 0.4.1 (Machine learning with dirty categories.)
+ * [email_validator](https://pypi.org/project/email_validator) 2.2.0 (A robust email address syntax and deliverability validation library.)
+ * [fastapi_cli](https://pypi.org/project/fastapi_cli) 0.0.4 (Run and manage FastAPI apps from the command line with FastAPI CLI. đ)
+ * [httptools](https://pypi.org/project/httptools) 0.6.1 (A collection of framework independent HTTP protocol utils.)
+ * [msvc_runtime](https://pypi.org/project/msvc_runtime) 14.40.33807 (Install the Microsoftâą Visual C++âą runtime DLLs to the sys.prefix and Scripts directories)
+ * [pmdarima](https://pypi.org/project/pmdarima) 2.0.4 (Python's forecast::auto.arima equivalent)
+ * [shellingham](https://pypi.org/project/shellingham) 1.5.0.post1 (Tool to Detect Surrounding Shell)
+ * [swifter](https://pypi.org/project/swifter) 1.3.4 (A package which efficiently applies any function to a pandas dataframe or series in the fastest available manner)
+ * [tbats](https://pypi.org/project/tbats) 1.1.0 (BATS and TBATS for time series forecasting)
+ * [typer](https://pypi.org/project/typer) 0.12.3 (Typer, build great CLIs. Easy to code. Based on Python type hints.)
+ * [watchfiles](https://pypi.org/project/watchfiles) 0.21.0 (Simple, modern and high performance file watching and code reload in python.)
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.12.8.1.md b/changelogs/WinPythonslim-64bit-3.12.8.1.md
new file mode 100644
index 00000000..897798ea
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.8.1.md
@@ -0,0 +1,522 @@
+## WinPython 3.12.8.1slim
+
+The following packages are included in WinPython-64bit v3.12.8.1slim b3.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.8 | Python programming language with standard library
+[absl_py](https://pypi.org/project/absl_py) | 2.0.0 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc_driver_manager](https://pypi.org/project/adbc_driver_manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[adodbapi](https://pypi.org/project/adodbapi) | 2.6.1.3 | A pure Python package implementing PEP 249 DB-API using Microsoft ADO.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.4.4 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.11 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.1 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.13.1 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[aniso8601](https://pypi.org/project/aniso8601) | 9.0.1 | A library for parsing ISO 8601 strings.
+[annotated_types](https://pypi.org/project/annotated_types) | 0.6.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.42.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.7.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.12 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argon2_cffi](https://pypi.org/project/argon2_cffi) | 23.1.0 | Argon2 for Python
+[argon2_cffi_bindings](https://pypi.org/project/argon2_cffi_bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array_api_compat](https://pypi.org/project/array_api_compat) | 1.10.0 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi_csrf](https://pypi.org/project/asgi_csrf) | 0.9 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 0.9.31 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.1.0 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy_iers_data](https://pypi.org/project/astropy_iers_data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[async_lru](https://pypi.org/project/async_lru) | 2.0.4 | Simple LRU cache for asyncio
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 23.2.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure_core](https://pypi.org/project/azure_core) | 1.30.2 | Microsoft Azure Core Library for Python
+[azure_cosmos](https://pypi.org/project/azure_cosmos) | 4.7.0 | Microsoft Azure Cosmos Client Library for Python
+[azure_identity](https://pypi.org/project/azure_identity) | 1.16.1 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.16.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 0.8.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.0.1 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.12.2 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 24.10.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.1.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.7.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.6.2 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.0 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachelib](https://pypi.org/project/cachelib) | 0.13.0 | A collection of cache libraries in the same API interface.
+[cachetools](https://pypi.org/project/cachetools) | 5.4.0 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2024.6.2 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset_normalizer](https://pypi.org/project/charset_normalizer) | 3.4.0 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.9.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.7 | Composable command line interface toolkit
+[click_default_group](https://pypi.org/project/click_default_group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.0.0 | Pickler class to extend the standard pickle.Pickler functionality
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.8.2 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.1 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g
+[cryptography](https://pypi.org/project/cryptography) | 44.0.0 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.0 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.0.11 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 1.0.1 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2024.12.1 | Parallel PyData with Task Scheduling
+[dask_expr](https://pypi.org/project/dask_expr) | 1.1.21 | High Level Expressions for Dask
+[datasette](https://pypi.org/project/datasette) | 0.64.8 | An open source multi-tool for exploring and publishing data
+[datasette_graphql](https://pypi.org/project/datasette_graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.16.3 | Data visualization toolchain based on aggregating into a grid
+[db_py](https://pypi.org/project/db_py) | 0.5.4b1 | a db package that doesn't suck
+[deap](https://pypi.org/project/deap) | 1.4.2 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.0 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[diff_match_patch](https://pypi.org/project/diff_match_patch) | 20230430 | Diff Match and Patch
+[dill](https://pypi.org/project/dill) | 0.3.7 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2024.12.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.8.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.0.7 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.6.1 | DNS toolkit
+[docopt](https://pypi.org/project/docopt) | 0.6.2 | Pythonic argument parser, that will make you smile
+[docstring_to_markdown](https://pypi.org/project/docstring_to_markdown) | 0.13 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.20.1 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.1.3 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et_xmlfile](https://pypi.org/project/et_xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval_type_backport](https://pypi.org/project/eval_type_backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.0.1 | Get the currently executing AST node of a frame, and other information
+[faker](https://pypi.org/project/faker) | 33.3.1 | Faker is a Python package that generates fake data for you.
+[fast_histogram](https://pypi.org/project/fast_histogram) | 0.14 | Fast simple 1D and 2D histograms
+[fastapi](https://pypi.org/project/fastapi) | 0.115.6 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.18.0 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.14.0 | A platform independent file lock.
+[filterpy](https://pypi.org/project/filterpy) | 1.4.5 | Kalman filtering and optimal estimation library
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.0.3 | A simple framework for building complex web applications.
+[flask_mail](https://pypi.org/project/flask_mail) | 0.9.1 | Flask extension for sending email
+[flask_session](https://pypi.org/project/flask_session) | 0.5.0 | Server-side session support for Flask
+[flask_sqlalchemy](https://pypi.org/project/flask_sqlalchemy) | 3.0.5 | Add SQLAlchemy support to your Flask application.
+[flit](https://pypi.org/project/flit) | 3.9.0 | A simple packaging tool for simple packages.
+[flit_core](https://pypi.org/project/flit_core) | 3.9.0 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.18.0 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.55.3 | Tools to manipulate font files
+[formlayout](https://pypi.org/project/formlayout) | 1.2.1a1 | The most easy way to create Qt form dialogs and widgets with Python
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2024.6.1 | File-system specification
+[future](https://pypi.org/project/future) | 0.18.2 | Clean single-source support for Python 3 and 2
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 1.0.1 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.10 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.32 | GitPython is a Python library used to interact with Git repositories
+[google_auth](https://pypi.org/project/google_auth) | 2.37.0 | Google Authentication Library
+[graphene](https://pypi.org/project/graphene) | 3.3 | GraphQL Framework for Python
+[graphql_core](https://pypi.org/project/graphql_core) | 3.2.3 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql_relay](https://pypi.org/project/graphql_relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.5.4 | Signatures for entire Python programs
+[groq](https://pypi.org/project/groq) | 0.13.1 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.7.1 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.1.0 | HTTP/2 State-Machine based protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.20.0 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.0.0 | Pure-Python HPACK header compression
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.5 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.27.2 | The next generation HTTP client.
+[huggingface_hub](https://pypi.org/project/huggingface_hub) | 0.27.0 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.11.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.16.0 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.0.1 | HTTP/2 framing layer for Python
+[hypothesis](https://pypi.org/project/hypothesis) | 6.122.3 | A library for property-based testing
+[idna](https://pypi.org/project/idna) | 3.7 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.33.1 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced_learn](https://pypi.org/project/imbalanced_learn) | 0.13.0 | Toolbox for imbalanced dataset in machine learning
+[importlib_metadata](https://pypi.org/project/importlib_metadata) | 7.1.0 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.0.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.0.2 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.2 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.4 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.31.0 | IPython: Productive Interactive Computing
+[ipython_genutils](https://pypi.org/project/ipython_genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython_sql](https://pypi.org/project/ipython_sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.5 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 2.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco_classes](https://pypi.org/project/jaraco_classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco_context](https://pypi.org/project/jaraco_context) | 6.0.1 | Useful decorators and context managers
+[jaraco_functools](https://pypi.org/project/jaraco_functools) | 4.1.0 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.2 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.2 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.8.2 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.9.14 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpath_python](https://pypi.org/project/jsonpath_python) | 1.0.6 | A more powerful JSONPath implementation in modern python
+[jsonpointer](https://pypi.org/project/jsonpointer) | 2.4 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.19.2 | An implementation of JSON Schema validation for Python
+[jsonschema_specifications](https://pypi.org/project/jsonschema_specifications) | 2023.12.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter_bokeh](https://pypi.org/project/jupyter_bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter_client](https://pypi.org/project/jupyter_client) | 8.6.2 | Jupyter protocol implementation and client libraries
+[jupyter_console](https://pypi.org/project/jupyter_console) | 6.6.3 | Jupyter terminal console
+[jupyter_core](https://pypi.org/project/jupyter_core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter_events](https://pypi.org/project/jupyter_events) | 0.10.0 | Jupyter Event System library
+[jupyter_leaflet](https://pypi.org/project/jupyter_leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter_lsp](https://pypi.org/project/jupyter_lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter_server](https://pypi.org/project/jupyter_server) | 2.14.2 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter_server_terminals](https://pypi.org/project/jupyter_server_terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.3.4 | JupyterLab computational environment
+[jupyterlab_pygments](https://pypi.org/project/jupyterlab_pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab_server](https://pypi.org/project/jupyterlab_server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab_widgets](https://pypi.org/project/jupyterlab_widgets) | 3.0.13 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.8.0 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.6.0 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.7 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.13 | Building applications with LLMs through composability
+[langchain_core](https://pypi.org/project/langchain_core) | 0.3.28 | Building applications with LLMs through composability
+[langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) | 0.3.4 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.2.6 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy_loader](https://pypi.org/project/lazy_loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify_it_py](https://pypi.org/project/linkify_it_py) | 2.0.2 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.1 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire_api](https://pypi.org/project/logfire_api) | 2.11.0 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.5 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.5.1 | Python implementation of John Gruber's Markdown.
+[markdown_it_py](https://pypi.org/project/markdown_it_py) | 2.2.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 2.1.1 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.0 | Python plotting package
+[matplotlib_inline](https://pypi.org/project/matplotlib_inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.8.1 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mdit_py_plugins](https://pypi.org/project/mdit_py_plugins) | 0.3.5 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.1 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.2.5 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 2.0.5 | A sane Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml_dtypes](https://pypi.org/project/ml_dtypes) | 0.5.0 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.23.3 | Machine Learning Library Extensions
+[more_itertools](https://pypi.org/project/more_itertools) | 10.2.0 | More routines for operating on iterables, beyond itertools
+[mpl_scatter_density](https://pypi.org/project/mpl_scatter_density) | 0.7 | Matplotlib helpers to make density scatter plots
+[mpld3](https://pypi.org/project/mpld3) | 0.5.8 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal_extensions](https://pypi.org/project/msal_extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.0.4 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.1.0 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mutagen](https://pypi.org/project/mutagen) | 1.47.0 | read and write audio tags for many formats
+[mypy](https://pypi.org/project/mypy) | 1.14.0 | Optional static typing for Python
+[mypy_extensions](https://pypi.org/project/mypy_extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql_connector_python](https://pypi.org/project/mysql_connector_python) | 8.0.21 | MySQL driver written in Python
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.21.1 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.0 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.1 | Converting Jupyter Notebooks (.ipynb files) to other formats
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest_asyncio](https://pypi.org/project/nest_asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.3.1 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook_shim](https://pypi.org/project/notebook_shim) | 0.2.4 | A shim layer for notebook traits and config
+[numba](https://pypi.org/project/numba) | 0.61.0 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.1.3 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.6.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.58.1 | The official Python library for the openai API
+[opencv_python](https://pypi.org/project/opencv_python) | 4.10.0.84 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.2 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[optree](https://pypi.org/project/optree) | 0.13.1 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 3.6.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.12 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post3 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.0 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.5.4 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.1.1 | Make your Python code clearer and more reliable by declaring Parameters.
+[paramiko](https://pypi.org/project/paramiko) | 2.8.0 | SSH2 protocol library
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.0 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.11.0 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 0.5.6 | A Python package for describing statistical models and for building design matrices.
+[pdfrw](https://pypi.org/project/pdfrw) | 0.4.post2 | PDF file reader/writer library
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.8.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.23.0 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.1.0 | Python Imaging Library (Fork)
+[pint](https://pypi.org/project/pint) | 0.23 | Physical quantities module
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pkginfo](https://pypi.org/project/pkginfo) | 1.11.2 | Query metadata from sdists / bdists / installed packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.2.2 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 5.24.1 | An open-source, interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.0 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.20.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[ppci](https://pypi.org/project/ppci) | 0.5.9 | A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python
+[prettytable](https://pypi.org/project/prettytable) | 3.3.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[prince](https://pypi.org/project/prince) | 0.15.0 | Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus_client](https://pypi.org/project/prometheus_client) | 0.18.0 | Python client for the Prometheus monitoring system.
+[prompt_toolkit](https://pypi.org/project/prompt_toolkit) | 3.0.48 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.2.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 5.27.3 |
+[psutil](https://pypi.org/project/psutil) | 5.9.8 | Cross-platform lib for process and system monitoring in Python.
+[psygnal](https://pypi.org/project/psygnal) | 0.11.1 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure_eval](https://pypi.org/project/pure_eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 19.0.0 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.4.8 | ASN.1 types and codecs
+[pyasn1_modules](https://pypi.org/project/pyasn1_modules) | 0.2.8 | A collection of ASN.1-based protocols modules.
+[pybars3](https://pypi.org/project/pybars3) | 0.9.7 | Handlebars.js templating for Python 3 and 2
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pycryptodomex](https://pypi.org/project/pycryptodomex) | 3.20.0 | Cryptographic library for Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.10.4 | Data validation using Python type hints
+[pydantic_ai](https://pypi.org/project/pydantic_ai) | 0.0.15 | Agent Framework / shim to use Pydantic with LLMs
+[pydantic_ai_slim](https://pypi.org/project/pydantic_ai_slim) | 0.0.15 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic_core](https://pypi.org/project/pydantic_core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.4 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygments](https://pypi.org/project/pygments) | 2.19.1 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.8.0 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.1.0 | python code static checker
+[pylint_venv](https://pypi.org/project/pylint_venv) | 3.0.3 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls_spyder](https://pypi.org/project/pyls_spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymeta3](https://pypi.org/project/pymeta3) | 0.5.1 | Pattern-matching language based on OMeta for Python 3 and 2
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.0.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.12 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyogrio](https://pypi.org/project/pyogrio) | 0.10.0 | Vectorized spatial vector file format I/O using GDAL/OGR
+[pyomo](https://pypi.org/project/pyomo) | 6.8.0 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.5 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.2.1 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 3.15.2 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pyproj](https://pypi.org/project/pyproj) | 3.7.0 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.10 | Python bindings for the Qt cross platform application toolkit
+[pyqt5_qt5](https://pypi.org/project/pyqt5_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5_sip](https://pypi.org/project/pyqt5_sip) | 12.13.0 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.6 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine_qt5](https://pypi.org/project/pyqtwebengine_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysimplegui](https://pypi.org/project/pysimplegui) | 4.60.4 | Python GUIs for Humans
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pyspnego](https://pypi.org/project/pyspnego) | 0.11.2 | Windows Negotiate Authentication Client and Server
+[pytest](https://pypi.org/project/pytest) | 8.2.2 | pytest: simple powerful testing with Python
+[python_barcode](https://pypi.org/project/python_barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python_dateutil](https://pypi.org/project/python_dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python_dotenv](https://pypi.org/project/python_dotenv) | 1.0.1 | Read key-value pairs from a .env file and set them as environment variables
+[python_json_logger](https://pypi.org/project/python_json_logger) | 2.0.7 | A python library adding a json log formatter
+[python_lsp_black](https://pypi.org/project/python_lsp_black) | 2.0.0 | Black plugin for the Python LSP Server
+[python_lsp_jsonrpc](https://pypi.org/project/python_lsp_jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python_lsp_server](https://pypi.org/project/python_lsp_server) | 1.12.0 | Python Language Server for the Language Server Protocol
+[python_multipart](https://pypi.org/project/python_multipart) | 0.0.9 | A streaming multipart parser for Python
+[python_slugify](https://pypi.org/project/python_slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.2 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2024.1 | World timezone definitions, modern and historical
+[pyviz_comms](https://pypi.org/project/pyviz_comms) | 3.0.3 | A JupyterLab extension for rendering HoloViz content.
+[pywavelets](https://pypi.org/project/pywavelets) | 1.8.0 | PyWavelets, wavelet transform module
+[pywin32](https://pypi.org/project/pywin32) | 308 | Python for Window Extensions
+[pywin32_ctypes](https://pypi.org/project/pywin32_ctypes) | 0.2.2 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.14 | Pseudo terminal support for Windows from Python.
+[pywinusb](https://pypi.org/project/pywinusb) | 0.4.2 | A package that simplifies USB/HID communications on windows
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.2.0 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post5 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 8.0 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.2 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.3.1 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.5.2 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.1 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.19.4 | A Python ASGI web microframework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.9.6 | rapid fuzzy string matching
+[readme_renderer](https://pypi.org/project/readme_renderer) | 35.0 | readme_renderer is a library for rendering "readme" descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.0.3 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.35.1 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.2.2 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests_ntlm](https://pypi.org/project/requests_ntlm) | 1.3.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests_toolbelt](https://pypi.org/project/requests_toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339_validator](https://pypi.org/project/rfc3339_validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986_validator](https://pypi.org/project/rfc3986_validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 13.9.4 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.12.0 | a python refactoring library...
+[rpds_py](https://pypi.org/project/rpds_py) | 0.22.3 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.1.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.1.1 | Reactive Extensions (Rx) for Python
+[scikit_image](https://pypi.org/project/scikit_image) | 0.25.0 | Image processing in Python
+[scikit_learn](https://pypi.org/project/scikit_learn) | 1.6.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.15.1 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.1 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.2 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.0.6 | Manipulation and analysis of geometric objects
+[simplegeneric](https://pypi.org/project/simplegeneric) | 0.8.1 | Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.0.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[sklearn_compat](https://pypi.org/project/sklearn_compat) | 0.1.3 | Ease support for compatible scikit-learn estimators across versions
+[smmap](https://pypi.org/project/smmap) | 5.0.0 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.0 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.4.6 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.5 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 7.3.7 | Python documentation generator
+[sphinx_rtd_theme](https://pypi.org/project/sphinx_rtd_theme) | 2.0.0 | Read the Docs theme for Sphinx
+[sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) | 1.0.8 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) | 1.0.6 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) | 2.0.5 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib_jquery](https://pypi.org/project/sphinxcontrib_jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib_jsmath](https://pypi.org/project/sphinxcontrib_jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) | 1.0.7 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib_serializinghtml](https://pypi.org/project/sphinxcontrib_serializinghtml) | 1.1.9 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 5.5.6 | The Scientific Python Development Environment
+[spyder_kernels](https://pypi.org/project/spyder_kernels) | 2.5.2 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.35 | Database Abstraction Library
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite_fts4](https://pypi.org/project/sqlite_fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite_utils](https://pypi.org/project/sqlite_utils) | 3.38 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.5.3 | A non-validating SQL parser.
+[squarify](https://pypi.org/project/squarify) | 0.4.4 | Pure Python implementation of the squarify treemap layout algorithm
+[sspilib](https://pypi.org/project/sspilib) | 0.2.0 | SSPI API bindings for Python
+[sspyrs](https://pypi.org/project/sspyrs) | 0.3 | Lightweight interface for SSRS reports to python
+[stack_data](https://pypi.org/project/stack_data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.41.3 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.41.1 | A faster way to build and share data apps
+[streamz](https://pypi.org/project/streamz) | 0.6.3 | Streams
+[sympy](https://pypi.org/project/sympy) | 1.13.2 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.0.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 8.5.0 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 2.5.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text_unidecode](https://pypi.org/project/text_unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.2 | Compute distance between the two texts.
+[thefuzz](https://pypi.org/project/thefuzz) | 0.22.1 | Fuzzy string matching in python
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.5.0 | threadpoolctl
+[three_merge](https://pypi.org/project/three_merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2025.1.10 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.8.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.3.0 | A tiny CSS parser
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.0.1 | A lil' TOML parser
+[tomli_w](https://pypi.org/project/tomli_w) | 1.0.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.12.3 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 1.0.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.4.2 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.66.4 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.28.0 | A friendly Python library for async concurrency and I/O
+[trove_classifiers](https://pypi.org/project/trove_classifiers) | 2024.10.21.16 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 6.0.1 | Collection of utilities for publishing packages on PyPI
+[types_python_dateutil](https://pypi.org/project/types_python_dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[typing_extensions](https://pypi.org/project/typing_extensions) | 4.12.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing_inspect](https://pypi.org/project/typing_inspect) | 0.9.0 | Runtime inspection utilities for typing module.
+[tzdata](https://pypi.org/project/tzdata) | 2024.1 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.2 | tzinfo object for the local timezone
+[uc_micro_py](https://pypi.org/project/uc_micro_py) | 1.0.1 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap_learn](https://pypi.org/project/umap_learn) | 0.5.6 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.1.7 | Transparent calculations with uncertainties on the quantities involved (aka error propagation); fast calculation of derivatives
+[uri_template](https://pypi.org/project/uri_template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.0.3 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.30.3 | The lightning-fast ASGI server.
+[vega_datasets](https://pypi.org/project/vega_datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 6.0.0 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 24.11.1 | A library for working with the color formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket_client](https://pypi.org/project/websocket_client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 14.2 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.1.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.7 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.13 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 12.0.20250201 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2025.1.1 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.1.9 | A Python module for creating Excel XLSX files.
+[xmltodict](https://pypi.org/project/xmltodict) | 0.13.0 | Makes working with XML feel like you are working with JSON
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt_dlp](https://pypi.org/project/yt_dlp) | 2023.7.6 | A youtube-dl fork with additional features and patches
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.21.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.12.8.1_History.md b/changelogs/WinPythonslim-64bit-3.12.8.1_History.md
new file mode 100644
index 00000000..72a872d2
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.8.1_History.md
@@ -0,0 +1,112 @@
+ï»ż## History of changes for WinPython-64bit 3.12.8.1slim
+
+The following changes were made to WinPython-64bit distribution since version 3.12.8.0slim.
+
+
+### Tools
+
+Removed packages:
+
+ * [Pandoc](https://pandoc.org/) 3.1.9 (a universal document converter)
+
+### Python packages
+
+New packages:
+
+ * [faker](https://pypi.org/project/faker) 33.3.1 (Faker is a Python package that generates fake data for you.)
+ * [prince](https://pypi.org/project/prince) 0.15.0 (Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA)
+ * [pyogrio](https://pypi.org/project/pyogrio) 0.10.0 (Vectorized spatial vector file format I/O using GDAL/OGR)
+ * [pyspnego](https://pypi.org/project/pyspnego) 0.11.2 (Windows Negotiate Authentication Client and Server)
+ * [pywavelets](https://pypi.org/project/pywavelets) 1.8.0 (PyWavelets, wavelet transform module)
+ * [sklearn_compat](https://pypi.org/project/sklearn_compat) 0.1.3 (Ease support for compatible scikit-learn estimators across versions)
+ * [squarify](https://pypi.org/project/squarify) 0.4.4 (Pure Python implementation of the squarify treemap layout algorithm)
+ * [sspilib](https://pypi.org/project/sspilib) 0.2.0 (SSPI API bindings for Python)
+ * [thefuzz](https://pypi.org/project/thefuzz) 0.22.1 (Fuzzy string matching in python)
+
+Upgraded packages:
+
+ * [array_api_compat](https://pypi.org/project/array_api_compat) 1.8 â 1.10.0 (A wrapper around NumPy and other array libraries to make them compatible with the Array API standard)
+ * [bokeh](https://pypi.org/project/bokeh) 3.6.1 â 3.6.2 (Interactive plots and applications in the browser from Python)
+ * [cryptography](https://pypi.org/project/cryptography) 41.0.5 â 44.0.0 (cryptography is a package which provides cryptographic recipes and primitives to Python developers.)
+ * [cytoolz](https://pypi.org/project/cytoolz) 0.12.3 â 1.0.1 (Cython implementation of Toolz: High performance functional utilities)
+ * [deap](https://pypi.org/project/deap) 1.4.1 â 1.4.2 (Distributed Evolutionary Algorithms in Python)
+ * [geopandas](https://pypi.org/project/geopandas) 0.14.4 â 1.0.1 (Geographic pandas extensions)
+ * [hypothesis](https://pypi.org/project/hypothesis) 6.108.5 â 6.122.3 (A library for property-based testing)
+ * [imbalanced_learn](https://pypi.org/project/imbalanced_learn) 0.12.3 â 0.13.0 (Toolbox for imbalanced dataset in machine learning)
+ * [ipython](https://pypi.org/project/ipython) 8.26.0 â 8.31.0 (IPython: Productive Interactive Computing)
+ * [janus](https://pypi.org/project/janus) 1.0.0 â 2.0.0 (Mixed sync-async queue to interoperate between asyncio tasks and classic threads)
+ * [jaraco_context](https://pypi.org/project/jaraco_context) 5.3.0 â 6.0.1 (Useful decorators and context managers)
+ * [jaraco_functools](https://pypi.org/project/jaraco_functools) 4.0.1 â 4.1.0 (Functools like those found in stdlib)
+ * [jedi](https://pypi.org/project/jedi) 0.19.1 â 0.19.2 (An autocompletion tool for Python that can be used for text editors.)
+ * [keras](https://pypi.org/project/keras) 3.7.0 â 3.8.0 (Multi-backend Keras)
+ * [keyring](https://pypi.org/project/keyring) 25.2.1 â 25.6.0 (Store and access your passwords safely.)
+ * [llvmlite](https://pypi.org/project/llvmlite) 0.44.0rc2 â 0.44.0 (lightweight wrapper around basic LLVM functionality)
+ * [maturin](https://pypi.org/project/maturin) 1.7.0 â 1.8.1 (Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages)
+ * [mlxtend](https://pypi.org/project/mlxtend) 0.22.0 â 0.23.3 (Machine Learning Library Extensions)
+ * [narwhals](https://pypi.org/project/narwhals) 1.15.2 â 1.21.1 (Extremely lightweight compatibility layer between dataframe libraries)
+ * [numba](https://pypi.org/project/numba) 0.61.0rc2 â 0.61.0 (compiling Python code using LLVM)
+ * [osqp](https://pypi.org/project/osqp) 0.6.7.post1 â 0.6.7.post3 (OSQP: The Operator Splitting QP Solver)
+ * [pillow](https://pypi.org/project/pillow) 11.0.0 â 11.1.0 (Python Imaging Library (Fork))
+ * [polars](https://pypi.org/project/polars) 1.18.0 â 1.20.0 (Blazingly fast DataFrame library)
+ * [pyarrow](https://pypi.org/project/pyarrow) 18.1.0 â 19.0.0 (Python library for Apache Arrow)
+ * [pygments](https://pypi.org/project/pygments) 2.18.0 â 2.19.1 (Pygments is a syntax highlighting package written in Python.)
+ * [pyparsing](https://pypi.org/project/pyparsing) 3.1.2 â 3.2.1 (pyparsing module - Classes and methods to define and execute parsing grammars)
+ * [pyproj](https://pypi.org/project/pyproj) 3.6.1 â 3.7.0 (Python interface to PROJ (cartographic projections and coordinate transformations library))
+ * [qdldl](https://pypi.org/project/qdldl) 0.1.7.post4 â 0.1.7.post5 (QDLDL, a free LDL factorization routine.)
+ * [qrcode](https://pypi.org/project/qrcode) 7.4.2 â 8.0 (QR Code image generator)
+ * [requests_ntlm](https://pypi.org/project/requests_ntlm) 1.1.0 â 1.3.0 (This package allows for HTTP NTLM authentication using the requests library.)
+ * [scikit_learn](https://pypi.org/project/scikit_learn) 1.6.0 â 1.6.1 (A set of python modules for machine learning and data mining)
+ * [scipy](https://pypi.org/project/scipy) 1.14.1 â 1.15.1 (Fundamental algorithms for scientific computing in Python)
+ * [shapely](https://pypi.org/project/shapely) 2.0.4 â 2.0.6 (Manipulation and analysis of geometric objects)
+ * [sqlite_utils](https://pypi.org/project/sqlite_utils) 3.37 â 3.38 (CLI tool and Python library for manipulating SQLite databases)
+ * [sqlparse](https://pypi.org/project/sqlparse) 0.4.3 â 0.5.3 (A non-validating SQL parser.)
+ * [tifffile](https://pypi.org/project/tifffile) 2024.7.2 â 2025.1.10 (Read and write TIFF files)
+ * [toolz](https://pypi.org/project/toolz) 0.12.0 â 1.0.0 (List processing tools and functional utilities)
+ * [tornado](https://pypi.org/project/tornado) 6.4.1 â 6.4.2 (Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.)
+ * [trio](https://pypi.org/project/trio) 0.27.0 â 0.28.0 (A friendly Python library for async concurrency and I/O)
+ * [twine](https://pypi.org/project/twine) 4.0.1 â 6.0.1 (Collection of utilities for publishing packages on PyPI)
+ * [watchdog](https://pypi.org/project/watchdog) 4.0.1 â 6.0.0 (Filesystem events monitoring)
+ * [webcolors](https://pypi.org/project/webcolors) 1.12 â 24.11.1 (A library for working with the color formats defined by HTML and CSS.)
+ * [websockets](https://pypi.org/project/websockets) 13.1 â 14.2 (An implementation of the WebSocket Protocol (RFC 6455 & 7692))
+ * [werkzeug](https://pypi.org/project/werkzeug) 3.0.3 â 3.1.3 (The comprehensive WSGI web application library.)
+ * [whatthepatch](https://pypi.org/project/whatthepatch) 1.0.2 â 1.0.7 (A patch parsing and application library.)
+ * [wheel](https://pypi.org/project/wheel) 0.44.0 â 0.45.1 (A built-package format for Python)
+ * [winpython](https://pypi.org/project/winpython) 11.2.20241228 â 12.0.20250201 (WinPython distribution tools, including WPPM)
+ * [xarray](https://pypi.org/project/xarray) 2024.11.0 â 2025.1.1 (N-D labeled arrays and datasets in Python)
+ * [zipp](https://pypi.org/project/zipp) 3.17.0 â 3.21.0 (Backport of pathlib-compatible object wrapper for zip files)
+
+Removed packages:
+
+ * [about_time](https://pypi.org/project/about_time) 4.2.1 (Easily measure timing and throughput of code blocks, with beautiful human friendly representations.)
+ * [affine](https://pypi.org/project/affine) 2.3.1 (Matrices describing affine transformation of the plane.)
+ * [alive_progress](https://pypi.org/project/alive_progress) 3.1.5 (A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!)
+ * [autograd](https://pypi.org/project/autograd) 1.6.2 (Efficiently computes derivatives of numpy code.)
+ * [cartopy](https://pypi.org/project/cartopy) 0.23.0 (A Python library for cartographic visualizations with Matplotlib)
+ * [cftime](https://pypi.org/project/cftime) 1.6.3 (Time-handling functionality from netcdf4-python)
+ * [click_plugins](https://pypi.org/project/click_plugins) 1.1.1 (An extension module for click to enable registering CLI commands via setuptools entry-points.)
+ * [cligj](https://pypi.org/project/cligj) 0.7.2 (Click params for commmand line interfaces to GeoJSON)
+ * [clr_loader](https://pypi.org/project/clr_loader) 0.2.6 (Generic pure Python loader for .NET runtimes)
+ * [clrmagic](https://pypi.org/project/clrmagic) 0.0.1a2 (IPython cell magic to use .NET languages)
+ * [cma](https://pypi.org/project/cma) 3.2.2 (CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python)
+ * [deprecated](https://pypi.org/project/deprecated) 1.2.13 (Python @deprecated decorator to deprecate old python classes, functions or methods.)
+ * [ecos](https://pypi.org/project/ecos) 2.0.13 (This is the Python package for ECOS: Embedded Cone Solver. See Github page for more information.)
+ * [fiona](https://pypi.org/project/fiona) 1.10.1 (Fiona reads and writes spatial data files)
+ * [grapheme](https://pypi.org/project/grapheme) 0.6.0 (Unicode grapheme helpers)
+ * [netcdf4](https://pypi.org/project/netcdf4) 1.7.1.post2 (Provides an object-oriented python interface to the netCDF version 4 library)
+ * [ntlm_auth](https://pypi.org/project/ntlm_auth) 1.5.0 (Creates NTLM authentication structures)
+ * [numexpr](https://pypi.org/project/numexpr) 2.10.1 (Fast numerical expression evaluator for NumPy)
+ * [pulp](https://pypi.org/project/pulp) 2.6.0 (PuLP is an LP modeler written in python)
+ * [pyaudio](https://pypi.org/project/pyaudio) 0.2.14 (Cross-platform audio I/O with PortAudio)
+ * [pycosat](https://pypi.org/project/pycosat) 0.6.6 (bindings to picosat (a SAT solver))
+ * [pymoo](https://pypi.org/project/pymoo) 0.6.1.3 (Multi-Objective Optimization in Python)
+ * [pypng](https://pypi.org/project/pypng) 0.20220715.0 (Pure Python library for saving and loading PNG images)
+ * [pyshp](https://pypi.org/project/pyshp) 2.3.1 (Pure Python read/write support for ESRI Shapefile format)
+ * [pythonnet](https://pypi.org/project/pythonnet) 3.0.3 (.NET and Mono integration for Python)
+ * [rasterio](https://pypi.org/project/rasterio) 1.3.10 (Fast and direct raster I/O for use with Numpy and SciPy)
+ * [snuggs](https://pypi.org/project/snuggs) 1.4.7 (Snuggs are s-expressions for Numpy)
+ * [wrapt](https://pypi.org/project/wrapt) 1.16.0 (Module for decorators, wrappers and monkey patching.)
+ * [xlwings](https://pypi.org/project/xlwings) 0.24.7 (Make Excel fly: Interact with Excel from Python and vice versa.)
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.12.9.0.md b/changelogs/WinPythonslim-64bit-3.12.9.0.md
new file mode 100644
index 00000000..9f11f9cb
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.9.0.md
@@ -0,0 +1,511 @@
+## WinPython 3.12.9.0slim
+
+The following packages are included in WinPython-64bit v3.12.9.0slim .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.9 | Python programming language with standard library
+[absl_py](https://pypi.org/project/absl_py) | 2.0.0 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc_driver_manager](https://pypi.org/project/adbc_driver_manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.4.4 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.11 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.1 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.13.1 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[aniso8601](https://pypi.org/project/aniso8601) | 9.0.1 | A library for parsing ISO 8601 strings.
+[annotated_types](https://pypi.org/project/annotated_types) | 0.6.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.42.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.7.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.12 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argon2_cffi](https://pypi.org/project/argon2_cffi) | 23.1.0 | Argon2 for Python
+[argon2_cffi_bindings](https://pypi.org/project/argon2_cffi_bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array_api_compat](https://pypi.org/project/array_api_compat) | 1.10.0 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi_csrf](https://pypi.org/project/asgi_csrf) | 0.9 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 0.9.31 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.1.0 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy_iers_data](https://pypi.org/project/astropy_iers_data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[async_lru](https://pypi.org/project/async_lru) | 2.0.4 | Simple LRU cache for asyncio
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 23.2.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure_core](https://pypi.org/project/azure_core) | 1.30.2 | Microsoft Azure Core Library for Python
+[azure_cosmos](https://pypi.org/project/azure_cosmos) | 4.7.0 | Microsoft Azure Cosmos Client Library for Python
+[azure_identity](https://pypi.org/project/azure_identity) | 1.16.1 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.16.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 1.0.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.0.1 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.12.2 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 24.10.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.1.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.9.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.6.3 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.0 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachetools](https://pypi.org/project/cachetools) | 5.4.0 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2024.6.2 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset_normalizer](https://pypi.org/project/charset_normalizer) | 3.4.0 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.10.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.7 | Composable command line interface toolkit
+[click_default_group](https://pypi.org/project/click_default_group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.0.0 | Pickler class to extend the standard pickle.Pickler functionality
+[cohere](https://pypi.org/project/cohere) | 5.13.12 |
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.8.2 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.1 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g
+[cryptography](https://pypi.org/project/cryptography) | 44.0.0 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.0 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.0.11 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 1.0.1 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2024.12.1 | Parallel PyData with Task Scheduling
+[dask_expr](https://pypi.org/project/dask_expr) | 1.1.21 | High Level Expressions for Dask
+[datasette](https://pypi.org/project/datasette) | 0.64.8 | An open source multi-tool for exploring and publishing data
+[datasette_graphql](https://pypi.org/project/datasette_graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.16.3 | Data visualization toolchain based on aggregating into a grid
+[deap](https://pypi.org/project/deap) | 1.4.2 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.0 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[diff_match_patch](https://pypi.org/project/diff_match_patch) | 20230430 | Diff Match and Patch
+[dill](https://pypi.org/project/dill) | 0.3.9 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2024.12.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.8.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.0.7 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.6.1 | DNS toolkit
+[docstring_to_markdown](https://pypi.org/project/docstring_to_markdown) | 0.13 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.21.2 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.2.0 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et_xmlfile](https://pypi.org/project/et_xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval_type_backport](https://pypi.org/project/eval_type_backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.0.1 | Get the currently executing AST node of a frame, and other information
+[faker](https://pypi.org/project/faker) | 33.3.1 | Faker is a Python package that generates fake data for you.
+[fast_histogram](https://pypi.org/project/fast_histogram) | 0.14 | Fast simple 1D and 2D histograms
+[fastapi](https://pypi.org/project/fastapi) | 0.115.6 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastavro](https://pypi.org/project/fastavro) | 1.10.0 | Fast read/write of AVRO files
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.18.0 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.14.0 | A platform independent file lock.
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.1.0 | A simple framework for building complex web applications.
+[flit](https://pypi.org/project/flit) | 3.10.1 | A simple packaging tool for simple packages.
+[flit_core](https://pypi.org/project/flit_core) | 3.10.1 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.18.0 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.55.3 | Tools to manipulate font files
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2024.6.1 | File-system specification
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 1.0.1 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.10 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.32 | GitPython is a Python library used to interact with Git repositories
+[google_auth](https://pypi.org/project/google_auth) | 2.37.0 | Google Authentication Library
+[graphene](https://pypi.org/project/graphene) | 3.3 | GraphQL Framework for Python
+[graphql_core](https://pypi.org/project/graphql_core) | 3.2.3 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql_relay](https://pypi.org/project/graphql_relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.5.5 | Signatures for entire Python programs
+[groq](https://pypi.org/project/groq) | 0.13.1 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.7.1 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.1.0 | HTTP/2 State-Machine based protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.20.0 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.0.0 | Pure-Python HPACK header compression
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.5 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.27.2 | The next generation HTTP client.
+[httpx_sse](https://pypi.org/project/httpx_sse) | 0.4.0 | Consume Server-Sent Event (SSE) messages with HTTPX.
+[huggingface_hub](https://pypi.org/project/huggingface_hub) | 0.28.1 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.11.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.16.0 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.0.1 | HTTP/2 framing layer for Python
+[hypothesis](https://pypi.org/project/hypothesis) | 6.122.3 | A library for property-based testing
+[idna](https://pypi.org/project/idna) | 3.7 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.33.1 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced_learn](https://pypi.org/project/imbalanced_learn) | 0.13.0 | Toolbox for imbalanced dataset in machine learning
+[importlib_metadata](https://pypi.org/project/importlib_metadata) | 7.1.0 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.0.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.0.2 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.3 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.6 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.32.0 | IPython: Productive Interactive Computing
+[ipython_genutils](https://pypi.org/project/ipython_genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython_sql](https://pypi.org/project/ipython_sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.5 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 2.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco_classes](https://pypi.org/project/jaraco_classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco_context](https://pypi.org/project/jaraco_context) | 6.0.1 | Useful decorators and context managers
+[jaraco_functools](https://pypi.org/project/jaraco_functools) | 4.1.0 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.2 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.2 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.8.2 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.9.14 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpath_python](https://pypi.org/project/jsonpath_python) | 1.0.6 | A more powerful JSONPath implementation in modern python
+[jsonpointer](https://pypi.org/project/jsonpointer) | 2.4 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.19.2 | An implementation of JSON Schema validation for Python
+[jsonschema_specifications](https://pypi.org/project/jsonschema_specifications) | 2023.12.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter_bokeh](https://pypi.org/project/jupyter_bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter_client](https://pypi.org/project/jupyter_client) | 8.6.2 | Jupyter protocol implementation and client libraries
+[jupyter_console](https://pypi.org/project/jupyter_console) | 6.6.3 | Jupyter terminal console
+[jupyter_core](https://pypi.org/project/jupyter_core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter_events](https://pypi.org/project/jupyter_events) | 0.10.0 | Jupyter Event System library
+[jupyter_leaflet](https://pypi.org/project/jupyter_leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter_lsp](https://pypi.org/project/jupyter_lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter_server](https://pypi.org/project/jupyter_server) | 2.14.2 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter_server_terminals](https://pypi.org/project/jupyter_server_terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.3.5 | JupyterLab computational environment
+[jupyterlab_pygments](https://pypi.org/project/jupyterlab_pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab_server](https://pypi.org/project/jupyterlab_server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab_widgets](https://pypi.org/project/jupyterlab_widgets) | 3.0.13 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.8.0 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.6.0 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.8 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.18 | Building applications with LLMs through composability
+[langchain_core](https://pypi.org/project/langchain_core) | 0.3.34 | Building applications with LLMs through composability
+[langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) | 0.3.6 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.2.11 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy_loader](https://pypi.org/project/lazy_loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify_it_py](https://pypi.org/project/linkify_it_py) | 2.0.2 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.1 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire_api](https://pypi.org/project/logfire_api) | 3.5.3 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.5 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.5.1 | Python implementation of John Gruber's Markdown.
+[markdown_it_py](https://pypi.org/project/markdown_it_py) | 2.2.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 3.0.2 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.0 | Python plotting package
+[matplotlib_inline](https://pypi.org/project/matplotlib_inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.8.1 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mdit_py_plugins](https://pypi.org/project/mdit_py_plugins) | 0.3.5 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.1 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.2.5 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 2.0.5 | A sane Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml_dtypes](https://pypi.org/project/ml_dtypes) | 0.5.0 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.23.3 | Machine Learning Library Extensions
+[more_itertools](https://pypi.org/project/more_itertools) | 10.2.0 | More routines for operating on iterables, beyond itertools
+[mpl_scatter_density](https://pypi.org/project/mpl_scatter_density) | 0.7 | Matplotlib helpers to make density scatter plots
+[mpld3](https://pypi.org/project/mpld3) | 0.5.8 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal_extensions](https://pypi.org/project/msal_extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.1.0 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.1.0 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mutagen](https://pypi.org/project/mutagen) | 1.47.0 | read and write audio tags for many formats
+[mypy](https://pypi.org/project/mypy) | 1.14.0 | Optional static typing for Python
+[mypy_extensions](https://pypi.org/project/mypy_extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql_connector_python](https://pypi.org/project/mysql_connector_python) | 8.0.21 | MySQL driver written in Python
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.21.1 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.0 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.1 | Converting Jupyter Notebooks (.ipynb files) to other formats
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest_asyncio](https://pypi.org/project/nest_asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nh3](https://pypi.org/project/nh3) | 0.2.18 | Python bindings to the ammonia HTML sanitization library.
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.3.1 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook_shim](https://pypi.org/project/notebook_shim) | 0.2.4 | A shim layer for notebook traits and config
+[numba](https://pypi.org/project/numba) | 0.61.0 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.1.3 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.6.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.61.1 | The official Python library for the openai API
+[opencv_python](https://pypi.org/project/opencv_python) | 4.10.0.84 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.2 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[optree](https://pypi.org/project/optree) | 0.13.1 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 3.6.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.12 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post3 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.0 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.6.0 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.1.1 | Make your Python code clearer and more reliable by declaring Parameters.
+[paramiko](https://pypi.org/project/paramiko) | 2.8.0 | SSH2 protocol library
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.0 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.11.0 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 0.5.6 | A Python package for describing statistical models and for building design matrices.
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.8.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.23.0 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.1.0 | Python Imaging Library (Fork)
+[pint](https://pypi.org/project/pint) | 0.23 | Physical quantities module
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pkginfo](https://pypi.org/project/pkginfo) | 1.11.2 | Query metadata from sdists / bdists / installed packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.2.2 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 5.24.1 | An open-source, interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.2 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.22.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[prettytable](https://pypi.org/project/prettytable) | 3.3.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[prince](https://pypi.org/project/prince) | 0.15.0 | Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus_client](https://pypi.org/project/prometheus_client) | 0.18.0 | Python client for the Prometheus monitoring system.
+[prompt_toolkit](https://pypi.org/project/prompt_toolkit) | 3.0.48 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.2.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 5.27.3 |
+[psutil](https://pypi.org/project/psutil) | 5.9.8 | Cross-platform lib for process and system monitoring in Python.
+[psygnal](https://pypi.org/project/psygnal) | 0.11.1 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure_eval](https://pypi.org/project/pure_eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 19.0.0 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.4.8 | ASN.1 types and codecs
+[pyasn1_modules](https://pypi.org/project/pyasn1_modules) | 0.2.8 | A collection of ASN.1-based protocols modules.
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pycryptodomex](https://pypi.org/project/pycryptodomex) | 3.20.0 | Cryptographic library for Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.10.6 | Data validation using Python type hints
+[pydantic_ai](https://pypi.org/project/pydantic_ai) | 0.0.24 | Agent Framework / shim to use Pydantic with LLMs
+[pydantic_ai_slim](https://pypi.org/project/pydantic_ai_slim) | 0.0.24 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic_core](https://pypi.org/project/pydantic_core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydantic_graph](https://pypi.org/project/pydantic_graph) | 0.0.24 | Graph and state machine library
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.4 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygments](https://pypi.org/project/pygments) | 2.19.1 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.8.0 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.1.0 | python code static checker
+[pylint_venv](https://pypi.org/project/pylint_venv) | 3.0.3 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls_spyder](https://pypi.org/project/pyls_spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.0.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.12 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyogrio](https://pypi.org/project/pyogrio) | 0.10.0 | Vectorized spatial vector file format I/O using GDAL/OGR
+[pyomo](https://pypi.org/project/pyomo) | 6.8.2 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.5 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.2.1 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 5.1.0 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pyproj](https://pypi.org/project/pyproj) | 3.7.0 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.10 | Python bindings for the Qt cross platform application toolkit
+[pyqt5_qt5](https://pypi.org/project/pyqt5_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5_sip](https://pypi.org/project/pyqt5_sip) | 12.16.1 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.6 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine_qt5](https://pypi.org/project/pyqtwebengine_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pyspnego](https://pypi.org/project/pyspnego) | 0.11.2 | Windows Negotiate Authentication Client and Server
+[pytest](https://pypi.org/project/pytest) | 8.2.2 | pytest: simple powerful testing with Python
+[python_barcode](https://pypi.org/project/python_barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python_dateutil](https://pypi.org/project/python_dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python_dotenv](https://pypi.org/project/python_dotenv) | 1.0.1 | Read key-value pairs from a .env file and set them as environment variables
+[python_json_logger](https://pypi.org/project/python_json_logger) | 2.0.7 | A python library adding a json log formatter
+[python_lsp_black](https://pypi.org/project/python_lsp_black) | 2.0.0 | Black plugin for the Python LSP Server
+[python_lsp_jsonrpc](https://pypi.org/project/python_lsp_jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python_lsp_server](https://pypi.org/project/python_lsp_server) | 1.12.0 | Python Language Server for the Language Server Protocol
+[python_multipart](https://pypi.org/project/python_multipart) | 0.0.9 | A streaming multipart parser for Python
+[python_slugify](https://pypi.org/project/python_slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.4 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2024.1 | World timezone definitions, modern and historical
+[pyusb](https://pypi.org/project/pyusb) | 1.3.1 | Easy USB access for Python
+[pyviz_comms](https://pypi.org/project/pyviz_comms) | 3.0.3 | A JupyterLab extension for rendering HoloViz content.
+[pywavelets](https://pypi.org/project/pywavelets) | 1.8.0 | PyWavelets, wavelet transform module
+[pywin32](https://pypi.org/project/pywin32) | 308 | Python for Window Extensions
+[pywin32_ctypes](https://pypi.org/project/pywin32_ctypes) | 0.2.2 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.14 | Pseudo terminal support for Windows from Python.
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.2.0 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post5 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 8.0 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.2 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.3.1 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.5.2 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.1 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.19.4 | A Python ASGI web microframework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.9.6 | rapid fuzzy string matching
+[readme_renderer](https://pypi.org/project/readme_renderer) | 44.0 | readme_renderer is a library for rendering readme descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.0.8 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.35.1 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.2.5 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests_ntlm](https://pypi.org/project/requests_ntlm) | 1.3.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests_toolbelt](https://pypi.org/project/requests_toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339_validator](https://pypi.org/project/rfc3339_validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986_validator](https://pypi.org/project/rfc3986_validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 13.9.4 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.12.0 | a python refactoring library...
+[rpds_py](https://pypi.org/project/rpds_py) | 0.22.3 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.1.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.1.1 | Reactive Extensions (Rx) for Python
+[scikit_image](https://pypi.org/project/scikit_image) | 0.25.0 | Image processing in Python
+[scikit_learn](https://pypi.org/project/scikit_learn) | 1.6.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.15.1 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.5 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7.post2 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.2 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.0.6 | Manipulation and analysis of geometric objects
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.0.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[sklearn_compat](https://pypi.org/project/sklearn_compat) | 0.1.3 | Ease support for compatible scikit-learn estimators across versions
+[smmap](https://pypi.org/project/smmap) | 5.0.0 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.0 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.5.1 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.6 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 7.3.7 | Python documentation generator
+[sphinx_rtd_theme](https://pypi.org/project/sphinx_rtd_theme) | 3.0.2 | Read the Docs theme for Sphinx
+[sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) | 2.0.0 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) | 2.0.0 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) | 2.1.0 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib_jquery](https://pypi.org/project/sphinxcontrib_jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib_jsmath](https://pypi.org/project/sphinxcontrib_jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) | 2.0.0 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib_serializinghtml](https://pypi.org/project/sphinxcontrib_serializinghtml) | 2.0.0 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 5.5.6 | The Scientific Python Development Environment
+[spyder_kernels](https://pypi.org/project/spyder_kernels) | 2.5.2 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.35 | Database Abstraction Library
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite_fts4](https://pypi.org/project/sqlite_fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite_utils](https://pypi.org/project/sqlite_utils) | 3.38 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.5.3 | A non-validating SQL parser.
+[squarify](https://pypi.org/project/squarify) | 0.4.4 | Pure Python implementation of the squarify treemap layout algorithm
+[sspilib](https://pypi.org/project/sspilib) | 0.2.0 | SSPI API bindings for Python
+[stack_data](https://pypi.org/project/stack_data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.41.3 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.41.1 | A faster way to build and share data apps
+[streamz](https://pypi.org/project/streamz) | 0.6.3 | Streams
+[sympy](https://pypi.org/project/sympy) | 1.13.3 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.0.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 9.0.0 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 2.5.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text_unidecode](https://pypi.org/project/text_unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.3 | Compute distance between the two texts.
+[thefuzz](https://pypi.org/project/thefuzz) | 0.22.1 | Fuzzy string matching in python
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.5.0 | threadpoolctl
+[three_merge](https://pypi.org/project/three_merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2025.1.10 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.8.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.4.0 | A tiny CSS parser
+[tokenizers](https://pypi.org/project/tokenizers) | 0.21.0 |
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.2.1 | A lil' TOML parser
+[tomli_w](https://pypi.org/project/tomli_w) | 1.1.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.13.2 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 1.0.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.4.2 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.66.4 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.28.0 | A friendly Python library for async concurrency and I/O
+[trove_classifiers](https://pypi.org/project/trove_classifiers) | 2024.10.21.16 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 6.0.1 | Collection of utilities for publishing packages on PyPI
+[types_python_dateutil](https://pypi.org/project/types_python_dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[types_requests](https://pypi.org/project/types_requests) | 2.32.0.20241016 | Typing stubs for requests
+[typing_extensions](https://pypi.org/project/typing_extensions) | 4.12.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing_inspect](https://pypi.org/project/typing_inspect) | 0.9.0 | Runtime inspection utilities for typing module.
+[tzdata](https://pypi.org/project/tzdata) | 2024.1 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.2 | tzinfo object for the local timezone
+[uc_micro_py](https://pypi.org/project/uc_micro_py) | 1.0.1 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap_learn](https://pypi.org/project/umap_learn) | 0.5.6 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.2.2 | calculations with values with uncertainties, error propagation
+[uri_template](https://pypi.org/project/uri_template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.2.3 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.34.0 | The lightning-fast ASGI server.
+[vega_datasets](https://pypi.org/project/vega_datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 6.0.0 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 24.11.1 | A library for working with the color formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket_client](https://pypi.org/project/websocket_client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 14.2 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.1.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.7 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.13 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 13.1.20250222 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2025.1.1 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.1.9 | A Python module for creating Excel XLSX files.
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt_dlp](https://pypi.org/project/yt_dlp) | 2023.7.6 | A youtube-dl fork with additional features and patches
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.21.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.12.9.0_History.md b/changelogs/WinPythonslim-64bit-3.12.9.0_History.md
new file mode 100644
index 00000000..aa21a9ba
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.12.9.0_History.md
@@ -0,0 +1,195 @@
+ï»ż## History of changes for WinPython-64bit 3.12.9.0slim
+
+The following changes were made to WinPython-64bit distribution since version 3.12.8.0slim.
+
+
+### Tools
+
+Removed packages:
+
+ * [Pandoc](https://pandoc.org/) 3.1.9 (a universal document converter)
+
+### Python packages
+
+New packages:
+
+ * [cohere](https://pypi.org/project/cohere) 5.13.12 ()
+ * [faker](https://pypi.org/project/faker) 33.3.1 (Faker is a Python package that generates fake data for you.)
+ * [fastavro](https://pypi.org/project/fastavro) 1.10.0 (Fast read/write of AVRO files)
+ * [httpx_sse](https://pypi.org/project/httpx_sse) 0.4.0 (Consume Server-Sent Event (SSE) messages with HTTPX.)
+ * [nh3](https://pypi.org/project/nh3) 0.2.18 (Python bindings to the ammonia HTML sanitization library.)
+ * [prince](https://pypi.org/project/prince) 0.15.0 (Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA)
+ * [pydantic_graph](https://pypi.org/project/pydantic_graph) 0.0.24 (Graph and state machine library)
+ * [pyogrio](https://pypi.org/project/pyogrio) 0.10.0 (Vectorized spatial vector file format I/O using GDAL/OGR)
+ * [pyspnego](https://pypi.org/project/pyspnego) 0.11.2 (Windows Negotiate Authentication Client and Server)
+ * [pyusb](https://pypi.org/project/pyusb) 1.3.1 (Easy USB access for Python)
+ * [pywavelets](https://pypi.org/project/pywavelets) 1.8.0 (PyWavelets, wavelet transform module)
+ * [sklearn_compat](https://pypi.org/project/sklearn_compat) 0.1.3 (Ease support for compatible scikit-learn estimators across versions)
+ * [squarify](https://pypi.org/project/squarify) 0.4.4 (Pure Python implementation of the squarify treemap layout algorithm)
+ * [sspilib](https://pypi.org/project/sspilib) 0.2.0 (SSPI API bindings for Python)
+ * [thefuzz](https://pypi.org/project/thefuzz) 0.22.1 (Fuzzy string matching in python)
+ * [tokenizers](https://pypi.org/project/tokenizers) 0.21.0 ()
+ * [types_requests](https://pypi.org/project/types_requests) 2.32.0.20241016 (Typing stubs for requests)
+
+Upgraded packages:
+
+ * [array_api_compat](https://pypi.org/project/array_api_compat) 1.8 â 1.10.0 (A wrapper around NumPy and other array libraries to make them compatible with the Array API standard)
+ * [baresql](https://pypi.org/project/baresql) 0.8.0 â 1.0.0 (playing SQL directly on Python datas)
+ * [blinker](https://pypi.org/project/blinker) 1.7.0 â 1.9.0 (Fast, simple object-to-object and broadcast signaling)
+ * [bokeh](https://pypi.org/project/bokeh) 3.6.1 â 3.6.3 (Interactive plots and applications in the browser from Python)
+ * [clarabel](https://pypi.org/project/clarabel) 0.9.0 â 0.10.0 (Clarabel Conic Interior Point Solver for Rust / Python)
+ * [cryptography](https://pypi.org/project/cryptography) 41.0.5 â 44.0.0 (cryptography is a package which provides cryptographic recipes and primitives to Python developers.)
+ * [cytoolz](https://pypi.org/project/cytoolz) 0.12.3 â 1.0.1 (Cython implementation of Toolz: High performance functional utilities)
+ * [deap](https://pypi.org/project/deap) 1.4.1 â 1.4.2 (Distributed Evolutionary Algorithms in Python)
+ * [dill](https://pypi.org/project/dill) 0.3.7 â 0.3.9 (serialize all of Python)
+ * [docutils](https://pypi.org/project/docutils) 0.20.1 â 0.21.2 (Docutils -- Python Documentation Utilities)
+ * [duckdb](https://pypi.org/project/duckdb) 1.1.3 â 1.2.0 (DuckDB in-process database)
+ * [flask](https://pypi.org/project/flask) 3.0.3 â 3.1.0 (A simple framework for building complex web applications.)
+ * [flit](https://pypi.org/project/flit) 3.9.0 â 3.10.1 (A simple packaging tool for simple packages.)
+ * [flit_core](https://pypi.org/project/flit_core) 3.9.0 â 3.10.1 (Distribution-building parts of Flit. See flit package for more information)
+ * [geopandas](https://pypi.org/project/geopandas) 0.14.4 â 1.0.1 (Geographic pandas extensions)
+ * [griffe](https://pypi.org/project/griffe) 1.5.4 â 1.5.5 (Signatures for entire Python programs)
+ * [huggingface_hub](https://pypi.org/project/huggingface_hub) 0.27.0 â 0.28.1 (Client library to download and publish models, datasets and other repos on the huggingface.co hub)
+ * [hypothesis](https://pypi.org/project/hypothesis) 6.108.5 â 6.122.3 (A library for property-based testing)
+ * [imbalanced_learn](https://pypi.org/project/imbalanced_learn) 0.12.3 â 0.13.0 (Toolbox for imbalanced dataset in machine learning)
+ * [ipycanvas](https://pypi.org/project/ipycanvas) 0.13.2 â 0.13.3 (Interactive widgets library exposing the browser's Canvas API)
+ * [ipympl](https://pypi.org/project/ipympl) 0.9.4 â 0.9.6 (Matplotlib Jupyter Extension)
+ * [ipython](https://pypi.org/project/ipython) 8.26.0 â 8.32.0 (IPython: Productive Interactive Computing)
+ * [janus](https://pypi.org/project/janus) 1.0.0 â 2.0.0 (Mixed sync-async queue to interoperate between asyncio tasks and classic threads)
+ * [jaraco_context](https://pypi.org/project/jaraco_context) 5.3.0 â 6.0.1 (Useful decorators and context managers)
+ * [jaraco_functools](https://pypi.org/project/jaraco_functools) 4.0.1 â 4.1.0 (Functools like those found in stdlib)
+ * [jedi](https://pypi.org/project/jedi) 0.19.1 â 0.19.2 (An autocompletion tool for Python that can be used for text editors.)
+ * [jupyterlab](https://pypi.org/project/jupyterlab) 4.3.4 â 4.3.5 (JupyterLab computational environment)
+ * [keras](https://pypi.org/project/keras) 3.7.0 â 3.8.0 (Multi-backend Keras)
+ * [keyring](https://pypi.org/project/keyring) 25.2.1 â 25.6.0 (Store and access your passwords safely.)
+ * [kiwisolver](https://pypi.org/project/kiwisolver) 1.4.7 â 1.4.8 (A fast implementation of the Cassowary constraint solver)
+ * [langchain](https://pypi.org/project/langchain) 0.3.13 â 0.3.18 (Building applications with LLMs through composability)
+ * [langchain_core](https://pypi.org/project/langchain_core) 0.3.28 â 0.3.34 (Building applications with LLMs through composability)
+ * [langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) 0.3.4 â 0.3.6 (LangChain text splitting utilities)
+ * [langsmith](https://pypi.org/project/langsmith) 0.2.6 â 0.2.11 (Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.)
+ * [llvmlite](https://pypi.org/project/llvmlite) 0.44.0rc2 â 0.44.0 (lightweight wrapper around basic LLVM functionality)
+ * [logfire_api](https://pypi.org/project/logfire_api) 2.11.0 â 3.5.3 (Shim for the Logfire SDK which does nothing unless Logfire is installed)
+ * [markupsafe](https://pypi.org/project/markupsafe) 2.1.1 â 3.0.2 (Safely add untrusted strings to HTML/XML markup.)
+ * [maturin](https://pypi.org/project/maturin) 1.7.0 â 1.8.1 (Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages)
+ * [mlxtend](https://pypi.org/project/mlxtend) 0.22.0 â 0.23.3 (Machine Learning Library Extensions)
+ * [msgpack](https://pypi.org/project/msgpack) 1.0.4 â 1.1.0 (MessagePack serializer)
+ * [narwhals](https://pypi.org/project/narwhals) 1.15.2 â 1.21.1 (Extremely lightweight compatibility layer between dataframe libraries)
+ * [numba](https://pypi.org/project/numba) 0.61.0rc2 â 0.61.0 (compiling Python code using LLVM)
+ * [openai](https://pypi.org/project/openai) 1.58.1 â 1.61.1 (The official Python library for the openai API)
+ * [osqp](https://pypi.org/project/osqp) 0.6.7.post1 â 0.6.7.post3 (OSQP: The Operator Splitting QP Solver)
+ * [panel](https://pypi.org/project/panel) 1.5.4 â 1.6.0 (The powerful data exploration & web app framework for Python.)
+ * [pillow](https://pypi.org/project/pillow) 11.0.0 â 11.1.0 (Python Imaging Library (Fork))
+ * [plotpy](https://pypi.org/project/plotpy) 2.7.0 â 2.7.2 (Curve and image plotting tools for Python/Qt applications)
+ * [polars](https://pypi.org/project/polars) 1.18.0 â 1.22.0 (Blazingly fast DataFrame library)
+ * [pyarrow](https://pypi.org/project/pyarrow) 18.1.0 â 19.0.0 (Python library for Apache Arrow)
+ * [pydantic](https://pypi.org/project/pydantic) 2.10.4 â 2.10.6 (Data validation using Python type hints)
+ * [pydantic_ai](https://pypi.org/project/pydantic_ai) 0.0.15 â 0.0.24 (Agent Framework / shim to use Pydantic with LLMs)
+ * [pydantic_ai_slim](https://pypi.org/project/pydantic_ai_slim) 0.0.15 â 0.0.24 (Agent Framework / shim to use Pydantic with LLMs, slim package)
+ * [pygments](https://pypi.org/project/pygments) 2.18.0 â 2.19.1 (Pygments is a syntax highlighting package written in Python.)
+ * [pyomo](https://pypi.org/project/pyomo) 6.8.0 â 6.8.2 (Pyomo: Python Optimization Modeling Objects)
+ * [pyparsing](https://pypi.org/project/pyparsing) 3.1.2 â 3.2.1 (pyparsing module - Classes and methods to define and execute parsing grammars)
+ * [pypdf](https://pypi.org/project/pypdf) 3.15.2 â 5.1.0 (A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files)
+ * [pyproj](https://pypi.org/project/pyproj) 3.6.1 â 3.7.0 (Python interface to PROJ (cartographic projections and coordinate transformations library))
+ * [pyqt5_sip](https://pypi.org/project/pyqt5_sip) 12.13.0 â 12.16.1 (The sip module support for PyQt5)
+ * [Python](http://www.python.org/) 3.12.8 â 3.12.9 (Python programming language with standard library)
+ * [pythonqwt](https://pypi.org/project/pythonqwt) 0.14.2 â 0.14.4 (Qt plotting widgets for Python)
+ * [qdldl](https://pypi.org/project/qdldl) 0.1.7.post4 â 0.1.7.post5 (QDLDL, a free LDL factorization routine.)
+ * [qrcode](https://pypi.org/project/qrcode) 7.4.2 â 8.0 (QR Code image generator)
+ * [readme_renderer](https://pypi.org/project/readme_renderer) 35.0 â 44.0 (readme_renderer is a library for rendering readme descriptions for Warehouse)
+ * [redis](https://pypi.org/project/redis) 5.0.3 â 5.0.8 (Python client for Redis database and key-value store)
+ * [reportlab](https://pypi.org/project/reportlab) 4.2.2 â 4.2.5 (The Reportlab Toolkit)
+ * [requests_ntlm](https://pypi.org/project/requests_ntlm) 1.1.0 â 1.3.0 (This package allows for HTTP NTLM authentication using the requests library.)
+ * [scikit_learn](https://pypi.org/project/scikit_learn) 1.6.0 â 1.6.1 (A set of python modules for machine learning and data mining)
+ * [scipy](https://pypi.org/project/scipy) 1.14.1 â 1.15.1 (Fundamental algorithms for scientific computing in Python)
+ * [scramp](https://pypi.org/project/scramp) 1.4.1 â 1.4.5 (An implementation of the SCRAM protocol.)
+ * [scs](https://pypi.org/project/scs) 3.2.7 â 3.2.7.post2 (Splitting conic solver)
+ * [shapely](https://pypi.org/project/shapely) 2.0.4 â 2.0.6 (Manipulation and analysis of geometric objects)
+ * [sounddevice](https://pypi.org/project/sounddevice) 0.4.6 â 0.5.1 (Play and Record Sound with Python)
+ * [soupsieve](https://pypi.org/project/soupsieve) 2.5 â 2.6 (A modern CSS selector implementation for Beautiful Soup.)
+ * [sphinx_rtd_theme](https://pypi.org/project/sphinx_rtd_theme) 2.0.0 â 3.0.2 (Read the Docs theme for Sphinx)
+ * [sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) 1.0.8 â 2.0.0 (sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books)
+ * [sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) 1.0.6 â 2.0.0 (sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents)
+ * [sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) 2.0.5 â 2.1.0 (sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files)
+ * [sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) 1.0.7 â 2.0.0 (sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents)
+ * [sphinxcontrib_serializinghtml](https://pypi.org/project/sphinxcontrib_serializinghtml) 1.1.9 â 2.0.0 (sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle))
+ * [sqlite_utils](https://pypi.org/project/sqlite_utils) 3.37 â 3.38 (CLI tool and Python library for manipulating SQLite databases)
+ * [sqlparse](https://pypi.org/project/sqlparse) 0.4.3 â 0.5.3 (A non-validating SQL parser.)
+ * [sympy](https://pypi.org/project/sympy) 1.13.2 â 1.13.3 (Computer algebra system (CAS) in Python)
+ * [tenacity](https://pypi.org/project/tenacity) 8.5.0 â 9.0.0 (Retry code until it succeeds)
+ * [textdistance](https://pypi.org/project/textdistance) 4.6.2 â 4.6.3 (Compute distance between the two texts.)
+ * [tifffile](https://pypi.org/project/tifffile) 2024.7.2 â 2025.1.10 (Read and write TIFF files)
+ * [tinycss2](https://pypi.org/project/tinycss2) 1.3.0 â 1.4.0 (A tiny CSS parser)
+ * [tomli](https://pypi.org/project/tomli) 2.0.1 â 2.2.1 (A lil' TOML parser)
+ * [tomli_w](https://pypi.org/project/tomli_w) 1.0.0 â 1.1.0 (A lil' TOML writer)
+ * [tomlkit](https://pypi.org/project/tomlkit) 0.12.3 â 0.13.2 (Style preserving TOML library)
+ * [toolz](https://pypi.org/project/toolz) 0.12.0 â 1.0.0 (List processing tools and functional utilities)
+ * [tornado](https://pypi.org/project/tornado) 6.4.1 â 6.4.2 (Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.)
+ * [trio](https://pypi.org/project/trio) 0.27.0 â 0.28.0 (A friendly Python library for async concurrency and I/O)
+ * [twine](https://pypi.org/project/twine) 4.0.1 â 6.0.1 (Collection of utilities for publishing packages on PyPI)
+ * [uncertainties](https://pypi.org/project/uncertainties) 3.1.7 â 3.2.2 (calculations with values with uncertainties, error propagation)
+ * [urllib3](https://pypi.org/project/urllib3) 2.0.3 â 2.2.3 (HTTP library with thread-safe connection pooling, file post, and more.)
+ * [uvicorn](https://pypi.org/project/uvicorn) 0.30.3 â 0.34.0 (The lightning-fast ASGI server.)
+ * [watchdog](https://pypi.org/project/watchdog) 4.0.1 â 6.0.0 (Filesystem events monitoring)
+ * [webcolors](https://pypi.org/project/webcolors) 1.12 â 24.11.1 (A library for working with the color formats defined by HTML and CSS.)
+ * [websockets](https://pypi.org/project/websockets) 13.1 â 14.2 (An implementation of the WebSocket Protocol (RFC 6455 & 7692))
+ * [werkzeug](https://pypi.org/project/werkzeug) 3.0.3 â 3.1.3 (The comprehensive WSGI web application library.)
+ * [whatthepatch](https://pypi.org/project/whatthepatch) 1.0.2 â 1.0.7 (A patch parsing and application library.)
+ * [wheel](https://pypi.org/project/wheel) 0.44.0 â 0.45.1 (A built-package format for Python)
+ * [winpython](https://pypi.org/project/winpython) 11.2.20241228 â 13.1.20250222 (WinPython distribution tools, including WPPM)
+ * [xarray](https://pypi.org/project/xarray) 2024.11.0 â 2025.1.1 (N-D labeled arrays and datasets in Python)
+ * [zipp](https://pypi.org/project/zipp) 3.17.0 â 3.21.0 (Backport of pathlib-compatible object wrapper for zip files)
+
+Removed packages:
+
+ * [about_time](https://pypi.org/project/about_time) 4.2.1 (Easily measure timing and throughput of code blocks, with beautiful human friendly representations.)
+ * [adodbapi](https://pypi.org/project/adodbapi) 2.6.1.3 (A pure Python package implementing PEP 249 DB-API using Microsoft ADO.)
+ * [affine](https://pypi.org/project/affine) 2.3.1 (Matrices describing affine transformation of the plane.)
+ * [alive_progress](https://pypi.org/project/alive_progress) 3.1.5 (A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!)
+ * [autograd](https://pypi.org/project/autograd) 1.6.2 (Efficiently computes derivatives of numpy code.)
+ * [cachelib](https://pypi.org/project/cachelib) 0.13.0 (A collection of cache libraries in the same API interface.)
+ * [cartopy](https://pypi.org/project/cartopy) 0.23.0 (A Python library for cartographic visualizations with Matplotlib)
+ * [cftime](https://pypi.org/project/cftime) 1.6.3 (Time-handling functionality from netcdf4-python)
+ * [click_plugins](https://pypi.org/project/click_plugins) 1.1.1 (An extension module for click to enable registering CLI commands via setuptools entry-points.)
+ * [cligj](https://pypi.org/project/cligj) 0.7.2 (Click params for commmand line interfaces to GeoJSON)
+ * [clr_loader](https://pypi.org/project/clr_loader) 0.2.6 (Generic pure Python loader for .NET runtimes)
+ * [clrmagic](https://pypi.org/project/clrmagic) 0.0.1a2 (IPython cell magic to use .NET languages)
+ * [cma](https://pypi.org/project/cma) 3.2.2 (CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python)
+ * [db_py](https://pypi.org/project/db_py) 0.5.4b1 (a db package that doesn't suck)
+ * [deprecated](https://pypi.org/project/deprecated) 1.2.13 (Python @deprecated decorator to deprecate old python classes, functions or methods.)
+ * [docopt](https://pypi.org/project/docopt) 0.6.2 (Pythonic argument parser, that will make you smile)
+ * [ecos](https://pypi.org/project/ecos) 2.0.13 (This is the Python package for ECOS: Embedded Cone Solver. See Github page for more information.)
+ * [filterpy](https://pypi.org/project/filterpy) 1.4.5 (Kalman filtering and optimal estimation library)
+ * [fiona](https://pypi.org/project/fiona) 1.10.1 (Fiona reads and writes spatial data files)
+ * [flask_mail](https://pypi.org/project/flask_mail) 0.9.1 (Flask extension for sending email)
+ * [flask_session](https://pypi.org/project/flask_session) 0.5.0 (Server-side session support for Flask)
+ * [flask_sqlalchemy](https://pypi.org/project/flask_sqlalchemy) 3.0.5 (Add SQLAlchemy support to your Flask application.)
+ * [formlayout](https://pypi.org/project/formlayout) 1.2.1a1 (The most easy way to create Qt form dialogs and widgets with Python)
+ * [future](https://pypi.org/project/future) 0.18.2 (Clean single-source support for Python 3 and 2)
+ * [grapheme](https://pypi.org/project/grapheme) 0.6.0 (Unicode grapheme helpers)
+ * [netcdf4](https://pypi.org/project/netcdf4) 1.7.1.post2 (Provides an object-oriented python interface to the netCDF version 4 library)
+ * [ntlm_auth](https://pypi.org/project/ntlm_auth) 1.5.0 (Creates NTLM authentication structures)
+ * [numexpr](https://pypi.org/project/numexpr) 2.10.1 (Fast numerical expression evaluator for NumPy)
+ * [pdfrw](https://pypi.org/project/pdfrw) 0.4.post2 (PDF file reader/writer library)
+ * [ppci](https://pypi.org/project/ppci) 0.5.9 (A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python)
+ * [pulp](https://pypi.org/project/pulp) 2.6.0 (PuLP is an LP modeler written in python)
+ * [pyaudio](https://pypi.org/project/pyaudio) 0.2.14 (Cross-platform audio I/O with PortAudio)
+ * [pybars3](https://pypi.org/project/pybars3) 0.9.7 (Handlebars.js templating for Python 3 and 2)
+ * [pycosat](https://pypi.org/project/pycosat) 0.6.6 (bindings to picosat (a SAT solver))
+ * [pymeta3](https://pypi.org/project/pymeta3) 0.5.1 (Pattern-matching language based on OMeta for Python 3 and 2)
+ * [pymoo](https://pypi.org/project/pymoo) 0.6.1.3 (Multi-Objective Optimization in Python)
+ * [pypng](https://pypi.org/project/pypng) 0.20220715.0 (Pure Python library for saving and loading PNG images)
+ * [pyshp](https://pypi.org/project/pyshp) 2.3.1 (Pure Python read/write support for ESRI Shapefile format)
+ * [pysimplegui](https://pypi.org/project/pysimplegui) 4.60.4 (Python GUIs for Humans)
+ * [pythonnet](https://pypi.org/project/pythonnet) 3.0.3 (.NET and Mono integration for Python)
+ * [pywinusb](https://pypi.org/project/pywinusb) 0.4.2 (A package that simplifies USB/HID communications on windows)
+ * [rasterio](https://pypi.org/project/rasterio) 1.3.10 (Fast and direct raster I/O for use with Numpy and SciPy)
+ * [simplegeneric](https://pypi.org/project/simplegeneric) 0.8.1 (Simple generic functions (similar to Python's own len(), pickle.dump(), etc.))
+ * [snuggs](https://pypi.org/project/snuggs) 1.4.7 (Snuggs are s-expressions for Numpy)
+ * [sspyrs](https://pypi.org/project/sspyrs) 0.3 (Lightweight interface for SSRS reports to python)
+ * [wrapt](https://pypi.org/project/wrapt) 1.16.0 (Module for decorators, wrappers and monkey patching.)
+ * [xlwings](https://pypi.org/project/xlwings) 0.24.7 (Make Excel fly: Interact with Excel from Python and vice versa.)
+ * [xmltodict](https://pypi.org/project/xmltodict) 0.13.0 (Makes working with XML feel like you are working with JSON)
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.13.1.0.md b/changelogs/WinPythonslim-64bit-3.13.1.0.md
new file mode 100644
index 00000000..dfaa9887
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.13.1.0.md
@@ -0,0 +1,504 @@
+## WinPython 3.13.1.0slim
+
+The following packages are included in WinPython-64bit v3.13.1.0slim .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Pandoc](https://pandoc.org/) | 3.1.9 | a universal document converter
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.1 | Python programming language with standard library
+[absl_py](https://pypi.org/project/absl_py) | 2.0.0 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc_driver_manager](https://pypi.org/project/adbc_driver_manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[adodbapi](https://pypi.org/project/adodbapi) | 2.6.1.3 | A pure Python package implementing PEP 249 DB-API using Microsoft ADO.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.4.4 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.11 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.1 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.13.1 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[aniso8601](https://pypi.org/project/aniso8601) | 9.0.1 | A library for parsing ISO 8601 strings.
+[annotated_types](https://pypi.org/project/annotated_types) | 0.6.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.42.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.7.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.12 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argon2_cffi](https://pypi.org/project/argon2_cffi) | 23.1.0 | Argon2 for Python
+[argon2_cffi_bindings](https://pypi.org/project/argon2_cffi_bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array_api_compat](https://pypi.org/project/array_api_compat) | 1.8 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi_csrf](https://pypi.org/project/asgi_csrf) | 0.9 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 0.9.31 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.1.0 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy_iers_data](https://pypi.org/project/astropy_iers_data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[async_lru](https://pypi.org/project/async_lru) | 2.0.4 | Simple LRU cache for asyncio
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 23.2.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure_core](https://pypi.org/project/azure_core) | 1.30.2 | Microsoft Azure Core Library for Python
+[azure_cosmos](https://pypi.org/project/azure_cosmos) | 4.7.0 | Microsoft Azure Cosmos Client Library for Python
+[azure_identity](https://pypi.org/project/azure_identity) | 1.16.1 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.16.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 0.8.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.0.1 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.12.2 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 24.10.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.1.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.7.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.6.1 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.0 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachelib](https://pypi.org/project/cachelib) | 0.13.0 | A collection of cache libraries in the same API interface.
+[cachetools](https://pypi.org/project/cachetools) | 5.4.0 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2024.6.2 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset_normalizer](https://pypi.org/project/charset_normalizer) | 3.4.0 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.9.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.7 | Composable command line interface toolkit
+[click_default_group](https://pypi.org/project/click_default_group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.0.0 | Pickler class to extend the standard pickle.Pickler functionality
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.8.2 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.1 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g
+[cryptography](https://pypi.org/project/cryptography) | 41.0.5 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.0.11 | The Cython compiler for writing C extensions in the Python language.
+[dask](https://pypi.org/project/dask) | 2024.12.1 | Parallel PyData with Task Scheduling
+[dask_expr](https://pypi.org/project/dask_expr) | 1.1.21 | High Level Expressions for Dask
+[datasette](https://pypi.org/project/datasette) | 0.64.8 | An open source multi-tool for exploring and publishing data
+[datasette_graphql](https://pypi.org/project/datasette_graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.16.3 | Data visualization toolchain based on aggregating into a grid
+[db_py](https://pypi.org/project/db_py) | 0.5.4b1 | a db package that doesn't suck
+[debugpy](https://pypi.org/project/debugpy) | 1.8.0 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[diff_match_patch](https://pypi.org/project/diff_match_patch) | 20230430 | Diff Match and Patch
+[dill](https://pypi.org/project/dill) | 0.3.7 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2024.12.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.8.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.0.7 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.6.1 | DNS toolkit
+[docopt](https://pypi.org/project/docopt) | 0.6.2 | Pythonic argument parser, that will make you smile
+[docstring_to_markdown](https://pypi.org/project/docstring_to_markdown) | 0.13 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.20.1 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.1.3 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et_xmlfile](https://pypi.org/project/et_xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval_type_backport](https://pypi.org/project/eval_type_backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.0.1 | Get the currently executing AST node of a frame, and other information
+[fast_histogram](https://pypi.org/project/fast_histogram) | 0.14 | Fast simple 1D and 2D histograms
+[fastapi](https://pypi.org/project/fastapi) | 0.115.6 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.18.0 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.14.0 | A platform independent file lock.
+[filterpy](https://pypi.org/project/filterpy) | 1.4.5 | Kalman filtering and optimal estimation library
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.0.3 | A simple framework for building complex web applications.
+[flask_mail](https://pypi.org/project/flask_mail) | 0.9.1 | Flask extension for sending email
+[flask_session](https://pypi.org/project/flask_session) | 0.5.0 | Server-side session support for Flask
+[flask_sqlalchemy](https://pypi.org/project/flask_sqlalchemy) | 3.0.5 | Add SQLAlchemy support to your Flask application.
+[flit](https://pypi.org/project/flit) | 3.9.0 | A simple packaging tool for simple packages.
+[flit_core](https://pypi.org/project/flit_core) | 3.9.0 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.18.0 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.55.3 | Tools to manipulate font files
+[formlayout](https://pypi.org/project/formlayout) | 1.2.1a1 | The most easy way to create Qt form dialogs and widgets with Python
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2024.6.1 | File-system specification
+[future](https://pypi.org/project/future) | 0.18.2 | Clean single-source support for Python 3 and 2
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.10 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.32 | GitPython is a Python library used to interact with Git repositories
+[google_auth](https://pypi.org/project/google_auth) | 2.37.0 | Google Authentication Library
+[graphene](https://pypi.org/project/graphene) | 3.3 | GraphQL Framework for Python
+[graphql_core](https://pypi.org/project/graphql_core) | 3.2.3 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql_relay](https://pypi.org/project/graphql_relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.5.4 | Signatures for entire Python programs
+[groq](https://pypi.org/project/groq) | 0.13.1 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.7.1 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.1.0 | HTTP/2 State-Machine based protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.20.0 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.0.0 | Pure-Python HPACK header compression
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.5 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.27.2 | The next generation HTTP client.
+[huggingface_hub](https://pypi.org/project/huggingface_hub) | 0.27.0 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.11.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.16.0 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.0.1 | HTTP/2 framing layer for Python
+[hypothesis](https://pypi.org/project/hypothesis) | 6.108.5 | A library for property-based testing
+[idna](https://pypi.org/project/idna) | 3.7 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.33.1 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced_learn](https://pypi.org/project/imbalanced_learn) | 0.12.3 | Toolbox for imbalanced dataset in machine learning.
+[importlib_metadata](https://pypi.org/project/importlib_metadata) | 7.1.0 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.0.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.0.2 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.2 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.4 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.26.0 | IPython: Productive Interactive Computing
+[ipython_genutils](https://pypi.org/project/ipython_genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython_sql](https://pypi.org/project/ipython_sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.5 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 1.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco_classes](https://pypi.org/project/jaraco_classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco_context](https://pypi.org/project/jaraco_context) | 5.3.0 | Useful decorators and context managers
+[jaraco_functools](https://pypi.org/project/jaraco_functools) | 4.0.1 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.1 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.2 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.8.2 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.9.14 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpath_python](https://pypi.org/project/jsonpath_python) | 1.0.6 | A more powerful JSONPath implementation in modern python
+[jsonpointer](https://pypi.org/project/jsonpointer) | 2.4 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.19.2 | An implementation of JSON Schema validation for Python
+[jsonschema_specifications](https://pypi.org/project/jsonschema_specifications) | 2023.12.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter_bokeh](https://pypi.org/project/jupyter_bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter_client](https://pypi.org/project/jupyter_client) | 8.6.2 | Jupyter protocol implementation and client libraries
+[jupyter_console](https://pypi.org/project/jupyter_console) | 6.6.3 | Jupyter terminal console
+[jupyter_core](https://pypi.org/project/jupyter_core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter_events](https://pypi.org/project/jupyter_events) | 0.10.0 | Jupyter Event System library
+[jupyter_leaflet](https://pypi.org/project/jupyter_leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter_lsp](https://pypi.org/project/jupyter_lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter_server](https://pypi.org/project/jupyter_server) | 2.14.2 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter_server_terminals](https://pypi.org/project/jupyter_server_terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.3.4 | JupyterLab computational environment
+[jupyterlab_pygments](https://pypi.org/project/jupyterlab_pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab_server](https://pypi.org/project/jupyterlab_server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab_widgets](https://pypi.org/project/jupyterlab_widgets) | 3.0.13 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.7.0 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.2.1 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.7 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.13 | Building applications with LLMs through composability
+[langchain_core](https://pypi.org/project/langchain_core) | 0.3.28 | Building applications with LLMs through composability
+[langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) | 0.3.4 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.2.6 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy_loader](https://pypi.org/project/lazy_loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify_it_py](https://pypi.org/project/linkify_it_py) | 2.0.2 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0rc2 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.1 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire_api](https://pypi.org/project/logfire_api) | 2.11.0 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.5 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.5.1 | Python implementation of John Gruber's Markdown.
+[markdown_it_py](https://pypi.org/project/markdown_it_py) | 2.2.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 2.1.1 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.0 | Python plotting package
+[matplotlib_inline](https://pypi.org/project/matplotlib_inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.7.0 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mdit_py_plugins](https://pypi.org/project/mdit_py_plugins) | 0.3.5 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.1 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.2.5 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 2.0.5 | A sane Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml_dtypes](https://pypi.org/project/ml_dtypes) | 0.5.0 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.22.0 | Machine Learning Library Extensions
+[more_itertools](https://pypi.org/project/more_itertools) | 10.2.0 | More routines for operating on iterables, beyond itertools
+[mpl_scatter_density](https://pypi.org/project/mpl_scatter_density) | 0.7 | Matplotlib helpers to make density scatter plots
+[mpld3](https://pypi.org/project/mpld3) | 0.5.8 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal_extensions](https://pypi.org/project/msal_extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.0.4 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.1.0 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mutagen](https://pypi.org/project/mutagen) | 1.47.0 | read and write audio tags for many formats
+[mypy](https://pypi.org/project/mypy) | 1.14.0 | Optional static typing for Python
+[mypy_extensions](https://pypi.org/project/mypy_extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql_connector_python](https://pypi.org/project/mysql_connector_python) | 8.0.21 | MySQL driver written in Python
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.15.2 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.0 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.1 | Converting Jupyter Notebooks (.ipynb files) to other formats
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest_asyncio](https://pypi.org/project/nest_asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.3.1 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook_shim](https://pypi.org/project/notebook_shim) | 0.2.4 | A shim layer for notebook traits and config
+[ntlm_auth](https://pypi.org/project/ntlm_auth) | 1.5.0 | Creates NTLM authentication structures
+[numba](https://pypi.org/project/numba) | 0.61.0rc2 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.1.3 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.6.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.58.1 | The official Python library for the openai API
+[opencv_python](https://pypi.org/project/opencv_python) | 4.10.0.84 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.2 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[optree](https://pypi.org/project/optree) | 0.13.1 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 3.6.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.12 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.0 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.5.4 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.1.1 | Make your Python code clearer and more reliable by declaring Parameters.
+[paramiko](https://pypi.org/project/paramiko) | 2.8.0 | SSH2 protocol library
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.0 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.11.0 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 0.5.6 | A Python package for describing statistical models and for building design matrices.
+[pdfrw](https://pypi.org/project/pdfrw) | 0.4.post2 | PDF file reader/writer library
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.8.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.23.0 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.0.0 | Python Imaging Library (Fork)
+[pint](https://pypi.org/project/pint) | 0.23 | Physical quantities module
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pkginfo](https://pypi.org/project/pkginfo) | 1.11.2 | Query metadata from sdists / bdists / installed packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.2.2 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 5.24.1 | An open-source, interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.0 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.18.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[ppci](https://pypi.org/project/ppci) | 0.5.9 | A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python
+[prettytable](https://pypi.org/project/prettytable) | 3.3.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus_client](https://pypi.org/project/prometheus_client) | 0.18.0 | Python client for the Prometheus monitoring system.
+[prompt_toolkit](https://pypi.org/project/prompt_toolkit) | 3.0.48 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.2.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 5.27.3 |
+[psutil](https://pypi.org/project/psutil) | 5.9.8 | Cross-platform lib for process and system monitoring in Python.
+[psygnal](https://pypi.org/project/psygnal) | 0.11.1 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure_eval](https://pypi.org/project/pure_eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 18.1.0 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.4.8 | ASN.1 types and codecs
+[pyasn1_modules](https://pypi.org/project/pyasn1_modules) | 0.2.8 | A collection of ASN.1-based protocols modules.
+[pybars3](https://pypi.org/project/pybars3) | 0.9.7 | Handlebars.js templating for Python 3 and 2
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pycryptodomex](https://pypi.org/project/pycryptodomex) | 3.20.0 | Cryptographic library for Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.10.4 | Data validation using Python type hints
+[pydantic_ai](https://pypi.org/project/pydantic_ai) | 0.0.15 | Agent Framework / shim to use Pydantic with LLMs
+[pydantic_ai_slim](https://pypi.org/project/pydantic_ai_slim) | 0.0.15 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic_core](https://pypi.org/project/pydantic_core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.4 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygments](https://pypi.org/project/pygments) | 2.18.0 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.8.0 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.1.0 | python code static checker
+[pylint_venv](https://pypi.org/project/pylint_venv) | 3.0.3 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls_spyder](https://pypi.org/project/pyls_spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymeta3](https://pypi.org/project/pymeta3) | 0.5.1 | Pattern-matching language based on OMeta for Python 3 and 2
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.0.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.12 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyomo](https://pypi.org/project/pyomo) | 6.8.0 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.5 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.1.2 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 3.15.2 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pypng](https://pypi.org/project/pypng) | 0.20220715.0 | Pure Python library for saving and loading PNG images
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.10 | Python bindings for the Qt cross platform application toolkit
+[pyqt5_qt5](https://pypi.org/project/pyqt5_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5_sip](https://pypi.org/project/pyqt5_sip) | 12.16.1 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.6 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine_qt5](https://pypi.org/project/pyqtwebengine_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysimplegui](https://pypi.org/project/pysimplegui) | 4.60.4 | Python GUIs for Humans
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pytest](https://pypi.org/project/pytest) | 8.2.2 | pytest: simple powerful testing with Python
+[python_barcode](https://pypi.org/project/python_barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python_dateutil](https://pypi.org/project/python_dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python_dotenv](https://pypi.org/project/python_dotenv) | 1.0.1 | Read key-value pairs from a .env file and set them as environment variables
+[python_json_logger](https://pypi.org/project/python_json_logger) | 2.0.7 | A python library adding a json log formatter
+[python_lsp_black](https://pypi.org/project/python_lsp_black) | 2.0.0 | Black plugin for the Python LSP Server
+[python_lsp_jsonrpc](https://pypi.org/project/python_lsp_jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python_lsp_server](https://pypi.org/project/python_lsp_server) | 1.12.0 | Python Language Server for the Language Server Protocol
+[python_multipart](https://pypi.org/project/python_multipart) | 0.0.9 | A streaming multipart parser for Python
+[python_slugify](https://pypi.org/project/python_slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.2 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2024.1 | World timezone definitions, modern and historical
+[pyviz_comms](https://pypi.org/project/pyviz_comms) | 3.0.3 | A JupyterLab extension for rendering HoloViz content.
+[pywin32](https://pypi.org/project/pywin32) | 308 | Python for Window Extensions
+[pywin32_ctypes](https://pypi.org/project/pywin32_ctypes) | 0.2.2 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.14 | Pseudo terminal support for Windows from Python.
+[pywinusb](https://pypi.org/project/pywinusb) | 0.4.2 | A package that simplifies USB/HID communications on windows
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.2.0 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qrcode](https://pypi.org/project/qrcode) | 7.4.2 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.2 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.3.1 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.5.2 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.1 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.19.4 | A Python ASGI web microframework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.9.6 | rapid fuzzy string matching
+[readme_renderer](https://pypi.org/project/readme_renderer) | 35.0 | readme_renderer is a library for rendering "readme" descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.0.3 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.35.1 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.2.2 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests_ntlm](https://pypi.org/project/requests_ntlm) | 1.1.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests_toolbelt](https://pypi.org/project/requests_toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339_validator](https://pypi.org/project/rfc3339_validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986_validator](https://pypi.org/project/rfc3986_validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 13.9.4 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.12.0 | a python refactoring library...
+[rpds_py](https://pypi.org/project/rpds_py) | 0.22.3 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.1.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.1.1 | Reactive Extensions (Rx) for Python
+[scikit_image](https://pypi.org/project/scikit_image) | 0.25.0 | Image processing in Python
+[scikit_learn](https://pypi.org/project/scikit_learn) | 1.6.0 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.14.1 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.1 | An implementation of the SCRAM protocol.
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.2 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[simplegeneric](https://pypi.org/project/simplegeneric) | 0.8.1 | Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.0.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[smmap](https://pypi.org/project/smmap) | 5.0.0 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.0 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.4.6 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.5 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 7.3.7 | Python documentation generator
+[sphinx_rtd_theme](https://pypi.org/project/sphinx_rtd_theme) | 2.0.0 | Read the Docs theme for Sphinx
+[sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) | 1.0.8 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) | 1.0.6 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) | 2.0.5 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib_jquery](https://pypi.org/project/sphinxcontrib_jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib_jsmath](https://pypi.org/project/sphinxcontrib_jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) | 1.0.7 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib_serializinghtml](https://pypi.org/project/sphinxcontrib_serializinghtml) | 1.1.9 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 5.5.6 | The Scientific Python Development Environment
+[spyder_kernels](https://pypi.org/project/spyder_kernels) | 2.5.2 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.35 | Database Abstraction Library
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite_fts4](https://pypi.org/project/sqlite_fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite_utils](https://pypi.org/project/sqlite_utils) | 3.37 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.4.3 | A non-validating SQL parser.
+[sspyrs](https://pypi.org/project/sspyrs) | 0.3 | Lightweight interface for SSRS reports to python
+[stack_data](https://pypi.org/project/stack_data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.41.3 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.41.1 | A faster way to build and share data apps
+[streamz](https://pypi.org/project/streamz) | 0.6.3 | Streams
+[sympy](https://pypi.org/project/sympy) | 1.13.2 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.0.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 8.5.0 | Retry code until it succeeds
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text_unidecode](https://pypi.org/project/text_unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.2 | Compute distance between the two texts.
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.5.0 | threadpoolctl
+[three_merge](https://pypi.org/project/three_merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2024.7.2 | Read and write TIFF files
+[tinycss2](https://pypi.org/project/tinycss2) | 1.3.0 | A tiny CSS parser
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.0.1 | A lil' TOML parser
+[tomli_w](https://pypi.org/project/tomli_w) | 1.0.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.12.3 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 0.12.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.4.1 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.66.4 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.27.0 | A friendly Python library for async concurrency and I/O
+[trove_classifiers](https://pypi.org/project/trove_classifiers) | 2024.10.21.16 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 4.0.1 | Collection of utilities for publishing packages on PyPI
+[types_python_dateutil](https://pypi.org/project/types_python_dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[typing_extensions](https://pypi.org/project/typing_extensions) | 4.12.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing_inspect](https://pypi.org/project/typing_inspect) | 0.9.0 | Runtime inspection utilities for typing module.
+[tzdata](https://pypi.org/project/tzdata) | 2024.1 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.2 | tzinfo object for the local timezone
+[uc_micro_py](https://pypi.org/project/uc_micro_py) | 1.0.1 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap_learn](https://pypi.org/project/umap_learn) | 0.5.6 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.1.7 | Transparent calculations with uncertainties on the quantities involved (aka error propagation); fast calculation of derivatives
+[uri_template](https://pypi.org/project/uri_template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.0.3 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.30.3 | The lightning-fast ASGI server.
+[vega_datasets](https://pypi.org/project/vega_datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 4.0.1 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 1.12 | A library for working with color names and color values formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket_client](https://pypi.org/project/websocket_client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 13.1 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.0.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.2 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.44.0 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.13 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 11.2.20241228 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2024.11.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.1.9 | A Python module for creating Excel XLSX files.
+[xmltodict](https://pypi.org/project/xmltodict) | 0.13.0 | Makes working with XML feel like you are working with JSON
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt_dlp](https://pypi.org/project/yt_dlp) | 2023.7.6 | A youtube-dl fork with additional features and patches
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.17.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.13.1.0_History.md b/changelogs/WinPythonslim-64bit-3.13.1.0_History.md
new file mode 100644
index 00000000..f8f8e86d
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.13.1.0_History.md
@@ -0,0 +1,8 @@
+ï»ż## History of changes for WinPython-64bit 3.13.1.0slim
+
+The following changes were made to WinPython-64bit distribution since version 3.13.1.0slim.
+
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.13.2.0.md b/changelogs/WinPythonslim-64bit-3.13.2.0.md
new file mode 100644
index 00000000..c0701b8a
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.13.2.0.md
@@ -0,0 +1,511 @@
+## WinPython 3.13.2.0slim
+
+The following packages are included in WinPython-64bit v3.13.2.0slim .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.2 | Python programming language with standard library
+[absl_py](https://pypi.org/project/absl_py) | 2.0.0 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc_driver_manager](https://pypi.org/project/adbc_driver_manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.4.4 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.11 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.1 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.13.1 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[aniso8601](https://pypi.org/project/aniso8601) | 9.0.1 | A library for parsing ISO 8601 strings.
+[annotated_types](https://pypi.org/project/annotated_types) | 0.6.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.42.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.7.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.12 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argon2_cffi](https://pypi.org/project/argon2_cffi) | 23.1.0 | Argon2 for Python
+[argon2_cffi_bindings](https://pypi.org/project/argon2_cffi_bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array_api_compat](https://pypi.org/project/array_api_compat) | 1.10.0 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi_csrf](https://pypi.org/project/asgi_csrf) | 0.9 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 0.9.31 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.1.0 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy_iers_data](https://pypi.org/project/astropy_iers_data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[async_lru](https://pypi.org/project/async_lru) | 2.0.4 | Simple LRU cache for asyncio
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 23.2.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure_core](https://pypi.org/project/azure_core) | 1.30.2 | Microsoft Azure Core Library for Python
+[azure_cosmos](https://pypi.org/project/azure_cosmos) | 4.7.0 | Microsoft Azure Cosmos Client Library for Python
+[azure_identity](https://pypi.org/project/azure_identity) | 1.16.1 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.16.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 1.0.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.0.1 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.12.2 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 24.10.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.1.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.9.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.6.3 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.0 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachetools](https://pypi.org/project/cachetools) | 5.4.0 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2024.6.2 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset_normalizer](https://pypi.org/project/charset_normalizer) | 3.4.0 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.10.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.7 | Composable command line interface toolkit
+[click_default_group](https://pypi.org/project/click_default_group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.0.0 | Pickler class to extend the standard pickle.Pickler functionality
+[cohere](https://pypi.org/project/cohere) | 5.13.12 |
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.8.2 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.1 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g
+[cryptography](https://pypi.org/project/cryptography) | 44.0.0 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.0 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.0.11 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 1.0.1 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2024.12.1 | Parallel PyData with Task Scheduling
+[dask_expr](https://pypi.org/project/dask_expr) | 1.1.21 | High Level Expressions for Dask
+[datasette](https://pypi.org/project/datasette) | 0.64.8 | An open source multi-tool for exploring and publishing data
+[datasette_graphql](https://pypi.org/project/datasette_graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.16.3 | Data visualization toolchain based on aggregating into a grid
+[deap](https://pypi.org/project/deap) | 1.4.2 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.0 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[diff_match_patch](https://pypi.org/project/diff_match_patch) | 20230430 | Diff Match and Patch
+[dill](https://pypi.org/project/dill) | 0.3.9 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2024.12.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.8.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.0.7 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.6.1 | DNS toolkit
+[docstring_to_markdown](https://pypi.org/project/docstring_to_markdown) | 0.13 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.21.2 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.2.0 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et_xmlfile](https://pypi.org/project/et_xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval_type_backport](https://pypi.org/project/eval_type_backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.0.1 | Get the currently executing AST node of a frame, and other information
+[faker](https://pypi.org/project/faker) | 33.3.1 | Faker is a Python package that generates fake data for you.
+[fast_histogram](https://pypi.org/project/fast_histogram) | 0.14 | Fast simple 1D and 2D histograms
+[fastapi](https://pypi.org/project/fastapi) | 0.115.6 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastavro](https://pypi.org/project/fastavro) | 1.10.0 | Fast read/write of AVRO files
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.18.0 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.14.0 | A platform independent file lock.
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.1.0 | A simple framework for building complex web applications.
+[flit](https://pypi.org/project/flit) | 3.10.1 | A simple packaging tool for simple packages.
+[flit_core](https://pypi.org/project/flit_core) | 3.10.1 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.18.0 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.55.3 | Tools to manipulate font files
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2024.6.1 | File-system specification
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 1.0.1 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.10 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.32 | GitPython is a Python library used to interact with Git repositories
+[google_auth](https://pypi.org/project/google_auth) | 2.37.0 | Google Authentication Library
+[graphene](https://pypi.org/project/graphene) | 3.3 | GraphQL Framework for Python
+[graphql_core](https://pypi.org/project/graphql_core) | 3.2.3 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql_relay](https://pypi.org/project/graphql_relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.5.5 | Signatures for entire Python programs
+[groq](https://pypi.org/project/groq) | 0.13.1 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.7.1 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.1.0 | HTTP/2 State-Machine based protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.20.0 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.0.0 | Pure-Python HPACK header compression
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.5 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.27.2 | The next generation HTTP client.
+[httpx_sse](https://pypi.org/project/httpx_sse) | 0.4.0 | Consume Server-Sent Event (SSE) messages with HTTPX.
+[huggingface_hub](https://pypi.org/project/huggingface_hub) | 0.28.1 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.11.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.16.0 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.0.1 | HTTP/2 framing layer for Python
+[hypothesis](https://pypi.org/project/hypothesis) | 6.122.3 | A library for property-based testing
+[idna](https://pypi.org/project/idna) | 3.7 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.33.1 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced_learn](https://pypi.org/project/imbalanced_learn) | 0.13.0 | Toolbox for imbalanced dataset in machine learning
+[importlib_metadata](https://pypi.org/project/importlib_metadata) | 7.1.0 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.0.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.0.2 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.3 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.6 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.32.0 | IPython: Productive Interactive Computing
+[ipython_genutils](https://pypi.org/project/ipython_genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython_sql](https://pypi.org/project/ipython_sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.5 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 2.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco_classes](https://pypi.org/project/jaraco_classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco_context](https://pypi.org/project/jaraco_context) | 6.0.1 | Useful decorators and context managers
+[jaraco_functools](https://pypi.org/project/jaraco_functools) | 4.1.0 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.2 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.2 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.8.2 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.9.14 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpath_python](https://pypi.org/project/jsonpath_python) | 1.0.6 | A more powerful JSONPath implementation in modern python
+[jsonpointer](https://pypi.org/project/jsonpointer) | 2.4 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.19.2 | An implementation of JSON Schema validation for Python
+[jsonschema_specifications](https://pypi.org/project/jsonschema_specifications) | 2023.12.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter_bokeh](https://pypi.org/project/jupyter_bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter_client](https://pypi.org/project/jupyter_client) | 8.6.2 | Jupyter protocol implementation and client libraries
+[jupyter_console](https://pypi.org/project/jupyter_console) | 6.6.3 | Jupyter terminal console
+[jupyter_core](https://pypi.org/project/jupyter_core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter_events](https://pypi.org/project/jupyter_events) | 0.10.0 | Jupyter Event System library
+[jupyter_leaflet](https://pypi.org/project/jupyter_leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter_lsp](https://pypi.org/project/jupyter_lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter_server](https://pypi.org/project/jupyter_server) | 2.14.2 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter_server_terminals](https://pypi.org/project/jupyter_server_terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.3.5 | JupyterLab computational environment
+[jupyterlab_pygments](https://pypi.org/project/jupyterlab_pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab_server](https://pypi.org/project/jupyterlab_server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab_widgets](https://pypi.org/project/jupyterlab_widgets) | 3.0.13 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.8.0 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.6.0 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.8 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.18 | Building applications with LLMs through composability
+[langchain_core](https://pypi.org/project/langchain_core) | 0.3.34 | Building applications with LLMs through composability
+[langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) | 0.3.6 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.2.11 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy_loader](https://pypi.org/project/lazy_loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify_it_py](https://pypi.org/project/linkify_it_py) | 2.0.2 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.1 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire_api](https://pypi.org/project/logfire_api) | 3.5.3 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.5 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.5.1 | Python implementation of John Gruber's Markdown.
+[markdown_it_py](https://pypi.org/project/markdown_it_py) | 2.2.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 3.0.2 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.0 | Python plotting package
+[matplotlib_inline](https://pypi.org/project/matplotlib_inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.8.1 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mdit_py_plugins](https://pypi.org/project/mdit_py_plugins) | 0.3.5 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.1 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.2.5 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 2.0.5 | A sane Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml_dtypes](https://pypi.org/project/ml_dtypes) | 0.5.0 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.23.3 | Machine Learning Library Extensions
+[more_itertools](https://pypi.org/project/more_itertools) | 10.2.0 | More routines for operating on iterables, beyond itertools
+[mpl_scatter_density](https://pypi.org/project/mpl_scatter_density) | 0.7 | Matplotlib helpers to make density scatter plots
+[mpld3](https://pypi.org/project/mpld3) | 0.5.8 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal_extensions](https://pypi.org/project/msal_extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.1.0 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.1.0 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mutagen](https://pypi.org/project/mutagen) | 1.47.0 | read and write audio tags for many formats
+[mypy](https://pypi.org/project/mypy) | 1.14.0 | Optional static typing for Python
+[mypy_extensions](https://pypi.org/project/mypy_extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql_connector_python](https://pypi.org/project/mysql_connector_python) | 8.0.21 | MySQL driver written in Python
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.21.1 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.0 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.1 | Converting Jupyter Notebooks (.ipynb files) to other formats
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest_asyncio](https://pypi.org/project/nest_asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nh3](https://pypi.org/project/nh3) | 0.2.18 | Python bindings to the ammonia HTML sanitization library.
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.3.1 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook_shim](https://pypi.org/project/notebook_shim) | 0.2.4 | A shim layer for notebook traits and config
+[numba](https://pypi.org/project/numba) | 0.61.0 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.1.3 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.6.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.61.1 | The official Python library for the openai API
+[opencv_python](https://pypi.org/project/opencv_python) | 4.10.0.84 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.2 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[optree](https://pypi.org/project/optree) | 0.13.1 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 3.6.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.12 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post3 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.0 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.6.0 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.1.1 | Make your Python code clearer and more reliable by declaring Parameters.
+[paramiko](https://pypi.org/project/paramiko) | 2.8.0 | SSH2 protocol library
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.0 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.11.0 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 0.5.6 | A Python package for describing statistical models and for building design matrices.
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.8.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.23.0 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.1.0 | Python Imaging Library (Fork)
+[pint](https://pypi.org/project/pint) | 0.23 | Physical quantities module
+[pip](https://pypi.org/project/pip) | 24.3.1 | The PyPA recommended tool for installing Python packages.
+[pkginfo](https://pypi.org/project/pkginfo) | 1.11.2 | Query metadata from sdists / bdists / installed packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.2.2 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 5.24.1 | An open-source, interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.2 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.22.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[prettytable](https://pypi.org/project/prettytable) | 3.3.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[prince](https://pypi.org/project/prince) | 0.15.0 | Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus_client](https://pypi.org/project/prometheus_client) | 0.18.0 | Python client for the Prometheus monitoring system.
+[prompt_toolkit](https://pypi.org/project/prompt_toolkit) | 3.0.48 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.2.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 5.27.3 |
+[psutil](https://pypi.org/project/psutil) | 5.9.8 | Cross-platform lib for process and system monitoring in Python.
+[psygnal](https://pypi.org/project/psygnal) | 0.11.1 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure_eval](https://pypi.org/project/pure_eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 19.0.0 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.4.8 | ASN.1 types and codecs
+[pyasn1_modules](https://pypi.org/project/pyasn1_modules) | 0.2.8 | A collection of ASN.1-based protocols modules.
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pycryptodomex](https://pypi.org/project/pycryptodomex) | 3.20.0 | Cryptographic library for Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.10.6 | Data validation using Python type hints
+[pydantic_ai](https://pypi.org/project/pydantic_ai) | 0.0.24 | Agent Framework / shim to use Pydantic with LLMs
+[pydantic_ai_slim](https://pypi.org/project/pydantic_ai_slim) | 0.0.24 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic_core](https://pypi.org/project/pydantic_core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydantic_graph](https://pypi.org/project/pydantic_graph) | 0.0.24 | Graph and state machine library
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.4 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygments](https://pypi.org/project/pygments) | 2.19.1 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.8.0 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.1.0 | python code static checker
+[pylint_venv](https://pypi.org/project/pylint_venv) | 3.0.3 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls_spyder](https://pypi.org/project/pyls_spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.0.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.12 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyogrio](https://pypi.org/project/pyogrio) | 0.10.0 | Vectorized spatial vector file format I/O using GDAL/OGR
+[pyomo](https://pypi.org/project/pyomo) | 6.8.2 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.5 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.2.1 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 5.1.0 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pyproj](https://pypi.org/project/pyproj) | 3.7.0 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject_hooks](https://pypi.org/project/pyproject_hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.10 | Python bindings for the Qt cross platform application toolkit
+[pyqt5_qt5](https://pypi.org/project/pyqt5_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5_sip](https://pypi.org/project/pyqt5_sip) | 12.16.1 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.6 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine_qt5](https://pypi.org/project/pyqtwebengine_qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pyspnego](https://pypi.org/project/pyspnego) | 0.11.2 | Windows Negotiate Authentication Client and Server
+[pytest](https://pypi.org/project/pytest) | 8.2.2 | pytest: simple powerful testing with Python
+[python_barcode](https://pypi.org/project/python_barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python_dateutil](https://pypi.org/project/python_dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python_dotenv](https://pypi.org/project/python_dotenv) | 1.0.1 | Read key-value pairs from a .env file and set them as environment variables
+[python_json_logger](https://pypi.org/project/python_json_logger) | 2.0.7 | A python library adding a json log formatter
+[python_lsp_black](https://pypi.org/project/python_lsp_black) | 2.0.0 | Black plugin for the Python LSP Server
+[python_lsp_jsonrpc](https://pypi.org/project/python_lsp_jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python_lsp_server](https://pypi.org/project/python_lsp_server) | 1.12.0 | Python Language Server for the Language Server Protocol
+[python_multipart](https://pypi.org/project/python_multipart) | 0.0.9 | A streaming multipart parser for Python
+[python_slugify](https://pypi.org/project/python_slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.4 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2024.1 | World timezone definitions, modern and historical
+[pyusb](https://pypi.org/project/pyusb) | 1.3.1 | Easy USB access for Python
+[pyviz_comms](https://pypi.org/project/pyviz_comms) | 3.0.3 | A JupyterLab extension for rendering HoloViz content.
+[pywavelets](https://pypi.org/project/pywavelets) | 1.8.0 | PyWavelets, wavelet transform module
+[pywin32](https://pypi.org/project/pywin32) | 308 | Python for Window Extensions
+[pywin32_ctypes](https://pypi.org/project/pywin32_ctypes) | 0.2.2 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.14 | Pseudo terminal support for Windows from Python.
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.2.0 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post5 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 8.0 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.2 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.3.1 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.5.2 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.1 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.19.4 | A Python ASGI web microframework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.9.6 | rapid fuzzy string matching
+[readme_renderer](https://pypi.org/project/readme_renderer) | 44.0 | readme_renderer is a library for rendering readme descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.0.8 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.35.1 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.2.5 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests_ntlm](https://pypi.org/project/requests_ntlm) | 1.3.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests_toolbelt](https://pypi.org/project/requests_toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339_validator](https://pypi.org/project/rfc3339_validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986_validator](https://pypi.org/project/rfc3986_validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 13.9.4 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.12.0 | a python refactoring library...
+[rpds_py](https://pypi.org/project/rpds_py) | 0.22.3 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.1.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.1.1 | Reactive Extensions (Rx) for Python
+[scikit_image](https://pypi.org/project/scikit_image) | 0.25.0 | Image processing in Python
+[scikit_learn](https://pypi.org/project/scikit_learn) | 1.6.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.15.1 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.5 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7.post2 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.2 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 75.6.0 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.0.6 | Manipulation and analysis of geometric objects
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.0.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[sklearn_compat](https://pypi.org/project/sklearn_compat) | 0.1.3 | Ease support for compatible scikit-learn estimators across versions
+[smmap](https://pypi.org/project/smmap) | 5.0.0 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.0 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.5.1 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.6 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 7.3.7 | Python documentation generator
+[sphinx_rtd_theme](https://pypi.org/project/sphinx_rtd_theme) | 3.0.2 | Read the Docs theme for Sphinx
+[sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) | 2.0.0 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) | 2.0.0 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) | 2.1.0 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib_jquery](https://pypi.org/project/sphinxcontrib_jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib_jsmath](https://pypi.org/project/sphinxcontrib_jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) | 2.0.0 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib_serializinghtml](https://pypi.org/project/sphinxcontrib_serializinghtml) | 2.0.0 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 5.5.6 | The Scientific Python Development Environment
+[spyder_kernels](https://pypi.org/project/spyder_kernels) | 2.5.2 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.35 | Database Abstraction Library
+[sqlite_bro](https://pypi.org/project/sqlite_bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite_fts4](https://pypi.org/project/sqlite_fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite_utils](https://pypi.org/project/sqlite_utils) | 3.38 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.5.3 | A non-validating SQL parser.
+[squarify](https://pypi.org/project/squarify) | 0.4.4 | Pure Python implementation of the squarify treemap layout algorithm
+[sspilib](https://pypi.org/project/sspilib) | 0.2.0 | SSPI API bindings for Python
+[stack_data](https://pypi.org/project/stack_data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.41.3 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.41.1 | A faster way to build and share data apps
+[streamz](https://pypi.org/project/streamz) | 0.6.3 | Streams
+[sympy](https://pypi.org/project/sympy) | 1.13.3 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.0.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 9.0.0 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 2.5.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text_unidecode](https://pypi.org/project/text_unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.3 | Compute distance between the two texts.
+[thefuzz](https://pypi.org/project/thefuzz) | 0.22.1 | Fuzzy string matching in python
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.5.0 | threadpoolctl
+[three_merge](https://pypi.org/project/three_merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2025.1.10 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.8.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.4.0 | A tiny CSS parser
+[tokenizers](https://pypi.org/project/tokenizers) | 0.21.0 |
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.2.1 | A lil' TOML parser
+[tomli_w](https://pypi.org/project/tomli_w) | 1.1.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.13.2 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 1.0.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.4.2 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.66.4 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.28.0 | A friendly Python library for async concurrency and I/O
+[trove_classifiers](https://pypi.org/project/trove_classifiers) | 2024.10.21.16 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 6.0.1 | Collection of utilities for publishing packages on PyPI
+[types_python_dateutil](https://pypi.org/project/types_python_dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[types_requests](https://pypi.org/project/types_requests) | 2.32.0.20241016 | Typing stubs for requests
+[typing_extensions](https://pypi.org/project/typing_extensions) | 4.12.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing_inspect](https://pypi.org/project/typing_inspect) | 0.9.0 | Runtime inspection utilities for typing module.
+[tzdata](https://pypi.org/project/tzdata) | 2024.1 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.2 | tzinfo object for the local timezone
+[uc_micro_py](https://pypi.org/project/uc_micro_py) | 1.0.1 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap_learn](https://pypi.org/project/umap_learn) | 0.5.6 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.2.2 | calculations with values with uncertainties, error propagation
+[uri_template](https://pypi.org/project/uri_template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.2.3 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.34.0 | The lightning-fast ASGI server.
+[vega_datasets](https://pypi.org/project/vega_datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 6.0.0 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 24.11.1 | A library for working with the color formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket_client](https://pypi.org/project/websocket_client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 14.2 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.1.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.7 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.13 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 13.1.20250222 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2025.1.1 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.1.9 | A Python module for creating Excel XLSX files.
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt_dlp](https://pypi.org/project/yt_dlp) | 2023.7.6 | A youtube-dl fork with additional features and patches
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.21.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.13.2.0_History.md b/changelogs/WinPythonslim-64bit-3.13.2.0_History.md
new file mode 100644
index 00000000..5fdad5b4
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.13.2.0_History.md
@@ -0,0 +1,170 @@
+ï»ż## History of changes for WinPython-64bit 3.13.2.0slim
+
+The following changes were made to WinPython-64bit distribution since version 3.13.1.0slim.
+
+
+### Tools
+
+Removed packages:
+
+ * [Pandoc](https://pandoc.org/) 3.1.9 (a universal document converter)
+
+### Python packages
+
+New packages:
+
+ * [cohere](https://pypi.org/project/cohere) 5.13.12 ()
+ * [cvxpy](https://pypi.org/project/cvxpy) 1.6.0 (A domain-specific language for modeling convex optimization problems in Python.)
+ * [cytoolz](https://pypi.org/project/cytoolz) 1.0.1 (Cython implementation of Toolz: High performance functional utilities)
+ * [deap](https://pypi.org/project/deap) 1.4.2 (Distributed Evolutionary Algorithms in Python)
+ * [faker](https://pypi.org/project/faker) 33.3.1 (Faker is a Python package that generates fake data for you.)
+ * [fastavro](https://pypi.org/project/fastavro) 1.10.0 (Fast read/write of AVRO files)
+ * [geopandas](https://pypi.org/project/geopandas) 1.0.1 (Geographic pandas extensions)
+ * [httpx_sse](https://pypi.org/project/httpx_sse) 0.4.0 (Consume Server-Sent Event (SSE) messages with HTTPX.)
+ * [nh3](https://pypi.org/project/nh3) 0.2.18 (Python bindings to the ammonia HTML sanitization library.)
+ * [osqp](https://pypi.org/project/osqp) 0.6.7.post3 (OSQP: The Operator Splitting QP Solver)
+ * [prince](https://pypi.org/project/prince) 0.15.0 (Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA)
+ * [pydantic_graph](https://pypi.org/project/pydantic_graph) 0.0.24 (Graph and state machine library)
+ * [pyogrio](https://pypi.org/project/pyogrio) 0.10.0 (Vectorized spatial vector file format I/O using GDAL/OGR)
+ * [pyproj](https://pypi.org/project/pyproj) 3.7.0 (Python interface to PROJ (cartographic projections and coordinate transformations library))
+ * [pyspnego](https://pypi.org/project/pyspnego) 0.11.2 (Windows Negotiate Authentication Client and Server)
+ * [pyusb](https://pypi.org/project/pyusb) 1.3.1 (Easy USB access for Python)
+ * [pywavelets](https://pypi.org/project/pywavelets) 1.8.0 (PyWavelets, wavelet transform module)
+ * [qdldl](https://pypi.org/project/qdldl) 0.1.7.post5 (QDLDL, a free LDL factorization routine.)
+ * [scs](https://pypi.org/project/scs) 3.2.7.post2 (Splitting conic solver)
+ * [shapely](https://pypi.org/project/shapely) 2.0.6 (Manipulation and analysis of geometric objects)
+ * [sklearn_compat](https://pypi.org/project/sklearn_compat) 0.1.3 (Ease support for compatible scikit-learn estimators across versions)
+ * [squarify](https://pypi.org/project/squarify) 0.4.4 (Pure Python implementation of the squarify treemap layout algorithm)
+ * [sspilib](https://pypi.org/project/sspilib) 0.2.0 (SSPI API bindings for Python)
+ * [termcolor](https://pypi.org/project/termcolor) 2.5.0 (ANSI color formatting for output in terminal)
+ * [thefuzz](https://pypi.org/project/thefuzz) 0.22.1 (Fuzzy string matching in python)
+ * [tiktoken](https://pypi.org/project/tiktoken) 0.8.0 (tiktoken is a fast BPE tokeniser for use with OpenAI's models)
+ * [tokenizers](https://pypi.org/project/tokenizers) 0.21.0 ()
+ * [types_requests](https://pypi.org/project/types_requests) 2.32.0.20241016 (Typing stubs for requests)
+
+Upgraded packages:
+
+ * [array_api_compat](https://pypi.org/project/array_api_compat) 1.8 â 1.10.0 (A wrapper around NumPy and other array libraries to make them compatible with the Array API standard)
+ * [baresql](https://pypi.org/project/baresql) 0.8.0 â 1.0.0 (playing SQL directly on Python datas)
+ * [blinker](https://pypi.org/project/blinker) 1.7.0 â 1.9.0 (Fast, simple object-to-object and broadcast signaling)
+ * [bokeh](https://pypi.org/project/bokeh) 3.6.1 â 3.6.3 (Interactive plots and applications in the browser from Python)
+ * [clarabel](https://pypi.org/project/clarabel) 0.9.0 â 0.10.0 (Clarabel Conic Interior Point Solver for Rust / Python)
+ * [cryptography](https://pypi.org/project/cryptography) 41.0.5 â 44.0.0 (cryptography is a package which provides cryptographic recipes and primitives to Python developers.)
+ * [dill](https://pypi.org/project/dill) 0.3.7 â 0.3.9 (serialize all of Python)
+ * [docutils](https://pypi.org/project/docutils) 0.20.1 â 0.21.2 (Docutils -- Python Documentation Utilities)
+ * [duckdb](https://pypi.org/project/duckdb) 1.1.3 â 1.2.0 (DuckDB in-process database)
+ * [flask](https://pypi.org/project/flask) 3.0.3 â 3.1.0 (A simple framework for building complex web applications.)
+ * [flit](https://pypi.org/project/flit) 3.9.0 â 3.10.1 (A simple packaging tool for simple packages.)
+ * [flit_core](https://pypi.org/project/flit_core) 3.9.0 â 3.10.1 (Distribution-building parts of Flit. See flit package for more information)
+ * [griffe](https://pypi.org/project/griffe) 1.5.4 â 1.5.5 (Signatures for entire Python programs)
+ * [huggingface_hub](https://pypi.org/project/huggingface_hub) 0.27.0 â 0.28.1 (Client library to download and publish models, datasets and other repos on the huggingface.co hub)
+ * [hypothesis](https://pypi.org/project/hypothesis) 6.108.5 â 6.122.3 (A library for property-based testing)
+ * [imbalanced_learn](https://pypi.org/project/imbalanced_learn) 0.12.3 â 0.13.0 (Toolbox for imbalanced dataset in machine learning)
+ * [ipycanvas](https://pypi.org/project/ipycanvas) 0.13.2 â 0.13.3 (Interactive widgets library exposing the browser's Canvas API)
+ * [ipympl](https://pypi.org/project/ipympl) 0.9.4 â 0.9.6 (Matplotlib Jupyter Extension)
+ * [ipython](https://pypi.org/project/ipython) 8.26.0 â 8.32.0 (IPython: Productive Interactive Computing)
+ * [janus](https://pypi.org/project/janus) 1.0.0 â 2.0.0 (Mixed sync-async queue to interoperate between asyncio tasks and classic threads)
+ * [jaraco_context](https://pypi.org/project/jaraco_context) 5.3.0 â 6.0.1 (Useful decorators and context managers)
+ * [jaraco_functools](https://pypi.org/project/jaraco_functools) 4.0.1 â 4.1.0 (Functools like those found in stdlib)
+ * [jedi](https://pypi.org/project/jedi) 0.19.1 â 0.19.2 (An autocompletion tool for Python that can be used for text editors.)
+ * [jupyterlab](https://pypi.org/project/jupyterlab) 4.3.4 â 4.3.5 (JupyterLab computational environment)
+ * [keras](https://pypi.org/project/keras) 3.7.0 â 3.8.0 (Multi-backend Keras)
+ * [keyring](https://pypi.org/project/keyring) 25.2.1 â 25.6.0 (Store and access your passwords safely.)
+ * [kiwisolver](https://pypi.org/project/kiwisolver) 1.4.7 â 1.4.8 (A fast implementation of the Cassowary constraint solver)
+ * [langchain](https://pypi.org/project/langchain) 0.3.13 â 0.3.18 (Building applications with LLMs through composability)
+ * [langchain_core](https://pypi.org/project/langchain_core) 0.3.28 â 0.3.34 (Building applications with LLMs through composability)
+ * [langchain_text_splitters](https://pypi.org/project/langchain_text_splitters) 0.3.4 â 0.3.6 (LangChain text splitting utilities)
+ * [langsmith](https://pypi.org/project/langsmith) 0.2.6 â 0.2.11 (Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.)
+ * [llvmlite](https://pypi.org/project/llvmlite) 0.44.0rc2 â 0.44.0 (lightweight wrapper around basic LLVM functionality)
+ * [logfire_api](https://pypi.org/project/logfire_api) 2.11.0 â 3.5.3 (Shim for the Logfire SDK which does nothing unless Logfire is installed)
+ * [markupsafe](https://pypi.org/project/markupsafe) 2.1.1 â 3.0.2 (Safely add untrusted strings to HTML/XML markup.)
+ * [maturin](https://pypi.org/project/maturin) 1.7.0 â 1.8.1 (Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages)
+ * [mlxtend](https://pypi.org/project/mlxtend) 0.22.0 â 0.23.3 (Machine Learning Library Extensions)
+ * [msgpack](https://pypi.org/project/msgpack) 1.0.4 â 1.1.0 (MessagePack serializer)
+ * [narwhals](https://pypi.org/project/narwhals) 1.15.2 â 1.21.1 (Extremely lightweight compatibility layer between dataframe libraries)
+ * [numba](https://pypi.org/project/numba) 0.61.0rc2 â 0.61.0 (compiling Python code using LLVM)
+ * [openai](https://pypi.org/project/openai) 1.58.1 â 1.61.1 (The official Python library for the openai API)
+ * [panel](https://pypi.org/project/panel) 1.5.4 â 1.6.0 (The powerful data exploration & web app framework for Python.)
+ * [pillow](https://pypi.org/project/pillow) 11.0.0 â 11.1.0 (Python Imaging Library (Fork))
+ * [plotpy](https://pypi.org/project/plotpy) 2.7.0 â 2.7.2 (Curve and image plotting tools for Python/Qt applications)
+ * [polars](https://pypi.org/project/polars) 1.18.0 â 1.22.0 (Blazingly fast DataFrame library)
+ * [pyarrow](https://pypi.org/project/pyarrow) 18.1.0 â 19.0.0 (Python library for Apache Arrow)
+ * [pydantic](https://pypi.org/project/pydantic) 2.10.4 â 2.10.6 (Data validation using Python type hints)
+ * [pydantic_ai](https://pypi.org/project/pydantic_ai) 0.0.15 â 0.0.24 (Agent Framework / shim to use Pydantic with LLMs)
+ * [pydantic_ai_slim](https://pypi.org/project/pydantic_ai_slim) 0.0.15 â 0.0.24 (Agent Framework / shim to use Pydantic with LLMs, slim package)
+ * [pygments](https://pypi.org/project/pygments) 2.18.0 â 2.19.1 (Pygments is a syntax highlighting package written in Python.)
+ * [pyomo](https://pypi.org/project/pyomo) 6.8.0 â 6.8.2 (Pyomo: Python Optimization Modeling Objects)
+ * [pyparsing](https://pypi.org/project/pyparsing) 3.1.2 â 3.2.1 (pyparsing module - Classes and methods to define and execute parsing grammars)
+ * [pypdf](https://pypi.org/project/pypdf) 3.15.2 â 5.1.0 (A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files)
+ * [Python](http://www.python.org/) 3.13.1 â 3.13.2 (Python programming language with standard library)
+ * [pythonqwt](https://pypi.org/project/pythonqwt) 0.14.2 â 0.14.4 (Qt plotting widgets for Python)
+ * [qrcode](https://pypi.org/project/qrcode) 7.4.2 â 8.0 (QR Code image generator)
+ * [readme_renderer](https://pypi.org/project/readme_renderer) 35.0 â 44.0 (readme_renderer is a library for rendering readme descriptions for Warehouse)
+ * [redis](https://pypi.org/project/redis) 5.0.3 â 5.0.8 (Python client for Redis database and key-value store)
+ * [reportlab](https://pypi.org/project/reportlab) 4.2.2 â 4.2.5 (The Reportlab Toolkit)
+ * [requests_ntlm](https://pypi.org/project/requests_ntlm) 1.1.0 â 1.3.0 (This package allows for HTTP NTLM authentication using the requests library.)
+ * [scikit_learn](https://pypi.org/project/scikit_learn) 1.6.0 â 1.6.1 (A set of python modules for machine learning and data mining)
+ * [scipy](https://pypi.org/project/scipy) 1.14.1 â 1.15.1 (Fundamental algorithms for scientific computing in Python)
+ * [scramp](https://pypi.org/project/scramp) 1.4.1 â 1.4.5 (An implementation of the SCRAM protocol.)
+ * [sounddevice](https://pypi.org/project/sounddevice) 0.4.6 â 0.5.1 (Play and Record Sound with Python)
+ * [soupsieve](https://pypi.org/project/soupsieve) 2.5 â 2.6 (A modern CSS selector implementation for Beautiful Soup.)
+ * [sphinx_rtd_theme](https://pypi.org/project/sphinx_rtd_theme) 2.0.0 â 3.0.2 (Read the Docs theme for Sphinx)
+ * [sphinxcontrib_applehelp](https://pypi.org/project/sphinxcontrib_applehelp) 1.0.8 â 2.0.0 (sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books)
+ * [sphinxcontrib_devhelp](https://pypi.org/project/sphinxcontrib_devhelp) 1.0.6 â 2.0.0 (sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents)
+ * [sphinxcontrib_htmlhelp](https://pypi.org/project/sphinxcontrib_htmlhelp) 2.0.5 â 2.1.0 (sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files)
+ * [sphinxcontrib_qthelp](https://pypi.org/project/sphinxcontrib_qthelp) 1.0.7 â 2.0.0 (sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents)
+ * [sphinxcontrib_serializinghtml](https://pypi.org/project/sphinxcontrib_serializinghtml) 1.1.9 â 2.0.0 (sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle))
+ * [sqlite_utils](https://pypi.org/project/sqlite_utils) 3.37 â 3.38 (CLI tool and Python library for manipulating SQLite databases)
+ * [sqlparse](https://pypi.org/project/sqlparse) 0.4.3 â 0.5.3 (A non-validating SQL parser.)
+ * [sympy](https://pypi.org/project/sympy) 1.13.2 â 1.13.3 (Computer algebra system (CAS) in Python)
+ * [tenacity](https://pypi.org/project/tenacity) 8.5.0 â 9.0.0 (Retry code until it succeeds)
+ * [textdistance](https://pypi.org/project/textdistance) 4.6.2 â 4.6.3 (Compute distance between the two texts.)
+ * [tifffile](https://pypi.org/project/tifffile) 2024.7.2 â 2025.1.10 (Read and write TIFF files)
+ * [tinycss2](https://pypi.org/project/tinycss2) 1.3.0 â 1.4.0 (A tiny CSS parser)
+ * [tomli](https://pypi.org/project/tomli) 2.0.1 â 2.2.1 (A lil' TOML parser)
+ * [tomli_w](https://pypi.org/project/tomli_w) 1.0.0 â 1.1.0 (A lil' TOML writer)
+ * [tomlkit](https://pypi.org/project/tomlkit) 0.12.3 â 0.13.2 (Style preserving TOML library)
+ * [toolz](https://pypi.org/project/toolz) 0.12.0 â 1.0.0 (List processing tools and functional utilities)
+ * [tornado](https://pypi.org/project/tornado) 6.4.1 â 6.4.2 (Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.)
+ * [trio](https://pypi.org/project/trio) 0.27.0 â 0.28.0 (A friendly Python library for async concurrency and I/O)
+ * [twine](https://pypi.org/project/twine) 4.0.1 â 6.0.1 (Collection of utilities for publishing packages on PyPI)
+ * [uncertainties](https://pypi.org/project/uncertainties) 3.1.7 â 3.2.2 (calculations with values with uncertainties, error propagation)
+ * [urllib3](https://pypi.org/project/urllib3) 2.0.3 â 2.2.3 (HTTP library with thread-safe connection pooling, file post, and more.)
+ * [uvicorn](https://pypi.org/project/uvicorn) 0.30.3 â 0.34.0 (The lightning-fast ASGI server.)
+ * [watchdog](https://pypi.org/project/watchdog) 4.0.1 â 6.0.0 (Filesystem events monitoring)
+ * [webcolors](https://pypi.org/project/webcolors) 1.12 â 24.11.1 (A library for working with the color formats defined by HTML and CSS.)
+ * [websockets](https://pypi.org/project/websockets) 13.1 â 14.2 (An implementation of the WebSocket Protocol (RFC 6455 & 7692))
+ * [werkzeug](https://pypi.org/project/werkzeug) 3.0.3 â 3.1.3 (The comprehensive WSGI web application library.)
+ * [whatthepatch](https://pypi.org/project/whatthepatch) 1.0.2 â 1.0.7 (A patch parsing and application library.)
+ * [wheel](https://pypi.org/project/wheel) 0.44.0 â 0.45.1 (A built-package format for Python)
+ * [winpython](https://pypi.org/project/winpython) 11.2.20241228 â 13.1.20250222 (WinPython distribution tools, including WPPM)
+ * [xarray](https://pypi.org/project/xarray) 2024.11.0 â 2025.1.1 (N-D labeled arrays and datasets in Python)
+ * [zipp](https://pypi.org/project/zipp) 3.17.0 â 3.21.0 (Backport of pathlib-compatible object wrapper for zip files)
+
+Removed packages:
+
+ * [adodbapi](https://pypi.org/project/adodbapi) 2.6.1.3 (A pure Python package implementing PEP 249 DB-API using Microsoft ADO.)
+ * [cachelib](https://pypi.org/project/cachelib) 0.13.0 (A collection of cache libraries in the same API interface.)
+ * [db_py](https://pypi.org/project/db_py) 0.5.4b1 (a db package that doesn't suck)
+ * [docopt](https://pypi.org/project/docopt) 0.6.2 (Pythonic argument parser, that will make you smile)
+ * [filterpy](https://pypi.org/project/filterpy) 1.4.5 (Kalman filtering and optimal estimation library)
+ * [flask_mail](https://pypi.org/project/flask_mail) 0.9.1 (Flask extension for sending email)
+ * [flask_session](https://pypi.org/project/flask_session) 0.5.0 (Server-side session support for Flask)
+ * [flask_sqlalchemy](https://pypi.org/project/flask_sqlalchemy) 3.0.5 (Add SQLAlchemy support to your Flask application.)
+ * [formlayout](https://pypi.org/project/formlayout) 1.2.1a1 (The most easy way to create Qt form dialogs and widgets with Python)
+ * [future](https://pypi.org/project/future) 0.18.2 (Clean single-source support for Python 3 and 2)
+ * [ntlm_auth](https://pypi.org/project/ntlm_auth) 1.5.0 (Creates NTLM authentication structures)
+ * [pdfrw](https://pypi.org/project/pdfrw) 0.4.post2 (PDF file reader/writer library)
+ * [ppci](https://pypi.org/project/ppci) 0.5.9 (A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python)
+ * [pybars3](https://pypi.org/project/pybars3) 0.9.7 (Handlebars.js templating for Python 3 and 2)
+ * [pymeta3](https://pypi.org/project/pymeta3) 0.5.1 (Pattern-matching language based on OMeta for Python 3 and 2)
+ * [pypng](https://pypi.org/project/pypng) 0.20220715.0 (Pure Python library for saving and loading PNG images)
+ * [pysimplegui](https://pypi.org/project/pysimplegui) 4.60.4 (Python GUIs for Humans)
+ * [pywinusb](https://pypi.org/project/pywinusb) 0.4.2 (A package that simplifies USB/HID communications on windows)
+ * [simplegeneric](https://pypi.org/project/simplegeneric) 0.8.1 (Simple generic functions (similar to Python's own len(), pickle.dump(), etc.))
+ * [sspyrs](https://pypi.org/project/sspyrs) 0.3 (Lightweight interface for SSRS reports to python)
+ * [xmltodict](https://pypi.org/project/xmltodict) 0.13.0 (Makes working with XML feel like you are working with JSON)
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.13.3.0.md b/changelogs/WinPythonslim-64bit-3.13.3.0.md
new file mode 100644
index 00000000..3cc4c6b7
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.13.3.0.md
@@ -0,0 +1,515 @@
+## WinPython 3.13.3.0slim
+
+The following packages are included in WinPython-64bit v3.13.3.0slim .
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Pandoc](https://pandoc.org) | 3.1.9 | an universal document converter
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.3 | Python programming language with standard library
+[absl-py](https://pypi.org/project/absl-py) | 2.0.0 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc-driver-manager](https://pypi.org/project/adbc-driver-manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.4.4 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.11 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.1 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.15.1 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[aniso8601](https://pypi.org/project/aniso8601) | 9.0.1 | A library for parsing ISO 8601 strings.
+[annotated-types](https://pypi.org/project/annotated-types) | 0.6.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.49.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.8.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.12 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argon2-cffi](https://pypi.org/project/argon2-cffi) | 23.1.0 | Argon2 for Python
+[argon2-cffi-bindings](https://pypi.org/project/argon2-cffi-bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array-api-compat](https://pypi.org/project/array-api-compat) | 1.11.1 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi-csrf](https://pypi.org/project/asgi-csrf) | 0.9 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 0.9.31 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.1.0 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy-iers-data](https://pypi.org/project/astropy-iers-data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 2.4.1 | Annotate AST trees with source code positions
+[async-lru](https://pypi.org/project/async-lru) | 2.0.4 | Simple LRU cache for asyncio
+[asyncssh](https://pypi.org/project/asyncssh) | 2.20.0 | AsyncSSH: Asynchronous SSHv2 client and server library
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 23.2.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure-core](https://pypi.org/project/azure-core) | 1.32.0 | Microsoft Azure Core Library for Python
+[azure-cosmos](https://pypi.org/project/azure-cosmos) | 4.9.0 | Microsoft Azure Cosmos Client Library for Python
+[azure-identity](https://pypi.org/project/azure-identity) | 1.21.0 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.16.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 1.0.0 | playing SQL directly on Python datas
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.12.2 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 25.1.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.1.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.9.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.7.2 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.0 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachetools](https://pypi.org/project/cachetools) | 5.5.2 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2025.1.31 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset-normalizer](https://pypi.org/project/charset-normalizer) | 3.4.0 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.10.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.8 | Composable command line interface toolkit
+[click-default-group](https://pypi.org/project/click-default-group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.1.1 | Pickler class to extend the standard pickle.Pickler functionality
+[cohere](https://pypi.org/project/cohere) | 5.13.12 |
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.8.2 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.1 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g.
+[cryptography](https://pypi.org/project/cryptography) | 44.0.0 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.4 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.0.12 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 1.0.1 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2025.3.0 | Parallel PyData with Task Scheduling
+[datasette](https://pypi.org/project/datasette) | 0.65.1 | An open source multi-tool for exploring and publishing data
+[datasette-graphql](https://pypi.org/project/datasette-graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.17.0 | Data visualization toolchain based on aggregating into a grid
+[deap](https://pypi.org/project/deap) | 1.4.2 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.0 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.1.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[deprecated](https://pypi.org/project/deprecated) | 1.2.14 | Python @deprecated decorator to deprecate old python classes, functions or methods.
+[diff-match-patch](https://pypi.org/project/diff-match-patch) | 20241021 | Repackaging of Google's Diff Match and Patch libraries.
+[dill](https://pypi.org/project/dill) | 0.3.9 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2025.3.0 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.8.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.0.7 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.6.1 | DNS toolkit
+[docstring-to-markdown](https://pypi.org/project/docstring-to-markdown) | 0.15 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.21.2 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.2.2 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et-xmlfile](https://pypi.org/project/et-xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval-type-backport](https://pypi.org/project/eval-type-backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.2.0 | Get the currently executing AST node of a frame, and other information
+[faker](https://pypi.org/project/faker) | 36.1.1 | Faker is a Python package that generates fake data for you.
+[fast-histogram](https://pypi.org/project/fast-histogram) | 0.14 | Fast simple 1D and 2D histograms
+[fastapi](https://pypi.org/project/fastapi) | 0.115.8 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastavro](https://pypi.org/project/fastavro) | 1.10.0 | Fast read/write of AVRO files
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.18.0 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.17.0 | A platform independent file lock.
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.1.0 | A simple framework for building complex web applications.
+[flexcache](https://pypi.org/project/flexcache) | 0.3 | Saves and loads to the cache a transformed versions of a source object.
+[flexparser](https://pypi.org/project/flexparser) | 0.4 | Parsing made fun ... using typing.
+[flit](https://pypi.org/project/flit) | 3.10.1 | A simple packaging tool for simple packages.
+[flit-core](https://pypi.org/project/flit-core) | 3.10.1 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.19.5 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.55.3 | Tools to manipulate font files
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2024.6.1 | File-system specification
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 1.0.1 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.10 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.32 | GitPython is a Python library used to interact with Git repositories
+[google-auth](https://pypi.org/project/google-auth) | 2.37.0 | Google Authentication Library
+[graphene](https://pypi.org/project/graphene) | 3.3 | GraphQL Framework for Python
+[graphql-core](https://pypi.org/project/graphql-core) | 3.2.3 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql-relay](https://pypi.org/project/graphql-relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.5.5 | Signatures for entire Python programs.
+[groq](https://pypi.org/project/groq) | 0.13.1 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.7.1 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.1.0 | HTTP/2 State-Machine based protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.20.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.1.0 | Pure-Python HPACK header encoding
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.5 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.27.2 | The next generation HTTP client.
+[httpx-sse](https://pypi.org/project/httpx-sse) | 0.4.0 | Consume Server-Sent Event (SSE) messages with HTTPX.
+[huggingface-hub](https://pypi.org/project/huggingface-hub) | 0.29.3 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.11.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.17.3 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.1.0 | Pure-Python HTTP/2 framing
+[hypothesis](https://pypi.org/project/hypothesis) | 6.130.4 | A library for property-based testing
+[id](https://pypi.org/project/id) | 1.5.0 | A tool for generating OIDC identities
+[idna](https://pypi.org/project/idna) | 3.10 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.37.0 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced-learn](https://pypi.org/project/imbalanced-learn) | 0.13.0 | Toolbox for imbalanced dataset in machine learning
+[importlib-metadata](https://pypi.org/project/importlib-metadata) | 8.6.1 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.0.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.0.2 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.3 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.7 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.34.0 | IPython: Productive Interactive Computing
+[ipython-genutils](https://pypi.org/project/ipython-genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython-sql](https://pypi.org/project/ipython-sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.6 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 2.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco-classes](https://pypi.org/project/jaraco-classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco-context](https://pypi.org/project/jaraco-context) | 6.0.1 | Useful decorators and context managers
+[jaraco-functools](https://pypi.org/project/jaraco-functools) | 4.1.0 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.2 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.2 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.8.2 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.9.14 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpath-python](https://pypi.org/project/jsonpath-python) | 1.0.6 | A more powerful JSONPath implementation in modern python
+[jsonpointer](https://pypi.org/project/jsonpointer) | 2.4 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.19.2 | An implementation of JSON Schema validation for Python
+[jsonschema-specifications](https://pypi.org/project/jsonschema-specifications) | 2023.12.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter-bokeh](https://pypi.org/project/jupyter-bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter-client](https://pypi.org/project/jupyter-client) | 8.6.3 | Jupyter protocol implementation and client libraries
+[jupyter-console](https://pypi.org/project/jupyter-console) | 6.6.3 | Jupyter terminal console
+[jupyter-core](https://pypi.org/project/jupyter-core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter-events](https://pypi.org/project/jupyter-events) | 0.12.0 | Jupyter Event System library
+[jupyter-leaflet](https://pypi.org/project/jupyter-leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter-lsp](https://pypi.org/project/jupyter-lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter-server](https://pypi.org/project/jupyter-server) | 2.14.2 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter-server-terminals](https://pypi.org/project/jupyter-server-terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.4.1 | JupyterLab computational environment
+[jupyterlab-pygments](https://pypi.org/project/jupyterlab-pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab-server](https://pypi.org/project/jupyterlab-server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab-widgets](https://pypi.org/project/jupyterlab-widgets) | 3.0.14 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.9.2 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.6.0 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.8 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.23 | Building applications with LLMs through composability
+[langchain-core](https://pypi.org/project/langchain-core) | 0.3.51 | Building applications with LLMs through composability
+[langchain-text-splitters](https://pypi.org/project/langchain-text-splitters) | 0.3.8 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.3.24 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy-loader](https://pypi.org/project/lazy-loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify-it-py](https://pypi.org/project/linkify-it-py) | 2.0.2 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.1 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire-api](https://pypi.org/project/logfire-api) | 3.5.3 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.5 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.7 | Python implementation of John Gruber's Markdown.
+[markdown-it-py](https://pypi.org/project/markdown-it-py) | 2.2.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 3.0.2 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.1 | Python plotting package
+[matplotlib-inline](https://pypi.org/project/matplotlib-inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.8.1 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mdit-py-plugins](https://pypi.org/project/mdit-py-plugins) | 0.3.5 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.1 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.2.5 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 2.0.5 | A sane Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml-dtypes](https://pypi.org/project/ml-dtypes) | 0.5.0 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.23.3 | Machine Learning Library Extensions
+[more-itertools](https://pypi.org/project/more-itertools) | 10.2.0 | More routines for operating on iterables, beyond itertools
+[mpl-scatter-density](https://pypi.org/project/mpl-scatter-density) | 0.7 | Matplotlib helpers to make density scatter plots
+[mpld3](https://pypi.org/project/mpld3) | 0.5.8 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal-extensions](https://pypi.org/project/msal-extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.1.0 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.1.0 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mypy](https://pypi.org/project/mypy) | 1.15.0 | Optional static typing for Python
+[mypy-extensions](https://pypi.org/project/mypy-extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql-connector-python](https://pypi.org/project/mysql-connector-python) | 9.2.0 | A self-contained Python driver for communicating with MySQL servers, using an API that is compliant with the Python Database API Specification v
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.30.0 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.0 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.1 | Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest-asyncio](https://pypi.org/project/nest-asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nh3](https://pypi.org/project/nh3) | 0.2.18 | Python bindings to the ammonia HTML sanitization library.
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.4.0 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook-shim](https://pypi.org/project/notebook-shim) | 0.2.4 | A shim layer for notebook traits and config
+[numba](https://pypi.org/project/numba) | 0.61.2 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.2.4 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.6.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.72.0 | The official Python library for the openai API
+[opencv-python](https://pypi.org/project/opencv-python) | 4.11.0.86 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.2 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[optree](https://pypi.org/project/optree) | 0.14.0 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 3.6.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.12 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post3 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.0 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.6.2 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.2.0 | Make your Python code clearer and more reliable by declaring Parameters.
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.0 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.11.0 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 0.5.6 | A Python package for describing statistical models and for building design matrices.
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.8.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.23.0 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.1.0 | Python Imaging Library (Fork)
+[pip](https://pypi.org/project/pip) | 25.0.1 | The PyPA recommended tool for installing Python packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.3.6 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 6.0.1 | An open-source interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.2 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.27.1 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[prettytable](https://pypi.org/project/prettytable) | 3.3.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[prince](https://pypi.org/project/prince) | 0.15.0 | Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus-client](https://pypi.org/project/prometheus-client) | 0.21.1 | Python client for the Prometheus monitoring system.
+[prompt-toolkit](https://pypi.org/project/prompt-toolkit) | 3.0.50 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.2.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 5.27.3 |
+[psutil](https://pypi.org/project/psutil) | 5.9.8 | Cross-platform lib for process and system monitoring in Python.
+[psygnal](https://pypi.org/project/psygnal) | 0.11.1 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure-eval](https://pypi.org/project/pure-eval) | 0.2.2 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 19.0.1 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.6.1 | Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)
+[pyasn1-modules](https://pypi.org/project/pyasn1-modules) | 0.4.1 | A collection of ASN.1-based protocols modules
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.10.6 | Data validation using Python type hints
+[pydantic-ai](https://pypi.org/project/pydantic-ai) | 0.0.24 | Agent Framework / shim to use Pydantic with LLMs
+[pydantic-ai-slim](https://pypi.org/project/pydantic-ai-slim) | 0.0.24 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic-core](https://pypi.org/project/pydantic-core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydantic-graph](https://pypi.org/project/pydantic-graph) | 0.0.24 | Graph and state machine library
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.4 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygithub](https://pypi.org/project/pygithub) | 2.6.1 | Use the full Github API v3
+[pygments](https://pypi.org/project/pygments) | 2.19.1 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.10.1 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.1.0 | python code static checker
+[pylint-venv](https://pypi.org/project/pylint-venv) | 3.0.3 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls-spyder](https://pypi.org/project/pyls-spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.12 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyogrio](https://pypi.org/project/pyogrio) | 0.10.0 | Vectorized spatial vector file format I/O using GDAL/OGR
+[pyomo](https://pypi.org/project/pyomo) | 6.9.1 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.15 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.2.1 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 5.1.0 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pyproj](https://pypi.org/project/pyproj) | 3.7.0 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.1.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.10 | Python bindings for the Qt cross platform application toolkit
+[pyqt5-qt5](https://pypi.org/project/pyqt5-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5-sip](https://pypi.org/project/pyqt5-sip) | 12.16.1 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.6 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine-qt5](https://pypi.org/project/pyqtwebengine-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pyspnego](https://pypi.org/project/pyspnego) | 0.11.2 | Windows Negotiate Authentication Client and Server
+[pytest](https://pypi.org/project/pytest) | 8.3.4 | pytest: simple powerful testing with Python
+[python-barcode](https://pypi.org/project/python-barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python-dateutil](https://pypi.org/project/python-dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python-dotenv](https://pypi.org/project/python-dotenv) | 1.0.1 | Read key-value pairs from a .env file and set them as environment variables
+[python-json-logger](https://pypi.org/project/python-json-logger) | 2.0.7 | A python library adding a json log formatter
+[python-lsp-black](https://pypi.org/project/python-lsp-black) | 2.0.0 | Black plugin for the Python LSP Server
+[python-lsp-jsonrpc](https://pypi.org/project/python-lsp-jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python-lsp-server](https://pypi.org/project/python-lsp-server) | 1.12.0 | Python Language Server for the Language Server Protocol
+[python-multipart](https://pypi.org/project/python-multipart) | 0.0.9 | A streaming multipart parser for Python
+[python-slugify](https://pypi.org/project/python-slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.4 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2024.2 | World timezone definitions, modern and historical
+[pyuca](https://pypi.org/project/pyuca) | 1.2 | a Python implementation of the Unicode Collation Algorithm
+[pyusb](https://pypi.org/project/pyusb) | 1.3.1 | Easy USB access for Python
+[pyviz-comms](https://pypi.org/project/pyviz-comms) | 3.0.3 | A JupyterLab extension for rendering HoloViz content.
+[pywavelets](https://pypi.org/project/pywavelets) | 1.8.0 | PyWavelets, wavelet transform module
+[pywin32](https://pypi.org/project/pywin32) | 308 | Python for Window Extensions
+[pywin32-ctypes](https://pypi.org/project/pywin32-ctypes) | 0.2.2 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.14 | Pseudo terminal support for Windows from Python.
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.2.1 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post5 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 8.0 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.2 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.4.0 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.6.1 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.1 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.20.0 | A Python ASGI web framework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.9.6 | rapid fuzzy string matching
+[readme-renderer](https://pypi.org/project/readme-renderer) | 44.0 | readme_renderer is a library for rendering readme descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.0.8 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.35.1 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.2.5 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests-ntlm](https://pypi.org/project/requests-ntlm) | 1.3.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests-toolbelt](https://pypi.org/project/requests-toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339-validator](https://pypi.org/project/rfc3339-validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986-validator](https://pypi.org/project/rfc3986-validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 13.9.4 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.12.0 | a python refactoring library...
+[rpds-py](https://pypi.org/project/rpds-py) | 0.22.3 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.3.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.2.0 | Reactive Extensions (Rx) for Python
+[scikit-image](https://pypi.org/project/scikit-image) | 0.25.2 | Image processing in Python
+[scikit-learn](https://pypi.org/project/scikit-learn) | 1.6.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.15.2 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.5 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7.post2 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.3 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 75.8.2 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.0.6 | Manipulation and analysis of geometric objects
+[shellingham](https://pypi.org/project/shellingham) | 1.5.4 | Tool to Detect Surrounding Shell
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.1.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.16.0 | Python 2 and 3 compatibility utilities
+[sklearn-compat](https://pypi.org/project/sklearn-compat) | 0.1.3 | Ease support for compatible scikit-learn estimators across versions
+[skrub](https://pypi.org/project/skrub) | 0.5.1 | Prepping tables for machine learning
+[smmap](https://pypi.org/project/smmap) | 5.0.0 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.0 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.5.1 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.6 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 7.3.7 | Python documentation generator
+[sphinx-rtd-theme](https://pypi.org/project/sphinx-rtd-theme) | 3.0.2 | Read the Docs theme for Sphinx
+[sphinxcontrib-applehelp](https://pypi.org/project/sphinxcontrib-applehelp) | 2.0.0 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib-devhelp](https://pypi.org/project/sphinxcontrib-devhelp) | 2.0.0 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib-htmlhelp](https://pypi.org/project/sphinxcontrib-htmlhelp) | 2.1.0 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib-jquery](https://pypi.org/project/sphinxcontrib-jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib-jsmath](https://pypi.org/project/sphinxcontrib-jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib-qthelp](https://pypi.org/project/sphinxcontrib-qthelp) | 2.0.0 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib-serializinghtml](https://pypi.org/project/sphinxcontrib-serializinghtml) | 2.0.0 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 6.0.5 | The Scientific Python Development Environment
+[spyder-kernels](https://pypi.org/project/spyder-kernels) | 3.0.3 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.38 | Database Abstraction Library
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite-fts4](https://pypi.org/project/sqlite-fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite-utils](https://pypi.org/project/sqlite-utils) | 3.38 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.5.3 | A non-validating SQL parser.
+[squarify](https://pypi.org/project/squarify) | 0.4.4 | Pure Python implementation of the squarify treemap layout algorithm
+[sspilib](https://pypi.org/project/sspilib) | 0.2.0 | SSPI API bindings for Python
+[stack-data](https://pypi.org/project/stack-data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.45.3 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.44.0 | A faster way to build and share data apps
+[superqt](https://pypi.org/project/superqt) | 0.7.1 | Missing widgets and components for PyQt/PySide
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[sympy](https://pypi.org/project/sympy) | 1.13.3 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.0.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 9.0.0 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 2.5.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text-unidecode](https://pypi.org/project/text-unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.3 | Compute distance between the two texts.
+[thefuzz](https://pypi.org/project/thefuzz) | 0.22.1 | Fuzzy string matching in python
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.5.0 | threadpoolctl
+[three-merge](https://pypi.org/project/three-merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2025.1.10 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.8.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.4.0 | A tiny CSS parser
+[tokenizers](https://pypi.org/project/tokenizers) | 0.21.0 |
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.2.1 | A lil' TOML parser
+[tomli-w](https://pypi.org/project/tomli-w) | 1.2.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.13.2 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 1.0.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.4.2 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.66.4 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.1 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.29.0 | A friendly Python library for async concurrency and I/O
+[trove-classifiers](https://pypi.org/project/trove-classifiers) | 2024.10.21.16 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 6.1.0 | Collection of utilities for publishing packages on PyPI
+[typer](https://pypi.org/project/typer) | 0.15.2 | Typer, build great CLIs. Easy to code. Based on Python type hints.
+[types-python-dateutil](https://pypi.org/project/types-python-dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[types-requests](https://pypi.org/project/types-requests) | 2.32.0.20241016 | Typing stubs for requests
+[typing-extensions](https://pypi.org/project/typing-extensions) | 4.12.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing-inspect](https://pypi.org/project/typing-inspect) | 0.9.0 | Runtime inspection utilities for typing module.
+[tzdata](https://pypi.org/project/tzdata) | 2024.1 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.2 | tzinfo object for the local timezone
+[uc-micro-py](https://pypi.org/project/uc-micro-py) | 1.0.1 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap-learn](https://pypi.org/project/umap-learn) | 0.5.6 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.2.2 | calculations with values with uncertainties, error propagation
+[uri-template](https://pypi.org/project/uri-template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.2.3 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.34.0 | The lightning-fast ASGI server.
+[vega-datasets](https://pypi.org/project/vega-datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 6.0.0 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 24.11.1 | A library for working with the color formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket-client](https://pypi.org/project/websocket-client) | 1.8.0 | WebSocket client for Python with low level API options
+[werkzeug](https://pypi.org/project/werkzeug) | 3.1.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.7 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.14 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 15.3.20250425 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wrapt](https://pypi.org/project/wrapt) | 1.16.0 | Module for decorators, wrappers and monkey patching.
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2025.3.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.1.9 | A Python module for creating Excel XLSX files.
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt-dlp](https://pypi.org/project/yt-dlp) | 2025.2.19 | A feature-rich command-line audio/video downloader
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.21.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.13.3.0_History.md b/changelogs/WinPythonslim-64bit-3.13.3.0_History.md
new file mode 100644
index 00000000..9767b1e5
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.13.3.0_History.md
@@ -0,0 +1,148 @@
+ï»ż## History of changes for WinPython-64bit 3.13.3.0slim
+
+The following changes were made to WinPython-64bit distribution since version 3.13.2.0slim.
+
+
+
+### Tools
+
+New packages:
+
+ * [Pandoc](https://pandoc.org) 3.1.9 (an universal document converter)
+
+### Python packages
+
+New packages:
+
+ * [asyncssh](https://pypi.org/project/asyncssh) 2.20.0 (AsyncSSH: Asynchronous SSHv2 client and server library)
+ * [deprecated](https://pypi.org/project/deprecated) 1.2.14 (Python @deprecated decorator to deprecate old python classes, functions or methods.)
+ * [flexcache](https://pypi.org/project/flexcache) 0.3 (Saves and loads to the cache a transformed versions of a source object.)
+ * [flexparser](https://pypi.org/project/flexparser) 0.4 (Parsing made fun ... using typing.)
+ * [id](https://pypi.org/project/id) 1.5.0 (A tool for generating OIDC identities)
+ * [pygithub](https://pypi.org/project/pygithub) 2.6.1 (Use the full Github API v3)
+ * [pyuca](https://pypi.org/project/pyuca) 1.2 (a Python implementation of the Unicode Collation Algorithm)
+ * [shellingham](https://pypi.org/project/shellingham) 1.5.4 (Tool to Detect Surrounding Shell)
+ * [skrub](https://pypi.org/project/skrub) 0.5.1 (Prepping tables for machine learning)
+ * [superqt](https://pypi.org/project/superqt) 0.7.1 (Missing widgets and components for PyQt/PySide)
+ * [sv-ttk](https://pypi.org/project/sv-ttk) 2.6.0 (A gorgeous theme for Tkinter, based on Windows 11's UI)
+ * [typer](https://pypi.org/project/typer) 0.15.2 (Typer, build great CLIs. Easy to code. Based on Python type hints.)
+ * [wrapt](https://pypi.org/project/wrapt) 1.16.0 (Module for decorators, wrappers and monkey patching.)
+
+Upgraded packages:
+
+ * [alembic](https://pypi.org/project/alembic) 1.13.1 â 1.15.1 (A database migration tool for SQLAlchemy.)
+ * [anthropic](https://pypi.org/project/anthropic) 0.42.0 â 0.49.0 (The official Python library for the anthropic API)
+ * [anyio](https://pypi.org/project/anyio) 4.7.0 â 4.8.0 (High level compatibility layer for multiple asynchronous event loop implementations)
+ * [array-api-compat](https://pypi.org/project/array-api-compat) 1.10.0 â 1.11.1 (A wrapper around NumPy and other array libraries to make them compatible with the Array API standard)
+ * [azure-core](https://pypi.org/project/azure-core) 1.30.2 â 1.32.0 (Microsoft Azure Core Library for Python)
+ * [azure-cosmos](https://pypi.org/project/azure-cosmos) 4.7.0 â 4.9.0 (Microsoft Azure Cosmos Client Library for Python)
+ * [azure-identity](https://pypi.org/project/azure-identity) 1.16.1 â 1.21.0 (Microsoft Azure Identity Library for Python)
+ * [black](https://pypi.org/project/black) 24.10.0 â 25.1.0 (The uncompromising code formatter.)
+ * [bokeh](https://pypi.org/project/bokeh) 3.6.3 â 3.7.2 (Interactive plots and applications in the browser from Python)
+ * [cachetools](https://pypi.org/project/cachetools) 5.4.0 â 5.5.2 (Extensible memoizing collections and decorators)
+ * [certifi](https://pypi.org/project/certifi) 2024.6.2 â 2025.1.31 (Python package for providing Mozilla's CA Bundle.)
+ * [click](https://pypi.org/project/click) 8.1.7 â 8.1.8 (Composable command line interface toolkit)
+ * [cloudpickle](https://pypi.org/project/cloudpickle) 3.0.0 â 3.1.1 (Pickler class to extend the standard pickle.Pickler functionality)
+ * [cvxpy](https://pypi.org/project/cvxpy) 1.6.0 â 1.6.4 (A domain-specific language for modeling convex optimization problems in Python.)
+ * [cython](https://pypi.org/project/cython) 3.0.11 â 3.0.12 (The Cython compiler for writing C extensions in the Python language.)
+ * [dask](https://pypi.org/project/dask) 2024.12.1 â 2025.3.0 (Parallel PyData with Task Scheduling)
+ * [datasette](https://pypi.org/project/datasette) 0.64.8 â 0.65.1 (An open source multi-tool for exploring and publishing data)
+ * [datashader](https://pypi.org/project/datashader) 0.16.3 â 0.17.0 (Data visualization toolchain based on aggregating into a grid)
+ * [diff-match-patch](https://pypi.org/project/diff-match-patch) 20230430 â 20241021 (Repackaging of Google's Diff Match and Patch libraries.)
+ * [distributed](https://pypi.org/project/distributed) 2024.12.1 â 2025.3.0 (Distributed scheduler for Dask)
+ * [docstring-to-markdown](https://pypi.org/project/docstring-to-markdown) 0.13 â 0.15 (On the fly conversion of Python docstrings to markdown)
+ * [duckdb](https://pypi.org/project/duckdb) 1.2.0 â 1.2.2 (DuckDB in-process database)
+ * [executing](https://pypi.org/project/executing) 2.0.1 â 2.2.0 (Get the currently executing AST node of a frame, and other information)
+ * [faker](https://pypi.org/project/faker) 33.3.1 â 36.1.1 (Faker is a Python package that generates fake data for you.)
+ * [fastapi](https://pypi.org/project/fastapi) 0.115.6 â 0.115.8 (FastAPI framework, high performance, easy to learn, fast to code, ready for production)
+ * [filelock](https://pypi.org/project/filelock) 3.14.0 â 3.17.0 (A platform independent file lock.)
+ * [folium](https://pypi.org/project/folium) 0.18.0 â 0.19.5 (Make beautiful maps with Leaflet.js & Python)
+ * [holoviews](https://pypi.org/project/holoviews) 1.20.0 â 1.20.2 (A high-level plotting API for the PyData ecosystem built on HoloViews.)
+ * [hpack](https://pypi.org/project/hpack) 4.0.0 â 4.1.0 (Pure-Python HPACK header encoding)
+ * [huggingface-hub](https://pypi.org/project/huggingface-hub) 0.28.1 â 0.29.3 (Client library to download and publish models, datasets and other repos on the huggingface.co hub)
+ * [hypercorn](https://pypi.org/project/hypercorn) 0.16.0 â 0.17.3 (A ASGI Server based on Hyper libraries and inspired by Gunicorn)
+ * [hyperframe](https://pypi.org/project/hyperframe) 6.0.1 â 6.1.0 (Pure-Python HTTP/2 framing)
+ * [hypothesis](https://pypi.org/project/hypothesis) 6.122.3 â 6.130.4 (A library for property-based testing)
+ * [idna](https://pypi.org/project/idna) 3.7 â 3.10 (Internationalized Domain Names in Applications (IDNA))
+ * [imageio](https://pypi.org/project/imageio) 2.33.1 â 2.37.0 (Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.)
+ * [importlib-metadata](https://pypi.org/project/importlib-metadata) 7.1.0 â 8.6.1 (Read metadata from Python packages)
+ * [ipympl](https://pypi.org/project/ipympl) 0.9.6 â 0.9.7 (Matplotlib Jupyter Extension)
+ * [ipython](https://pypi.org/project/ipython) 8.32.0 â 8.34.0 (IPython: Productive Interactive Computing)
+ * [ipywidgets](https://pypi.org/project/ipywidgets) 8.1.5 â 8.1.6 (Jupyter interactive widgets)
+ * [jupyter-client](https://pypi.org/project/jupyter-client) 8.6.2 â 8.6.3 (Jupyter protocol implementation and client libraries)
+ * [jupyter-events](https://pypi.org/project/jupyter-events) 0.10.0 â 0.12.0 (Jupyter Event System library)
+ * [jupyterlab](https://pypi.org/project/jupyterlab) 4.3.5 â 4.4.1 (JupyterLab computational environment)
+ * [jupyterlab-widgets](https://pypi.org/project/jupyterlab-widgets) 3.0.13 â 3.0.14 (Jupyter interactive widgets for JupyterLab)
+ * [keras](https://pypi.org/project/keras) 3.8.0 â 3.9.2 (Multi-backend Keras)
+ * [langchain](https://pypi.org/project/langchain) 0.3.18 â 0.3.23 (Building applications with LLMs through composability)
+ * [langchain-core](https://pypi.org/project/langchain-core) 0.3.34 â 0.3.51 (Building applications with LLMs through composability)
+ * [langchain-text-splitters](https://pypi.org/project/langchain-text-splitters) 0.3.6 â 0.3.8 (LangChain text splitting utilities)
+ * [langsmith](https://pypi.org/project/langsmith) 0.2.11 â 0.3.24 (Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.)
+ * [markdown](https://pypi.org/project/markdown) 3.5.1 â 3.7 (Python implementation of John Gruber's Markdown.)
+ * [matplotlib](https://pypi.org/project/matplotlib) 3.10.0 â 3.10.1 (Python plotting package)
+ * [mypy](https://pypi.org/project/mypy) 1.14.0 â 1.15.0 (Optional static typing for Python)
+ * [mysql-connector-python](https://pypi.org/project/mysql-connector-python) 8.0.21 â 9.2.0 (A self-contained Python driver for communicating with MySQL servers, using an API that is compliant with the Python Database API Specification v)
+ * [narwhals](https://pypi.org/project/narwhals) 1.21.1 â 1.30.0 (Extremely lightweight compatibility layer between dataframe libraries)
+ * [notebook](https://pypi.org/project/notebook) 7.3.1 â 7.4.0 (Jupyter Notebook - A web-based notebook environment for interactive computing)
+ * [numba](https://pypi.org/project/numba) 0.61.0 â 0.61.2 (compiling Python code using LLVM)
+ * [numpy](https://pypi.org/project/numpy) 2.1.3 â 2.2.4 (Fundamental package for array computing in Python)
+ * [openai](https://pypi.org/project/openai) 1.61.1 â 1.72.0 (The official Python library for the openai API)
+ * [opencv-python](https://pypi.org/project/opencv-python) 4.10.0.84 â 4.11.0.86 (Wrapper package for OpenCV python bindings.)
+ * [optree](https://pypi.org/project/optree) 0.13.1 â 0.14.0 (Optimized PyTree Utilities.)
+ * [panel](https://pypi.org/project/panel) 1.6.0 â 1.6.2 (The powerful data exploration & web app framework for Python.)
+ * [param](https://pypi.org/project/param) 2.1.1 â 2.2.0 (Make your Python code clearer and more reliable by declaring Parameters.)
+ * [pip](https://pypi.org/project/pip) 24.3.1 â 25.0.1 (The PyPA recommended tool for installing Python packages.)
+ * [platformdirs](https://pypi.org/project/platformdirs) 4.2.2 â 4.3.6 (A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.)
+ * [plotly](https://pypi.org/project/plotly) 5.24.1 â 6.0.1 (An open-source interactive data visualization library for Python)
+ * [polars](https://pypi.org/project/polars) 1.22.0 â 1.27.1 (Blazingly fast DataFrame library)
+ * [prometheus-client](https://pypi.org/project/prometheus-client) 0.18.0 â 0.21.1 (Python client for the Prometheus monitoring system.)
+ * [prompt-toolkit](https://pypi.org/project/prompt-toolkit) 3.0.48 â 3.0.50 (Library for building powerful interactive command lines in Python)
+ * [pyarrow](https://pypi.org/project/pyarrow) 19.0.0 â 19.0.1 (Python library for Apache Arrow)
+ * [pyasn1](https://pypi.org/project/pyasn1) 0.4.8 â 0.6.1 (Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208))
+ * [pyasn1-modules](https://pypi.org/project/pyasn1-modules) 0.2.8 â 0.4.1 (A collection of ASN.1-based protocols modules)
+ * [pyjwt](https://pypi.org/project/pyjwt) 2.8.0 â 2.10.1 (JSON Web Token implementation in Python)
+ * [pympler](https://pypi.org/project/pympler) 1.0.1 â 1.1 (A development tool to measure, monitor and analyze the memory behavior of Python objects.)
+ * [pyomo](https://pypi.org/project/pyomo) 6.8.2 â 6.9.1 (Pyomo: Python Optimization Modeling Objects)
+ * [pypandoc](https://pypi.org/project/pypandoc) 1.5 â 1.15 (Thin wrapper for pandoc.)
+ * [pytest](https://pypi.org/project/pytest) 8.2.2 â 8.3.4 (pytest: simple powerful testing with Python)
+ * [Python](http://www.python.org/) 3.13.2 â 3.13.3 (Python programming language with standard library)
+ * [pytz](https://pypi.org/project/pytz) 2024.1 â 2024.2 (World timezone definitions, modern and historical)
+ * [pyzmq](https://pypi.org/project/pyzmq) 26.2.0 â 26.2.1 (Python bindings for 0MQ)
+ * [qtawesome](https://pypi.org/project/qtawesome) 1.3.1 â 1.4.0 (FontAwesome icons in PyQt and PySide applications)
+ * [qtconsole](https://pypi.org/project/qtconsole) 5.5.2 â 5.6.1 (Jupyter Qt console)
+ * [quart](https://pypi.org/project/quart) 0.19.4 â 0.20.0 (A Python ASGI web framework with the same API as Flask)
+ * [rtree](https://pypi.org/project/rtree) 1.1.0 â 1.3.0 (R-Tree spatial index for Python GIS)
+ * [rx](https://pypi.org/project/rx) 3.1.1 â 3.2.0 (Reactive Extensions (Rx) for Python)
+ * [scikit-image](https://pypi.org/project/scikit-image) 0.25.0 â 0.25.2 (Image processing in Python)
+ * [scipy](https://pypi.org/project/scipy) 1.15.1 â 1.15.2 (Fundamental algorithms for scientific computing in Python)
+ * [send2trash](https://pypi.org/project/send2trash) 1.8.2 â 1.8.3 (Send file to trash natively under Mac OS X, Windows and Linux)
+ * [setuptools](https://pypi.org/project/setuptools) 75.6.0 â 75.8.2 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * [simpy](https://pypi.org/project/simpy) 4.0.1 â 4.1.1 (Event discrete, process based simulation for Python.)
+ * [spyder](https://pypi.org/project/spyder) 5.5.6 â 6.0.5 (The Scientific Python Development Environment)
+ * [spyder-kernels](https://pypi.org/project/spyder-kernels) 2.5.2 â 3.0.3 (Jupyter kernels for Spyder's console)
+ * [sqlalchemy](https://pypi.org/project/sqlalchemy) 2.0.35 â 2.0.38 (Database Abstraction Library)
+ * [starlette](https://pypi.org/project/starlette) 0.41.3 â 0.45.3 (The little ASGI library that shines.)
+ * [streamlit](https://pypi.org/project/streamlit) 1.41.1 â 1.44.0 (A faster way to build and share data apps)
+ * [tomli-w](https://pypi.org/project/tomli-w) 1.1.0 â 1.2.0 (A lil' TOML writer)
+ * [trio](https://pypi.org/project/trio) 0.28.0 â 0.29.0 (A friendly Python library for async concurrency and I/O)
+ * [twine](https://pypi.org/project/twine) 6.0.1 â 6.1.0 (Collection of utilities for publishing packages on PyPI)
+ * [widgetsnbextension](https://pypi.org/project/widgetsnbextension) 4.0.13 â 4.0.14 (Jupyter interactive widgets for Jupyter Notebook)
+ * [winpython](https://pypi.org/project/winpython) 13.1.20250222 â 15.3.20250425 (WinPython distribution tools, including WPPM)
+ * [xarray](https://pypi.org/project/xarray) 2025.1.1 â 2025.3.0 (N-D labeled arrays and datasets in Python)
+ * [yt-dlp](https://pypi.org/project/yt-dlp) 2023.7.6 â 2025.2.19 (A feature-rich command-line audio/video downloader)
+
+Removed packages:
+
+ * [bcrypt](https://pypi.org/project/bcrypt) 4.0.1 (Modern password hashing for your software and your servers)
+ * [dask_expr](https://pypi.org/project/dask_expr) 1.1.21 (High Level Expressions for Dask )
+ * [mutagen](https://pypi.org/project/mutagen) 1.47.0 (read and write audio tags for many formats)
+ * [paramiko](https://pypi.org/project/paramiko) 2.8.0 (SSH2 protocol library)
+ * [pint](https://pypi.org/project/pint) 0.23 (Physical quantities module)
+ * [pkginfo](https://pypi.org/project/pkginfo) 1.11.2 (Query metadata from sdists / bdists / installed packages.)
+ * [pycryptodomex](https://pypi.org/project/pycryptodomex) 3.20.0 (Cryptographic library for Python)
+ * [streamz](https://pypi.org/project/streamz) 0.6.3 (Streams)
+ * [websockets](https://pypi.org/project/websockets) 14.2 (An implementation of the WebSocket Protocol (RFC 6455 & 7692))
+
+
+
+* * *
diff --git a/changelogs/WinPythonslim-64bit-3.13.5.0.md b/changelogs/WinPythonslim-64bit-3.13.5.0.md
new file mode 100644
index 00000000..e20a7b65
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.13.5.0.md
@@ -0,0 +1,528 @@
+## WinPython 3.13.5.0slim
+
+The following packages are included in WinPython-64bit v3.13.5.0slim 3.10.11.1dot.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Pandoc](https://pandoc.org) | 3.1.9 | an universal document converter
+[Python](http://www.python.org/) | 3.13.5 | Python programming language with standard library
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[absl-py](https://pypi.org/project/absl-py) | 2.2.2 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc-driver-manager](https://pypi.org/project/adbc-driver-manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.6.1 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.18 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.2 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.15.2 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[annotated-types](https://pypi.org/project/annotated-types) | 0.7.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.51.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.9.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.18 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argcomplete](https://pypi.org/project/argcomplete) | 3.6.2 | Bash tab completion for argparse
+[argon2-cffi](https://pypi.org/project/argon2-cffi) | 23.1.0 | Argon2 for Python
+[argon2-cffi-bindings](https://pypi.org/project/argon2-cffi-bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array-api-compat](https://pypi.org/project/array-api-compat) | 1.12.0 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi-csrf](https://pypi.org/project/asgi-csrf) | 0.11 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 1.0.5 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.3.9 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy-iers-data](https://pypi.org/project/astropy-iers-data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 3.0.0 | Annotate AST trees with source code positions
+[async-lru](https://pypi.org/project/async-lru) | 2.0.5 | Simple LRU cache for asyncio
+[asyncssh](https://pypi.org/project/asyncssh) | 2.20.0 | AsyncSSH: Asynchronous SSHv2 client and server library
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 25.3.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure-core](https://pypi.org/project/azure-core) | 1.32.0 | Microsoft Azure Core Library for Python
+[azure-cosmos](https://pypi.org/project/azure-cosmos) | 4.9.0 | Microsoft Azure Cosmos Client Library for Python
+[azure-identity](https://pypi.org/project/azure-identity) | 1.21.0 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.17.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 1.0.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.3.0 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.13.3 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 25.1.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.2.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.9.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.7.3 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.1 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachetools](https://pypi.org/project/cachetools) | 5.5.2 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2025.1.31 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset-normalizer](https://pypi.org/project/charset-normalizer) | 3.4.2 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.10.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.8 | Composable command line interface toolkit
+[click-default-group](https://pypi.org/project/click-default-group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.1.1 | Pickler class to extend the standard pickle.Pickler functionality
+[cohere](https://pypi.org/project/cohere) | 5.15.0 |
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorcet](https://pypi.org/project/colorcet) | 3.1.0 | Collection of perceptually uniform colormaps
+[colorlog](https://pypi.org/project/colorlog) | 6.9.0 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.2 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g.
+[cryptography](https://pypi.org/project/cryptography) | 44.0.0 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxopt](https://pypi.org/project/cvxopt) | 1.3.2 | Convex optimization package
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.4 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.1.1 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 1.0.1 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2025.4.1 | Parallel PyData with Task Scheduling
+[datasette](https://pypi.org/project/datasette) | 0.65.1 | An open source multi-tool for exploring and publishing data
+[datasette-graphql](https://pypi.org/project/datasette-graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[datashader](https://pypi.org/project/datashader) | 0.17.0 | Data visualization toolchain based on aggregating into a grid
+[deap](https://pypi.org/project/deap) | 1.4.2 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.13 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.2.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[deprecated](https://pypi.org/project/deprecated) | 1.2.14 | Python @deprecated decorator to deprecate old python classes, functions or methods.
+[diff-match-patch](https://pypi.org/project/diff-match-patch) | 20241021 | Repackaging of Google's Diff Match and Patch libraries.
+[dill](https://pypi.org/project/dill) | 0.4.0 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2025.4.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.9.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.2 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.7.0 | DNS toolkit
+[docstring-to-markdown](https://pypi.org/project/docstring-to-markdown) | 0.17 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.21.2 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.3.0 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et-xmlfile](https://pypi.org/project/et-xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval-type-backport](https://pypi.org/project/eval-type-backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.2.0 | Get the currently executing AST node of a frame, and other information
+[faker](https://pypi.org/project/faker) | 37.1.0 | Faker is a Python package that generates fake data for you.
+[fasta2a](https://pypi.org/project/fasta2a) | 0.2.9 | Convert an AI Agent into a A2A server! âš
+[fastapi](https://pypi.org/project/fastapi) | 0.115.12 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastavro](https://pypi.org/project/fastavro) | 1.10.0 | Fast read/write of AVRO files
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.21.1 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.18.0 | A platform independent file lock.
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.1.0 | A simple framework for building complex web applications.
+[flexcache](https://pypi.org/project/flexcache) | 0.3 | Saves and loads to the cache a transformed versions of a source object.
+[flexparser](https://pypi.org/project/flexparser) | 0.4 | Parsing made fun ... using typing.
+[flit](https://pypi.org/project/flit) | 3.12.0 | A simple packaging tool for simple packages.
+[flit-core](https://pypi.org/project/flit-core) | 3.12.0 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.19.5 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.57.0 | Tools to manipulate font files
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2025.3.2 | File-system specification
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 1.0.1 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.12 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.44 | GitPython is a Python library used to interact with Git repositories
+[google-auth](https://pypi.org/project/google-auth) | 2.38.0 | Google Authentication Library
+[google-genai](https://pypi.org/project/google-genai) | 1.16.1 | GenAI Python SDK
+[graphene](https://pypi.org/project/graphene) | 3.4.3 | GraphQL Framework for Python
+[graphql-core](https://pypi.org/project/graphql-core) | 3.2.6 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql-relay](https://pypi.org/project/graphql-relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.7.2 | Signatures for entire Python programs.
+[groq](https://pypi.org/project/groq) | 0.25.0 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.9.0 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.2.0 | Pure-Python HTTP/2 protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[holoviews](https://pypi.org/project/holoviews) | 1.20.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hpack](https://pypi.org/project/hpack) | 4.1.0 | Pure-Python HPACK header encoding
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.7 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.28.1 | The next generation HTTP client.
+[httpx-sse](https://pypi.org/project/httpx-sse) | 0.4.0 | Consume Server-Sent Event (SSE) messages with HTTPX.
+[huggingface-hub](https://pypi.org/project/huggingface-hub) | 0.33.0 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12.1 | Integrated process monitor for developing and reloading daemons.
+[hvplot](https://pypi.org/project/hvplot) | 0.11.2 | A high-level plotting API for the PyData ecosystem built on HoloViews.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.17.3 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.1.0 | Pure-Python HTTP/2 framing
+[hypothesis](https://pypi.org/project/hypothesis) | 6.130.4 | A library for property-based testing
+[id](https://pypi.org/project/id) | 1.5.0 | A tool for generating OIDC identities
+[idna](https://pypi.org/project/idna) | 3.10 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.37.0 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced-learn](https://pypi.org/project/imbalanced-learn) | 0.13.0 | Toolbox for imbalanced dataset in machine learning
+[importlib-metadata](https://pypi.org/project/importlib-metadata) | 8.6.1 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.1.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.1.0 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.3 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.7 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.36.0 | IPython: Productive Interactive Computing
+[ipython-genutils](https://pypi.org/project/ipython-genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython-sql](https://pypi.org/project/ipython-sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.6 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 2.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco-classes](https://pypi.org/project/jaraco-classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco-context](https://pypi.org/project/jaraco-context) | 6.0.1 | Useful decorators and context managers
+[jaraco-functools](https://pypi.org/project/jaraco-functools) | 4.1.0 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.2 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.6 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.9.0 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.10.0 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpointer](https://pypi.org/project/jsonpointer) | 3.0.0 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.23.0 | An implementation of JSON Schema validation for Python
+[jsonschema-specifications](https://pypi.org/project/jsonschema-specifications) | 2024.10.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter-bokeh](https://pypi.org/project/jupyter-bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter-client](https://pypi.org/project/jupyter-client) | 8.6.3 | Jupyter protocol implementation and client libraries
+[jupyter-console](https://pypi.org/project/jupyter-console) | 6.6.3 | Jupyter terminal console
+[jupyter-core](https://pypi.org/project/jupyter-core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter-events](https://pypi.org/project/jupyter-events) | 0.12.0 | Jupyter Event System library
+[jupyter-leaflet](https://pypi.org/project/jupyter-leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter-lsp](https://pypi.org/project/jupyter-lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter-server](https://pypi.org/project/jupyter-server) | 2.15.0 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter-server-terminals](https://pypi.org/project/jupyter-server-terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.4.2 | JupyterLab computational environment
+[jupyterlab-pygments](https://pypi.org/project/jupyterlab-pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab-server](https://pypi.org/project/jupyterlab-server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab-widgets](https://pypi.org/project/jupyterlab-widgets) | 3.0.14 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.10.0 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.6.0 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.8 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.25 | Building applications with LLMs through composability
+[langchain-core](https://pypi.org/project/langchain-core) | 0.3.59 | Building applications with LLMs through composability
+[langchain-text-splitters](https://pypi.org/project/langchain-text-splitters) | 0.3.8 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.3.42 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy-loader](https://pypi.org/project/lazy-loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[linkify-it-py](https://pypi.org/project/linkify-it-py) | 2.0.3 | Links recognition library with FULL unicode support.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.3 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire-api](https://pypi.org/project/logfire-api) | 3.12.0 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.9 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.7 | Python implementation of John Gruber's Markdown.
+[markdown-it-py](https://pypi.org/project/markdown-it-py) | 3.0.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 3.0.2 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.3 | Python plotting package
+[matplotlib-inline](https://pypi.org/project/matplotlib-inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.8.3 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mcp](https://pypi.org/project/mcp) | 1.9.3 | Model Context Protocol SDK
+[mdit-py-plugins](https://pypi.org/project/mdit-py-plugins) | 0.4.2 | Collection of plugins for markdown-it-py
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.2 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.8.1 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 3.1.3 | A sane and fast Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml-dtypes](https://pypi.org/project/ml-dtypes) | 0.5.1 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.23.3 | Machine Learning Library Extensions
+[more-itertools](https://pypi.org/project/more-itertools) | 10.6.0 | More routines for operating on iterables, beyond itertools
+[mpld3](https://pypi.org/project/mpld3) | 0.5.10 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal-extensions](https://pypi.org/project/msal-extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.1.0 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.4.3 | multidict implementation
+[multipledispatch](https://pypi.org/project/multipledispatch) | 1.0.0 | Multiple dispatch
+[mypy](https://pypi.org/project/mypy) | 1.15.0 | Optional static typing for Python
+[mypy-extensions](https://pypi.org/project/mypy-extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[mysql-connector-python](https://pypi.org/project/mysql-connector-python) | 9.2.0 | A self-contained Python driver for communicating with MySQL servers, using an API that is compliant with the Python Database API Specification v
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.36.0 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.2 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.6 | Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest-asyncio](https://pypi.org/project/nest-asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nh3](https://pypi.org/project/nh3) | 0.2.18 | Python bindings to the ammonia HTML sanitization library.
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.4.2 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook-shim](https://pypi.org/project/notebook-shim) | 0.2.4 | A shim layer for notebook traits and config
+[numba](https://pypi.org/project/numba) | 0.61.2 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.2.6 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.8.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.82.0 | The official Python library for the openai API
+[opencv-python](https://pypi.org/project/opencv-python) | 4.11.0.86 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.5 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[opentelemetry-api](https://pypi.org/project/opentelemetry-api) | 1.32.1 | OpenTelemetry Python API
+[optree](https://pypi.org/project/optree) | 0.14.1 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 4.2.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.16 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post3 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.1 | Utilities for writing pandoc filters in python
+[panel](https://pypi.org/project/panel) | 1.6.3 | The powerful data exploration & web app framework for Python.
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[param](https://pypi.org/project/param) | 2.2.0 | Make your Python code clearer and more reliable by declaring Parameters.
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.2 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.12.1 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 1.0.1 | A Python package for describing statistical models and for building design matrices.
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.9.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.31.2 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.1.0 | Python Imaging Library (Fork)
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.3.7 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 6.0.1 | An open-source interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.4 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.31.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[prettytable](https://pypi.org/project/prettytable) | 3.16.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[prince](https://pypi.org/project/prince) | 0.16.0 | Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus-client](https://pypi.org/project/prometheus-client) | 0.21.1 | Python client for the Prometheus monitoring system.
+[prompt-toolkit](https://pypi.org/project/prompt-toolkit) | 3.0.51 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.3.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 6.30.2 |
+[psutil](https://pypi.org/project/psutil) | 7.0.0 | Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7.
+[psygnal](https://pypi.org/project/psygnal) | 0.12.0 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure-eval](https://pypi.org/project/pure-eval) | 0.2.3 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 20.0.0 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.6.1 | Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)
+[pyasn1-modules](https://pypi.org/project/pyasn1-modules) | 0.4.1 | A collection of ASN.1-based protocols modules
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pyct](https://pypi.org/project/pyct) | 0.5.0 | Python package common tasks for users (e.g. copy examples, fetch data, ...)
+[pydantic](https://pypi.org/project/pydantic) | 2.10.6 | Data validation using Python type hints
+[pydantic-ai-slim](https://pypi.org/project/pydantic-ai-slim) | 0.2.9 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic-core](https://pypi.org/project/pydantic-core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydantic-evals](https://pypi.org/project/pydantic-evals) | 0.2.9 | Framework for evaluating stochastic code execution, especially code making use of LLMs
+[pydantic-graph](https://pypi.org/project/pydantic-graph) | 0.2.9 | Graph and state machine library
+[pydantic-settings](https://pypi.org/project/pydantic-settings) | 2.8.1 | Settings management using Pydantic
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.5 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygithub](https://pypi.org/project/pygithub) | 2.6.1 | Use the full Github API v3
+[pygments](https://pypi.org/project/pygments) | 2.19.1 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.10.1 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.3.6 | python code static checker
+[pylint-venv](https://pypi.org/project/pylint-venv) | 3.0.4 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls-spyder](https://pypi.org/project/pyls-spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.13 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyogrio](https://pypi.org/project/pyogrio) | 0.10.0 | Vectorized spatial vector file format I/O using GDAL/OGR
+[pyomo](https://pypi.org/project/pyomo) | 6.9.2 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.15 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.2.3 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 5.4.0 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pyproj](https://pypi.org/project/pyproj) | 3.7.0 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.11 | Python bindings for the Qt cross platform application toolkit
+[pyqt5-qt5](https://pypi.org/project/pyqt5-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5-sip](https://pypi.org/project/pyqt5-sip) | 12.17.0 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.7 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine-qt5](https://pypi.org/project/pyqtwebengine-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pyspnego](https://pypi.org/project/pyspnego) | 0.11.2 | Windows Negotiate Authentication Client and Server
+[pytest](https://pypi.org/project/pytest) | 8.3.5 | pytest: simple powerful testing with Python
+[python-barcode](https://pypi.org/project/python-barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python-dateutil](https://pypi.org/project/python-dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python-dotenv](https://pypi.org/project/python-dotenv) | 1.1.0 | Read key-value pairs from a .env file and set them as environment variables
+[python-json-logger](https://pypi.org/project/python-json-logger) | 3.3.0 | JSON Log Formatter for the Python Logging Package
+[python-lsp-black](https://pypi.org/project/python-lsp-black) | 2.0.0 | Black plugin for the Python LSP Server
+[python-lsp-jsonrpc](https://pypi.org/project/python-lsp-jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python-lsp-server](https://pypi.org/project/python-lsp-server) | 1.12.2 | Python Language Server for the Language Server Protocol
+[python-multipart](https://pypi.org/project/python-multipart) | 0.0.20 | A streaming multipart parser for Python
+[python-slugify](https://pypi.org/project/python-slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.5 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2025.2 | World timezone definitions, modern and historical
+[pyuca](https://pypi.org/project/pyuca) | 1.2 | a Python implementation of the Unicode Collation Algorithm
+[pyusb](https://pypi.org/project/pyusb) | 1.3.1 | Easy USB access for Python
+[pyviz-comms](https://pypi.org/project/pyviz-comms) | 3.0.4 | A JupyterLab extension for rendering HoloViz content.
+[pywavelets](https://pypi.org/project/pywavelets) | 1.8.0 | PyWavelets, wavelet transform module
+[pywin32](https://pypi.org/project/pywin32) | 310 | Python for Window Extensions
+[pywin32-ctypes](https://pypi.org/project/pywin32-ctypes) | 0.2.3 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.15 | Pseudo terminal support for Windows from Python.
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.4.0 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post5 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 8.0 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.4 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.4.0 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.6.1 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.3 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.20.0 | A Python ASGI web framework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.13.0 | rapid fuzzy string matching
+[readme-renderer](https://pypi.org/project/readme-renderer) | 44.0 | readme_renderer is a library for rendering readme descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.2.1 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.36.2 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.3.1 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests-ntlm](https://pypi.org/project/requests-ntlm) | 1.3.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests-toolbelt](https://pypi.org/project/requests-toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339-validator](https://pypi.org/project/rfc3339-validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986-validator](https://pypi.org/project/rfc3986-validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 14.0.0 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.13.0 | a python refactoring library...
+[rpds-py](https://pypi.org/project/rpds-py) | 0.24.0 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.4.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.2.0 | Reactive Extensions (Rx) for Python
+[scikit-image](https://pypi.org/project/scikit-image) | 0.25.2 | Image processing in Python
+[scikit-learn](https://pypi.org/project/scikit-learn) | 1.6.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.15.3 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.5 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7.post2 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.3 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.1.0 | Manipulation and analysis of geometric objects
+[shellingham](https://pypi.org/project/shellingham) | 1.5.4 | Tool to Detect Surrounding Shell
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.1.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.17.0 | Python 2 and 3 compatibility utilities
+[sklearn-compat](https://pypi.org/project/sklearn-compat) | 0.1.3 | Ease support for compatible scikit-learn estimators across versions
+[skrub](https://pypi.org/project/skrub) | 0.5.3 | Prepping tables for machine learning
+[smmap](https://pypi.org/project/smmap) | 5.0.2 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.1 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.5.1 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.6 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 8.1.3 | Python documentation generator
+[sphinx-rtd-theme](https://pypi.org/project/sphinx-rtd-theme) | 3.0.2 | Read the Docs theme for Sphinx
+[sphinxcontrib-applehelp](https://pypi.org/project/sphinxcontrib-applehelp) | 2.0.0 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib-devhelp](https://pypi.org/project/sphinxcontrib-devhelp) | 2.0.0 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib-htmlhelp](https://pypi.org/project/sphinxcontrib-htmlhelp) | 2.1.0 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib-jquery](https://pypi.org/project/sphinxcontrib-jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib-jsmath](https://pypi.org/project/sphinxcontrib-jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib-qthelp](https://pypi.org/project/sphinxcontrib-qthelp) | 2.0.0 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib-serializinghtml](https://pypi.org/project/sphinxcontrib-serializinghtml) | 2.0.0 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 6.0.7 | The Scientific Python Development Environment
+[spyder-kernels](https://pypi.org/project/spyder-kernels) | 3.0.5 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.40 | Database Abstraction Library
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite-fts4](https://pypi.org/project/sqlite-fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite-utils](https://pypi.org/project/sqlite-utils) | 3.38 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.5.3 | A non-validating SQL parser.
+[squarify](https://pypi.org/project/squarify) | 0.4.4 | Pure Python implementation of the squarify treemap layout algorithm
+[sse-starlette](https://pypi.org/project/sse-starlette) | 2.2.1 | SSE plugin for Starlette
+[sspilib](https://pypi.org/project/sspilib) | 0.2.0 | SSPI API bindings for Python
+[stack-data](https://pypi.org/project/stack-data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.46.2 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.46.0 | A faster way to build and share data apps
+[superqt](https://pypi.org/project/superqt) | 0.7.3 | Missing widgets and components for PyQt/PySide
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[sympy](https://pypi.org/project/sympy) | 1.14.0 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.1.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 9.1.2 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 3.1.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text-unidecode](https://pypi.org/project/text-unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.3 | Compute distance between the two texts.
+[thefuzz](https://pypi.org/project/thefuzz) | 0.22.1 | Fuzzy string matching in python
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.6.0 | threadpoolctl
+[three-merge](https://pypi.org/project/three-merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2025.3.30 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.9.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.4.0 | A tiny CSS parser
+[tokenizers](https://pypi.org/project/tokenizers) | 0.21.1 |
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.2.1 | A lil' TOML parser
+[tomli-w](https://pypi.org/project/tomli-w) | 1.2.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.13.2 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 1.0.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.5.1 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.67.1 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.3 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.30.0 | A friendly Python library for async concurrency and I/O
+[trove-classifiers](https://pypi.org/project/trove-classifiers) | 2025.5.9.12 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 6.1.0 | Collection of utilities for publishing packages on PyPI
+[typer](https://pypi.org/project/typer) | 0.15.2 | Typer, build great CLIs. Easy to code. Based on Python type hints.
+[types-python-dateutil](https://pypi.org/project/types-python-dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[types-requests](https://pypi.org/project/types-requests) | 2.32.0.20250328 | Typing stubs for requests
+[typing-extensions](https://pypi.org/project/typing-extensions) | 4.13.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing-inspection](https://pypi.org/project/typing-inspection) | 0.4.0 | Runtime typing introspection tools
+[tzdata](https://pypi.org/project/tzdata) | 2025.2 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.3.1 | tzinfo object for the local timezone
+[uc-micro-py](https://pypi.org/project/uc-micro-py) | 1.0.3 | Micro subset of unicode data files for linkify-it-py projects.
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap-learn](https://pypi.org/project/umap-learn) | 0.5.7 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.2.2 | calculations with values with uncertainties, error propagation
+[uri-template](https://pypi.org/project/uri-template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.4.0 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.34.2 | The lightning-fast ASGI server.
+[vega-datasets](https://pypi.org/project/vega-datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 6.0.0 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 24.11.1 | A library for working with the color formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket-client](https://pypi.org/project/websocket-client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 14.2 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.1.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.7 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.14 | Jupyter interactive widgets for Jupyter Notebook
+[winpython](https://pypi.org/project/winpython) | 16.6.20250620 | WinPython distribution tools, including WPPM
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wrapt](https://pypi.org/project/wrapt) | 1.16.0 | Module for decorators, wrappers and monkey patching.
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2025.4.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.2.3 | A Python module for creating Excel XLSX files.
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt-dlp](https://pypi.org/project/yt-dlp) | 2025.2.19 | A feature-rich command-line audio/video downloader
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.21.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
+### WheelHouse packages
+
+Name | Version | Description
+-----|---------|------------
+
+
+
diff --git a/changelogs/WinPythonslim-64bit-3.13.5.0_History.md b/changelogs/WinPythonslim-64bit-3.13.5.0_History.md
new file mode 100644
index 00000000..894ae809
--- /dev/null
+++ b/changelogs/WinPythonslim-64bit-3.13.5.0_History.md
@@ -0,0 +1,200 @@
+ï»ż## History of changes for WinPython-64bit 3.13.5.0slim
+
+The following changes were made to WinPython-64bit distribution since version 3.13.3.0slim.
+
+
+
+
+### Tools
+
+
+New packages:
+ * Python 3.13.5 (Python programming language with standard library)
+
+### Python packages
+
+
+New packages:
+ * argcomplete 3.6.2 (Bash tab completion for argparse)
+ * bcrypt 4.3.0 (Modern password hashing for your software and your servers)
+ * fasta2a 0.2.9 (Convert an AI Agent into a A2A server! âš)
+ * google-genai 1.16.1 (GenAI Python SDK)
+ * mcp 1.9.3 (Model Context Protocol SDK)
+ * opentelemetry-api 1.32.1 (OpenTelemetry Python API)
+ * pydantic-evals 0.2.9 (Framework for evaluating stochastic code execution, especially code making use of LLMs)
+ * pydantic-settings 2.8.1 (Settings management using Pydantic)
+ * sse-starlette 2.2.1 (SSE plugin for Starlette)
+ * typing-inspection 0.4.0 (Runtime typing introspection tools)
+ * websockets 14.2 (An implementation of the WebSocket Protocol (RFC 6455 & 7692))
+
+Upgraded packages:
+ * aiohappyeyeballs 2.4.4 â 2.6.1 (Happy Eyeballs for asyncio)
+ * aiohttp 3.11.11 â 3.11.18 (Async http client/server framework (asyncio))
+ * aiosignal 1.3.1 â 1.3.2 (aiosignal: a list of registered asynchronous callbacks)
+ * alembic 1.15.1 â 1.15.2 (A database migration tool for SQLAlchemy.)
+ * anthropic 0.49.0 â 0.51.0 (The official Python library for the anthropic API)
+ * anyio 4.8.0 â 4.9.0 (High level compatibility layer for multiple asynchronous event loop implementations)
+ * anywidget 0.9.12 â 0.9.18 (custom jupyter widgets made easy)
+ * asteval 0.9.31 â 1.0.5 (Safe, minimalistic evaluator of python expression using ast module)
+ * astroid 3.1.0 â 3.3.9 (An abstract syntax tree for Python with inference support.)
+ * asttokens 2.4.1 â 3.0.0 (Annotate AST trees with source code positions)
+ * attrs 23.2.0 â 25.3.0 (Classes Without Boilerplate)
+ * babel 2.16.0 â 2.17.0 (Internationalization utilities)
+ * beautifulsoup4 4.12.2 â 4.13.3 (Screen-scraping library)
+ * bleach 6.1.0 â 6.2.0 (An easy safelist-based HTML-sanitizing tool.)
+ * bokeh 3.7.2 â 3.7.3 (Interactive plots and applications in the browser from Python)
+ * branca 0.8.0 â 0.8.1 (Generate complex HTML+JS pages with Python)
+ * cohere 5.13.12 â 5.15.0 ()
+ * colorlog 6.8.2 â 6.9.0 (Add colours to the output of Python's logging module.)
+ * contourpy 1.3.1 â 1.3.2 (Python library for calculating contours of 2D quadrilateral grids)
+ * cython 3.0.12 â 3.1.1 (The Cython compiler for writing C extensions in the Python language.)
+ * dask 2025.3.0 â 2025.4.1 (Parallel PyData with Task Scheduling)
+ * debugpy 1.8.0 â 1.8.13 (An implementation of the Debug Adapter Protocol for Python)
+ * decorator 5.1.1 â 5.2.1 (Decorators for Humans)
+ * dill 0.3.9 â 0.4.0 (serialize all of Python)
+ * distributed 2025.3.0 â 2025.4.1 (Distributed scheduler for Dask)
+ * distro 1.8.0 â 1.9.0 (Distro - an OS platform information API)
+ * django 5.0.7 â 5.2 (A high-level Python web framework that encourages rapid development and clean, pragmatic design.)
+ * dnspython 2.6.1 â 2.7.0 (DNS toolkit)
+ * duckdb 1.2.2 â 1.3.0 (DuckDB in-process database)
+ * faker 36.1.1 â 37.1.0 (Faker is a Python package that generates fake data for you.)
+ * fastapi 0.115.8 â 0.115.12 (FastAPI framework, high performance, easy to learn, fast to code, ready for production)
+ * fastjsonschema 2.18.0 â 2.21.1 (Fastest Python implementation of JSON schema)
+ * filelock 3.17.0 â 3.18.0 (A platform independent file lock.)
+ * flit 3.10.1 â 3.12.0 (A simple packaging tool for simple packages.)
+ * fonttools 4.55.3 â 4.57.0 (Tools to manipulate font files)
+ * fsspec 2024.6.1 â 2025.3.2 (File-system specification)
+ * gitdb 4.0.10 â 4.0.12 (Git Object Database)
+ * gitpython 3.1.32 â 3.1.44 (GitPython is a Python library used to interact with Git repositories)
+ * graphene 3.3 â 3.4.3 (GraphQL Framework for Python)
+ * griffe 1.5.5 â 1.7.2 (Signatures for entire Python programs.)
+ * groq 0.13.1 â 0.25.0 (The official Python library for the groq API)
+ * guidata 3.7.1 â 3.9.0 (Automatic GUI generation for easy dataset editing and display)
+ * h2 4.1.0 â 4.2.0 (Pure-Python HTTP/2 protocol implementation)
+ * httpcore 1.0.5 â 1.0.7 (A minimal low-level HTTP client.)
+ * httpx 0.27.2 â 0.28.1 (The next generation HTTP client.)
+ * hupper 1.12 â 1.12.1 (Integrated process monitor for developing and reloading daemons.)
+ * iniconfig 2.0.0 â 2.1.0 (brain-dead simple config-ini parsing)
+ * intervaltree 3.0.2 â 3.1.0 (Editable interval tree data structure for Python 2 and 3)
+ * ipython 8.34.0 â 8.36.0 (IPython: Productive Interactive Computing)
+ * jinja2 3.1.2 â 3.1.6 (A very fast and expressive template engine.)
+ * jiter 0.8.2 â 0.9.0 (Fast iterable JSON parser.)
+ * json5 0.9.14 â 0.10.0 (A Python implementation of the JSON5 data format.)
+ * jsonpointer 2.4 â 3.0.0 (Identify specific nodes in a JSON document (RFC 6901))
+ * jsonschema 4.19.2 â 4.23.0 (An implementation of JSON Schema validation for Python)
+ * jupyterlab 4.4.1 â 4.4.2 (JupyterLab computational environment)
+ * keras 3.9.2 â 3.10.0 (Multi-backend Keras)
+ * langchain 0.3.23 â 0.3.25 (Building applications with LLMs through composability)
+ * langsmith 0.3.24 â 0.3.42 (Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.)
+ * lmfit 1.3.1 â 1.3.3 (Least-Squares Minimization with Bounds and Constraints)
+ * mako 1.3.5 â 1.3.9 (A super-fast templating language that borrows the best ideas from the existing templating languages.)
+ * matplotlib 3.10.1 â 3.10.3 (Python plotting package)
+ * maturin 1.8.1 â 1.8.3 (Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages)
+ * missingno 0.5.1 â 0.5.2 (Missing data visualization module for Python.)
+ * mistralai 1.2.5 â 1.8.1 (Python Client SDK for the Mistral AI API.)
+ * mistune 2.0.5 â 3.1.3 (A sane and fast Markdown parser with useful plugins and renderers)
+ * mpld3 0.5.8 â 0.5.10 (D3 Viewer for Matplotlib)
+ * multidict 6.1.0 â 6.4.3 (multidict implementation)
+ * narwhals 1.30.0 â 1.36.0 (Extremely lightweight compatibility layer between dataframe libraries)
+ * nbclient 0.10.0 â 0.10.2 (A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.)
+ * nbconvert 7.16.1 â 7.16.6 (Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.)
+ * notebook 7.4.0 â 7.4.2 (Jupyter Notebook - A web-based notebook environment for interactive computing)
+ * numpy 2.2.4 â 2.2.6 (Fundamental package for array computing in Python)
+ * numpydoc 1.6.0 â 1.8.0 (Sphinx extension to support docstrings in Numpy format)
+ * openai 1.72.0 â 1.82.0 (The official Python library for the openai API)
+ * openpyxl 3.1.2 â 3.1.5 (A Python library to read/write Excel 2010 xlsx/xlsm files)
+ * optree 0.14.0 â 0.14.1 (Optimized PyTree Utilities.)
+ * optuna 3.6.1 â 4.2.1 (A hyperparameter optimization framework)
+ * orjson 3.10.12 â 3.10.16 (Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy)
+ * pandocfilters 1.5.0 â 1.5.1 (Utilities for writing pandoc filters in python)
+ * panel 1.6.2 â 1.6.3 (The powerful data exploration & web app framework for Python.)
+ * partd 1.4.0 â 1.4.2 (Appendable key-value storage)
+ * pathspec 0.11.0 â 0.12.1 (Utility library for gitignore style pattern matching of file paths.)
+ * patsy 0.5.6 â 1.0.1 (A Python package for describing statistical models and for building design matrices.)
+ * pexpect 4.8.0 â 4.9.0 (Pexpect allows easy control of interactive console applications.)
+ * pg8000 1.23.0 â 1.31.2 (PostgreSQL interface library)
+ * pip 25.0.1 â 25.1.1 (The PyPA recommended tool for installing Python packages.)
+ * platformdirs 4.3.6 â 4.3.7 (A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.)
+ * plotpy 2.7.2 â 2.7.4 (Curve and image plotting tools for Python/Qt applications)
+ * polars 1.27.1 â 1.31.0 (Blazingly fast DataFrame library)
+ * prettytable 3.3.0 â 3.16.0 (A simple Python library for easily displaying tabular data in a visually appealing ASCII table format)
+ * prince 0.15.0 â 0.16.0 (Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA)
+ * propcache 0.2.1 â 0.3.1 (Accelerated property cache)
+ * protobuf 5.27.3 â 6.30.2 ()
+ * psutil 5.9.8 â 7.0.0 (Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7.)
+ * psygnal 0.11.1 â 0.12.0 (Fast python callback/event system modeled after Qt Signals)
+ * pyarrow 19.0.1 â 20.0.0 (Python library for Apache Arrow)
+ * pyerfa 2.0.1.4 â 2.0.1.5 (Python bindings for ERFA)
+ * pylint 3.1.0 â 3.3.6 (python code static checker)
+ * pynndescent 0.5.12 â 0.5.13 (Nearest Neighbor Descent)
+ * pyomo 6.9.1 â 6.9.2 (Pyomo: Python Optimization Modeling Objects)
+ * pyparsing 3.2.1 â 3.2.3 (pyparsing module - Classes and methods to define and execute parsing grammars)
+ * pypdf 5.1.0 â 5.4.0 (A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files)
+ * pyqt5 5.15.10 â 5.15.11 (Python bindings for the Qt cross platform application toolkit)
+ * pyqtwebengine 5.15.6 â 5.15.7 (Python bindings for the Qt WebEngine framework)
+ * pytest 8.3.4 â 8.3.5 (pytest: simple powerful testing with Python)
+ * pythonqwt 0.14.4 â 0.14.5 (Qt plotting widgets for Python)
+ * pytz 2024.2 â 2025.2 (World timezone definitions, modern and historical)
+ * pywin32 308 â 310 (Python for Window Extensions)
+ * pywinpty 2.0.14 â 2.0.15 (Pseudo terminal support for Windows from Python.)
+ * pyzmq 26.2.1 â 26.4.0 (Python bindings for 0MQ)
+ * qstylizer 0.2.2 â 0.2.4 (Stylesheet Generator for PyQt{4-5}/PySide{1-2})
+ * qtpy 2.4.1 â 2.4.3 (Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).)
+ * rapidfuzz 3.9.6 â 3.13.0 (rapid fuzzy string matching)
+ * redis 5.0.8 â 5.2.1 (Python client for Redis database and key-value store)
+ * referencing 0.35.1 â 0.36.2 (JSON Referencing + Python)
+ * reportlab 4.2.5 â 4.3.1 (The Reportlab Toolkit)
+ * rich 13.9.4 â 14.0.0 (Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal)
+ * rope 1.12.0 â 1.13.0 (a python refactoring library...)
+ * rtree 1.3.0 â 1.4.0 (R-Tree spatial index for Python GIS)
+ * scipy 1.15.2 â 1.15.3 (Fundamental algorithms for scientific computing in Python)
+ * setuptools 75.8.2 â 79.0.1 (Easily download, build, install, upgrade, and uninstall Python packages)
+ * shapely 2.0.6 â 2.1.0 (Manipulation and analysis of geometric objects)
+ * six 1.16.0 â 1.17.0 (Python 2 and 3 compatibility utilities)
+ * skrub 0.5.1 â 0.5.3 (Prepping tables for machine learning)
+ * smmap 5.0.0 â 5.0.2 (A pure Python implementation of a sliding window memory map manager)
+ * sniffio 1.3.0 â 1.3.1 (Sniff out which async library your code is running under)
+ * sphinx 7.3.7 â 8.1.3 (Python documentation generator)
+ * spyder 6.0.5 â 6.0.7 (The Scientific Python Development Environment)
+ * sqlalchemy 2.0.38 â 2.0.40 (Database Abstraction Library)
+ * starlette 0.45.3 â 0.46.2 (The little ASGI library that shines.)
+ * streamlit 1.44.0 â 1.46.0 (A faster way to build and share data apps)
+ * superqt 0.7.1 â 0.7.3 (Missing widgets and components for PyQt/PySide)
+ * sympy 1.13.3 â 1.14.0 (Computer algebra system (CAS) in Python)
+ * tblib 3.0.0 â 3.1.0 (Traceback serialization library.)
+ * tenacity 9.0.0 â 9.1.2 (Retry code until it succeeds)
+ * termcolor 2.5.0 â 3.1.0 (ANSI color formatting for output in terminal)
+ * threadpoolctl 3.5.0 â 3.6.0 (threadpoolctl)
+ * tifffile 2025.1.10 â 2025.3.30 (Read and write TIFF files)
+ * tiktoken 0.8.0 â 0.9.0 (tiktoken is a fast BPE tokeniser for use with OpenAI's models)
+ * tokenizers 0.21.0 â 0.21.1 ()
+ * tornado 6.4.2 â 6.5.1 (Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.)
+ * tqdm 4.66.4 â 4.67.1 (Fast, Extensible Progress Meter)
+ * traitlets 5.14.1 â 5.14.3 (Traitlets Python configuration system)
+ * trio 0.29.0 â 0.30.0 (A friendly Python library for async concurrency and I/O)
+ * tzdata 2024.1 â 2025.2 (Provider of IANA time zone data)
+ * tzlocal 5.2 â 5.3.1 (tzinfo object for the local timezone)
+ * urllib3 2.2.3 â 2.4.0 (HTTP library with thread-safe connection pooling, file post, and more.)
+ * uvicorn 0.34.0 â 0.34.2 (The lightning-fast ASGI server.)
+ * winpython 15.3.20250425 â 16.6.20250620 (WinPython distribution tools, including WPPM)
+ * xarray 2025.3.0 â 2025.4.0 (N-D labeled arrays and datasets in Python)
+ * xlsxwriter 3.1.9 â 3.2.3 (A Python module for creating Excel XLSX files.)
+
+Removed packages:
+ * Python 3.13.3 (Python programming language with standard library)
+ * aniso8601 9.0.1 (A library for parsing ISO 8601 strings.)
+ * fast-histogram 0.14 (Fast simple 1D and 2D histograms)
+ * jsonpath-python 1.0.6 (A more powerful JSONPath implementation in modern python)
+ * mpl-scatter-density 0.7 (Matplotlib helpers to make density scatter plots)
+ * pydantic-ai 0.0.24 (Agent Framework / shim to use Pydantic with LLMs)
+ * typing-inspect 0.9.0 (Runtime inspection utilities for typing module.)
+
+### WheelHouse packages
+
+
+No differences found.
+
+
+
+
+* * *
diff --git a/changelogs/WinPythonwhl-64bit-3.12.10.1.md b/changelogs/WinPythonwhl-64bit-3.12.10.1.md
new file mode 100644
index 00000000..2872b31f
--- /dev/null
+++ b/changelogs/WinPythonwhl-64bit-3.12.10.1.md
@@ -0,0 +1,522 @@
+## WinPython 3.12.10.1whl
+
+The following packages are included in WinPython-64bit v3.12.10.1whl 3.10.11.1dot.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.12.10 | Python programming language with standard library
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 25.0 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 16.6.20250620 | WinPython distribution tools, including WPPM
+
+
+### WheelHouse packages
+
+Name | Version | Description
+-----|---------|------------
+[absl-py](https://pypi.org/project/absl-py) | 2.2.2 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc-driver-manager](https://pypi.org/project/adbc-driver-manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.6.1 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.18 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.2 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.15.2 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[annotated-types](https://pypi.org/project/annotated-types) | 0.7.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.51.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.9.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.18 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argcomplete](https://pypi.org/project/argcomplete) | 3.6.2 | Bash tab completion for argparse
+[argon2-cffi](https://pypi.org/project/argon2-cffi) | 23.1.0 | Argon2 for Python
+[argon2-cffi-bindings](https://pypi.org/project/argon2-cffi-bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array-api-compat](https://pypi.org/project/array-api-compat) | 1.12.0 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi-csrf](https://pypi.org/project/asgi-csrf) | 0.11 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 1.0.5 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.3.9 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy-iers-data](https://pypi.org/project/astropy-iers-data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 3.0.0 | Annotate AST trees with source code positions
+[async-lru](https://pypi.org/project/async-lru) | 2.0.5 | Simple LRU cache for asyncio
+[asyncssh](https://pypi.org/project/asyncssh) | 2.20.0 | AsyncSSH: Asynchronous SSHv2 client and server library
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 25.3.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure-core](https://pypi.org/project/azure-core) | 1.32.0 | Microsoft Azure Core Library for Python
+[azure-cosmos](https://pypi.org/project/azure-cosmos) | 4.9.0 | Microsoft Azure Cosmos Client Library for Python
+[azure-identity](https://pypi.org/project/azure-identity) | 1.21.0 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.17.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 1.0.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.3.0 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.13.3 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 25.1.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.2.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.9.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.7.3 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.1 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachetools](https://pypi.org/project/cachetools) | 5.5.2 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2025.1.31 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset-normalizer](https://pypi.org/project/charset-normalizer) | 3.4.2 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.10.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.8 | Composable command line interface toolkit
+[click-default-group](https://pypi.org/project/click-default-group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.1.1 | Pickler class to extend the standard pickle.Pickler functionality
+[cohere](https://pypi.org/project/cohere) | 5.15.0 |
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorlog](https://pypi.org/project/colorlog) | 6.9.0 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.2 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g.
+[cryptography](https://pypi.org/project/cryptography) | 44.0.0 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.4 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.1.1 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 1.0.1 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2025.4.1 | Parallel PyData with Task Scheduling
+[datasette](https://pypi.org/project/datasette) | 0.65.1 | An open source multi-tool for exploring and publishing data
+[datasette-graphql](https://pypi.org/project/datasette-graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[deap](https://pypi.org/project/deap) | 1.4.2 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.13 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.2.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[deprecated](https://pypi.org/project/deprecated) | 1.2.14 | Python @deprecated decorator to deprecate old python classes, functions or methods.
+[diff-match-patch](https://pypi.org/project/diff-match-patch) | 20241021 | Repackaging of Google's Diff Match and Patch libraries.
+[dill](https://pypi.org/project/dill) | 0.4.0 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2025.4.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.9.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.2 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.7.0 | DNS toolkit
+[docstring-to-markdown](https://pypi.org/project/docstring-to-markdown) | 0.17 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.21.2 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.3.0 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et-xmlfile](https://pypi.org/project/et-xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval-type-backport](https://pypi.org/project/eval-type-backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.2.0 | Get the currently executing AST node of a frame, and other information
+[faker](https://pypi.org/project/faker) | 37.1.0 | Faker is a Python package that generates fake data for you.
+[fasta2a](https://pypi.org/project/fasta2a) | 0.2.9 | Convert an AI Agent into a A2A server! âš
+[fastapi](https://pypi.org/project/fastapi) | 0.115.12 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastavro](https://pypi.org/project/fastavro) | 1.10.0 | Fast read/write of AVRO files
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.21.1 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.18.0 | A platform independent file lock.
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.1.0 | A simple framework for building complex web applications.
+[flexcache](https://pypi.org/project/flexcache) | 0.3 | Saves and loads to the cache a transformed versions of a source object.
+[flexparser](https://pypi.org/project/flexparser) | 0.4 | Parsing made fun ... using typing.
+[flit](https://pypi.org/project/flit) | 3.12.0 | A simple packaging tool for simple packages.
+[flit-core](https://pypi.org/project/flit-core) | 3.12.0 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.19.5 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.57.0 | Tools to manipulate font files
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2025.3.2 | File-system specification
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 1.0.1 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.12 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.44 | GitPython is a Python library used to interact with Git repositories
+[google-auth](https://pypi.org/project/google-auth) | 2.38.0 | Google Authentication Library
+[google-genai](https://pypi.org/project/google-genai) | 1.16.1 | GenAI Python SDK
+[graphene](https://pypi.org/project/graphene) | 3.4.3 | GraphQL Framework for Python
+[graphql-core](https://pypi.org/project/graphql-core) | 3.2.6 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql-relay](https://pypi.org/project/graphql-relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.7.2 | Signatures for entire Python programs.
+[groq](https://pypi.org/project/groq) | 0.25.0 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.9.0 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.2.0 | Pure-Python HTTP/2 protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[hpack](https://pypi.org/project/hpack) | 4.1.0 | Pure-Python HPACK header encoding
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.7 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.28.1 | The next generation HTTP client.
+[httpx-sse](https://pypi.org/project/httpx-sse) | 0.4.0 | Consume Server-Sent Event (SSE) messages with HTTPX.
+[huggingface-hub](https://pypi.org/project/huggingface-hub) | 0.33.0 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12.1 | Integrated process monitor for developing and reloading daemons.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.17.3 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.1.0 | Pure-Python HTTP/2 framing
+[hypothesis](https://pypi.org/project/hypothesis) | 6.130.4 | A library for property-based testing
+[id](https://pypi.org/project/id) | 1.5.0 | A tool for generating OIDC identities
+[idna](https://pypi.org/project/idna) | 3.10 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.37.0 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced-learn](https://pypi.org/project/imbalanced-learn) | 0.13.0 | Toolbox for imbalanced dataset in machine learning
+[importlib-metadata](https://pypi.org/project/importlib-metadata) | 8.6.1 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.1.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.1.0 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.3 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.7 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.36.0 | IPython: Productive Interactive Computing
+[ipython-genutils](https://pypi.org/project/ipython-genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython-sql](https://pypi.org/project/ipython-sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.6 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 2.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco-classes](https://pypi.org/project/jaraco-classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco-context](https://pypi.org/project/jaraco-context) | 6.0.1 | Useful decorators and context managers
+[jaraco-functools](https://pypi.org/project/jaraco-functools) | 4.1.0 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.2 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.6 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.9.0 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.10.0 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpointer](https://pypi.org/project/jsonpointer) | 3.0.0 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.23.0 | An implementation of JSON Schema validation for Python
+[jsonschema-specifications](https://pypi.org/project/jsonschema-specifications) | 2024.10.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter-bokeh](https://pypi.org/project/jupyter-bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter-client](https://pypi.org/project/jupyter-client) | 8.6.3 | Jupyter protocol implementation and client libraries
+[jupyter-console](https://pypi.org/project/jupyter-console) | 6.6.3 | Jupyter terminal console
+[jupyter-core](https://pypi.org/project/jupyter-core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter-events](https://pypi.org/project/jupyter-events) | 0.12.0 | Jupyter Event System library
+[jupyter-leaflet](https://pypi.org/project/jupyter-leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter-lsp](https://pypi.org/project/jupyter-lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter-server](https://pypi.org/project/jupyter-server) | 2.15.0 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter-server-terminals](https://pypi.org/project/jupyter-server-terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.4.2 | JupyterLab computational environment
+[jupyterlab-pygments](https://pypi.org/project/jupyterlab-pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab-server](https://pypi.org/project/jupyterlab-server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab-widgets](https://pypi.org/project/jupyterlab-widgets) | 3.0.14 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.10.0 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.6.0 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.8 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.25 | Building applications with LLMs through composability
+[langchain-core](https://pypi.org/project/langchain-core) | 0.3.59 | Building applications with LLMs through composability
+[langchain-text-splitters](https://pypi.org/project/langchain-text-splitters) | 0.3.8 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.3.42 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy-loader](https://pypi.org/project/lazy-loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.3 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire-api](https://pypi.org/project/logfire-api) | 3.12.0 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.9 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.7 | Python implementation of John Gruber's Markdown.
+[markdown-it-py](https://pypi.org/project/markdown-it-py) | 3.0.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 3.0.2 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.3 | Python plotting package
+[matplotlib-inline](https://pypi.org/project/matplotlib-inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.8.3 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mcp](https://pypi.org/project/mcp) | 1.9.3 | Model Context Protocol SDK
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.2 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.8.1 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 3.1.3 | A sane and fast Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml-dtypes](https://pypi.org/project/ml-dtypes) | 0.5.1 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.23.3 | Machine Learning Library Extensions
+[more-itertools](https://pypi.org/project/more-itertools) | 10.6.0 | More routines for operating on iterables, beyond itertools
+[mpld3](https://pypi.org/project/mpld3) | 0.5.10 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal-extensions](https://pypi.org/project/msal-extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.1.0 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.4.3 | multidict implementation
+[mypy](https://pypi.org/project/mypy) | 1.15.0 | Optional static typing for Python
+[mypy-extensions](https://pypi.org/project/mypy-extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.36.0 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.2 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.6 | Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest-asyncio](https://pypi.org/project/nest-asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nh3](https://pypi.org/project/nh3) | 0.2.18 | Python bindings to the ammonia HTML sanitization library.
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.4.2 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook-shim](https://pypi.org/project/notebook-shim) | 0.2.4 | A shim layer for notebook traits and config
+[numba](https://pypi.org/project/numba) | 0.61.2 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.2.6 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.8.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.82.0 | The official Python library for the openai API
+[opencv-python](https://pypi.org/project/opencv-python) | 4.11.0.86 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.5 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[opentelemetry-api](https://pypi.org/project/opentelemetry-api) | 1.32.1 | OpenTelemetry Python API
+[optree](https://pypi.org/project/optree) | 0.14.1 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 4.2.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.16 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post3 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.1 | Utilities for writing pandoc filters in python
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.2 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.12.1 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 1.0.1 | A Python package for describing statistical models and for building design matrices.
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.9.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.31.2 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.1.0 | Python Imaging Library (Fork)
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.3.7 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 6.0.1 | An open-source interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.4 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.31.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[prettytable](https://pypi.org/project/prettytable) | 3.16.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[prince](https://pypi.org/project/prince) | 0.16.0 | Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus-client](https://pypi.org/project/prometheus-client) | 0.21.1 | Python client for the Prometheus monitoring system.
+[prompt-toolkit](https://pypi.org/project/prompt-toolkit) | 3.0.51 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.3.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 6.30.2 |
+[psutil](https://pypi.org/project/psutil) | 7.0.0 | Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7.
+[psygnal](https://pypi.org/project/psygnal) | 0.12.0 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure-eval](https://pypi.org/project/pure-eval) | 0.2.3 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 20.0.0 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.6.1 | Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)
+[pyasn1-modules](https://pypi.org/project/pyasn1-modules) | 0.4.1 | A collection of ASN.1-based protocols modules
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pydantic](https://pypi.org/project/pydantic) | 2.10.6 | Data validation using Python type hints
+[pydantic-ai-slim](https://pypi.org/project/pydantic-ai-slim) | 0.2.9 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic-core](https://pypi.org/project/pydantic-core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydantic-evals](https://pypi.org/project/pydantic-evals) | 0.2.9 | Framework for evaluating stochastic code execution, especially code making use of LLMs
+[pydantic-graph](https://pypi.org/project/pydantic-graph) | 0.2.9 | Graph and state machine library
+[pydantic-settings](https://pypi.org/project/pydantic-settings) | 2.8.1 | Settings management using Pydantic
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.5 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygithub](https://pypi.org/project/pygithub) | 2.6.1 | Use the full Github API v3
+[pygments](https://pypi.org/project/pygments) | 2.19.1 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.10.1 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.3.6 | python code static checker
+[pylint-venv](https://pypi.org/project/pylint-venv) | 3.0.4 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls-spyder](https://pypi.org/project/pyls-spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.13 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyogrio](https://pypi.org/project/pyogrio) | 0.10.0 | Vectorized spatial vector file format I/O using GDAL/OGR
+[pyomo](https://pypi.org/project/pyomo) | 6.9.2 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.15 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.2.3 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 5.4.0 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pyproj](https://pypi.org/project/pyproj) | 3.7.0 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.11 | Python bindings for the Qt cross platform application toolkit
+[pyqt5-qt5](https://pypi.org/project/pyqt5-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5-sip](https://pypi.org/project/pyqt5-sip) | 12.17.0 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.7 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine-qt5](https://pypi.org/project/pyqtwebengine-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pyspnego](https://pypi.org/project/pyspnego) | 0.11.2 | Windows Negotiate Authentication Client and Server
+[pytest](https://pypi.org/project/pytest) | 8.3.5 | pytest: simple powerful testing with Python
+[python-barcode](https://pypi.org/project/python-barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python-dateutil](https://pypi.org/project/python-dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python-dotenv](https://pypi.org/project/python-dotenv) | 1.1.0 | Read key-value pairs from a .env file and set them as environment variables
+[python-json-logger](https://pypi.org/project/python-json-logger) | 3.3.0 | JSON Log Formatter for the Python Logging Package
+[python-lsp-black](https://pypi.org/project/python-lsp-black) | 2.0.0 | Black plugin for the Python LSP Server
+[python-lsp-jsonrpc](https://pypi.org/project/python-lsp-jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python-lsp-server](https://pypi.org/project/python-lsp-server) | 1.12.2 | Python Language Server for the Language Server Protocol
+[python-multipart](https://pypi.org/project/python-multipart) | 0.0.20 | A streaming multipart parser for Python
+[python-slugify](https://pypi.org/project/python-slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.5 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2025.2 | World timezone definitions, modern and historical
+[pyuca](https://pypi.org/project/pyuca) | 1.2 | a Python implementation of the Unicode Collation Algorithm
+[pyusb](https://pypi.org/project/pyusb) | 1.3.1 | Easy USB access for Python
+[pywavelets](https://pypi.org/project/pywavelets) | 1.8.0 | PyWavelets, wavelet transform module
+[pywin32](https://pypi.org/project/pywin32) | 310 | Python for Window Extensions
+[pywin32-ctypes](https://pypi.org/project/pywin32-ctypes) | 0.2.3 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.15 | Pseudo terminal support for Windows from Python.
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.4.0 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post5 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 8.0 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.4 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.4.0 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.6.1 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.3 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.20.0 | A Python ASGI web framework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.13.0 | rapid fuzzy string matching
+[readme-renderer](https://pypi.org/project/readme-renderer) | 44.0 | readme_renderer is a library for rendering readme descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.2.1 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.36.2 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.3.1 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests-ntlm](https://pypi.org/project/requests-ntlm) | 1.3.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests-toolbelt](https://pypi.org/project/requests-toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339-validator](https://pypi.org/project/rfc3339-validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986-validator](https://pypi.org/project/rfc3986-validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 14.0.0 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.13.0 | a python refactoring library...
+[rpds-py](https://pypi.org/project/rpds-py) | 0.24.0 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.4.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.2.0 | Reactive Extensions (Rx) for Python
+[scikit-image](https://pypi.org/project/scikit-image) | 0.25.2 | Image processing in Python
+[scikit-learn](https://pypi.org/project/scikit-learn) | 1.6.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.15.3 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.5 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7.post2 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.3 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.1.0 | Manipulation and analysis of geometric objects
+[shellingham](https://pypi.org/project/shellingham) | 1.5.4 | Tool to Detect Surrounding Shell
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.1.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.17.0 | Python 2 and 3 compatibility utilities
+[sklearn-compat](https://pypi.org/project/sklearn-compat) | 0.1.3 | Ease support for compatible scikit-learn estimators across versions
+[skrub](https://pypi.org/project/skrub) | 0.5.3 | Prepping tables for machine learning
+[smmap](https://pypi.org/project/smmap) | 5.0.2 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.1 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.5.1 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.6 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 8.1.3 | Python documentation generator
+[sphinx-rtd-theme](https://pypi.org/project/sphinx-rtd-theme) | 3.0.2 | Read the Docs theme for Sphinx
+[sphinxcontrib-applehelp](https://pypi.org/project/sphinxcontrib-applehelp) | 2.0.0 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib-devhelp](https://pypi.org/project/sphinxcontrib-devhelp) | 2.0.0 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib-htmlhelp](https://pypi.org/project/sphinxcontrib-htmlhelp) | 2.1.0 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib-jquery](https://pypi.org/project/sphinxcontrib-jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib-jsmath](https://pypi.org/project/sphinxcontrib-jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib-qthelp](https://pypi.org/project/sphinxcontrib-qthelp) | 2.0.0 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib-serializinghtml](https://pypi.org/project/sphinxcontrib-serializinghtml) | 2.0.0 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 6.0.7 | The Scientific Python Development Environment
+[spyder-kernels](https://pypi.org/project/spyder-kernels) | 3.0.5 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.40 | Database Abstraction Library
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite-fts4](https://pypi.org/project/sqlite-fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite-utils](https://pypi.org/project/sqlite-utils) | 3.38 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.5.3 | A non-validating SQL parser.
+[squarify](https://pypi.org/project/squarify) | 0.4.4 | Pure Python implementation of the squarify treemap layout algorithm
+[sse-starlette](https://pypi.org/project/sse-starlette) | 2.2.1 | SSE plugin for Starlette
+[sspilib](https://pypi.org/project/sspilib) | 0.2.0 | SSPI API bindings for Python
+[stack-data](https://pypi.org/project/stack-data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.46.2 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.46.0 | A faster way to build and share data apps
+[superqt](https://pypi.org/project/superqt) | 0.7.3 | Missing widgets and components for PyQt/PySide
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[sympy](https://pypi.org/project/sympy) | 1.14.0 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.1.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 9.1.2 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 3.1.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text-unidecode](https://pypi.org/project/text-unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.3 | Compute distance between the two texts.
+[thefuzz](https://pypi.org/project/thefuzz) | 0.22.1 | Fuzzy string matching in python
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.6.0 | threadpoolctl
+[three-merge](https://pypi.org/project/three-merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2025.3.30 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.9.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.4.0 | A tiny CSS parser
+[tokenizers](https://pypi.org/project/tokenizers) | 0.21.1 |
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.2.1 | A lil' TOML parser
+[tomli-w](https://pypi.org/project/tomli-w) | 1.2.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.13.2 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 1.0.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.5.1 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.67.1 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.3 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.30.0 | A friendly Python library for async concurrency and I/O
+[trove-classifiers](https://pypi.org/project/trove-classifiers) | 2025.5.9.12 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 6.1.0 | Collection of utilities for publishing packages on PyPI
+[typer](https://pypi.org/project/typer) | 0.15.2 | Typer, build great CLIs. Easy to code. Based on Python type hints.
+[types-python-dateutil](https://pypi.org/project/types-python-dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[types-requests](https://pypi.org/project/types-requests) | 2.32.0.20250328 | Typing stubs for requests
+[typing-extensions](https://pypi.org/project/typing-extensions) | 4.13.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing-inspection](https://pypi.org/project/typing-inspection) | 0.4.0 | Runtime typing introspection tools
+[tzdata](https://pypi.org/project/tzdata) | 2025.2 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.3.1 | tzinfo object for the local timezone
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap-learn](https://pypi.org/project/umap-learn) | 0.5.7 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.2.2 | calculations with values with uncertainties, error propagation
+[uri-template](https://pypi.org/project/uri-template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.4.0 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.34.2 | The lightning-fast ASGI server.
+[vega-datasets](https://pypi.org/project/vega-datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 6.0.0 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 24.11.1 | A library for working with the color formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket-client](https://pypi.org/project/websocket-client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 14.2 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.1.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.7 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.14 | Jupyter interactive widgets for Jupyter Notebook
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wrapt](https://pypi.org/project/wrapt) | 1.16.0 | Module for decorators, wrappers and monkey patching.
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2025.4.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.2.3 | A Python module for creating Excel XLSX files.
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt-dlp](https://pypi.org/project/yt-dlp) | 2025.2.19 | A feature-rich command-line audio/video downloader
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.21.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
+
diff --git a/changelogs/WinPythonwhl-64bit-3.12.10.1_History.md b/changelogs/WinPythonwhl-64bit-3.12.10.1_History.md
new file mode 100644
index 00000000..49f45d21
--- /dev/null
+++ b/changelogs/WinPythonwhl-64bit-3.12.10.1_History.md
@@ -0,0 +1,26 @@
+## History of changes for WinPython-64bit 3.12.10.1whl
+
+The following changes were made to WinPython-64bit distribution since version 3.12.10.1whl.
+
+
+
+
+### Tools
+
+
+No differences found.
+
+### Python packages
+
+
+No differences found.
+
+### WheelHouse packages
+
+
+No differences found.
+
+
+
+
+* * *
diff --git a/changelogs/WinPythonwhl-64bit-3.13.5.0.md b/changelogs/WinPythonwhl-64bit-3.13.5.0.md
new file mode 100644
index 00000000..c50ede47
--- /dev/null
+++ b/changelogs/WinPythonwhl-64bit-3.13.5.0.md
@@ -0,0 +1,522 @@
+## WinPython 3.13.5.0whl
+
+The following packages are included in WinPython-64bit v3.13.5.0whl 3.10.11.1dot.
+
+
+
+### Tools
+
+Name | Version | Description
+-----|---------|------------
+[Python](http://www.python.org/) | 3.13.5 | Python programming language with standard library
+
+
+### Python packages
+
+Name | Version | Description
+-----|---------|------------
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[packaging](https://pypi.org/project/packaging) | 25.0 | Core utilities for Python packages
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[winpython](https://pypi.org/project/winpython) | 16.6.20250620 | WinPython distribution tools, including WPPM
+
+
+### WheelHouse packages
+
+Name | Version | Description
+-----|---------|------------
+[absl-py](https://pypi.org/project/absl-py) | 2.2.2 | Abseil Python Common Libraries, see https://github.com/abseil/abseil-py.
+[adbc-driver-manager](https://pypi.org/project/adbc-driver-manager) | 1.3.0 | A generic entrypoint for ADBC drivers.
+[aiofiles](https://pypi.org/project/aiofiles) | 23.2.1 | File support for asyncio.
+[aiohappyeyeballs](https://pypi.org/project/aiohappyeyeballs) | 2.6.1 | Happy Eyeballs for asyncio
+[aiohttp](https://pypi.org/project/aiohttp) | 3.11.18 | Async http client/server framework (asyncio)
+[aiosignal](https://pypi.org/project/aiosignal) | 1.3.2 | aiosignal: a list of registered asynchronous callbacks
+[aiosqlite](https://pypi.org/project/aiosqlite) | 0.20.0 | asyncio bridge to the standard sqlite3 module
+[alabaster](https://pypi.org/project/alabaster) | 0.7.16 | A light, configurable Sphinx theme
+[alembic](https://pypi.org/project/alembic) | 1.15.2 | A database migration tool for SQLAlchemy.
+[altair](https://pypi.org/project/altair) | 5.5.0 | Vega-Altair: A declarative statistical visualization library for Python.
+[annotated-types](https://pypi.org/project/annotated-types) | 0.7.0 | Reusable constraint types to use with typing.Annotated
+[ansicolors](https://pypi.org/project/ansicolors) | 1.1.8 | ANSI colors for Python
+[anthropic](https://pypi.org/project/anthropic) | 0.51.0 | The official Python library for the anthropic API
+[anyio](https://pypi.org/project/anyio) | 4.9.0 | High level compatibility layer for multiple asynchronous event loop implementations
+[anywidget](https://pypi.org/project/anywidget) | 0.9.18 | custom jupyter widgets made easy
+[appdirs](https://pypi.org/project/appdirs) | 1.4.4 | A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
+[argcomplete](https://pypi.org/project/argcomplete) | 3.6.2 | Bash tab completion for argparse
+[argon2-cffi](https://pypi.org/project/argon2-cffi) | 23.1.0 | Argon2 for Python
+[argon2-cffi-bindings](https://pypi.org/project/argon2-cffi-bindings) | 21.2.0 | Low-level CFFI bindings for Argon2
+[array-api-compat](https://pypi.org/project/array-api-compat) | 1.12.0 | A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
+[arrow](https://pypi.org/project/arrow) | 1.3.0 | Better dates & times for Python
+[asgi-csrf](https://pypi.org/project/asgi-csrf) | 0.11 | ASGI middleware for protecting against CSRF attacks
+[asgiref](https://pypi.org/project/asgiref) | 3.8.1 | ASGI specs, helper code, and adapters
+[asn1crypto](https://pypi.org/project/asn1crypto) | 1.5.1 | Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12,
+[asteval](https://pypi.org/project/asteval) | 1.0.5 | Safe, minimalistic evaluator of python expression using ast module
+[astroid](https://pypi.org/project/astroid) | 3.3.9 | An abstract syntax tree for Python with inference support.
+[astropy](https://pypi.org/project/astropy) | 6.1.6 | Astronomy and astrophysics core library
+[astropy-iers-data](https://pypi.org/project/astropy-iers-data) | 0.2024.12.23.0.33.24 | IERS Earth Rotation and Leap Second tables for the astropy core package
+[asttokens](https://pypi.org/project/asttokens) | 3.0.0 | Annotate AST trees with source code positions
+[async-lru](https://pypi.org/project/async-lru) | 2.0.5 | Simple LRU cache for asyncio
+[asyncssh](https://pypi.org/project/asyncssh) | 2.20.0 | AsyncSSH: Asynchronous SSHv2 client and server library
+[atomicwrites](https://pypi.org/project/atomicwrites) | 1.4.0 | Atomic file writes.
+[attrs](https://pypi.org/project/attrs) | 25.3.0 | Classes Without Boilerplate
+[autopep8](https://pypi.org/project/autopep8) | 2.0.4 | A tool that automatically formats Python code to conform to the PEP 8 style guide
+[azure-core](https://pypi.org/project/azure-core) | 1.32.0 | Microsoft Azure Core Library for Python
+[azure-cosmos](https://pypi.org/project/azure-cosmos) | 4.9.0 | Microsoft Azure Cosmos Client Library for Python
+[azure-identity](https://pypi.org/project/azure-identity) | 1.21.0 | Microsoft Azure Identity Library for Python
+[babel](https://pypi.org/project/babel) | 2.17.0 | Internationalization utilities
+[baresql](https://pypi.org/project/baresql) | 1.0.0 | playing SQL directly on Python datas
+[bcrypt](https://pypi.org/project/bcrypt) | 4.3.0 | Modern password hashing for your software and your servers
+[beautifulsoup4](https://pypi.org/project/beautifulsoup4) | 4.13.3 | Screen-scraping library
+[binaryornot](https://pypi.org/project/binaryornot) | 0.4.4 | Ultra-lightweight pure Python package to check if a file is binary or text.
+[black](https://pypi.org/project/black) | 25.1.0 | The uncompromising code formatter.
+[bleach](https://pypi.org/project/bleach) | 6.2.0 | An easy safelist-based HTML-sanitizing tool.
+[blinker](https://pypi.org/project/blinker) | 1.9.0 | Fast, simple object-to-object and broadcast signaling
+[bokeh](https://pypi.org/project/bokeh) | 3.7.3 | Interactive plots and applications in the browser from Python
+[branca](https://pypi.org/project/branca) | 0.8.1 | Generate complex HTML+JS pages with Python
+[brotli](https://pypi.org/project/brotli) | 1.1.0 | Python bindings for the Brotli compression library
+[build](https://pypi.org/project/build) | 1.2.2.post1 | A simple, correct Python build frontend
+[cachetools](https://pypi.org/project/cachetools) | 5.5.2 | Extensible memoizing collections and decorators
+[certifi](https://pypi.org/project/certifi) | 2025.1.31 | Python package for providing Mozilla's CA Bundle.
+[cffi](https://pypi.org/project/cffi) | 1.17.1 | Foreign Function Interface for Python calling C code.
+[chardet](https://pypi.org/project/chardet) | 5.2.0 | Universal encoding detector for Python 3
+[charset-normalizer](https://pypi.org/project/charset-normalizer) | 3.4.2 | The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
+[clarabel](https://pypi.org/project/clarabel) | 0.10.0 | Clarabel Conic Interior Point Solver for Rust / Python
+[click](https://pypi.org/project/click) | 8.1.8 | Composable command line interface toolkit
+[click-default-group](https://pypi.org/project/click-default-group) | 1.2.4 | click_default_group
+[cloudpickle](https://pypi.org/project/cloudpickle) | 3.1.1 | Pickler class to extend the standard pickle.Pickler functionality
+[cohere](https://pypi.org/project/cohere) | 5.15.0 |
+[colorama](https://pypi.org/project/colorama) | 0.4.6 | Cross-platform colored terminal text.
+[colorlog](https://pypi.org/project/colorlog) | 6.9.0 | Add colours to the output of Python's logging module.
+[comm](https://pypi.org/project/comm) | 0.2.2 | Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc.
+[contourpy](https://pypi.org/project/contourpy) | 1.3.2 | Python library for calculating contours of 2D quadrilateral grids
+[cookiecutter](https://pypi.org/project/cookiecutter) | 2.6.0 | A command-line utility that creates projects from project templates, e.g.
+[cryptography](https://pypi.org/project/cryptography) | 44.0.0 | cryptography is a package which provides cryptographic recipes and primitives to Python developers.
+[cvxpy](https://pypi.org/project/cvxpy) | 1.6.4 | A domain-specific language for modeling convex optimization problems in Python.
+[cycler](https://pypi.org/project/cycler) | 0.12.1 | Composable style cycles
+[cython](https://pypi.org/project/cython) | 3.1.1 | The Cython compiler for writing C extensions in the Python language.
+[cytoolz](https://pypi.org/project/cytoolz) | 1.0.1 | Cython implementation of Toolz: High performance functional utilities
+[dask](https://pypi.org/project/dask) | 2025.4.1 | Parallel PyData with Task Scheduling
+[datasette](https://pypi.org/project/datasette) | 0.65.1 | An open source multi-tool for exploring and publishing data
+[datasette-graphql](https://pypi.org/project/datasette-graphql) | 2.2 | Datasette plugin providing an automatic GraphQL API for your SQLite databases
+[deap](https://pypi.org/project/deap) | 1.4.2 | Distributed Evolutionary Algorithms in Python
+[debugpy](https://pypi.org/project/debugpy) | 1.8.13 | An implementation of the Debug Adapter Protocol for Python
+[decorator](https://pypi.org/project/decorator) | 5.2.1 | Decorators for Humans
+[defusedxml](https://pypi.org/project/defusedxml) | 0.7.1 | XML bomb protection for Python stdlib modules
+[deprecated](https://pypi.org/project/deprecated) | 1.2.14 | Python @deprecated decorator to deprecate old python classes, functions or methods.
+[diff-match-patch](https://pypi.org/project/diff-match-patch) | 20241021 | Repackaging of Google's Diff Match and Patch libraries.
+[dill](https://pypi.org/project/dill) | 0.4.0 | serialize all of Python
+[distributed](https://pypi.org/project/distributed) | 2025.4.1 | Distributed scheduler for Dask
+[distro](https://pypi.org/project/distro) | 1.9.0 | Distro - an OS platform information API
+[django](https://pypi.org/project/django) | 5.2 | A high-level Python web framework that encourages rapid development and clean, pragmatic design.
+[dnspython](https://pypi.org/project/dnspython) | 2.7.0 | DNS toolkit
+[docstring-to-markdown](https://pypi.org/project/docstring-to-markdown) | 0.17 | On the fly conversion of Python docstrings to markdown
+[docutils](https://pypi.org/project/docutils) | 0.21.2 | Docutils -- Python Documentation Utilities
+[duckdb](https://pypi.org/project/duckdb) | 1.3.0 | DuckDB in-process database
+[entrypoints](https://pypi.org/project/entrypoints) | 0.4 | Discover and load entry points from installed packages.
+[et-xmlfile](https://pypi.org/project/et-xmlfile) | 1.1.0 | An implementation of lxml.xmlfile for the standard library
+[eval-type-backport](https://pypi.org/project/eval-type-backport) | 0.2.2 | Like `typing._eval_type`, but lets older Python versions use newer typing features.
+[executing](https://pypi.org/project/executing) | 2.2.0 | Get the currently executing AST node of a frame, and other information
+[faker](https://pypi.org/project/faker) | 37.1.0 | Faker is a Python package that generates fake data for you.
+[fasta2a](https://pypi.org/project/fasta2a) | 0.2.9 | Convert an AI Agent into a A2A server! âš
+[fastapi](https://pypi.org/project/fastapi) | 0.115.12 | FastAPI framework, high performance, easy to learn, fast to code, ready for production
+[fastavro](https://pypi.org/project/fastavro) | 1.10.0 | Fast read/write of AVRO files
+[fastjsonschema](https://pypi.org/project/fastjsonschema) | 2.21.1 | Fastest Python implementation of JSON schema
+[filelock](https://pypi.org/project/filelock) | 3.18.0 | A platform independent file lock.
+[flake8](https://pypi.org/project/flake8) | 7.1.1 | the modular source code checker: pep8 pyflakes and co
+[flask](https://pypi.org/project/flask) | 3.1.0 | A simple framework for building complex web applications.
+[flexcache](https://pypi.org/project/flexcache) | 0.3 | Saves and loads to the cache a transformed versions of a source object.
+[flexparser](https://pypi.org/project/flexparser) | 0.4 | Parsing made fun ... using typing.
+[flit](https://pypi.org/project/flit) | 3.12.0 | A simple packaging tool for simple packages.
+[flit-core](https://pypi.org/project/flit-core) | 3.12.0 | Distribution-building parts of Flit. See flit package for more information
+[folium](https://pypi.org/project/folium) | 0.19.5 | Make beautiful maps with Leaflet.js & Python
+[fonttools](https://pypi.org/project/fonttools) | 4.57.0 | Tools to manipulate font files
+[fqdn](https://pypi.org/project/fqdn) | 1.5.1 | Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers
+[frozenlist](https://pypi.org/project/frozenlist) | 1.5.0 | A list-like structure which implements collections.abc.MutableSequence
+[fsspec](https://pypi.org/project/fsspec) | 2025.3.2 | File-system specification
+[fuzzywuzzy](https://pypi.org/project/fuzzywuzzy) | 0.18.0 | Fuzzy string matching in python
+[geographiclib](https://pypi.org/project/geographiclib) | 2.0 | The geodesic routines from GeographicLib
+[geopandas](https://pypi.org/project/geopandas) | 1.0.1 | Geographic pandas extensions
+[geopy](https://pypi.org/project/geopy) | 2.4.1 | Python Geocoding Toolbox
+[gitdb](https://pypi.org/project/gitdb) | 4.0.12 | Git Object Database
+[gitpython](https://pypi.org/project/gitpython) | 3.1.44 | GitPython is a Python library used to interact with Git repositories
+[google-auth](https://pypi.org/project/google-auth) | 2.38.0 | Google Authentication Library
+[google-genai](https://pypi.org/project/google-genai) | 1.16.1 | GenAI Python SDK
+[graphene](https://pypi.org/project/graphene) | 3.4.3 | GraphQL Framework for Python
+[graphql-core](https://pypi.org/project/graphql-core) | 3.2.6 | GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL.
+[graphql-relay](https://pypi.org/project/graphql-relay) | 3.2.0 | Relay library for graphql-core
+[greenlet](https://pypi.org/project/greenlet) | 3.1.1 | Lightweight in-process concurrent programming
+[griffe](https://pypi.org/project/griffe) | 1.7.2 | Signatures for entire Python programs.
+[groq](https://pypi.org/project/groq) | 0.25.0 | The official Python library for the groq API
+[guidata](https://pypi.org/project/guidata) | 3.9.0 | Automatic GUI generation for easy dataset editing and display
+[h11](https://pypi.org/project/h11) | 0.14.0 | A pure-Python, bring-your-own-I/O implementation of HTTP/1.1
+[h2](https://pypi.org/project/h2) | 4.2.0 | Pure-Python HTTP/2 protocol implementation
+[h5py](https://pypi.org/project/h5py) | 3.12.1 | Read and write HDF5 files from Python
+[hatchling](https://pypi.org/project/hatchling) | 1.27.0 | Modern, extensible Python build backend
+[hpack](https://pypi.org/project/hpack) | 4.1.0 | Pure-Python HPACK header encoding
+[html5lib](https://pypi.org/project/html5lib) | 1.1 | HTML parser based on the WHATWG HTML specification
+[httpcore](https://pypi.org/project/httpcore) | 1.0.7 | A minimal low-level HTTP client.
+[httpie](https://pypi.org/project/httpie) | 3.2.4 | HTTPie: modern, user-friendly command-line HTTP client for the API era.
+[httpx](https://pypi.org/project/httpx) | 0.28.1 | The next generation HTTP client.
+[httpx-sse](https://pypi.org/project/httpx-sse) | 0.4.0 | Consume Server-Sent Event (SSE) messages with HTTPX.
+[huggingface-hub](https://pypi.org/project/huggingface-hub) | 0.33.0 | Client library to download and publish models, datasets and other repos on the huggingface.co hub
+[hupper](https://pypi.org/project/hupper) | 1.12.1 | Integrated process monitor for developing and reloading daemons.
+[hypercorn](https://pypi.org/project/hypercorn) | 0.17.3 | A ASGI Server based on Hyper libraries and inspired by Gunicorn
+[hyperframe](https://pypi.org/project/hyperframe) | 6.1.0 | Pure-Python HTTP/2 framing
+[hypothesis](https://pypi.org/project/hypothesis) | 6.130.4 | A library for property-based testing
+[id](https://pypi.org/project/id) | 1.5.0 | A tool for generating OIDC identities
+[idna](https://pypi.org/project/idna) | 3.10 | Internationalized Domain Names in Applications (IDNA)
+[imageio](https://pypi.org/project/imageio) | 2.37.0 | Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.
+[imagesize](https://pypi.org/project/imagesize) | 1.4.1 | Getting image size from png/jpeg/jpeg2000/gif file
+[imbalanced-learn](https://pypi.org/project/imbalanced-learn) | 0.13.0 | Toolbox for imbalanced dataset in machine learning
+[importlib-metadata](https://pypi.org/project/importlib-metadata) | 8.6.1 | Read metadata from Python packages
+[inflection](https://pypi.org/project/inflection) | 0.5.1 | A port of Ruby on Rails inflector to Python
+[iniconfig](https://pypi.org/project/iniconfig) | 2.1.0 | brain-dead simple config-ini parsing
+[intervaltree](https://pypi.org/project/intervaltree) | 3.1.0 | Editable interval tree data structure for Python 2 and 3
+[ipycanvas](https://pypi.org/project/ipycanvas) | 0.13.3 | Interactive widgets library exposing the browser's Canvas API
+[ipykernel](https://pypi.org/project/ipykernel) | 6.29.5 | IPython Kernel for Jupyter
+[ipyleaflet](https://pypi.org/project/ipyleaflet) | 0.19.2 | A Jupyter widget for dynamic Leaflet maps
+[ipympl](https://pypi.org/project/ipympl) | 0.9.7 | Matplotlib Jupyter Extension
+[ipython](https://pypi.org/project/ipython) | 8.36.0 | IPython: Productive Interactive Computing
+[ipython-genutils](https://pypi.org/project/ipython-genutils) | 0.2.0 | Vestigial utilities from IPython
+[ipython-sql](https://pypi.org/project/ipython-sql) | 0.5.0 | RDBMS access via IPython
+[ipywidgets](https://pypi.org/project/ipywidgets) | 8.1.6 | Jupyter interactive widgets
+[isoduration](https://pypi.org/project/isoduration) | 20.11.0 | Operations with ISO 8601 durations
+[isort](https://pypi.org/project/isort) | 5.13.2 | A Python utility / library to sort Python imports.
+[itsdangerous](https://pypi.org/project/itsdangerous) | 2.2.0 | Safely pass data to untrusted environments and back.
+[janus](https://pypi.org/project/janus) | 2.0.0 | Mixed sync-async queue to interoperate between asyncio tasks and classic threads
+[jaraco-classes](https://pypi.org/project/jaraco-classes) | 3.4.0 | Utility functions for Python class constructs
+[jaraco-context](https://pypi.org/project/jaraco-context) | 6.0.1 | Useful decorators and context managers
+[jaraco-functools](https://pypi.org/project/jaraco-functools) | 4.1.0 | Functools like those found in stdlib
+[jedi](https://pypi.org/project/jedi) | 0.19.2 | An autocompletion tool for Python that can be used for text editors.
+[jellyfish](https://pypi.org/project/jellyfish) | 1.1.3 | Approximate and phonetic matching of strings.
+[jinja2](https://pypi.org/project/jinja2) | 3.1.6 | A very fast and expressive template engine.
+[jiter](https://pypi.org/project/jiter) | 0.9.0 | Fast iterable JSON parser.
+[joblib](https://pypi.org/project/joblib) | 1.4.2 | Lightweight pipelining with Python functions
+[json5](https://pypi.org/project/json5) | 0.10.0 | A Python implementation of the JSON5 data format.
+[jsonpatch](https://pypi.org/project/jsonpatch) | 1.33 | Apply JSON-Patches (RFC 6902)
+[jsonpointer](https://pypi.org/project/jsonpointer) | 3.0.0 | Identify specific nodes in a JSON document (RFC 6901)
+[jsonschema](https://pypi.org/project/jsonschema) | 4.23.0 | An implementation of JSON Schema validation for Python
+[jsonschema-specifications](https://pypi.org/project/jsonschema-specifications) | 2024.10.1 | The JSON Schema meta-schemas and vocabularies, exposed as a Registry
+[julia](https://pypi.org/project/julia) | 0.6.2 | Julia/Python bridge with IPython support.
+[jupyter](https://pypi.org/project/jupyter) | 1.1.1 | Jupyter metapackage. Install all the Jupyter components in one go.
+[jupyter-bokeh](https://pypi.org/project/jupyter-bokeh) | 4.0.5 | A Jupyter extension for rendering Bokeh content.
+[jupyter-client](https://pypi.org/project/jupyter-client) | 8.6.3 | Jupyter protocol implementation and client libraries
+[jupyter-console](https://pypi.org/project/jupyter-console) | 6.6.3 | Jupyter terminal console
+[jupyter-core](https://pypi.org/project/jupyter-core) | 5.7.2 | Jupyter core package. A base package on which Jupyter projects rely.
+[jupyter-events](https://pypi.org/project/jupyter-events) | 0.12.0 | Jupyter Event System library
+[jupyter-leaflet](https://pypi.org/project/jupyter-leaflet) | 0.19.2 | ipyleaflet extensions for JupyterLab and Jupyter Notebook
+[jupyter-lsp](https://pypi.org/project/jupyter-lsp) | 2.2.5 | Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server
+[jupyter-server](https://pypi.org/project/jupyter-server) | 2.15.0 | The backendâi.e. core services, APIs, and REST endpointsâto Jupyter web applications.
+[jupyter-server-terminals](https://pypi.org/project/jupyter-server-terminals) | 0.5.3 | A Jupyter Server Extension Providing Terminals.
+[jupyterlab](https://pypi.org/project/jupyterlab) | 4.4.2 | JupyterLab computational environment
+[jupyterlab-pygments](https://pypi.org/project/jupyterlab-pygments) | 0.3.0 | Pygments theme using JupyterLab CSS variables
+[jupyterlab-server](https://pypi.org/project/jupyterlab-server) | 2.27.3 | A set of server components for JupyterLab and JupyterLab like applications.
+[jupyterlab-widgets](https://pypi.org/project/jupyterlab-widgets) | 3.0.14 | Jupyter interactive widgets for JupyterLab
+[keras](https://pypi.org/project/keras) | 3.10.0 | Multi-backend Keras
+[keyring](https://pypi.org/project/keyring) | 25.6.0 | Store and access your passwords safely.
+[kiwisolver](https://pypi.org/project/kiwisolver) | 1.4.8 | A fast implementation of the Cassowary constraint solver
+[langchain](https://pypi.org/project/langchain) | 0.3.25 | Building applications with LLMs through composability
+[langchain-core](https://pypi.org/project/langchain-core) | 0.3.59 | Building applications with LLMs through composability
+[langchain-text-splitters](https://pypi.org/project/langchain-text-splitters) | 0.3.8 | LangChain text splitting utilities
+[langsmith](https://pypi.org/project/langsmith) | 0.3.42 | Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.
+[lazy-loader](https://pypi.org/project/lazy-loader) | 0.4 | Makes it easy to load subpackages and functions on demand.
+[llvmlite](https://pypi.org/project/llvmlite) | 0.44.0 | lightweight wrapper around basic LLVM functionality
+[lmfit](https://pypi.org/project/lmfit) | 1.3.3 | Least-Squares Minimization with Bounds and Constraints
+[locket](https://pypi.org/project/locket) | 1.0.0 | File-based locks for Python on Linux and Windows
+[logfire-api](https://pypi.org/project/logfire-api) | 3.12.0 | Shim for the Logfire SDK which does nothing unless Logfire is installed
+[lxml](https://pypi.org/project/lxml) | 5.3.0 | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
+[mako](https://pypi.org/project/mako) | 1.3.9 | A super-fast templating language that borrows the best ideas from the existing templating languages.
+[markdown](https://pypi.org/project/markdown) | 3.7 | Python implementation of John Gruber's Markdown.
+[markdown-it-py](https://pypi.org/project/markdown-it-py) | 3.0.0 | Python port of markdown-it. Markdown parsing, done right!
+[markupsafe](https://pypi.org/project/markupsafe) | 3.0.2 | Safely add untrusted strings to HTML/XML markup.
+[matplotlib](https://pypi.org/project/matplotlib) | 3.10.3 | Python plotting package
+[matplotlib-inline](https://pypi.org/project/matplotlib-inline) | 0.1.7 | Inline Matplotlib backend for Jupyter
+[maturin](https://pypi.org/project/maturin) | 1.8.3 | Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
+[mccabe](https://pypi.org/project/mccabe) | 0.7.0 | McCabe checker, plugin for flake8
+[mcp](https://pypi.org/project/mcp) | 1.9.3 | Model Context Protocol SDK
+[mdurl](https://pypi.org/project/mdurl) | 0.1.2 | Markdown URL utilities
+[mercantile](https://pypi.org/project/mercantile) | 1.2.1 | Web mercator XYZ tile utilities
+[mergedeep](https://pypi.org/project/mergedeep) | 1.3.4 | A deep merge function for đ.
+[missingno](https://pypi.org/project/missingno) | 0.5.2 | Missing data visualization module for Python.
+[mistralai](https://pypi.org/project/mistralai) | 1.8.1 | Python Client SDK for the Mistral AI API.
+[mistune](https://pypi.org/project/mistune) | 3.1.3 | A sane and fast Markdown parser with useful plugins and renderers
+[mizani](https://pypi.org/project/mizani) | 0.11.4 | Scales for Python
+[ml-dtypes](https://pypi.org/project/ml-dtypes) | 0.5.1 |
+[mlxtend](https://pypi.org/project/mlxtend) | 0.23.3 | Machine Learning Library Extensions
+[more-itertools](https://pypi.org/project/more-itertools) | 10.6.0 | More routines for operating on iterables, beyond itertools
+[mpld3](https://pypi.org/project/mpld3) | 0.5.10 | D3 Viewer for Matplotlib
+[mpmath](https://pypi.org/project/mpmath) | 1.3.0 | Python library for arbitrary-precision floating-point arithmetic
+[msal](https://pypi.org/project/msal) | 1.30.0 | The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of us
+[msal-extensions](https://pypi.org/project/msal-extensions) | 1.2.0 | Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS an
+[msgpack](https://pypi.org/project/msgpack) | 1.1.0 | MessagePack serializer
+[multidict](https://pypi.org/project/multidict) | 6.4.3 | multidict implementation
+[mypy](https://pypi.org/project/mypy) | 1.15.0 | Optional static typing for Python
+[mypy-extensions](https://pypi.org/project/mypy-extensions) | 1.0.0 | Type system extensions for programs checked with the mypy type checker.
+[namex](https://pypi.org/project/namex) | 0.0.8 | A simple utility to separate the implementation of your Python package and its public API surface.
+[narwhals](https://pypi.org/project/narwhals) | 1.36.0 | Extremely lightweight compatibility layer between dataframe libraries
+[nbclient](https://pypi.org/project/nbclient) | 0.10.2 | A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor.
+[nbconvert](https://pypi.org/project/nbconvert) | 7.16.6 | Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.
+[nbformat](https://pypi.org/project/nbformat) | 5.10.4 | The Jupyter Notebook format
+[nest-asyncio](https://pypi.org/project/nest-asyncio) | 1.6.0 | Patch asyncio to allow nested event loops
+[networkx](https://pypi.org/project/networkx) | 3.4.2 | Python package for creating and manipulating graphs and networks
+[nh3](https://pypi.org/project/nh3) | 0.2.18 | Python bindings to the ammonia HTML sanitization library.
+[nltk](https://pypi.org/project/nltk) | 3.9.1 | Natural Language Toolkit
+[notebook](https://pypi.org/project/notebook) | 7.4.2 | Jupyter Notebook - A web-based notebook environment for interactive computing
+[notebook-shim](https://pypi.org/project/notebook-shim) | 0.2.4 | A shim layer for notebook traits and config
+[numba](https://pypi.org/project/numba) | 0.61.2 | compiling Python code using LLVM
+[numpy](https://pypi.org/project/numpy) | 2.2.6 | Fundamental package for array computing in Python
+[numpydoc](https://pypi.org/project/numpydoc) | 1.8.0 | Sphinx extension to support docstrings in Numpy format
+[openai](https://pypi.org/project/openai) | 1.82.0 | The official Python library for the openai API
+[opencv-python](https://pypi.org/project/opencv-python) | 4.11.0.86 | Wrapper package for OpenCV python bindings.
+[openpyxl](https://pypi.org/project/openpyxl) | 3.1.5 | A Python library to read/write Excel 2010 xlsx/xlsm files
+[opentelemetry-api](https://pypi.org/project/opentelemetry-api) | 1.32.1 | OpenTelemetry Python API
+[optree](https://pypi.org/project/optree) | 0.14.1 | Optimized PyTree Utilities.
+[optuna](https://pypi.org/project/optuna) | 4.2.1 | A hyperparameter optimization framework
+[orjson](https://pypi.org/project/orjson) | 3.10.16 | Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
+[osqp](https://pypi.org/project/osqp) | 0.6.7.post3 | OSQP: The Operator Splitting QP Solver
+[outcome](https://pypi.org/project/outcome) | 1.3.0.post0 | Capture the outcome of Python function calls.
+[overrides](https://pypi.org/project/overrides) | 7.7.0 | A decorator to automatically detect mismatch when overriding a method.
+[packaging](https://pypi.org/project/packaging) | 24.2 | Core utilities for Python packages
+[pandas](https://pypi.org/project/pandas) | 2.2.3 | Powerful data structures for data analysis, time series, and statistics
+[pandocfilters](https://pypi.org/project/pandocfilters) | 1.5.1 | Utilities for writing pandoc filters in python
+[papermill](https://pypi.org/project/papermill) | 2.6.0 | Parameterize and run Jupyter and nteract Notebooks
+[parso](https://pypi.org/project/parso) | 0.8.4 | A Python Parser
+[partd](https://pypi.org/project/partd) | 1.4.2 | Appendable key-value storage
+[pathspec](https://pypi.org/project/pathspec) | 0.12.1 | Utility library for gitignore style pattern matching of file paths.
+[patsy](https://pypi.org/project/patsy) | 1.0.1 | A Python package for describing statistical models and for building design matrices.
+[pep8](https://pypi.org/project/pep8) | 1.7.1 | Python style guide checker
+[pexpect](https://pypi.org/project/pexpect) | 4.9.0 | Pexpect allows easy control of interactive console applications.
+[pg8000](https://pypi.org/project/pg8000) | 1.31.2 | PostgreSQL interface library
+[pickleshare](https://pypi.org/project/pickleshare) | 0.7.5 | Tiny 'shelve'-like database with concurrency support
+[pillow](https://pypi.org/project/pillow) | 11.1.0 | Python Imaging Library (Fork)
+[pip](https://pypi.org/project/pip) | 25.1.1 | The PyPA recommended tool for installing Python packages.
+[platformdirs](https://pypi.org/project/platformdirs) | 4.3.7 | A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`.
+[plotly](https://pypi.org/project/plotly) | 6.0.1 | An open-source interactive data visualization library for Python
+[plotnine](https://pypi.org/project/plotnine) | 0.13.6 | A Grammar of Graphics for Python
+[plotpy](https://pypi.org/project/plotpy) | 2.7.4 | Curve and image plotting tools for Python/Qt applications
+[pluggy](https://pypi.org/project/pluggy) | 1.5.0 | plugin and hook calling mechanisms for python
+[ply](https://pypi.org/project/ply) | 3.11 | Python Lex & Yacc
+[polars](https://pypi.org/project/polars) | 1.31.0 | Blazingly fast DataFrame library
+[portalocker](https://pypi.org/project/portalocker) | 2.7.0 | Wraps the portalocker recipe for easy usage
+[prettytable](https://pypi.org/project/prettytable) | 3.16.0 | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
+[prince](https://pypi.org/project/prince) | 0.16.0 | Factor analysis in Python: PCA, CA, MCA, MFA, FAMD, GPA
+[priority](https://pypi.org/project/priority) | 2.0.0 | A pure-Python implementation of the HTTP/2 priority tree
+[prometheus-client](https://pypi.org/project/prometheus-client) | 0.21.1 | Python client for the Prometheus monitoring system.
+[prompt-toolkit](https://pypi.org/project/prompt-toolkit) | 3.0.51 | Library for building powerful interactive command lines in Python
+[propcache](https://pypi.org/project/propcache) | 0.3.1 | Accelerated property cache
+[protobuf](https://pypi.org/project/protobuf) | 6.30.2 |
+[psutil](https://pypi.org/project/psutil) | 7.0.0 | Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7.
+[psygnal](https://pypi.org/project/psygnal) | 0.12.0 | Fast python callback/event system modeled after Qt Signals
+[ptpython](https://pypi.org/project/ptpython) | 3.0.29 | Python REPL build on top of prompt_toolkit
+[ptyprocess](https://pypi.org/project/ptyprocess) | 0.7.0 | Run a subprocess in a pseudo terminal
+[pure-eval](https://pypi.org/project/pure-eval) | 0.2.3 | Safely evaluate AST nodes without side effects
+[pyarrow](https://pypi.org/project/pyarrow) | 20.0.0 | Python library for Apache Arrow
+[pyasn1](https://pypi.org/project/pyasn1) | 0.6.1 | Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)
+[pyasn1-modules](https://pypi.org/project/pyasn1-modules) | 0.4.1 | A collection of ASN.1-based protocols modules
+[pybind11](https://pypi.org/project/pybind11) | 2.13.6 | Seamless operability between C++11 and Python
+[pycodestyle](https://pypi.org/project/pycodestyle) | 2.12.0 | Python style guide checker
+[pycparser](https://pypi.org/project/pycparser) | 2.22 | C parser in Python
+[pydantic](https://pypi.org/project/pydantic) | 2.10.6 | Data validation using Python type hints
+[pydantic-ai-slim](https://pypi.org/project/pydantic-ai-slim) | 0.2.9 | Agent Framework / shim to use Pydantic with LLMs, slim package
+[pydantic-core](https://pypi.org/project/pydantic-core) | 2.27.2 | Core functionality for Pydantic validation and serialization
+[pydantic-evals](https://pypi.org/project/pydantic-evals) | 0.2.9 | Framework for evaluating stochastic code execution, especially code making use of LLMs
+[pydantic-graph](https://pypi.org/project/pydantic-graph) | 0.2.9 | Graph and state machine library
+[pydantic-settings](https://pypi.org/project/pydantic-settings) | 2.8.1 | Settings management using Pydantic
+[pydeck](https://pypi.org/project/pydeck) | 0.9.1 | Widget for deck.gl maps
+[pydocstyle](https://pypi.org/project/pydocstyle) | 6.3.0 | Python docstring style checker
+[pydub](https://pypi.org/project/pydub) | 0.25.1 | Manipulate audio with an simple and easy high level interface
+[pyerfa](https://pypi.org/project/pyerfa) | 2.0.1.5 | Python bindings for ERFA
+[pyflakes](https://pypi.org/project/pyflakes) | 3.2.0 | passive checker of Python programs
+[pygithub](https://pypi.org/project/pygithub) | 2.6.1 | Use the full Github API v3
+[pygments](https://pypi.org/project/pygments) | 2.19.1 | Pygments is a syntax highlighting package written in Python.
+[pyjwt](https://pypi.org/project/pyjwt) | 2.10.1 | JSON Web Token implementation in Python
+[pylint](https://pypi.org/project/pylint) | 3.3.6 | python code static checker
+[pylint-venv](https://pypi.org/project/pylint-venv) | 3.0.4 | pylint-venv provides a Pylint init-hook to use the same Pylint installation with different virtual environments.
+[pyls-spyder](https://pypi.org/project/pyls-spyder) | 0.4.0 | Spyder extensions for the python-lsp-server
+[pymongo](https://pypi.org/project/pymongo) | 4.10.1 | Python driver for MongoDB
+[pympler](https://pypi.org/project/pympler) | 1.1 | A development tool to measure, monitor and analyze the memory behavior of Python objects.
+[pynacl](https://pypi.org/project/pynacl) | 1.5.0 | Python binding to the Networking and Cryptography (NaCl) library
+[pynndescent](https://pypi.org/project/pynndescent) | 0.5.13 | Nearest Neighbor Descent
+[pyodbc](https://pypi.org/project/pyodbc) | 5.2.0 | DB API module for ODBC
+[pyogrio](https://pypi.org/project/pyogrio) | 0.10.0 | Vectorized spatial vector file format I/O using GDAL/OGR
+[pyomo](https://pypi.org/project/pyomo) | 6.9.2 | Pyomo: Python Optimization Modeling Objects
+[pypandoc](https://pypi.org/project/pypandoc) | 1.15 | Thin wrapper for pandoc.
+[pyparsing](https://pypi.org/project/pyparsing) | 3.2.3 | pyparsing module - Classes and methods to define and execute parsing grammars
+[pypdf](https://pypi.org/project/pypdf) | 5.4.0 | A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
+[pyproj](https://pypi.org/project/pyproj) | 3.7.0 | Python interface to PROJ (cartographic projections and coordinate transformations library)
+[pyproject-hooks](https://pypi.org/project/pyproject-hooks) | 1.2.0 | Wrappers to call pyproject.toml-based build backend hooks.
+[pyqt5](https://pypi.org/project/pyqt5) | 5.15.11 | Python bindings for the Qt cross platform application toolkit
+[pyqt5-qt5](https://pypi.org/project/pyqt5-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQt5.
+[pyqt5-sip](https://pypi.org/project/pyqt5-sip) | 12.17.0 | The sip module support for PyQt5
+[pyqtgraph](https://pypi.org/project/pyqtgraph) | 0.13.7 | Scientific Graphics and GUI Library for Python
+[pyqtwebengine](https://pypi.org/project/pyqtwebengine) | 5.15.7 | Python bindings for the Qt WebEngine framework
+[pyqtwebengine-qt5](https://pypi.org/project/pyqtwebengine-qt5) | 5.15.2 | The subset of a Qt installation needed by PyQtWebEngine.
+[pyserial](https://pypi.org/project/pyserial) | 3.5 | Python Serial Port Extension
+[pysocks](https://pypi.org/project/pysocks) | 1.7.1 | A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information.
+[pyspnego](https://pypi.org/project/pyspnego) | 0.11.2 | Windows Negotiate Authentication Client and Server
+[pytest](https://pypi.org/project/pytest) | 8.3.5 | pytest: simple powerful testing with Python
+[python-barcode](https://pypi.org/project/python-barcode) | 0.15.1 | Create standard barcodes with Python. No external modules needed. (optional Pillow support included).
+[python-dateutil](https://pypi.org/project/python-dateutil) | 2.8.2 | Extensions to the standard Python datetime module
+[python-dotenv](https://pypi.org/project/python-dotenv) | 1.1.0 | Read key-value pairs from a .env file and set them as environment variables
+[python-json-logger](https://pypi.org/project/python-json-logger) | 3.3.0 | JSON Log Formatter for the Python Logging Package
+[python-lsp-black](https://pypi.org/project/python-lsp-black) | 2.0.0 | Black plugin for the Python LSP Server
+[python-lsp-jsonrpc](https://pypi.org/project/python-lsp-jsonrpc) | 1.1.2 | JSON RPC 2.0 server library
+[python-lsp-server](https://pypi.org/project/python-lsp-server) | 1.12.2 | Python Language Server for the Language Server Protocol
+[python-multipart](https://pypi.org/project/python-multipart) | 0.0.20 | A streaming multipart parser for Python
+[python-slugify](https://pypi.org/project/python-slugify) | 8.0.4 | A Python slugify application that also handles Unicode
+[pythonqwt](https://pypi.org/project/pythonqwt) | 0.14.5 | Qt plotting widgets for Python
+[pytoolconfig](https://pypi.org/project/pytoolconfig) | 1.3.1 | Python tool configuration
+[pytz](https://pypi.org/project/pytz) | 2025.2 | World timezone definitions, modern and historical
+[pyuca](https://pypi.org/project/pyuca) | 1.2 | a Python implementation of the Unicode Collation Algorithm
+[pyusb](https://pypi.org/project/pyusb) | 1.3.1 | Easy USB access for Python
+[pywavelets](https://pypi.org/project/pywavelets) | 1.8.0 | PyWavelets, wavelet transform module
+[pywin32](https://pypi.org/project/pywin32) | 310 | Python for Window Extensions
+[pywin32-ctypes](https://pypi.org/project/pywin32-ctypes) | 0.2.3 | A (partial) reimplementation of pywin32 using ctypes/cffi
+[pywinpty](https://pypi.org/project/pywinpty) | 2.0.15 | Pseudo terminal support for Windows from Python.
+[pyyaml](https://pypi.org/project/pyyaml) | 6.0.2 | YAML parser and emitter for Python
+[pyzmq](https://pypi.org/project/pyzmq) | 26.4.0 | Python bindings for 0MQ
+[qdarkstyle](https://pypi.org/project/qdarkstyle) | 3.2.3 | The most complete dark/light style sheet for C++/Python and Qt applications
+[qdldl](https://pypi.org/project/qdldl) | 0.1.7.post5 | QDLDL, a free LDL factorization routine.
+[qrcode](https://pypi.org/project/qrcode) | 8.0 | QR Code image generator
+[qstylizer](https://pypi.org/project/qstylizer) | 0.2.4 | Stylesheet Generator for PyQt{4-5}/PySide{1-2}
+[qtawesome](https://pypi.org/project/qtawesome) | 1.4.0 | FontAwesome icons in PyQt and PySide applications
+[qtconsole](https://pypi.org/project/qtconsole) | 5.6.1 | Jupyter Qt console
+[qtpy](https://pypi.org/project/qtpy) | 2.4.3 | Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6).
+[quantecon](https://pypi.org/project/quantecon) | 0.7.2 | Import the main names to top level.
+[quart](https://pypi.org/project/quart) | 0.20.0 | A Python ASGI web framework with the same API as Flask
+[rapidfuzz](https://pypi.org/project/rapidfuzz) | 3.13.0 | rapid fuzzy string matching
+[readme-renderer](https://pypi.org/project/readme-renderer) | 44.0 | readme_renderer is a library for rendering readme descriptions for Warehouse
+[redis](https://pypi.org/project/redis) | 5.2.1 | Python client for Redis database and key-value store
+[referencing](https://pypi.org/project/referencing) | 0.36.2 | JSON Referencing + Python
+[regex](https://pypi.org/project/regex) | 2024.11.6 | Alternative regular expression module, to replace re.
+[reportlab](https://pypi.org/project/reportlab) | 4.3.1 | The Reportlab Toolkit
+[requests](https://pypi.org/project/requests) | 2.32.3 | Python HTTP for Humans.
+[requests-ntlm](https://pypi.org/project/requests-ntlm) | 1.3.0 | This package allows for HTTP NTLM authentication using the requests library.
+[requests-toolbelt](https://pypi.org/project/requests-toolbelt) | 1.0.0 | A utility belt for advanced users of python-requests
+[rfc3339-validator](https://pypi.org/project/rfc3339-validator) | 0.1.4 | A pure python RFC3339 validator
+[rfc3986](https://pypi.org/project/rfc3986) | 2.0.0 | Validating URI References per RFC 3986
+[rfc3986-validator](https://pypi.org/project/rfc3986-validator) | 0.1.1 | Pure python rfc3986 validator
+[rich](https://pypi.org/project/rich) | 14.0.0 | Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
+[rope](https://pypi.org/project/rope) | 1.13.0 | a python refactoring library...
+[rpds-py](https://pypi.org/project/rpds-py) | 0.24.0 | Python bindings to Rust's persistent data structures (rpds)
+[rsa](https://pypi.org/project/rsa) | 4.7.2 | Pure-Python RSA implementation
+[rtree](https://pypi.org/project/rtree) | 1.4.0 | R-Tree spatial index for Python GIS
+[rx](https://pypi.org/project/rx) | 3.2.0 | Reactive Extensions (Rx) for Python
+[scikit-image](https://pypi.org/project/scikit-image) | 0.25.2 | Image processing in Python
+[scikit-learn](https://pypi.org/project/scikit-learn) | 1.6.1 | A set of python modules for machine learning and data mining
+[scipy](https://pypi.org/project/scipy) | 1.15.3 | Fundamental algorithms for scientific computing in Python
+[scramp](https://pypi.org/project/scramp) | 1.4.5 | An implementation of the SCRAM protocol.
+[scs](https://pypi.org/project/scs) | 3.2.7.post2 | Splitting conic solver
+[seaborn](https://pypi.org/project/seaborn) | 0.13.2 | Statistical data visualization
+[send2trash](https://pypi.org/project/send2trash) | 1.8.3 | Send file to trash natively under Mac OS X, Windows and Linux
+[setuptools](https://pypi.org/project/setuptools) | 79.0.1 | Easily download, build, install, upgrade, and uninstall Python packages
+[shapely](https://pypi.org/project/shapely) | 2.1.0 | Manipulation and analysis of geometric objects
+[shellingham](https://pypi.org/project/shellingham) | 1.5.4 | Tool to Detect Surrounding Shell
+[simplejson](https://pypi.org/project/simplejson) | 3.19.3 | Simple, fast, extensible JSON encoder/decoder for Python
+[simpy](https://pypi.org/project/simpy) | 4.1.1 | Event discrete, process based simulation for Python.
+[six](https://pypi.org/project/six) | 1.17.0 | Python 2 and 3 compatibility utilities
+[sklearn-compat](https://pypi.org/project/sklearn-compat) | 0.1.3 | Ease support for compatible scikit-learn estimators across versions
+[skrub](https://pypi.org/project/skrub) | 0.5.3 | Prepping tables for machine learning
+[smmap](https://pypi.org/project/smmap) | 5.0.2 | A pure Python implementation of a sliding window memory map manager
+[sniffio](https://pypi.org/project/sniffio) | 1.3.1 | Sniff out which async library your code is running under
+[snowballstemmer](https://pypi.org/project/snowballstemmer) | 2.2.0 | This package provides 29 stemmers for 28 languages generated from Snowball algorithms.
+[sortedcontainers](https://pypi.org/project/sortedcontainers) | 2.4.0 | Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
+[sounddevice](https://pypi.org/project/sounddevice) | 0.5.1 | Play and Record Sound with Python
+[soupsieve](https://pypi.org/project/soupsieve) | 2.6 | A modern CSS selector implementation for Beautiful Soup.
+[sphinx](https://pypi.org/project/sphinx) | 8.1.3 | Python documentation generator
+[sphinx-rtd-theme](https://pypi.org/project/sphinx-rtd-theme) | 3.0.2 | Read the Docs theme for Sphinx
+[sphinxcontrib-applehelp](https://pypi.org/project/sphinxcontrib-applehelp) | 2.0.0 | sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books
+[sphinxcontrib-devhelp](https://pypi.org/project/sphinxcontrib-devhelp) | 2.0.0 | sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents
+[sphinxcontrib-htmlhelp](https://pypi.org/project/sphinxcontrib-htmlhelp) | 2.1.0 | sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files
+[sphinxcontrib-jquery](https://pypi.org/project/sphinxcontrib-jquery) | 4.1 | Extension to include jQuery on newer Sphinx releases
+[sphinxcontrib-jsmath](https://pypi.org/project/sphinxcontrib-jsmath) | 1.0.1 | A sphinx extension which renders display math in HTML via JavaScript
+[sphinxcontrib-qthelp](https://pypi.org/project/sphinxcontrib-qthelp) | 2.0.0 | sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents
+[sphinxcontrib-serializinghtml](https://pypi.org/project/sphinxcontrib-serializinghtml) | 2.0.0 | sphinxcontrib-serializinghtml is a sphinx extension which outputs "serialized" HTML files (json and pickle)
+[spyder](https://pypi.org/project/spyder) | 6.0.7 | The Scientific Python Development Environment
+[spyder-kernels](https://pypi.org/project/spyder-kernels) | 3.0.5 | Jupyter kernels for Spyder's console
+[sqlalchemy](https://pypi.org/project/sqlalchemy) | 2.0.40 | Database Abstraction Library
+[sqlite-bro](https://pypi.org/project/sqlite-bro) | 0.13.1 | a graphic SQLite Client in 1 Python file
+[sqlite-fts4](https://pypi.org/project/sqlite-fts4) | 1.0.3 | Python functions for working with SQLite FTS4 search
+[sqlite-utils](https://pypi.org/project/sqlite-utils) | 3.38 | CLI tool and Python library for manipulating SQLite databases
+[sqlparse](https://pypi.org/project/sqlparse) | 0.5.3 | A non-validating SQL parser.
+[squarify](https://pypi.org/project/squarify) | 0.4.4 | Pure Python implementation of the squarify treemap layout algorithm
+[sse-starlette](https://pypi.org/project/sse-starlette) | 2.2.1 | SSE plugin for Starlette
+[sspilib](https://pypi.org/project/sspilib) | 0.2.0 | SSPI API bindings for Python
+[stack-data](https://pypi.org/project/stack-data) | 0.6.3 | Extract data from python stack frames and tracebacks for informative displays
+[starlette](https://pypi.org/project/starlette) | 0.46.2 | The little ASGI library that shines.
+[statsmodels](https://pypi.org/project/statsmodels) | 0.14.4 | Statistical computations and models for Python
+[streamlit](https://pypi.org/project/streamlit) | 1.46.0 | A faster way to build and share data apps
+[superqt](https://pypi.org/project/superqt) | 0.7.3 | Missing widgets and components for PyQt/PySide
+[sv-ttk](https://pypi.org/project/sv-ttk) | 2.6.0 | A gorgeous theme for Tkinter, based on Windows 11's UI
+[sympy](https://pypi.org/project/sympy) | 1.14.0 | Computer algebra system (CAS) in Python
+[tabulate](https://pypi.org/project/tabulate) | 0.9.0 | Pretty-print tabular data
+[tblib](https://pypi.org/project/tblib) | 3.1.0 | Traceback serialization library.
+[tenacity](https://pypi.org/project/tenacity) | 9.1.2 | Retry code until it succeeds
+[termcolor](https://pypi.org/project/termcolor) | 3.1.0 | ANSI color formatting for output in terminal
+[terminado](https://pypi.org/project/terminado) | 0.18.1 | Tornado websocket backend for the Xterm.js Javascript terminal emulator library.
+[text-unidecode](https://pypi.org/project/text-unidecode) | 1.3 | The most basic Text::Unidecode port
+[textdistance](https://pypi.org/project/textdistance) | 4.6.3 | Compute distance between the two texts.
+[thefuzz](https://pypi.org/project/thefuzz) | 0.22.1 | Fuzzy string matching in python
+[threadpoolctl](https://pypi.org/project/threadpoolctl) | 3.6.0 | threadpoolctl
+[three-merge](https://pypi.org/project/three-merge) | 0.1.1 | Simple library for merging two strings with respect to a base one
+[tifffile](https://pypi.org/project/tifffile) | 2025.3.30 | Read and write TIFF files
+[tiktoken](https://pypi.org/project/tiktoken) | 0.9.0 | tiktoken is a fast BPE tokeniser for use with OpenAI's models
+[tinycss2](https://pypi.org/project/tinycss2) | 1.4.0 | A tiny CSS parser
+[tokenizers](https://pypi.org/project/tokenizers) | 0.21.1 |
+[toml](https://pypi.org/project/toml) | 0.10.2 | Python Library for Tom's Obvious, Minimal Language
+[tomli](https://pypi.org/project/tomli) | 2.2.1 | A lil' TOML parser
+[tomli-w](https://pypi.org/project/tomli-w) | 1.2.0 | A lil' TOML writer
+[tomlkit](https://pypi.org/project/tomlkit) | 0.13.2 | Style preserving TOML library
+[toolz](https://pypi.org/project/toolz) | 1.0.0 | List processing tools and functional utilities
+[tornado](https://pypi.org/project/tornado) | 6.5.1 | Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
+[tqdm](https://pypi.org/project/tqdm) | 4.67.1 | Fast, Extensible Progress Meter
+[traitlets](https://pypi.org/project/traitlets) | 5.14.3 | Traitlets Python configuration system
+[traittypes](https://pypi.org/project/traittypes) | 0.2.1 | Scipy trait types
+[trio](https://pypi.org/project/trio) | 0.30.0 | A friendly Python library for async concurrency and I/O
+[trove-classifiers](https://pypi.org/project/trove-classifiers) | 2025.5.9.12 | Canonical source for classifiers on PyPI (pypi.org).
+[twine](https://pypi.org/project/twine) | 6.1.0 | Collection of utilities for publishing packages on PyPI
+[typer](https://pypi.org/project/typer) | 0.15.2 | Typer, build great CLIs. Easy to code. Based on Python type hints.
+[types-python-dateutil](https://pypi.org/project/types-python-dateutil) | 2.9.0.20240316 | Typing stubs for python-dateutil
+[types-requests](https://pypi.org/project/types-requests) | 2.32.0.20250328 | Typing stubs for requests
+[typing-extensions](https://pypi.org/project/typing-extensions) | 4.13.2 | Backported and Experimental Type Hints for Python 3.8+
+[typing-inspection](https://pypi.org/project/typing-inspection) | 0.4.0 | Runtime typing introspection tools
+[tzdata](https://pypi.org/project/tzdata) | 2025.2 | Provider of IANA time zone data
+[tzlocal](https://pypi.org/project/tzlocal) | 5.3.1 | tzinfo object for the local timezone
+[ujson](https://pypi.org/project/ujson) | 5.10.0 | Ultra fast JSON encoder and decoder for Python
+[umap-learn](https://pypi.org/project/umap-learn) | 0.5.7 | Uniform Manifold Approximation and Projection
+[uncertainties](https://pypi.org/project/uncertainties) | 3.2.2 | calculations with values with uncertainties, error propagation
+[uri-template](https://pypi.org/project/uri-template) | 1.3.0 | RFC 6570 URI Template Processor
+[urllib3](https://pypi.org/project/urllib3) | 2.4.0 | HTTP library with thread-safe connection pooling, file post, and more.
+[uvicorn](https://pypi.org/project/uvicorn) | 0.34.2 | The lightning-fast ASGI server.
+[vega-datasets](https://pypi.org/project/vega-datasets) | 0.9.0 | A Python package for offline access to Vega datasets
+[waitress](https://pypi.org/project/waitress) | 3.0.0 | Waitress WSGI server
+[watchdog](https://pypi.org/project/watchdog) | 6.0.0 | Filesystem events monitoring
+[wcwidth](https://pypi.org/project/wcwidth) | 0.2.13 | Measures the displayed width of unicode strings in a terminal
+[webcolors](https://pypi.org/project/webcolors) | 24.11.1 | A library for working with the color formats defined by HTML and CSS.
+[webencodings](https://pypi.org/project/webencodings) | 0.5.1 | Character encoding aliases for legacy web content
+[websocket-client](https://pypi.org/project/websocket-client) | 1.8.0 | WebSocket client for Python with low level API options
+[websockets](https://pypi.org/project/websockets) | 14.2 | An implementation of the WebSocket Protocol (RFC 6455 & 7692)
+[werkzeug](https://pypi.org/project/werkzeug) | 3.1.3 | The comprehensive WSGI web application library.
+[whatthepatch](https://pypi.org/project/whatthepatch) | 1.0.7 | A patch parsing and application library.
+[wheel](https://pypi.org/project/wheel) | 0.45.1 | A built-package format for Python
+[widgetsnbextension](https://pypi.org/project/widgetsnbextension) | 4.0.14 | Jupyter interactive widgets for Jupyter Notebook
+[wordcloud](https://pypi.org/project/wordcloud) | 1.9.4 | A little word cloud generator
+[wrapt](https://pypi.org/project/wrapt) | 1.16.0 | Module for decorators, wrappers and monkey patching.
+[wsproto](https://pypi.org/project/wsproto) | 1.2.0 | WebSockets state-machine based protocol implementation
+[xarray](https://pypi.org/project/xarray) | 2025.4.0 | N-D labeled arrays and datasets in Python
+[xlsxwriter](https://pypi.org/project/xlsxwriter) | 3.2.3 | A Python module for creating Excel XLSX files.
+[xyzservices](https://pypi.org/project/xyzservices) | 2023.10.1 | Source of XYZ tiles providers
+[yapf](https://pypi.org/project/yapf) | 0.40.1 | A formatter for Python code.
+[yarl](https://pypi.org/project/yarl) | 1.18.3 | Yet another URL library
+[yt-dlp](https://pypi.org/project/yt-dlp) | 2025.2.19 | A feature-rich command-line audio/video downloader
+[zict](https://pypi.org/project/zict) | 3.0.0 | Mutable mapping tools
+[zipp](https://pypi.org/project/zipp) | 3.21.0 | Backport of pathlib-compatible object wrapper for zip files
+[zstandard](https://pypi.org/project/zstandard) | 0.23.0 | Zstandard bindings for Python
+
+
+
diff --git a/changelogs/WinPythonwhl-64bit-3.13.5.0_History.md b/changelogs/WinPythonwhl-64bit-3.13.5.0_History.md
new file mode 100644
index 00000000..6c4b0699
--- /dev/null
+++ b/changelogs/WinPythonwhl-64bit-3.13.5.0_History.md
@@ -0,0 +1,26 @@
+ï»ż## History of changes for WinPython-64bit 3.13.5.0whl
+
+The following changes were made to WinPython-64bit distribution since version 3.13.5.0whl.
+
+
+
+
+### Tools
+
+
+No differences found.
+
+### Python packages
+
+
+No differences found.
+
+### WheelHouse packages
+
+
+No differences found.
+
+
+
+
+* * *
diff --git a/changelogs/md5_sha1.txt b/changelogs/md5_sha1.txt
index 04a7c92f..6bc9f65a 100644
--- a/changelogs/md5_sha1.txt
+++ b/changelogs/md5_sha1.txt
@@ -1,5 +1,91 @@
-### WinPython 2024-03 release (June 22th, 2024)
+### WinPython 2025-03 release (June 28th, 2025)
+
+MD5 | SHA-1 | SHA-256 | Binary | Size | blake2b-256
+---------------------------------|------------------------------------------|------------------------------------------------------------------|-----------------------------------|----------------------|-----------------------------------------------------------------
+6e986d2daa963800ad7deaa7b151c895 | ab9600442433d577f044d3c7604ba8193407bcd4 | 8ec81761447c1c9ff143f4faa7b86351787f8c0314ce249aac260a5972b9edf2 | Winpython64-3.12.10.1dot.exe | 23 422 054 Bytes | 58a57d858663de7ed45c5b53835e73102213c881784aab64635ecfb1fe03565d
+97fba9cbd845601843fda825155caac1 | 9607229783d66c505894b4b2547af41891c4f669 | 7a1f004aec39615977b2b245423a50115530d16af3418df77977186a555d0a40 | Winpython64-3.12.10.1dot.zip | 38 519 826 Bytes | 543db8fd8cecba4bf6e72596f55d4cacbf2fe49fb9d397b26024088788cdbfba
+b1df445794a2826a7355ae29cfc467d8 | 27a2807265bcd574f0338013311227a4c0b29001 | a320f799843712b0c3aa5bcb0fb472cd36dc74615a1436c976c4bf6e8a4ac29f | Winpython64-3.12.10.1slim.7z | 630 560 365 Bytes | 50a4da7c92586357f8730f3bc7174a409edd7ee4aebb9bc49440b2976d89bcca
+0cc2ac82631562ec87d1c608eaab9ef1 | ba69116fc9bd2d728ff15a29f588275995fc94db | 62c935050f1bfe3165f2b0c60f8195bdcbee12e83d0a0f360e7a8f7dc60bf40a | Winpython64-3.12.10.1slim.exe | 630 775 751 Bytes | 62df47ca5c8e3d01ce620ff35d267cf118354380ce116f96d84674d189b01290
+2b97ec540e90243038319bbab4346885 | c2d7bb5d981ab38a621a97b95396bcc06f688f61 | 0c526a46fa72ed78cfa45b5332c491fa476bf41f11b2feab90fa7bd48e90724d | Winpython64-3.12.10.1whl.7z | 669 141 991 Bytes | a81cf5421045ba498e7f810c882d0bfd58f5885bc78a34623a2ed85d4529fe90
+12f60270841f87960ff6ce4e5f72d988 | b2f58a6def515cc63be9adf49071630da2edb1e6 | 9f9488eca6aba8fbe75cccde84457b6753cb100a66a4c6c9116107907c4df096 | Winpython64-3.13.5.0dot.exe | 25 108 248 Bytes | 9e649e6667b632bf4b9dd834d985fd1150aaa56e084f564e8d5fde7411b9b7b4
+7aa09c30d44f49abcb6df551fb604dad | 5cf05836d06c0146b7994003568e2b3187dc86c6 | 2727803b134290dcf8b06447b8c122a04ec4e0c592a481c1b6db1b9fa41a09fc | Winpython64-3.13.5.0dot.zip | 39 977 050 Bytes | 16debf3592081a2a7e03931278365b49b28134501d9faee0b252a0f7ebeee2e1
+cbb360471ca828b7753b0ee20e55a3ad | 8bd495def05b5187075e538be1eff957abcff24d | 12c22b0223fe59da9831ba42d44f042826bc8502e15801b9c26ecc3c77dac8aa | Winpython64-3.13.5.0slim.7z | 635 310 049 Bytes | 8e5dd9adf60dd0765743d98c1f13b0e579177a33975fb3df7e30c3290fe01373
+830ffba4935017c13fa2b36d169c08eb | fad23f5af5f5e5584ff21ba02b31c367762e4813 | 495364ef366806a08e649bcaaa32284252f2d317c0360380d467e4b9a01a5428 | Winpython64-3.13.5.0slim.exe | 635 525 645 Bytes | f410fae1fafe18ff07de184d697ed665dc55cf3ce6f073e26bada38110b1e1e1
+549c1e98f751d78e55b655ced2b37dfb | a17413cb2ebe292baa393a9c39b1445569fbac92 | 21422ba5ad05af2306e4fbea0cf95ed0df2df06ed301c6b6ffa6f8f289be61ff | Winpython64-3.13.5.0whl.7z | 670 983 739 Bytes | 5bfe915c4db5edfd7a5da3b34adb28df8eae2714ffb6835ca4349571bb95f7e9
+957f4ce2220f86f9a0dfd544c1059347 | ac6bff0f2a9d70761f51fccd541a3936a81f79ed | a54b5dc8a1d5dba697d52069349a5d3b4fdd1f78090c3bbd73c5a46ddbe4a536 | Winpython64-3.14.0.0freeb3.exe | 27 604 465 Bytes | 11179b50e8fe98fa5b515db33e66aa08ea84dc4ad05f164f010df11784af7e05
+aa72d902262d409f0d0dd66d1b22a1b5 | 6cf322bf92b8093e95bf64955b8caec7fddd9430 | 23230dad12ebac1dd58043782d8a534143711bbada51e6f0d1f827ba08eb987a | Winpython64-3.14.0.0freeb3.zip | 46 626 549 Bytes | a788f5daee00a97832087a90ac2baea1852f7640fa57f46f250552d09d874886
+49a26ef054a744792de6e50586feeb5f | 2c99b9b9ceafa8c634624a1d0fed3f52e716d770 | db37ea4a33b9dfe618d788776547f0657408fb6b75b5429433990d43be4ac712 | pylock.64-3_12_10_1slim.toml | 190 459 Bytes | da71bf8b4465fd4f2f138606cc9a7e2c5003ef2a0b53b2c1cf1cca3ec4863578
+6c9b240066e3aab4e0489cf60e76653e | 1669cfe258a50ac8bdd34776a2a38ef4489e44e1 | 543fb039c8e01f1d8e38473b0624ce75949d68d92b1fbf738aff18341f8a67d1 | pylock.64-3_13_5_0slim.toml | 190 441 Bytes | 26aac2e1c0a87b392aa203a7d51d6879612738f66b3b06b259fef45fff2f1521
+aa96bb795c6908f28692972f8a64ca13 | 40981f9fb851ac0f46cd39fbbbb1eac07d5154ff | 1b22a3b8e157cac0b8958dd46858130ab7d416b5f01d0664f53ca649c5f5f148 | requir.64-3_12_10_1slim.txt | 52 262 Bytes | 40fd3a79f147a9b3cf5ea65b5e0d8a314bc14bde3b242eadf04a447399c8556b
+22dc7e0e65f98bcf03b5ce04f6ac8ebd | a2278e6a4289191eab32b9a94ba96311633a81eb | 8e297bc7c44a717be162877e57f41763ed414b2aa8e76c87077141158786705c | requir.64-3_13_5_0slim.txt | 52 262 Bytes | 986685832cb240e3728af2770c25b0dc07666f21c627453ada41cb201b56d8f4
+
+
+### WinPython 2025-02 release (May 4th, 2025)
+
+MD5 | SHA-1 | SHA-256 | Binary | Size | blake2b-256
+---------------------------------|------------------------------------------|------------------------------------------------------------------|-----------------------------------|----------------------|-----------------------------------------------------------------
+b5a3814f26dade2f6ee9acf983427a8e | b3826baea1606868628128bab5527e3600342fbf | 517eff0673658da3f2da64a28afbd7733fb91807f7d074d3a9e9e6c0eb1dd523 | Winpython64-3.12.10.0dot.7z | 23 076 535 Bytes | e3e4b8b944e79cf20dea5e7691c24485a5b68bb70d34df6edfb181fd499b0335
+6f354778174e04fdb4c4c28c7a543f31 | 5d1bd5bd76dcb0e61df1a268e4ce47f56acbfe6f | b6d196d72ce443ccfbdb5a640f5645a7ade742092fddde65d73755c4eba89a1d | Winpython64-3.12.10.0dot.exe | 23 291 575 Bytes | 785f61ee3821d772bdbff037f86a4229d707c97d97f2508e8cdd03f81c1a8436
+431e37ef366ebe9ae30fa7fb162bb314 | 32965a55a8bc119b96875c542d9a08c6f4ed9b75 | bcb2a87ef210076ff4507a4a644bfb82daa0c2361e7945e5cb7de161450460f6 | Winpython64-3.12.10.0dot.zip | 38 334 544 Bytes | ab0b83f09299291a36298754a445429964f610f507b18e484f6bdf572880acbe
+6e7131129ff75dd4e8832f7be131dcc3 | 4d6c5b10d4b3044b9a70597fcd4fd34cd5e2b2a8 | 294c287c4a9918c730d26188e2dc34e97a92431c83515165f04c2ea8d33f0c1d | Winpython64-3.12.10.0slim.7z | 624 548 662 Bytes | f0b952a2fe29837783b69dcb4259369ee5c1d40a3220ad0b4dd82b1668322973
+3cefa92f927471aeef6c1fa3b7911166 | 1699db6b9c44b605c9f2031201bb58a46a260f0e | 3ea3368ca0e9182c03e8e0bc38b65c5398dd4f8aee7ccf5ab38d5a9226af6b9a | Winpython64-3.12.10.0slim.exe | 624 763 614 Bytes | 8584e33e01025ce04d0e429f2c08c7fe94576901aabf030341b21e0837ed5966
+95c7326579dbd4a16cb2f5b56a141673 | f28906c1e3e4ba073f0363a4e35326f9e8090ce1 | 13abddd4cc2702be56b672c868d0d1bc085e80748dc7d7e9315ab4080f157f3b | Winpython64-3.13.3.0dot.7z | 24 839 744 Bytes | 1cb42e1ea66116bc0e7804fb44bb519140d5a5acc9bb63c650ef38dc138ca0bb
+bccca9b3e79dfbc13d14837e3ba85c9b | 41c805812b778ccaf3781701264b23e6c9908069 | a6b1882b8eff8a44782bfeec7e5228826ebd38c4234e10ba38a52a85860c41d0 | Winpython64-3.13.3.0dot.exe | 25 054 784 Bytes | eea4a48f72d3ca7e784e86883ef2b46cd48a75fd68321c1088e9ed8c11ad47bd
+06a5eb8fa4f7447ad63b7e214b126fd7 | 80ab8340798a318c09ffe07a77a920d5d1eda2b7 | f7ef5a6cfe23b7f39f87c128594fc6c7f73f42f9516a0b828dac0da187af68ec | Winpython64-3.13.3.0dot.zip | 39 870 933 Bytes | a4f9a910f55c5efdbb843874384d5295ff3b3a45d27cab63f74d2f215f9d798c
+40e207597ddecd78f60e8474d8dc3c81 | 5e4df5e04424a754b33e4a63f4ae31d0a65eb0a5 | 0ee4eaa17ed86fbcb9e861989e08c85dcf13ca1ef067c52f4fc8b68dd7836c46 | Winpython64-3.13.3.0slim.7z | 629 049 097 Bytes | f275d41a374ff5f3b75decbe65cd52a54c1ac8157edeb62f377dfa2278201ccb
+312a8e7fa70b5b58e44f69c1066687a8 | 12e992d1e40fb04c0e7fe367a983dc27ef88b151 | 9abfd2a54ba314dfe573792a573ad31a43e63765f7b77c2002849086a1a47c5e | Winpython64-3.13.3.0slim.exe | 629 265 120 Bytes | 87fc9b086fae8a07b234fcced8b428cd0c3367a9ff068cd3c28b661813c94cab
+588e3a1a7ddc461f528270a302a3b667 | a77e443c86c1d21c9a177193e69847efa6346373 | 060046dc83030a639d50396f403a28556ebbd87495bb14045b21118e6cff4c4b | requirement_hash.WinPython64-3.12.10..0slim.txt | 78 133 Bytes | 54d3902407c7c935d83681796585e24d80478f68d22d62ff500d4072ab0385b0
+fb5edb31a3f1e0e7f43eb810f5dd4032 | c6c043e8ec9c7af50eb2d297a91c1b87d3bc7074 | 225500ba0b3aea779b24f7b17bece53250b24380390685bac5ae6c5804f68367 | requirement_hash.WinPython64-3.13.3.0slim.txt | 78 125 Bytes | 1b3d8ff70b049c368ae848d69331faf2ceb19ddc6821ec3549e5511ecac7f393
+
+
+### WinPython 2025-01 release (March 1st, 2025)
+
+ MD5 | SHA-1 | SHA-256 | Binary | Size | blake2b-256
+---------------------------------|------------------------------------------|------------------------------------------------------------------|-----------------------------------|--------------------|-----------------------------------------------------------------
+8aef7e46e862e543d38bed851d0d6505 | fe32d81a13bfd830b5c2820eb9f545ea2dc3302d | 2bcb5bda5d6d27ffce3cccadd772599d534edcbcbca7cb59124e015b3919db68 | Winpython64-3.12.9.0dot.zip | 38 280 444 Bytes | 9f2a468504c56bfb28fec03e47c6526b546098801f21e5137a58dd302838cc6d
+b6fdc51ec5aa7cc449e3e31ab4750899 | f623dc942a6e572a078a2cc71ddc0532d6fd7aef | bf240df0e6ba72499dbea42ba4638264bb777f4d59822df0033f421a342c5188 | Winpython64-3.12.9.0dot.7z | 23 093 610 Bytes | db09d389d7ac6a8e2cfb5369ad910ffcf60ee673894f0ad0a94386409f1d582c
+39dcdd15299ac9a0aa068290432b6c89 | 80c48b7a91446019c1444b85be1124e8b27b9393 | bf1be605dffa97207ab108d9d8dcab2f51c597fc31bebb5e6067811c93402fd3 | Winpython64-3.12.9.0dot.exe | 23 308 650 Bytes | b4f20a6d870c99628fed5fa070ef4bf9312fabc91be926267ec9b9919d1f2353
+e5c92eca86d5063d7c927b87ca7a979a | eabb5add549cda18e7405c8dbe64f163ab92aa05 | 13a08f3bd516558ebca224bb44cc61d763e679b821a1bf240a700a093e7d47fc | Winpython64-3.12.9.0slim.7z | 616 678 094 Bytes | ddcb6f9118e3e2522e920049cb44d82fdcd8e48bfe5f7a30faf1706742971951
+688a2be695eda8f59d0cc690326d1299 | d9e9ddaea543964d9e9743aec86ee7b342f5480f | 02936d96bb488d111136dce11b08afa189b51f57f59d8d0e7068bea2a5fa67c0 | Winpython64-3.12.9.0slim.exe | 616 892 419 Bytes | bcb6fdccc898a2d70d0f8ba7f80d9a056062fcc5d4cc78845dc979ee46e9292e
+6a8d945c058d9fb08b78235bbf8d7ae6 | bcbf848ed72de9b4595ee44faeec15a084408c06 | 0f984ca5dfc195a265a8b547be43891caed9a8770ba8a13b6f87b45990f12704 | Winpython64-3.13.2.0dot.zip | 39 737 933 Bytes | 10008fb4a9193332a1cf5a0d180e503d3860a708a3add9a021c1b23c72ac767a
+51617e557c70a78f70153b92c784ea69 | 217e21a9292ede8ddc50f4628a0a031c2320be3b | 069f4a9a32b713f27d5a8f8ffccf2658580eeea7df7120b414b3fd74e7fc099e | Winpython64-3.13.2.0dot.7z | 24 777 973 Bytes | b2e6ae219ea69c5f212534cd8a52e0c2bf0506b272b643be5884a52251da4125
+7f509cb8aba38aa748b35014ef7d8c1c | a37826beb8474d678e6dac8d263c3062055e1050 | ecba739bd41459656b632306f316da73980bae84e62b540f14c03affb8ac2d93 | Winpython64-3.13.2.0dot.exe | 24 993 013 Bytes | 4f51cba5d6533bbe59367f925649da08c008cf40aaa564a1ee9134799311b83e
+6486a208002d34492af762d33e51c058 | bd1af3dbd687ed1797ac61a85df74f25efb1578b | dcdcb0608d74333bfb987219150f418b0c9637328703a5c12786ad1e24d5485b | Winpython64-3.13.2.0slim.7z | 621 789 094 Bytes | 112a12e15435b200c22055407553879554e3487bed5118468ee2cd6a3c56fff2
+04b8e6e1dc61e2871b5cf522c76ab471 | 7d66dd128689ae80dbfdb589604572bdf204fc9b | 865c54d31aec95f3138b934a4c0a4ff440ac7a27d82b1a9667c61a80ec4d764f | Winpython64-3.13.2.0slim.exe | 622 004 549 Bytes | fd1ad38146a6323be31c7a35aa39c31dd26b6c3d9328da97b71c6a3dcea622f9
+99a59eda2bf37dfab76bcffcae9cd3a7 | 77df69ec8875a7733c60ce2f0d78ced356d7b4c9 | fc66c242a6fe975dd85c764bd1068ad944440684a2bdc8599c2e5a13b5ca29cd | Winpython64-3.14.0.0dota5b.zip | 40 495 265 Bytes | 8344a7e9a40d15d12fe6e3682b86a72ff512136d4cdc65ebca321cd3283c088e
+a0a66a0d00aeefcc185327999fd044c8 | 501888e481f95f824ca7e3160ea117f4f302385e | 92a9a6da1faef872ade0905cf01471831da54ff628b722a4e1d5b4d2a9338f8c | Winpython64-3.14.0.0dota5b.7z | 25 110 864 Bytes | 38275cae601dbbd83fba9591930c893e71b7ea7a8333b2acc0a5a2bde85001bb
+91d3e6ebb32677e6ed9674f5e91fc538 | 931baf8ea70e052e4d87d7dc89d8cdb9c3c277e2 | e4933634b52e0b4ae498ddd1302ecf2ccb8b3de95df8af5120f9f298c2b64d3d | Winpython64-3.14.0.0dota5b.exe | 25 325 904 Bytes | fe50cdcb5328813d783cf92b0b2bb16ef6330d7f45d6888fab1f0fcc208c1b16
+
+
+### WinPython 2024-05 release (January 3rd, 2025)
+
+ MD5 | SHA-1 | SHA-256 | Binary | Size | blake2b-256
+---------------------------------|------------------------------------------|------------------------------------------------------------------|-----------------------------------|--------------------|-----------------------------------------------------------------
+3378af265aefee3129171e3165448cfb | cfa99a4fed09996492fd72e2a0d8a441a46050b3 | 2727f61b2702232337a46e39c006f24bd1084395cdf27d076c55d39756c406cc | Winpython64-3.12.8.0dot.exe | 23 442 531 Bytes | efde9241b8922abab035f388e1125069a43bb9d3d48ec5d1667b7d81b4d47061
+139c4bbd020a3082ba164c3e7d32ef59 | a09a8a71047e2b0a5c4f39585249de862c279130 | fabb3f7af4e00fd1b45874d37a63ed2239f62c0935834aa91b83645ba04cd7ba | Winpython64-3.12.8.0dot.7z | 23 227 496 Bytes | 186585ae19af5abf541f88a2a7d6acccc894565280c4e5ca93afdff408160a97
+6e72ee9a3e348c2b3babb90762e85e29 | 65e1f774b02f20c8d386c058a3ed1f797a22d20e | c4c59403370e62169bbeba06f140f0da76b2ee5a5a51ebcfdb3d3ad663b2688a | Winpython64-3.12.8.0slim.exe | 672 113 338 Bytes | 219537f13844cdae7ecc4d00053830e7572a66b46b7f4cdc2c41b6131e6213c9
+07fcf9589f8470a53abfa0320d77ba2a | 3c24c434e4b95d131ef4b6b9703cbaf2a96d41c3 | c872dcb59302af13ce098e6904dff8fe778cd950b8219189d8634bade609bdbb | Winpython64-3.12.8.0slim.7z | 671 899 744 Bytes | 7111b4bf2ee2497296ab0d022606fbcad7d291f8ff10a0cf768dfc44a42423f4
+2d60b1a863fed5cf63d7430d0904a461 | e2a2838cecec6bdeb9d48b998e1b41b362649063 | 338a117a537b9b061314fc38f1a957c34b851d8399edc9705261810da6f2e167 | Winpython64-3.13.1.0dot.exe | 25 157 185 Bytes | 09ec69f4e2e2487b6636cb5f4b242091f9c1b0f9b1c3b2e78b2d4fa0fee0c56d
+7699b8f3727548585c17fa806dfc4d14 | 6e5cc08f958f3c92674a18451a3e1d2a6e49894b | 582985c573c900d1120fc0eae54290c607e578eb055679673170f9ef943c13a2 | Winpython64-3.13.1.0dot.7z | 24 942 148 Bytes | da0233c851631a8d12c86e0d6781e092d562874d8a7c1b337ccd1fac7c235efb
+db2769c756bc3eb4bd40a941dc667d72 | 5bfcc0492025b606681563c3c73d8b2e5b415313 | 47b9a4ce75efb29d78dda80716d6c35f9a13621efd3a89ef8242a114ef8001a3 | Winpython64-3.13.1.0dot.zip | 39 640 324 Bytes | 1c37c1a2f32e43770f6d105948d7866acd5331c1a19b1c70c5d276604db2a45c
+efe121af4dca37595c871fec340a2bda | 44e6d681f5c6ffb7f1e1fef27ecd800cf04d0fff | ed86375c2d6a9de8bddf9889058e299f50ea26432e00e9a74d1d20771e388c55 | Winpython64-3.13.1.0slim.exe | 600 808 320 Bytes | 9f2ed14f54002545e6999321bb981ccb74e280b6786fa289aba7bc09877d71a9
+a24d30ebbf06848279f3a46ed60d42d7 | 982e4c1eb1fcb03432ac4f5eac0d252a9fd65776 | 87fb127b075f0de76f854da6e17bc02819e093cd6b87f7a94d4831c7c490a286 | Winpython64-3.13.1.0slim.7z | 600 593 165 Bytes | 882600d3c84c9734cdace8f1445c60777a91b6678541ee6755b816509ecfb234
+
+### WinPython 2024-04 release (September 14th, 2024)
+
+
+ MD5 | SHA-1 | SHA-256 | Binary | Size | blake2b-256
+---------------------------------|------------------------------------------|------------------------------------------------------------------|-----------------------------------|--------------------|-----------------------------------------------------------------
+d3a0d99078b70e13b50b8c693ac23cc5 | 7b1e3f6ea970bddca752bd9ca9088ea30d869f96 | 47d8fb81b0402a61d31cd41f6e4f1a4fe0ee34fc4de781bbc0f23b2835b348f7 | Winpython64-3.11.9.0dot.exe | 25 830 003 Bytes | 353952b8317754ef4370a2502a99db84f4b4ee2df681e09f40e06dd90e72ac36
+1e903de80669230c7f9f571a3e8a6253 | 281f573e62a727bbf916f36cd8c627db20372635 | 5e1c9e8eedac716c4808075aace1863f74f67d4f8c78a77b4cc2e4d13c51a8c6 | Winpython64-3.12.6.0dot.exe | 24 376 540 Bytes | 7f903ca6b2c616596f5e9fa27dac0a9634b5fe23291b7e1ca8a05a99985846ca
+2dbb301939001f07a115a2fd9252f721 | ce347726b7150cdd045928ef6b33194f70041d56 | 1f5532eceb35df957cd974d4650b35f8560f4499bcfbfd2d76c520658210ae21 | Winpython64-3.12.6.0slim.exe | 629 924 055 Bytes | d0c66369d569c8dafdfdb190501073b097049f916753feccf0baa4154564de06
+1665f6854db2c662173b0af67a6c5c08 | 655f9435c4e145a056fb265d9ccdb786240b7d0d | dbd0fcf0997295d44068878521bad4063748765fc4921a9ca40df15f6ac050a3 | Winpython64-3.12.6.0.7z | 887 408 957 Bytes | 351910364b96ef945ee26f87ebccdaa463712f5c5bb287c11d506ff526d7bc43
+b1ad8631fa563fc44593022d31404a6d | 7a7e7536299b3c561b856a3215e3e542056ef927 | e5b7fe7970903f0207836299ebac57c2dc6d7a95e6dbd9b7e9a25fd24fd157dd | Winpython64-3.13.0.1dotrc2.exe | 24 642 967 Bytes | e19c8a9273a458ed38d88e749a0d7d265098d50f2c79105128391593e6dcc905
+a4b43f8e4a7ce78ffd3ee865e37e1ec3 | 793650e4f33c2d247bf91dc29b2d3b8fddc95831 | 8e58df9400d4e713f2f51794f3f13d683e366d1f5438499bdd352139268a640c | Winpython64-3.13.0.1freerc2.exe | 33 311 716 Bytes | 07778110c64e4531281597e121084cba1a6f2d25ce2f28537567d6cdfcda6d36
+
+
+### WinPython 2024-03 release (June 22th, 2024)
MD5 | SHA-1 | SHA-256 | Binary | Size | blake2b-256
---------------------------------|------------------------------------------|------------------------------------------------------------------|-----------------------------------|--------------------|-----------------------------------------------------------------
diff --git a/changelogs/pylock.64-3_12_10_1slim.toml b/changelogs/pylock.64-3_12_10_1slim.toml
new file mode 100644
index 00000000..83f31af9
--- /dev/null
+++ b/changelogs/pylock.64-3_12_10_1slim.toml
@@ -0,0 +1,5491 @@
+lock-version = "1.0"
+created-by = "pip"
+
+[[packages]]
+name = "absl-py"
+version = "2.2.2"
+
+[[packages.wheels]]
+name = "absl_py-2.2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f6/d4/349f7f4bd5ea92dab34f5bb0fe31775ef6c311427a14d5a5b31ecb442341/absl_py-2.2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e5797bc6abe45f64fd95dc06394ca3f2bedf3b5d895e9da691c9ee3397d70092"
+
+[[packages]]
+name = "adbc-driver-manager"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "adbc_driver_manager-1.3.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/65/ef/c628399e3c386215e2f26c7bb0beafb7ee5a6866b3b3e26008d376decc3a/adbc_driver_manager-1.3.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "0646996a7bbd31b321a16810f7110e9155b08607c0a83fed97414ad1bd2cac9e"
+
+[[packages]]
+name = "aiofiles"
+version = "23.2.1"
+
+[[packages.wheels]]
+name = "aiofiles-23.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107"
+
+[[packages]]
+name = "aiohappyeyeballs"
+version = "2.6.1"
+
+[[packages.wheels]]
+name = "aiohappyeyeballs-2.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"
+
+[[packages]]
+name = "aiohttp"
+version = "3.11.18"
+
+[[packages.wheels]]
+name = "aiohttp-3.11.18-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/33/9a/e34e65506e06427b111e19218a99abf627638a9703f4b8bcc3e3021277ed/aiohttp-3.11.18-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8"
+
+[[packages]]
+name = "aiosignal"
+version = "1.3.2"
+
+[[packages.wheels]]
+name = "aiosignal-1.3.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"
+
+[[packages]]
+name = "aiosqlite"
+version = "0.20.0"
+
+[[packages.wheels]]
+name = "aiosqlite-0.20.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/00/c4/c93eb22025a2de6b83263dfe3d7df2e19138e345bca6f18dba7394120930/aiosqlite-0.20.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6"
+
+[[packages]]
+name = "alabaster"
+version = "0.7.16"
+
+[[packages.wheels]]
+name = "alabaster-0.7.16-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"
+
+[[packages]]
+name = "alembic"
+version = "1.15.2"
+
+[[packages.wheels]]
+name = "alembic-1.15.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/41/18/d89a443ed1ab9bcda16264716f809c663866d4ca8de218aa78fd50b38ead/alembic-1.15.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2e76bd916d547f6900ec4bb5a90aeac1485d2c92536923d0b138c02b126edc53"
+
+[[packages]]
+name = "altair"
+version = "5.5.0"
+
+[[packages.wheels]]
+name = "altair-5.5.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/aa/f3/0b6ced594e51cc95d8c1fc1640d3623770d01e4969d29c0bd09945fafefa/altair-5.5.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "91a310b926508d560fe0148d02a194f38b824122641ef528113d029fcd129f8c"
+
+[[packages]]
+name = "annotated-types"
+version = "0.7.0"
+
+[[packages.wheels]]
+name = "annotated_types-0.7.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"
+
+[[packages]]
+name = "ansicolors"
+version = "1.1.8"
+
+[[packages.wheels]]
+name = "ansicolors-1.1.8-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/53/18/a56e2fe47b259bb52201093a3a9d4a32014f9d85071ad07e9d60600890ca/ansicolors-1.1.8-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "00d2dde5a675579325902536738dd27e4fac1fd68f773fe36c21044eb559e187"
+
+[[packages]]
+name = "anthropic"
+version = "0.51.0"
+
+[[packages.wheels]]
+name = "anthropic-0.51.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8c/6e/9637122c5f007103bd5a259f4250bd8f1533dd2473227670fd10a1457b62/anthropic-0.51.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b8b47d482c9aa1f81b923555cebb687c2730309a20d01be554730c8302e0f62a"
+
+[[packages]]
+name = "anyio"
+version = "4.9.0"
+
+[[packages.wheels]]
+name = "anyio-4.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"
+
+[[packages]]
+name = "anywidget"
+version = "0.9.18"
+
+[[packages.wheels]]
+name = "anywidget-0.9.18-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2b/f0/09a30ca0551af20c7cefa7464b7ccb6f5407a550b83c4dcb15c410814849/anywidget-0.9.18-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "944b82ef1dd17b8ff0fb6d1f199f613caf9111338e6e2857da478f6e73770cb8"
+
+[[packages]]
+name = "appdirs"
+version = "1.4.4"
+
+[[packages.wheels]]
+name = "appdirs-1.4.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"
+
+[[packages]]
+name = "argcomplete"
+version = "3.6.2"
+
+[[packages.wheels]]
+name = "argcomplete-3.6.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/31/da/e42d7a9d8dd33fa775f467e4028a47936da2f01e4b0e561f9ba0d74cb0ca/argcomplete-3.6.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "65b3133a29ad53fb42c48cf5114752c7ab66c1c38544fdf6460f450c09b42591"
+
+[[packages]]
+name = "argon2-cffi"
+version = "23.1.0"
+
+[[packages.wheels]]
+name = "argon2_cffi-23.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a4/6a/e8a041599e78b6b3752da48000b14c8d1e8a04ded09c88c714ba047f34f5/argon2_cffi-23.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"
+
+[[packages]]
+name = "argon2-cffi-bindings"
+version = "21.2.0"
+
+[[packages.wheels]]
+name = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"
+
+[[packages]]
+name = "array-api-compat"
+version = "1.12.0"
+
+[[packages.wheels]]
+name = "array_api_compat-1.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a0b4795b6944a9507fde54679f9350e2ad2b1e2acf4a2408a098cdc27f890a8b"
+
+[[packages]]
+name = "arrow"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "arrow-1.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"
+
+[[packages]]
+name = "asgi-csrf"
+version = "0.11"
+
+[[packages.wheels]]
+name = "asgi_csrf-0.11-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/82/1c/5d954baaf144852a4762368b37c06202b277378ea412acc5565f69acc9e9/asgi_csrf-0.11-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "03ac140115f39d4295288a9adf74fdc6ae607f6ef44abee8466520458207242b"
+
+[[packages]]
+name = "asgiref"
+version = "3.8.1"
+
+[[packages.wheels]]
+name = "asgiref-3.8.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/39/e3/893e8757be2612e6c266d9bb58ad2e3651524b5b40cf56761e985a28b13e/asgiref-3.8.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"
+
+[[packages]]
+name = "asn1crypto"
+version = "1.5.1"
+
+[[packages.wheels]]
+name = "asn1crypto-1.5.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c9/7f/09065fd9e27da0eda08b4d6897f1c13535066174cc023af248fc2a8d5e5a/asn1crypto-1.5.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67"
+
+[[packages]]
+name = "asteval"
+version = "1.0.5"
+
+[[packages.wheels]]
+name = "asteval-1.0.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0a/0d/2c6aaab67ac566d76322e87827d707214c5f6ffb5a4fcd456a8633da1788/asteval-1.0.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "082b95312578affc8a6d982f7d92b7ac5de05634985c87e7eedd3188d31149fa"
+
+[[packages]]
+name = "astroid"
+version = "3.3.9"
+
+[[packages.wheels]]
+name = "astroid-3.3.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/de/80/c749efbd8eef5ea77c7d6f1956e8fbfb51963b7f93ef79647afd4d9886e3/astroid-3.3.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248"
+
+[[packages]]
+name = "astropy"
+version = "6.1.6"
+
+[[packages.wheels]]
+name = "astropy-6.1.6-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/06/25/a1c6245c15b8f74e97ee058632739023050a475f979f65056401441f00fd/astropy-6.1.6-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "344c6433b66c770917cb55f9f3754427774d7066bfa7ccf1ca638f45c7c00738"
+
+[[packages]]
+name = "astropy-iers-data"
+version = "0.2024.12.23.0.33.24"
+
+[[packages.wheels]]
+name = "astropy_iers_data-0.2024.12.23.0.33.24-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e8/4d/565740d9ac54640c09d2fdd22ef3583103438fb97305a9cfb66595a4b259/astropy_iers_data-0.2024.12.23.0.33.24-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "40d3c6b6a5cf4dc6ad91b92b7e0f949e5366234e3c4440302247429fc8294302"
+
+[[packages]]
+name = "asttokens"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "asttokens-3.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"
+
+[[packages]]
+name = "async-lru"
+version = "2.0.5"
+
+[[packages.wheels]]
+name = "async_lru-2.0.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"
+
+[[packages]]
+name = "asyncssh"
+version = "2.20.0"
+
+[[packages.wheels]]
+name = "asyncssh-2.20.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f2/c5/7a9d42c065f272f74792663194966a68810e851a34c0dd080246bd7308f5/asyncssh-2.20.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "af6888d937c07a4bf31293335a6166b4d87608cdb5957b49547da6ad87ecf174"
+
+[[packages]]
+name = "atomicwrites"
+version = "1.4.0"
+
+[[packages.wheels]]
+name = "atomicwrites-1.4.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/a0/da5f49008ec6e9a658dbf5d7310a4debd397bce0b4db03cf8a410066bb87/atomicwrites-1.4.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"
+
+[[packages]]
+name = "attrs"
+version = "25.3.0"
+
+[[packages.wheels]]
+name = "attrs-25.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"
+
+[[packages]]
+name = "autopep8"
+version = "2.0.4"
+
+[[packages.wheels]]
+name = "autopep8-2.0.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d8/f2/e63c9f9c485cd90df8e4e7ae90fa3be2469c9641888558c7b45fa98a76f8/autopep8-2.0.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb"
+
+[[packages]]
+name = "azure-core"
+version = "1.32.0"
+
+[[packages.wheels]]
+name = "azure_core-1.32.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/39/83/325bf5e02504dbd8b4faa98197a44cdf8a325ef259b48326a2b6f17f8383/azure_core-1.32.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4"
+
+[[packages]]
+name = "azure-cosmos"
+version = "4.9.0"
+
+[[packages.wheels]]
+name = "azure_cosmos-4.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/61/dc/380f843744535497acd0b85aacb59565c84fc28bf938c8d6e897a858cd95/azure_cosmos-4.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3b60eaa01a16a857d0faf0cec304bac6fa8620a81bc268ce760339032ef617fe"
+
+[[packages]]
+name = "azure-identity"
+version = "1.21.0"
+
+[[packages.wheels]]
+name = "azure_identity-1.21.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3d/9f/1f9f3ef4f49729ee207a712a5971a9ca747f2ca47d9cbf13cf6953e3478a/azure_identity-1.21.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "258ea6325537352440f71b35c3dffe9d240eae4a5126c1b7ce5efd5766bd9fd9"
+
+[[packages]]
+name = "babel"
+version = "2.17.0"
+
+[[packages.wheels]]
+name = "babel-2.17.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"
+
+[[packages]]
+name = "baresql"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "baresql-1.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d6/d2/fe24bcd99d97bddbbccdf191edf4e84c0fdfe894dfff9f54b05f36096ebb/baresql-1.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a24d17f46beb47c221f328f7e06710e3896c6203a8e1909788d7128f27b86f01"
+
+[[packages]]
+name = "bcrypt"
+version = "4.3.0"
+
+[[packages.wheels]]
+name = "bcrypt-4.3.0-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/a9/cf/45fb5261ece3e6b9817d3d82b2f343a505fd58674a92577923bc500bd1aa/bcrypt-4.3.0-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "e53e074b120f2877a35cc6c736b8eb161377caae8925c17688bd46ba56daaa5b"
+
+[[packages]]
+name = "beautifulsoup4"
+version = "4.13.3"
+
+[[packages.wheels]]
+name = "beautifulsoup4-4.13.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"
+
+[[packages]]
+name = "binaryornot"
+version = "0.4.4"
+
+[[packages.wheels]]
+name = "binaryornot-0.4.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4"
+
+[[packages]]
+name = "black"
+version = "25.1.0"
+
+[[packages.wheels]]
+name = "black-25.1.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba"
+
+[[packages]]
+name = "bleach"
+version = "6.2.0"
+
+[[packages.wheels]]
+name = "bleach-6.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"
+
+[[packages]]
+name = "blinker"
+version = "1.9.0"
+
+[[packages.wheels]]
+name = "blinker-1.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"
+
+[[packages]]
+name = "bokeh"
+version = "3.7.3"
+
+[[packages.wheels]]
+name = "bokeh-3.7.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/91/48/08b2382e739236aa3360b7976360ba3e0c043b6234e25951c18c1eb6fa06/bokeh-3.7.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b0e79dd737f088865212e4fdcb0f3b95d087f0f088bf8ca186a300ab1641e2c7"
+
+[[packages]]
+name = "branca"
+version = "0.8.1"
+
+[[packages.wheels]]
+name = "branca-0.8.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f8/9d/91cddd38bd00170aad1a4b198c47b4ed716be45c234e09b835af41f4e717/branca-0.8.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d29c5fab31f7c21a92e34bf3f854234e29fecdcf5d2df306b616f20d816be425"
+
+[[packages]]
+name = "brotli"
+version = "1.1.0"
+
+[[packages.wheels]]
+name = "Brotli-1.1.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/3d/d5/942051b45a9e883b5b6e98c041698b1eb2012d25e5948c58d6bf85b1bb43/Brotli-1.1.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"
+
+[[packages]]
+name = "build"
+version = "1.2.2.post1"
+
+[[packages.wheels]]
+name = "build-1.2.2.post1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/84/c2/80633736cd183ee4a62107413def345f7e6e3c01563dbca1417363cf957e/build-1.2.2.post1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"
+
+[[packages]]
+name = "cachetools"
+version = "5.5.2"
+
+[[packages.wheels]]
+name = "cachetools-5.5.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/72/76/20fa66124dbe6be5cafeb312ece67de6b61dd91a0247d1ea13db4ebb33c2/cachetools-5.5.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"
+
+[[packages]]
+name = "certifi"
+version = "2025.1.31"
+
+[[packages.wheels]]
+name = "certifi-2025.1.31-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"
+
+[[packages]]
+name = "cffi"
+version = "1.17.1"
+
+[[packages.wheels]]
+name = "cffi-1.17.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"
+
+[[packages]]
+name = "chardet"
+version = "5.2.0"
+
+[[packages.wheels]]
+name = "chardet-5.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"
+
+[[packages]]
+name = "charset-normalizer"
+version = "3.4.2"
+
+[[packages.wheels]]
+name = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"
+
+[[packages]]
+name = "clarabel"
+version = "0.10.0"
+
+[[packages.wheels]]
+name = "clarabel-0.10.0-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e6/ba/67a0defb70ed910877049e915e6738fc0432edd5e46b97743ce78a1e5b95/clarabel-0.10.0-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7871b6f499ad66f71d4e7fb40754c4d986d4316f242beb62ff4f63a69785a50c"
+
+[[packages]]
+name = "click"
+version = "8.1.8"
+
+[[packages.wheels]]
+name = "click-8.1.8-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"
+
+[[packages]]
+name = "click-default-group"
+version = "1.2.4"
+
+[[packages.wheels]]
+name = "click_default_group-1.2.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f"
+
+[[packages]]
+name = "cloudpickle"
+version = "3.1.1"
+
+[[packages.wheels]]
+name = "cloudpickle-3.1.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"
+
+[[packages]]
+name = "cohere"
+version = "5.15.0"
+
+[[packages.wheels]]
+name = "cohere-5.15.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c7/87/94694db7fe6df979fbc03286eaabdfa98f1c8fa532960e5afdf965e10960/cohere-5.15.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "22ff867c2a6f2fc2b585360c6072f584f11f275ef6d9242bac24e0fa2df1dfb5"
+
+[[packages]]
+name = "colorama"
+version = "0.4.6"
+
+[[packages.wheels]]
+name = "colorama-0.4.6-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"
+
+[[packages]]
+name = "colorcet"
+version = "3.1.0"
+
+[[packages.wheels]]
+name = "colorcet-3.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c6/c6/9963d588cc3d75d766c819e0377a168ef83cf3316a92769971527a1ad1de/colorcet-3.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2a7d59cc8d0f7938eeedd08aad3152b5319b4ba3bcb7a612398cc17a384cb296"
+
+[[packages]]
+name = "colorlog"
+version = "6.9.0"
+
+[[packages.wheels]]
+name = "colorlog-6.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e3/51/9b208e85196941db2f0654ad0357ca6388ab3ed67efdbfc799f35d1f83aa/colorlog-6.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff"
+
+[[packages]]
+name = "comm"
+version = "0.2.2"
+
+[[packages.wheels]]
+name = "comm-0.2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"
+
+[[packages]]
+name = "contourpy"
+version = "1.3.2"
+
+[[packages.wheels]]
+name = "contourpy-1.3.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73"
+
+[[packages]]
+name = "cookiecutter"
+version = "2.6.0"
+
+[[packages.wheels]]
+name = "cookiecutter-2.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b6/d9/0137658a353168ffa9d0fc14b812d3834772040858ddd1cb6eeaf09f7a44/cookiecutter-2.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a54a8e37995e4ed963b3e82831072d1ad4b005af736bb17b99c2cbd9d41b6e2d"
+
+[[packages]]
+name = "cryptography"
+version = "44.0.0"
+
+[[packages.wheels]]
+name = "cryptography-44.0.0-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede"
+
+[[packages]]
+name = "cvxopt"
+version = "1.3.2"
+
+[[packages.wheels]]
+name = "cvxopt-1.3.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/9f/ad/edce467c24529c536fc9de787546a1c8eca293009383a872b6f638d22eae/cvxopt-1.3.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "a92ebfc5df77fea57544f8ad2102bfc45af0e77ac4dfe98ed1b9628e8bba77c3"
+
+[[packages]]
+name = "cvxpy"
+version = "1.6.4"
+
+[[packages.wheels]]
+name = "cvxpy-1.6.4-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/4e/1d/2c4070e13763c627f40be341a6760818e1e3a62c497c02e8fa09f21585f0/cvxpy-1.6.4-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "052a09716cfb630a48e911e7c9512015ae651100f64530d8eb973a195e105fa3"
+
+[[packages]]
+name = "cycler"
+version = "0.12.1"
+
+[[packages.wheels]]
+name = "cycler-0.12.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"
+
+[[packages]]
+name = "cython"
+version = "3.1.1"
+
+[[packages.wheels]]
+name = "cython-3.1.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/45/0e/e1370ed3216e4e164232d1891c2a2932a3874d1a8681f8c3565cafd98579/cython-3.1.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "307f216ed319ea07644f2ef9974406c830f01bc8e677e2147e9bfcdf9e3ca8ad"
+
+[[packages]]
+name = "cytoolz"
+version = "1.0.1"
+
+[[packages.wheels]]
+name = "cytoolz-1.0.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/62/1a/f3903197956055032f8cb297342e2dff07e50f83991aebfe5b4c4fcb55e4/cytoolz-1.0.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8f89c48d8e5aec55ffd566a8ec858706d70ed0c6a50228eca30986bfa5b4da8b"
+
+[[packages]]
+name = "dask"
+version = "2025.4.1"
+
+[[packages.wheels]]
+name = "dask-2025.4.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b4/12/f9effea5fe2bebfdd8b0d9c857f798382afacd57dc1cd0e9ce21e66c1bc2/dask-2025.4.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "aacbb0a9667856fe58385015efd64aca22f0c0b2c5e1b5e633531060303bb4be"
+
+[[packages]]
+name = "datasette"
+version = "0.65.1"
+
+[[packages.wheels]]
+name = "datasette-0.65.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/08/f7/fc15b9ddc7a2cafe546f0e2696d71940d7604a128e2f903e98238c3435f7/datasette-0.65.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ba7adf717ddcc24a2a8ac57890fffd384a2ebb909b342e4f731ba09eba764305"
+
+[[packages]]
+name = "datasette-graphql"
+version = "2.2"
+
+[[packages.wheels]]
+name = "datasette_graphql-2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f1/12/e8fb59d77c59ec47a2aa53a6d4ac57ad55fce2b48c8397c2866c3f2c66cd/datasette_graphql-2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cd9f61afdcaab1ce4ff6775296e6ece99305bf05cbfae4c1c938a6c9e60cd485"
+
+[[packages]]
+name = "datashader"
+version = "0.17.0"
+
+[[packages.wheels]]
+name = "datashader-0.17.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/dc/52/755bbab06c4d10f693abb724e82271ccf8adc98e9305a5c559867ee40c98/datashader-0.17.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "39421ff999294913e63d41954af955a5dece5d0c55d8fce1426043d70b22d07a"
+
+[[packages]]
+name = "deap"
+version = "1.4.2"
+
+[[packages.wheels]]
+name = "deap-1.4.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/61/c0/f1a383cbb852e4d486e3213cd6d4292f4f789ec32631da15646d3eb13165/deap-1.4.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "02b8b664cfa0b6c18ff3e36d0b982fb66f38fb98c5b4292515a305527d57294e"
+
+[[packages]]
+name = "debugpy"
+version = "1.8.13"
+
+[[packages.wheels]]
+name = "debugpy-1.8.13-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/c9/f7/0df18a4f530ed3cc06f0060f548efe9e3316102101e311739d906f5650be/debugpy-1.8.13-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea"
+
+[[packages]]
+name = "decorator"
+version = "5.2.1"
+
+[[packages.wheels]]
+name = "decorator-5.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"
+
+[[packages]]
+name = "defusedxml"
+version = "0.7.1"
+
+[[packages.wheels]]
+name = "defusedxml-0.7.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"
+
+[[packages]]
+name = "deprecated"
+version = "1.2.14"
+
+[[packages.wheels]]
+name = "Deprecated-1.2.14-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/20/8d/778b7d51b981a96554f29136cd59ca7880bf58094338085bcf2a979a0e6a/Deprecated-1.2.14-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"
+
+[[packages]]
+name = "diff-match-patch"
+version = "20241021"
+
+[[packages.wheels]]
+name = "diff_match_patch-20241021-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f7/bb/2aa9b46a01197398b901e458974c20ed107935c26e44e37ad5b0e5511e44/diff_match_patch-20241021-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "93cea333fb8b2bc0d181b0de5e16df50dd344ce64828226bda07728818936782"
+
+[[packages]]
+name = "dill"
+version = "0.4.0"
+
+[[packages.wheels]]
+name = "dill-0.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049"
+
+[[packages]]
+name = "distributed"
+version = "2025.4.1"
+
+[[packages.wheels]]
+name = "distributed-2025.4.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/df/33/b956f0dc74b292ea3d206a45467fde838f005b64123a729898a6390a291a/distributed-2025.4.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3a7834451b04ef059928045eab6ff6d88ad7bcfd48adc99403127d9a6818b5fa"
+
+[[packages]]
+name = "distro"
+version = "1.9.0"
+
+[[packages.wheels]]
+name = "distro-1.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"
+
+[[packages]]
+name = "django"
+version = "5.2"
+
+[[packages.wheels]]
+name = "Django-5.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/63/e0/6a5b5ea350c5bd63fe94b05e4c146c18facb51229d9dee42aa39f9fc2214/Django-5.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "91ceed4e3a6db5aedced65e3c8f963118ea9ba753fc620831c77074e620e7d83"
+
+[[packages]]
+name = "dnspython"
+version = "2.7.0"
+
+[[packages.wheels]]
+name = "dnspython-2.7.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"
+
+[[packages]]
+name = "docstring-to-markdown"
+version = "0.17"
+
+[[packages.wheels]]
+name = "docstring_to_markdown-0.17-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/56/7b/af3d0da15bed3a8665419bb3a630585756920f4ad67abfdfef26240ebcc0/docstring_to_markdown-0.17-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "fd7d5094aa83943bf5f9e1a13701866b7c452eac19765380dead666e36d3711c"
+
+[[packages]]
+name = "docutils"
+version = "0.21.2"
+
+[[packages.wheels]]
+name = "docutils-0.21.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"
+
+[[packages]]
+name = "duckdb"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "duckdb-1.3.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/36/4f/f7ab120ecd827fdff59f14e1de9771335aa7656a29c3259fa7949de1f276/duckdb-1.3.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8754c40dac0f26d9fb0363bbb5df02f7a61ce6a6728d5efc02c3bc925d7c89c3"
+
+[[packages]]
+name = "entrypoints"
+version = "0.4"
+
+[[packages.wheels]]
+name = "entrypoints-0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"
+
+[[packages]]
+name = "et-xmlfile"
+version = "1.1.0"
+
+[[packages.wheels]]
+name = "et_xmlfile-1.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/96/c2/3dd434b0108730014f1b96fd286040dc3bcb70066346f7e01ec2ac95865f/et_xmlfile-1.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"
+
+[[packages]]
+name = "eval-type-backport"
+version = "0.2.2"
+
+[[packages.wheels]]
+name = "eval_type_backport-0.2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ce/31/55cd413eaccd39125368be33c46de24a1f639f2e12349b0361b4678f3915/eval_type_backport-0.2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a"
+
+[[packages]]
+name = "executing"
+version = "2.2.0"
+
+[[packages.wheels]]
+name = "executing-2.2.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"
+
+[[packages]]
+name = "faker"
+version = "37.1.0"
+
+[[packages.wheels]]
+name = "faker-37.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d7/a1/8936bc8e79af80ca38288dd93ed44ed1f9d63beb25447a4c59e746e01f8d/faker-37.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dc2f730be71cb770e9c715b13374d80dbcee879675121ab51f9683d262ae9a1c"
+
+[[packages]]
+name = "fasta2a"
+version = "0.2.9"
+
+[[packages.wheels]]
+name = "fasta2a-0.2.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7a/df/dd967535662ecc9e101a7d6c0c643a055aabc3de47411c31c1dd624356c8/fasta2a-0.2.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8b855b36f29fde6dcb79ad55be337a8165381b679bec829913009c55581e284e"
+
+[[packages]]
+name = "fastapi"
+version = "0.115.12"
+
+[[packages.wheels]]
+name = "fastapi-0.115.12-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"
+
+[[packages]]
+name = "fastavro"
+version = "1.10.0"
+
+[[packages.wheels]]
+name = "fastavro-1.10.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/0c/ce/cfd16546c04ebbca1be80873b533c788cec76f7bfac231bfac6786047572/fastavro-1.10.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "567ff515f2a5d26d9674b31c95477f3e6022ec206124c62169bc2ffaf0889089"
+
+[[packages]]
+name = "fastjsonschema"
+version = "2.21.1"
+
+[[packages.wheels]]
+name = "fastjsonschema-2.21.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"
+
+[[packages]]
+name = "filelock"
+version = "3.18.0"
+
+[[packages.wheels]]
+name = "filelock-3.18.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"
+
+[[packages]]
+name = "flake8"
+version = "7.1.1"
+
+[[packages.wheels]]
+name = "flake8-7.1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d9/42/65004373ac4617464f35ed15931b30d764f53cdd30cc78d5aea349c8c050/flake8-7.1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"
+
+[[packages]]
+name = "flask"
+version = "3.1.0"
+
+[[packages.wheels]]
+name = "flask-3.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/af/47/93213ee66ef8fae3b93b3e29206f6b251e65c97bd91d8e1c5596ef15af0a/flask-3.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136"
+
+[[packages]]
+name = "flexcache"
+version = "0.3"
+
+[[packages.wheels]]
+name = "flexcache-0.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32"
+
+[[packages]]
+name = "flexparser"
+version = "0.4"
+
+[[packages.wheels]]
+name = "flexparser-0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846"
+
+[[packages]]
+name = "flit"
+version = "3.12.0"
+
+[[packages.wheels]]
+name = "flit-3.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f5/82/ce1d3bb380b227e26e517655d1de7b32a72aad61fa21ff9bd91a2e2db6ee/flit-3.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2b4e7171dc22881fa6adc2dbf083e5ecc72520be3cd7587d2a803da94d6ef431"
+
+[[packages]]
+name = "flit-core"
+version = "3.12.0"
+
+[[packages.wheels]]
+name = "flit_core-3.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f2/65/b6ba90634c984a4fcc02c7e3afe523fef500c4980fec67cc27536ee50acf/flit_core-3.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e7a0304069ea895172e3c7bb703292e992c5d1555dd1233ab7b5621b5b69e62c"
+
+[[packages]]
+name = "folium"
+version = "0.19.5"
+
+[[packages.wheels]]
+name = "folium-0.19.5-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/81/4d/bcbee0676dc06f0b014a030cb928e158c96daafb872a01ddee7e60a8c998/folium-0.19.5-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4333fb3e6f3e9eedb231615d22c6d7df20aea5829554bd6908675865a37803b3"
+
+[[packages]]
+name = "fonttools"
+version = "4.57.0"
+
+[[packages.wheels]]
+name = "fonttools-4.57.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/06/5d/1be5424bb305880e1113631f49a55ea7c7da3a5fe02608ca7c16a03a21da/fonttools-4.57.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "57e30241524879ea10cdf79c737037221f77cc126a8cdc8ff2c94d4a522504b9"
+
+[[packages]]
+name = "fqdn"
+version = "1.5.1"
+
+[[packages.wheels]]
+name = "fqdn-1.5.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"
+
+[[packages]]
+name = "frozenlist"
+version = "1.5.0"
+
+[[packages.wheels]]
+name = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b1/56/4e45136ffc6bdbfa68c29ca56ef53783ef4c2fd395f7cbf99a2624aa9aaa/frozenlist-1.5.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"
+
+[[packages]]
+name = "fsspec"
+version = "2025.3.2"
+
+[[packages.wheels]]
+name = "fsspec-2025.3.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711"
+
+[[packages]]
+name = "fuzzywuzzy"
+version = "0.18.0"
+
+[[packages.wheels]]
+name = "fuzzywuzzy-0.18.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/43/ff/74f23998ad2f93b945c0309f825be92e04e0348e062026998b5eefef4c33/fuzzywuzzy-0.18.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "928244b28db720d1e0ee7587acf660ea49d7e4c632569cad4f1cd7e68a5f0993"
+
+[[packages]]
+name = "geographiclib"
+version = "2.0"
+
+[[packages.wheels]]
+name = "geographiclib-2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9f/5a/a26132406f1f40cf51ea349a5f11b0a46cec02a2031ff82e391c2537247a/geographiclib-2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734"
+
+[[packages]]
+name = "geopandas"
+version = "1.0.1"
+
+[[packages.wheels]]
+name = "geopandas-1.0.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c4/64/7d344cfcef5efddf9cf32f59af7f855828e9d74b5f862eddf5bfd9f25323/geopandas-1.0.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6"
+
+[[packages]]
+name = "geopy"
+version = "2.4.1"
+
+[[packages.wheels]]
+name = "geopy-2.4.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e5/15/cf2a69ade4b194aa524ac75112d5caac37414b20a3a03e6865dfe0bd1539/geopy-2.4.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7"
+
+[[packages]]
+name = "gitdb"
+version = "4.0.12"
+
+[[packages.wheels]]
+name = "gitdb-4.0.12-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"
+
+[[packages]]
+name = "gitpython"
+version = "3.1.44"
+
+[[packages.wheels]]
+name = "GitPython-3.1.44-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"
+
+[[packages]]
+name = "google-auth"
+version = "2.38.0"
+
+[[packages.wheels]]
+name = "google_auth-2.38.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a"
+
+[[packages]]
+name = "google-genai"
+version = "1.16.1"
+
+[[packages.wheels]]
+name = "google_genai-1.16.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/bc/31/30caa8d4ae987e47c5250fb6680588733863fd5b39cacb03ba1977c29bde/google_genai-1.16.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6ae5d24282244f577ca4f0d95c09f75ab29e556602c9d3531b70161e34cd2a39"
+
+[[packages]]
+name = "graphene"
+version = "3.4.3"
+
+[[packages.wheels]]
+name = "graphene-3.4.3-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/66/e0/61d8e98007182e6b2aca7cf65904721fb2e4bce0192272ab9cb6f69d8812/graphene-3.4.3-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "820db6289754c181007a150db1f7fff544b94142b556d12e3ebc777a7bf36c71"
+
+[[packages]]
+name = "graphql-core"
+version = "3.2.6"
+
+[[packages.wheels]]
+name = "graphql_core-3.2.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ae/4f/7297663840621022bc73c22d7d9d80dbc78b4db6297f764b545cd5dd462d/graphql_core-3.2.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f"
+
+[[packages]]
+name = "graphql-relay"
+version = "3.2.0"
+
+[[packages.wheels]]
+name = "graphql_relay-3.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/74/16/a4cf06adbc711bd364a73ce043b0b08d8fa5aae3df11b6ee4248bcdad2e0/graphql_relay-3.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c9b22bd28b170ba1fe674c74384a8ff30a76c8e26f88ac3aa1584dd3179953e5"
+
+[[packages]]
+name = "greenlet"
+version = "3.1.1"
+
+[[packages.wheels]]
+name = "greenlet-3.1.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"
+
+[[packages]]
+name = "griffe"
+version = "1.7.2"
+
+[[packages.wheels]]
+name = "griffe-1.7.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b1/5e/38b408f41064c9fcdbb0ea27c1bd13a1c8657c4846e04dab9f5ea770602c/griffe-1.7.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1ed9c2e338a75741fc82083fe5a1bc89cb6142efe126194cc313e34ee6af5423"
+
+[[packages]]
+name = "groq"
+version = "0.25.0"
+
+[[packages.wheels]]
+name = "groq-0.25.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4d/11/1019a6cfdb2e520cb461cf70d859216be8ca122ddf5ad301fc3b0ee45fd4/groq-0.25.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "aadc78b40b1809cdb196b1aa8c7f7293108767df1508cafa3e0d5045d9328e7a"
+
+[[packages]]
+name = "guidata"
+version = "3.9.0"
+
+[[packages.wheels]]
+name = "guidata-3.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5b/03/44afe4b4d634ea77ea7979be78bba4256607f92a6570241925e5b129966d/guidata-3.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "96a19dc92850bdb3e463fa06e8c22793e090db42d1e72c6dae9bda1a98b61210"
+
+[[packages]]
+name = "h11"
+version = "0.14.0"
+
+[[packages.wheels]]
+name = "h11-0.14.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"
+
+[[packages]]
+name = "h2"
+version = "4.2.0"
+
+[[packages.wheels]]
+name = "h2-4.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d0/9e/984486f2d0a0bd2b024bf4bc1c62688fcafa9e61991f041fb0e2def4a982/h2-4.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0"
+
+[[packages]]
+name = "h5py"
+version = "3.12.1"
+
+[[packages.wheels]]
+name = "h5py-3.12.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/86/f7/bb465dcb92ca3521a15cbe1031f6d18234dbf1fb52a6796a00bfaa846ebf/h5py-3.12.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc"
+
+[[packages]]
+name = "hatchling"
+version = "1.27.0"
+
+[[packages.wheels]]
+name = "hatchling-1.27.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/08/e7/ae38d7a6dfba0533684e0b2136817d667588ae3ec984c1a4e5df5eb88482/hatchling-1.27.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b"
+
+[[packages]]
+name = "holoviews"
+version = "1.20.2"
+
+[[packages.wheels]]
+name = "holoviews-1.20.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/df/67/066a1d984fa259ad7300084a70789579e104afd75fc58a1d44cda9c365d5/holoviews-1.20.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1f892c04bc23e8a3a9cde082b606b9463c9ff78c3d0c00e2ddcc41fe6e738458"
+
+[[packages]]
+name = "hpack"
+version = "4.1.0"
+
+[[packages.wheels]]
+name = "hpack-4.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496"
+
+[[packages]]
+name = "html5lib"
+version = "1.1"
+
+[[packages.wheels]]
+name = "html5lib-1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"
+
+[[packages]]
+name = "httpcore"
+version = "1.0.7"
+
+[[packages.wheels]]
+name = "httpcore-1.0.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"
+
+[[packages]]
+name = "httpie"
+version = "3.2.4"
+
+[[packages.wheels]]
+name = "httpie-3.2.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/03/b6/39bcf01e1185882f34bc9fb77d1fb4a27911a55f60ab407de34abc8a2347/httpie-3.2.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4bd0435cc4b9bca59501bc65089de96f3e93b393803f32a81951db62050ebf0b"
+
+[[packages]]
+name = "httpx"
+version = "0.28.1"
+
+[[packages.wheels]]
+name = "httpx-0.28.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"
+
+[[packages]]
+name = "httpx-sse"
+version = "0.4.0"
+
+[[packages.wheels]]
+name = "httpx_sse-0.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"
+
+[[packages]]
+name = "huggingface-hub"
+version = "0.33.0"
+
+[[packages.wheels]]
+name = "huggingface_hub-0.33.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/33/fb/53587a89fbc00799e4179796f51b3ad713c5de6bb680b2becb6d37c94649/huggingface_hub-0.33.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e8668875b40c68f9929150d99727d39e5ebb8a05a98e4191b908dc7ded9074b3"
+
+[[packages]]
+name = "hupper"
+version = "1.12.1"
+
+[[packages.wheels]]
+name = "hupper-1.12.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/86/7d/3888833e4f5ea56af4a9935066ec09a83228e533d7b8877f65889d706ee4/hupper-1.12.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e872b959f09d90be5fb615bd2e62de89a0b57efc037bdf9637fb09cdf8552b19"
+
+[[packages]]
+name = "hvplot"
+version = "0.11.2"
+
+[[packages.wheels]]
+name = "hvplot-0.11.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ed/d9/466e22e60dd6b1eb09680d7155c47b58da17eda51bbaf4aad8392a45fe12/hvplot-0.11.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9d576a0c2df0f1cf5041545f2a2eddcf962510162876991cae4d1779fad74556"
+
+[[packages]]
+name = "hypercorn"
+version = "0.17.3"
+
+[[packages.wheels]]
+name = "hypercorn-0.17.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0e/3b/dfa13a8d96aa24e40ea74a975a9906cfdc2ab2f4e3b498862a57052f04eb/hypercorn-0.17.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "059215dec34537f9d40a69258d323f56344805efb462959e727152b0aa504547"
+
+[[packages]]
+name = "hyperframe"
+version = "6.1.0"
+
+[[packages.wheels]]
+name = "hyperframe-6.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5"
+
+[[packages]]
+name = "hypothesis"
+version = "6.130.4"
+
+[[packages.wheels]]
+name = "hypothesis-6.130.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5c/d4/5a0c46cc8d266626cdc8082f07f836fa4a96e8715002de69be46ed406d1d/hypothesis-6.130.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cda4a57115d10ecbefe0a9cc8d69d20a13eb56ecbfe7c24eaee5d368c2b7c477"
+
+[[packages]]
+name = "id"
+version = "1.5.0"
+
+[[packages.wheels]]
+name = "id-1.5.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9f/cb/18326d2d89ad3b0dd143da971e77afd1e6ca6674f1b1c3df4b6bec6279fc/id-1.5.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658"
+
+[[packages]]
+name = "idna"
+version = "3.10"
+
+[[packages.wheels]]
+name = "idna-3.10-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"
+
+[[packages]]
+name = "imageio"
+version = "2.37.0"
+
+[[packages.wheels]]
+name = "imageio-2.37.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed"
+
+[[packages]]
+name = "imagesize"
+version = "1.4.1"
+
+[[packages.wheels]]
+name = "imagesize-1.4.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"
+
+[[packages]]
+name = "imbalanced-learn"
+version = "0.13.0"
+
+[[packages.wheels]]
+name = "imbalanced_learn-0.13.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9d/41/721fec82606242a2072ee909086ff918dfad7d0199a9dfd4928df9c72494/imbalanced_learn-0.13.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7eb5859f7827cb3babfa5789978c22fe36e56527d9c9768df2d864d98d9b40fe"
+
+[[packages]]
+name = "importlib-metadata"
+version = "8.6.1"
+
+[[packages.wheels]]
+name = "importlib_metadata-8.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/79/9d/0fb148dc4d6fa4a7dd1d8378168d9b4cd8d4560a6fbf6f0121c5fc34eb68/importlib_metadata-8.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"
+
+[[packages]]
+name = "inflection"
+version = "0.5.1"
+
+[[packages.wheels]]
+name = "inflection-0.5.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"
+
+[[packages]]
+name = "iniconfig"
+version = "2.1.0"
+
+[[packages.wheels]]
+name = "iniconfig-2.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"
+
+[[packages]]
+name = "intervaltree"
+version = "3.1.0"
+
+[packages.sdist]
+name = "intervaltree-3.1.0.tar.gz"
+url = "https://files.pythonhosted.org/packages/50/fb/396d568039d21344639db96d940d40eb62befe704ef849b27949ded5c3bb/intervaltree-3.1.0.tar.gz"
+
+[packages.sdist.hashes]
+sha256 = "902b1b88936918f9b2a19e0e5eb7ccb430ae45cde4f39ea4b36932920d33952d"
+
+[[packages]]
+name = "ipycanvas"
+version = "0.13.3"
+
+[[packages.wheels]]
+name = "ipycanvas-0.13.3-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e2/fc/e3867e413adbfede3a9c372ec015416ccb0a6493659db5812eeec447a73b/ipycanvas-0.13.3-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d37adb2f45d2fef1c3d33c69a0518055694d87827b2f577f3c426d7712f75daa"
+
+[[packages]]
+name = "ipykernel"
+version = "6.29.5"
+
+[[packages.wheels]]
+name = "ipykernel-6.29.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"
+
+[[packages]]
+name = "ipyleaflet"
+version = "0.19.2"
+
+[[packages.wheels]]
+name = "ipyleaflet-0.19.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/56/6f/00d60e93a316a178ae04457ceea5bcbb4e2d7e7e469882ac59ec4cccfb8c/ipyleaflet-0.19.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7cc9157848baca2e1793b96e79f8bdb1aa7340521d2b7d8a62aa8bc30eab5278"
+
+[[packages]]
+name = "ipympl"
+version = "0.9.7"
+
+[[packages.wheels]]
+name = "ipympl-0.9.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/86/6b/21c62f1b2b5e18c6553f7364487dfdf7eb7952b1000a1b7863c1f97819e9/ipympl-0.9.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3698ee7eaa0b047a7603517d7aa1b71b32118a5f51754cab45ec5d994f67208f"
+
+[[packages]]
+name = "ipython"
+version = "8.36.0"
+
+[[packages.wheels]]
+name = "ipython-8.36.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d6/d7/c1c9f371790b3a181e343c4815a361e5a0cc7d90ef6642d64ba5d05de289/ipython-8.36.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "12b913914d010dcffa2711505ec8be4bf0180742d97f1e5175e51f22086428c1"
+
+[[packages]]
+name = "ipython-genutils"
+version = "0.2.0"
+
+[[packages.wheels]]
+name = "ipython_genutils-0.2.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fa/bc/9bd3b5c2b4774d5f33b2d544f1460be9df7df2fe42f352135381c347c69a/ipython_genutils-0.2.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"
+
+[[packages]]
+name = "ipython-sql"
+version = "0.5.0"
+
+[[packages.wheels]]
+name = "ipython_sql-0.5.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/30/8f/9e50fa53ffc371483f9d1b90c1175b706d28a2e978e90a8894035af01905/ipython_sql-0.5.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "61b46ecffb956f62dbc17b5744cf70c649104c8db9afd821aa39b31f7cbb5d5b"
+
+[[packages]]
+name = "ipywidgets"
+version = "8.1.6"
+
+[[packages.wheels]]
+name = "ipywidgets-8.1.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/53/b8/62952729573d983d9433faacf62a52ee2e8cf46504418061ad1739967abe/ipywidgets-8.1.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "446e7630a1d025bdc7635e1169fcc06f2ce33b5bd41c2003edeb4a47c8d4bbb1"
+
+[[packages]]
+name = "isoduration"
+version = "20.11.0"
+
+[[packages.wheels]]
+name = "isoduration-20.11.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"
+
+[[packages]]
+name = "isort"
+version = "5.13.2"
+
+[[packages.wheels]]
+name = "isort-5.13.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d1/b3/8def84f539e7d2289a02f0524b944b15d7c75dab7628bedf1c4f0992029c/isort-5.13.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"
+
+[[packages]]
+name = "itsdangerous"
+version = "2.2.0"
+
+[[packages.wheels]]
+name = "itsdangerous-2.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"
+
+[[packages]]
+name = "janus"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "janus-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/68/34/65604740edcb20e1bda6a890348ed7d282e7dd23aa00401cbe36fd0edbd9/janus-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7e6449d34eab04cd016befbd7d8c0d8acaaaab67cb59e076a69149f9031745f9"
+
+[[packages]]
+name = "jaraco-classes"
+version = "3.4.0"
+
+[[packages.wheels]]
+name = "jaraco.classes-3.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790"
+
+[[packages]]
+name = "jaraco-context"
+version = "6.0.1"
+
+[[packages.wheels]]
+name = "jaraco.context-6.0.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4"
+
+[[packages]]
+name = "jaraco-functools"
+version = "4.1.0"
+
+[[packages.wheels]]
+name = "jaraco.functools-4.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649"
+
+[[packages]]
+name = "jedi"
+version = "0.19.2"
+
+[[packages.wheels]]
+name = "jedi-0.19.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"
+
+[[packages]]
+name = "jellyfish"
+version = "1.1.3"
+
+[[packages.wheels]]
+name = "jellyfish-1.1.3-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/ce/3c/5f007820356627332a6cf957ec1233a4845cb9ce9e9026fd62bbd037ceb0/jellyfish-1.1.3-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "c8c70b1cc92ee15031db16db0d2ca7d5841744f5f626a35c29c3dd7b4ea7002b"
+
+[[packages]]
+name = "jinja2"
+version = "3.1.6"
+
+[[packages.wheels]]
+name = "jinja2-3.1.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"
+
+[[packages]]
+name = "jiter"
+version = "0.9.0"
+
+[[packages.wheels]]
+name = "jiter-0.9.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/cd/9d/742b289016d155f49028fe1bfbeb935c9bf0ffeefdf77daf4a63a42bb72b/jiter-0.9.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "099500d07b43f61d8bd780466d429c45a7b25411b334c60ca875fa775f68ccb0"
+
+[[packages]]
+name = "joblib"
+version = "1.4.2"
+
+[[packages.wheels]]
+name = "joblib-1.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"
+
+[[packages]]
+name = "json5"
+version = "0.10.0"
+
+[[packages.wheels]]
+name = "json5-0.10.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/aa/42/797895b952b682c3dafe23b1834507ee7f02f4d6299b65aaa61425763278/json5-0.10.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"
+
+[[packages]]
+name = "jsonpatch"
+version = "1.33"
+
+[[packages.wheels]]
+name = "jsonpatch-1.33-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"
+
+[[packages]]
+name = "jsonpointer"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "jsonpointer-3.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"
+
+[[packages]]
+name = "jsonschema"
+version = "4.23.0"
+
+[[packages.wheels]]
+name = "jsonschema-4.23.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"
+
+[[packages]]
+name = "jsonschema-specifications"
+version = "2024.10.1"
+
+[[packages.wheels]]
+name = "jsonschema_specifications-2024.10.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"
+
+[[packages]]
+name = "julia"
+version = "0.6.2"
+
+[[packages.wheels]]
+name = "julia-0.6.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/82/af/2e9a1a996f32b34249582392bb419cf8983b627a1d31412acbe9d6dea5b0/julia-0.6.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "90752f71376fdb9919439d20496c2dab24486dfa4fe8a831d6dd14a1bcbc04d1"
+
+[[packages]]
+name = "jupyter"
+version = "1.1.1"
+
+[[packages.wheels]]
+name = "jupyter-1.1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"
+
+[[packages]]
+name = "jupyter-bokeh"
+version = "4.0.5"
+
+[[packages.wheels]]
+name = "jupyter_bokeh-4.0.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/47/78/33b2294aad62e5f95b89a89379c5995c2bd978018387ef8bec79f6dc272c/jupyter_bokeh-4.0.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1110076c14c779071cf492646a1a871aefa8a477261e4721327a666e65df1a2c"
+
+[[packages]]
+name = "jupyter-client"
+version = "8.6.3"
+
+[[packages.wheels]]
+name = "jupyter_client-8.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"
+
+[[packages]]
+name = "jupyter-console"
+version = "6.6.3"
+
+[[packages.wheels]]
+name = "jupyter_console-6.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"
+
+[[packages]]
+name = "jupyter-core"
+version = "5.7.2"
+
+[[packages.wheels]]
+name = "jupyter_core-5.7.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"
+
+[[packages]]
+name = "jupyter-events"
+version = "0.12.0"
+
+[[packages.wheels]]
+name = "jupyter_events-0.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"
+
+[[packages]]
+name = "jupyter-leaflet"
+version = "0.19.2"
+
+[[packages.wheels]]
+name = "jupyter_leaflet-0.19.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/81/7c/3ade59500a358b9018a996d00c26eaede79f76ed362b7051bc5038d4a0d4/jupyter_leaflet-0.19.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0d57e15e80c08a4360f0cde0b4c490beddc5d422bb0e9bc1c0b4479d3fb725a6"
+
+[[packages]]
+name = "jupyter-lsp"
+version = "2.2.5"
+
+[[packages.wheels]]
+name = "jupyter_lsp-2.2.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/e0/7bd7cff65594fd9936e2f9385701e44574fc7d721331ff676ce440b14100/jupyter_lsp-2.2.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"
+
+[[packages]]
+name = "jupyter-server"
+version = "2.15.0"
+
+[[packages.wheels]]
+name = "jupyter_server-2.15.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e2/a2/89eeaf0bb954a123a909859fa507fa86f96eb61b62dc30667b60dbd5fdaf/jupyter_server-2.15.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"
+
+[[packages]]
+name = "jupyter-server-terminals"
+version = "0.5.3"
+
+[[packages.wheels]]
+name = "jupyter_server_terminals-0.5.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"
+
+[[packages]]
+name = "jupyterlab"
+version = "4.4.2"
+
+[[packages.wheels]]
+name = "jupyterlab-4.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f6/ae/fbb93f4990b7648849b19112d8b3e7427bbfc9c5cc8fdc6bf14c0e86d104/jupyterlab-4.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "857111a50bed68542bf55dca784522fe728f9f88b4fe69e8c585db5c50900419"
+
+[[packages]]
+name = "jupyterlab-pygments"
+version = "0.3.0"
+
+[[packages.wheels]]
+name = "jupyterlab_pygments-0.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"
+
+[[packages]]
+name = "jupyterlab-server"
+version = "2.27.3"
+
+[[packages.wheels]]
+name = "jupyterlab_server-2.27.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"
+
+[[packages]]
+name = "jupyterlab-widgets"
+version = "3.0.14"
+
+[[packages.wheels]]
+name = "jupyterlab_widgets-3.0.14-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/64/7a/f2479ba401e02f7fcbd3fc6af201eac888eaa188574b8e9df19452ab4972/jupyterlab_widgets-3.0.14-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "54c33e3306b7fca139d165d6190dc6c0627aafa5d14adfc974a4e9a3d26cb703"
+
+[[packages]]
+name = "keras"
+version = "3.10.0"
+
+[[packages.wheels]]
+name = "keras-3.10.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/95/e6/4179c461a5fc43e3736880f64dbdc9b1a5349649f0ae32ded927c0e3a227/keras-3.10.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c095a6bf90cd50defadf73d4859ff794fad76b775357ef7bd1dbf96388dae7d3"
+
+[[packages]]
+name = "keyring"
+version = "25.6.0"
+
+[[packages.wheels]]
+name = "keyring-25.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd"
+
+[[packages]]
+name = "kiwisolver"
+version = "1.4.8"
+
+[[packages.wheels]]
+name = "kiwisolver-1.4.8-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50"
+
+[[packages]]
+name = "langchain"
+version = "0.3.25"
+
+[[packages.wheels]]
+name = "langchain-0.3.25-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ed/5c/5c0be747261e1f8129b875fa3bfea736bc5fe17652f9d5e15ca118571b6f/langchain-0.3.25-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "931f7d2d1eaf182f9f41c5e3272859cfe7f94fc1f7cef6b3e5a46024b4884c21"
+
+[[packages]]
+name = "langchain-core"
+version = "0.3.59"
+
+[[packages.wheels]]
+name = "langchain_core-0.3.59-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/30/40/aa440a7cd05f1dab5d7c91a1284eb776c3cf3eb59fa18ed39927650cfa38/langchain_core-0.3.59-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9686baaff43f2c8175535da13faf40e6866769015e93130c3c1e4243e7244d70"
+
+[[packages]]
+name = "langchain-text-splitters"
+version = "0.3.8"
+
+[[packages.wheels]]
+name = "langchain_text_splitters-0.3.8-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8b/a3/3696ff2444658053c01b6b7443e761f28bb71217d82bb89137a978c5f66f/langchain_text_splitters-0.3.8-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02"
+
+[[packages]]
+name = "langsmith"
+version = "0.3.42"
+
+[[packages.wheels]]
+name = "langsmith-0.3.42-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/89/8e/e8a58e0abaae3f3ac4702e9ca35d1fc6159711556b64ffd0e247771a3f12/langsmith-0.3.42-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "18114327f3364385dae4026ebfd57d1c1cb46d8f80931098f0f10abe533475ff"
+
+[[packages]]
+name = "lazy-loader"
+version = "0.4"
+
+[[packages.wheels]]
+name = "lazy_loader-0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc"
+
+[[packages]]
+name = "linkify-it-py"
+version = "2.0.3"
+
+[[packages.wheels]]
+name = "linkify_it_py-2.0.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79"
+
+[[packages]]
+name = "llvmlite"
+version = "0.44.0"
+
+[[packages.wheels]]
+name = "llvmlite-0.44.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e2/3b/a9a17366af80127bd09decbe2a54d8974b6d8b274b39bf47fbaedeec6307/llvmlite-0.44.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "eae7e2d4ca8f88f89d315b48c6b741dcb925d6a1042da694aa16ab3dd4cbd3a1"
+
+[[packages]]
+name = "lmfit"
+version = "1.3.3"
+
+[[packages.wheels]]
+name = "lmfit-1.3.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6a/e1/d5aeb89530550c7e797d3528225fa31012490e79c9df5cf72a0f07cc66d3/lmfit-1.3.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a9e9ec7d0d0ec962cc6c078ad1ec6c8311d3ac0e5f0947a00a91f5509dacc2b2"
+
+[[packages]]
+name = "locket"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "locket-1.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3"
+
+[[packages]]
+name = "logfire-api"
+version = "3.12.0"
+
+[[packages.wheels]]
+name = "logfire_api-3.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/97/c6/210bb1da7119af155276046c18ceff29867dfe9ea4bcb7d03397b28bd1cd/logfire_api-3.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "fc092c2dcb24c8462ba776f3b0c2183f82e1cd55f86e29b38cf21a048e66a17d"
+
+[[packages]]
+name = "lxml"
+version = "5.3.0"
+
+[[packages.wheels]]
+name = "lxml-5.3.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/fc/82/ace5a5676051e60355bd8fb945df7b1ba4f4fb8447f2010fb816bfd57724/lxml-5.3.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"
+
+[[packages]]
+name = "mako"
+version = "1.3.9"
+
+[[packages.wheels]]
+name = "Mako-1.3.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cd/83/de0a49e7de540513f53ab5d2e105321dedeb08a8f5850f0208decf4390ec/Mako-1.3.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "95920acccb578427a9aa38e37a186b1e43156c87260d7ba18ca63aa4c7cbd3a1"
+
+[[packages]]
+name = "markdown"
+version = "3.7"
+
+[[packages.wheels]]
+name = "Markdown-3.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3f/08/83871f3c50fc983b88547c196d11cf8c3340e37c32d2e9d6152abe2c61f7/Markdown-3.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"
+
+[[packages]]
+name = "markdown-it-py"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "markdown_it_py-3.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"
+
+[[packages]]
+name = "markupsafe"
+version = "3.0.2"
+
+[[packages.wheels]]
+name = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"
+
+[[packages]]
+name = "matplotlib"
+version = "3.10.3"
+
+[[packages.wheels]]
+name = "matplotlib-3.10.3-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b1/79/0d1c165eac44405a86478082e225fce87874f7198300bbebc55faaf6d28d/matplotlib-3.10.3-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "cf37d8c6ef1a48829443e8ba5227b44236d7fcaf7647caa3178a4ff9f7a5be05"
+
+[[packages]]
+name = "matplotlib-inline"
+version = "0.1.7"
+
+[[packages.wheels]]
+name = "matplotlib_inline-0.1.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"
+
+[[packages]]
+name = "maturin"
+version = "1.8.3"
+
+[[packages.wheels]]
+name = "maturin-1.8.3-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/d5/62/f92a130a370dd7aca13c316844b82853647f048cfe1594a81f628ab7101f/maturin-1.8.3-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "85f2b882d8235c1c1cb0a38d382ccd5b3ba0674d99cb548d49df9342cc688e36"
+
+[[packages]]
+name = "mccabe"
+version = "0.7.0"
+
+[[packages.wheels]]
+name = "mccabe-0.7.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
+
+[[packages]]
+name = "mcp"
+version = "1.9.3"
+
+[[packages.wheels]]
+name = "mcp-1.9.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/79/45/823ad05504bea55cb0feb7470387f151252127ad5c72f8882e8fe6cf5c0e/mcp-1.9.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "69b0136d1ac9927402ed4cf221d4b8ff875e7132b0b06edd446448766f34f9b9"
+
+[[packages]]
+name = "mdit-py-plugins"
+version = "0.4.2"
+
+[[packages.wheels]]
+name = "mdit_py_plugins-0.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"
+
+[[packages]]
+name = "mdurl"
+version = "0.1.2"
+
+[[packages.wheels]]
+name = "mdurl-0.1.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"
+
+[[packages]]
+name = "mercantile"
+version = "1.2.1"
+
+[[packages.wheels]]
+name = "mercantile-1.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b2/d6/de0cc74f8d36976aeca0dd2e9cbf711882ff8e177495115fd82459afdc4d/mercantile-1.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "30f457a73ee88261aab787b7069d85961a5703bb09dc57a170190bc042cd023f"
+
+[[packages]]
+name = "mergedeep"
+version = "1.3.4"
+
+[[packages.wheels]]
+name = "mergedeep-1.3.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"
+
+[[packages]]
+name = "missingno"
+version = "0.5.2"
+
+[[packages.wheels]]
+name = "missingno-0.5.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/87/22/cd5cf999af21c2f97486622c551ac3d07361ced8125121e907f588ff5f24/missingno-0.5.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "55782621ce09ba0f0a1d08e5bd6d6fe1946469fb03951fadf7d209911ca5b072"
+
+[[packages]]
+name = "mistralai"
+version = "1.8.1"
+
+[[packages.wheels]]
+name = "mistralai-1.8.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b0/14/e9ef675928768f508dfcedbb0e0ed601784a6911620a2bc25c9065921420/mistralai-1.8.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "badfc7e6832d894b3e9071d92ad621212b7cccd7df622c6cacdb525162ae338f"
+
+[[packages]]
+name = "mistune"
+version = "3.1.3"
+
+[[packages.wheels]]
+name = "mistune-3.1.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9"
+
+[[packages]]
+name = "mizani"
+version = "0.11.4"
+
+[[packages.wheels]]
+name = "mizani-0.11.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2a/11/f3777ad46c5d92e3ead121c22ea45fafb6c3b2c1edca0c0c6494969c125c/mizani-0.11.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5b6271dc3da2c88694dca2e0e0a7e1879f0e2fb046c789776f54d090a5243735"
+
+[[packages]]
+name = "ml-dtypes"
+version = "0.5.1"
+
+[[packages.wheels]]
+name = "ml_dtypes-0.5.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/38/bc/c4260e4a6c6bf684d0313308de1c860467275221d5e7daf69b3fcddfdd0b/ml_dtypes-0.5.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "9626d0bca1fb387d5791ca36bacbba298c5ef554747b7ebeafefb4564fc83566"
+
+[[packages]]
+name = "mlxtend"
+version = "0.23.3"
+
+[[packages.wheels]]
+name = "mlxtend-0.23.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0f/92/5c322336a0991949a1e91f6acd7e04f7e05b0fb6252a3f00fcdc0cb5e97d/mlxtend-0.23.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f9fec721c4121be87dac00e513456dde5bf56b7427750719c0a291cd58b6538e"
+
+[[packages]]
+name = "more-itertools"
+version = "10.6.0"
+
+[[packages.wheels]]
+name = "more_itertools-10.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89"
+
+[[packages]]
+name = "mpld3"
+version = "0.5.10"
+
+[[packages.wheels]]
+name = "mpld3-0.5.10-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/95/6a/e3691bcc47485f38b09853207c928130571821d187cf174eed5418d45e82/mpld3-0.5.10-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "80877acce87ea447380fad7374668737505c8c0684aab05238e7c5dc1fab38c1"
+
+[[packages]]
+name = "mpmath"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "mpmath-1.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"
+
+[[packages]]
+name = "msal"
+version = "1.30.0"
+
+[[packages.wheels]]
+name = "msal-1.30.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ab/82/8f19334da43b7ef72d995587991a446f140346d76edb96a2c1a2689588e9/msal-1.30.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "423872177410cb61683566dc3932db7a76f661a5d2f6f52f02a047f101e1c1de"
+
+[[packages]]
+name = "msal-extensions"
+version = "1.2.0"
+
+[[packages.wheels]]
+name = "msal_extensions-1.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/69/314d887a01599669fb330da14e5c6ff5f138609e322812a942a74ef9b765/msal_extensions-1.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d"
+
+[[packages]]
+name = "msgpack"
+version = "1.1.0"
+
+[[packages.wheels]]
+name = "msgpack-1.1.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/73/80/2708a4641f7d553a63bc934a3eb7214806b5b39d200133ca7f7afb0a53e8/msgpack-1.1.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f"
+
+[[packages]]
+name = "multidict"
+version = "6.4.3"
+
+[[packages.wheels]]
+name = "multidict-6.4.3-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/06/24/c8fdff4f924d37225dc0c56a28b1dca10728fc2233065fafeb27b4b125be/multidict-6.4.3-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db"
+
+[[packages]]
+name = "multipledispatch"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "multipledispatch-1.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/51/c0/00c9809d8b9346eb238a6bbd5f83e846a4ce4503da94a4c08cb7284c325b/multipledispatch-1.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0c53cd8b077546da4e48869f49b13164bebafd0c2a5afceb6bb6a316e7fb46e4"
+
+[[packages]]
+name = "mypy"
+version = "1.15.0"
+
+[[packages.wheels]]
+name = "mypy-1.15.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/13/50/da5203fcf6c53044a0b699939f31075c45ae8a4cadf538a9069b165c1050/mypy-1.15.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"
+
+[[packages]]
+name = "mypy-extensions"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "mypy_extensions-1.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"
+
+[[packages]]
+name = "mysql-connector-python"
+version = "9.2.0"
+
+[[packages.wheels]]
+name = "mysql_connector_python-9.2.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/5c/48/aa1d3e1dd2fa0fece0581d49c6d10717e18fc86dde493114f3894a3371bd/mysql_connector_python-9.2.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "b7d149bcc455cf606a4aa604d45267fba16c8abf36056b804f8d16e8f5e753c1"
+
+[[packages]]
+name = "namex"
+version = "0.0.8"
+
+[[packages.wheels]]
+name = "namex-0.0.8-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/73/59/7854fbfb59f8ae35483ce93493708be5942ebb6328cd85b3a609df629736/namex-0.0.8-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7ddb6c2bb0e753a311b7590f84f6da659dd0c05e65cb89d519d54c0a250c0487"
+
+[[packages]]
+name = "narwhals"
+version = "1.36.0"
+
+[[packages.wheels]]
+name = "narwhals-1.36.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/42/bf/fbcbd9f8676e06ed43d644a4ddbf31478a44056487578ce67f191da430cb/narwhals-1.36.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e3c50dd1d769bc145f57ae17c1f0f0da6c3d397d62cdd0bb167e9b618e95c9d6"
+
+[[packages]]
+name = "nbclient"
+version = "0.10.2"
+
+[[packages.wheels]]
+name = "nbclient-0.10.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"
+
+[[packages]]
+name = "nbconvert"
+version = "7.16.6"
+
+[[packages.wheels]]
+name = "nbconvert-7.16.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"
+
+[[packages]]
+name = "nbformat"
+version = "5.10.4"
+
+[[packages.wheels]]
+name = "nbformat-5.10.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"
+
+[[packages]]
+name = "nest-asyncio"
+version = "1.6.0"
+
+[[packages.wheels]]
+name = "nest_asyncio-1.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"
+
+[[packages]]
+name = "networkx"
+version = "3.4.2"
+
+[[packages.wheels]]
+name = "networkx-3.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"
+
+[[packages]]
+name = "nh3"
+version = "0.2.18"
+
+[[packages.wheels]]
+name = "nh3-0.2.18-cp37-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844"
+
+[[packages]]
+name = "nltk"
+version = "3.9.1"
+
+[[packages.wheels]]
+name = "nltk-3.9.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1"
+
+[[packages]]
+name = "notebook"
+version = "7.4.2"
+
+[[packages.wheels]]
+name = "notebook-7.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/1e/16/d3c36a0b1f6dfcf218add8eaf803bf0473ff50681ac4d51acb7ba02bce34/notebook-7.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9ccef602721aaa5530852e3064710b8ae5415c4e2ce26f8896d0433222755259"
+
+[[packages]]
+name = "notebook-shim"
+version = "0.2.4"
+
+[[packages.wheels]]
+name = "notebook_shim-0.2.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"
+
+[[packages]]
+name = "numba"
+version = "0.61.2"
+
+[[packages.wheels]]
+name = "numba-0.61.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/68/1d/ddb3e704c5a8fb90142bf9dc195c27db02a08a99f037395503bfbc1d14b3/numba-0.61.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "97cf4f12c728cf77c9c1d7c23707e4d8fb4632b46275f8f3397de33e5877af18"
+
+[[packages]]
+name = "numpy"
+version = "2.2.6"
+
+[[packages.wheels]]
+name = "numpy-2.2.6-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2"
+
+[[packages]]
+name = "numpydoc"
+version = "1.8.0"
+
+[[packages.wheels]]
+name = "numpydoc-1.8.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6c/45/56d99ba9366476cd8548527667f01869279cedb9e66b28eb4dfb27701679/numpydoc-1.8.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "72024c7fd5e17375dec3608a27c03303e8ad00c81292667955c6fea7a3ccf541"
+
+[[packages]]
+name = "openai"
+version = "1.82.0"
+
+[[packages.wheels]]
+name = "openai-1.82.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/51/4b/a59464ee5f77822a81ee069b4021163a0174940a92685efc3cf8b4c443a3/openai-1.82.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8c40647fea1816516cb3de5189775b30b5f4812777e40b8768f361f232b61b30"
+
+[[packages]]
+name = "opencv-python"
+version = "4.11.0.86"
+
+[[packages.wheels]]
+name = "opencv_python-4.11.0.86-cp37-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/a4/7d/f1c30a92854540bf789e9cd5dde7ef49bbe63f855b85a2e6b3db8135c591/opencv_python-4.11.0.86-cp37-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "085ad9b77c18853ea66283e98affefe2de8cc4c1f43eda4c100cf9b2721142ec"
+
+[[packages]]
+name = "openpyxl"
+version = "3.1.5"
+
+[[packages.wheels]]
+name = "openpyxl-3.1.5-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"
+
+[[packages]]
+name = "opentelemetry-api"
+version = "1.32.1"
+
+[[packages.wheels]]
+name = "opentelemetry_api-1.32.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/12/f2/89ea3361a305466bc6460a532188830351220b5f0851a5fa133155c16eca/opentelemetry_api-1.32.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "bbd19f14ab9f15f0e85e43e6a958aa4cb1f36870ee62b7fd205783a112012724"
+
+[[packages]]
+name = "optree"
+version = "0.14.1"
+
+[[packages.wheels]]
+name = "optree-0.14.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/5d/fa/c1dc4f40a83f5df6c16cc3ff89890712dd95caf320641f635ddbe5a11102/optree-0.14.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "98f858daa588ccb70bb554087e87d4192852a11416e5b14f3ee70ae1861b92b0"
+
+[[packages]]
+name = "optuna"
+version = "4.2.1"
+
+[[packages.wheels]]
+name = "optuna-4.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/28/09/c4d329f7969443cdd4d482048ca406b6f61cda3c8e99ace71feaec7c8734/optuna-4.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6d38199013441d3f70fac27136e05c0188c5f4ec3848db708ac311cbdeb30dbf"
+
+[[packages]]
+name = "orjson"
+version = "3.10.16"
+
+[[packages.wheels]]
+name = "orjson-3.10.16-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/35/ce/81a27e7b439b807bd393585271364cdddf50dc281fc57c4feef7ccb186a6/orjson-3.10.16-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "86d127efdd3f9bf5f04809b70faca1e6836556ea3cc46e662b44dab3fe71f3d6"
+
+[[packages]]
+name = "osqp"
+version = "0.6.7.post3"
+
+[[packages.wheels]]
+name = "osqp-0.6.7.post3-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/57/b5/958d4188cb9347e420d3de2d19d8cb1113f691b7a093cdef67f86b598f30/osqp-0.6.7.post3-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "468588cfb690becba4d1f460c2a53e75530584e3efcf2caed59f5219032e6888"
+
+[[packages]]
+name = "outcome"
+version = "1.3.0.post0"
+
+[[packages.wheels]]
+name = "outcome-1.3.0.post0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"
+
+[[packages]]
+name = "overrides"
+version = "7.7.0"
+
+[[packages.wheels]]
+name = "overrides-7.7.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"
+
+[[packages]]
+name = "packaging"
+version = "24.2"
+
+[[packages.wheels]]
+name = "packaging-24.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"
+
+[[packages]]
+name = "pandas"
+version = "2.2.3"
+
+[[packages.wheels]]
+name = "pandas-2.2.3-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"
+
+[[packages]]
+name = "pandocfilters"
+version = "1.5.1"
+
+[[packages.wheels]]
+name = "pandocfilters-1.5.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"
+
+[[packages]]
+name = "panel"
+version = "1.6.3"
+
+[[packages.wheels]]
+name = "panel-1.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7a/fe/d01b6eae59933d56c345e57cdde5ffe379b7b1f56d192782ab8071249f73/panel-1.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ccd2a0587ab382bd55b8ea099706f31b64aadac697b8a41923d3b18b9ed618d6"
+
+[[packages]]
+name = "papermill"
+version = "2.6.0"
+
+[[packages.wheels]]
+name = "papermill-2.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/61/55/83ce641bc61a70cc0721af6f50154ecaaccedfbdbc27366c1755a2a34972/papermill-2.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0f09da6ef709f3f14dde77cb1af052d05b14019189869affff374c9e612f2dd5"
+
+[[packages]]
+name = "param"
+version = "2.2.0"
+
+[[packages.wheels]]
+name = "param-2.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/99/56/370a6636e072a037b52499edd8928942df7f887974fc54444ece5152d26a/param-2.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "777f8c7b66ab820b70ea5ad09faaa6818308220caae89da3b5c5f359faa72a5e"
+
+[[packages]]
+name = "parso"
+version = "0.8.4"
+
+[[packages.wheels]]
+name = "parso-0.8.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"
+
+[[packages]]
+name = "partd"
+version = "1.4.2"
+
+[[packages.wheels]]
+name = "partd-1.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f"
+
+[[packages]]
+name = "pathspec"
+version = "0.12.1"
+
+[[packages.wheels]]
+name = "pathspec-0.12.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"
+
+[[packages]]
+name = "patsy"
+version = "1.0.1"
+
+[[packages.wheels]]
+name = "patsy-1.0.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/87/2b/b50d3d08ea0fc419c183a84210571eba005328efa62b6b98bc28e9ead32a/patsy-1.0.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c"
+
+[[packages]]
+name = "pep8"
+version = "1.7.1"
+
+[[packages.wheels]]
+name = "pep8-1.7.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/42/3f/669429ce58de2c22d8d2c542752e137ec4b9885fff398d3eceb1a7f5acb4/pep8-1.7.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b22cfae5db09833bb9bd7c8463b53e1a9c9b39f12e304a8d0bba729c501827ee"
+
+[[packages]]
+name = "pexpect"
+version = "4.9.0"
+
+[[packages.wheels]]
+name = "pexpect-4.9.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"
+
+[[packages]]
+name = "pg8000"
+version = "1.31.2"
+
+[[packages.wheels]]
+name = "pg8000-1.31.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/09/a0/2b30d52017c4ced8fc107386666ea7573954eb708bf66121f0229df05d41/pg8000-1.31.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "436c771ede71af4d4c22ba867a30add0bc5c942d7ab27fadbb6934a487ecc8f6"
+
+[[packages]]
+name = "pickleshare"
+version = "0.7.5"
+
+[[packages.wheels]]
+name = "pickleshare-0.7.5-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9a/41/220f49aaea88bc6fa6cba8d05ecf24676326156c23b991e80b3f2fc24c77/pickleshare-0.7.5-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"
+
+[[packages]]
+name = "pillow"
+version = "11.1.0"
+
+[[packages.wheels]]
+name = "pillow-11.1.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"
+
+[[packages]]
+name = "platformdirs"
+version = "4.3.7"
+
+[[packages.wheels]]
+name = "platformdirs-4.3.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6d/45/59578566b3275b8fd9157885918fcd0c4d74162928a5310926887b856a51/platformdirs-4.3.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"
+
+[[packages]]
+name = "plotly"
+version = "6.0.1"
+
+[[packages.wheels]]
+name = "plotly-6.0.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768"
+
+[[packages]]
+name = "plotnine"
+version = "0.13.6"
+
+[[packages.wheels]]
+name = "plotnine-0.13.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/93/b1/e1c84e68cf24e83c4d251122e04c48840be203dafb4727e738381cdefa74/plotnine-0.13.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4acc1af29fa4e91e726b67d49277e8368f62e1c817f01bf14ecd8ca5e83bfaea"
+
+[[packages]]
+name = "plotpy"
+version = "2.7.4"
+
+[[packages.wheels]]
+name = "plotpy-2.7.4-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/a1/26/514cf02030400972fd95d42381e76690640eb3d3ceb14d86c22ebbb302ef/plotpy-2.7.4-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "716fee6b2c2a2156fd267e3941bcef28b3b169e6f95d2ab7f1417ef8c76f8a14"
+
+[[packages]]
+name = "pluggy"
+version = "1.5.0"
+
+[[packages.wheels]]
+name = "pluggy-1.5.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"
+
+[[packages]]
+name = "ply"
+version = "3.11"
+
+[[packages.wheels]]
+name = "ply-3.11-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"
+
+[[packages]]
+name = "polars"
+version = "1.31.0"
+
+[[packages.wheels]]
+name = "polars-1.31.0-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/6e/f6/9d9ad9dc4480d66502497e90ce29efc063373e1598f4bd9b6a38af3e08e7/polars-1.31.0-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "3fd874d3432fc932863e8cceff2cff8a12a51976b053f2eb6326a0672134a632"
+
+[[packages]]
+name = "portalocker"
+version = "2.7.0"
+
+[[packages.wheels]]
+name = "portalocker-2.7.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8c/df/d4f711d168524f5aebd7fb30969eaa31e3048cf8979688cde3b08f6e5eb8/portalocker-2.7.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983"
+
+[[packages]]
+name = "prettytable"
+version = "3.16.0"
+
+[[packages.wheels]]
+name = "prettytable-3.16.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/02/c7/5613524e606ea1688b3bdbf48aa64bafb6d0a4ac3750274c43b6158a390f/prettytable-3.16.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b5eccfabb82222f5aa46b798ff02a8452cf530a352c31bddfa29be41242863aa"
+
+[[packages]]
+name = "prince"
+version = "0.16.0"
+
+[[packages.wheels]]
+name = "prince-0.16.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/18/d5/b4480a0f381cbbcfad31f4d118732ab717216857508a730938ee615669a1/prince-0.16.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7e21a78d4dd06ca3ec526ee714a50b349f26de3fca6b79664150a951b31688f3"
+
+[[packages]]
+name = "priority"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "priority-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5e/5f/82c8074f7e84978129347c2c6ec8b6c59f3584ff1a20bc3c940a3e061790/priority-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa"
+
+[[packages]]
+name = "prometheus-client"
+version = "0.21.1"
+
+[[packages.wheels]]
+name = "prometheus_client-0.21.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ff/c2/ab7d37426c179ceb9aeb109a85cda8948bb269b7561a0be870cc656eefe4/prometheus_client-0.21.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"
+
+[[packages]]
+name = "prompt-toolkit"
+version = "3.0.51"
+
+[[packages.wheels]]
+name = "prompt_toolkit-3.0.51-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"
+
+[[packages]]
+name = "propcache"
+version = "0.3.1"
+
+[[packages.wheels]]
+name = "propcache-0.3.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/24/bb/3b1b01da5dd04c77a204c84e538ff11f624e31431cfde7201d9110b092b1/propcache-0.3.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3"
+
+[[packages]]
+name = "protobuf"
+version = "6.30.2"
+
+[[packages.wheels]]
+name = "protobuf-6.30.2-cp310-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/97/e9/7b9f1b259d509aef2b833c29a1f3c39185e2bf21c9c1be1cd11c22cb2149/protobuf-6.30.2-cp310-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7653c99774f73fe6b9301b87da52af0e69783a2e371e8b599b3e9cb4da4b12b9"
+
+[[packages]]
+name = "psutil"
+version = "7.0.0"
+
+[[packages.wheels]]
+name = "psutil-7.0.0-cp37-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"
+
+[[packages]]
+name = "psygnal"
+version = "0.12.0"
+
+[[packages.wheels]]
+name = "psygnal-0.12.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/84/09/f00841834b7ae543bd232c22e557914d63d0d0430d32980883421d5981bb/psygnal-0.12.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "25a9f2db710a6cd2566b3e0e03cf6e04d56276f36ac86b42fa22d81f9a4ac0f2"
+
+[[packages]]
+name = "ptpython"
+version = "3.0.29"
+
+[[packages.wheels]]
+name = "ptpython-3.0.29-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0f/39/c6fd4dd531e067b6a01624126cff0b3ddc6569e22f83e48d8418ffa9e3be/ptpython-3.0.29-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "65d75c4871859e4305a020c9b9e204366dceb4d08e0e2bd7b7511bd5e917a402"
+
+[[packages]]
+name = "ptyprocess"
+version = "0.7.0"
+
+[[packages.wheels]]
+name = "ptyprocess-0.7.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"
+
+[[packages]]
+name = "pure-eval"
+version = "0.2.3"
+
+[[packages.wheels]]
+name = "pure_eval-0.2.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"
+
+[[packages]]
+name = "pyarrow"
+version = "20.0.0"
+
+[[packages.wheels]]
+name = "pyarrow-20.0.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/a0/8e/9adee63dfa3911be2382fb4d92e4b2e7d82610f9d9f668493bebaa2af50f/pyarrow-20.0.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b"
+
+[[packages]]
+name = "pyasn1"
+version = "0.6.1"
+
+[[packages.wheels]]
+name = "pyasn1-0.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"
+
+[[packages]]
+name = "pyasn1-modules"
+version = "0.4.1"
+
+[[packages.wheels]]
+name = "pyasn1_modules-0.4.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"
+
+[[packages]]
+name = "pybind11"
+version = "2.13.6"
+
+[[packages.wheels]]
+name = "pybind11-2.13.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/13/2f/0f24b288e2ce56f51c920137620b4434a38fd80583dbbe24fc2a1656c388/pybind11-2.13.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "237c41e29157b962835d356b370ededd57594a26d5894a795960f0047cb5caf5"
+
+[[packages]]
+name = "pycodestyle"
+version = "2.12.0"
+
+[[packages.wheels]]
+name = "pycodestyle-2.12.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/55/c4/bf8ede2d1641e0a2e027c6d0c7060e00332851ea772cc5cee42a4a207707/pycodestyle-2.12.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4"
+
+[[packages]]
+name = "pycparser"
+version = "2.22"
+
+[[packages.wheels]]
+name = "pycparser-2.22-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"
+
+[[packages]]
+name = "pyct"
+version = "0.5.0"
+
+[[packages.wheels]]
+name = "pyct-0.5.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/75/e7/c7c1e9e1b6b23ca1db7af3c6826d57d8da883021f751edcc9c82143b127a/pyct-0.5.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a4038a8885059ab8cac6f946ea30e0b5e6bdbe0b92b6723f06737035f9d65e8c"
+
+[[packages]]
+name = "pydantic"
+version = "2.10.6"
+
+[[packages.wheels]]
+name = "pydantic-2.10.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"
+
+[[packages]]
+name = "pydantic-ai-slim"
+version = "0.2.9"
+
+[[packages.wheels]]
+name = "pydantic_ai_slim-0.2.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d8/23/b4d52d83c302859e1e251a8c8a360b993cf8b4818c8b633adaa98b043556/pydantic_ai_slim-0.2.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d954ff84cb250d7150a7ed694e4f1f92f820205d036ee006d02fce3e62a3bc4e"
+
+[[packages]]
+name = "pydantic-core"
+version = "2.27.2"
+
+[[packages.wheels]]
+name = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/1f/ea/cd7209a889163b8dcca139fe32b9687dd05249161a3edda62860430457a5/pydantic_core-2.27.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"
+
+[[packages]]
+name = "pydantic-evals"
+version = "0.2.9"
+
+[[packages.wheels]]
+name = "pydantic_evals-0.2.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b6/6e/8d88e00f624a8348b286b219a292fe3e077ee973660dcff6b4ddd5a04e85/pydantic_evals-0.2.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "62035ae3a5321e4d892c7372ef91af0f46b675863e827f011d5cb8550dede400"
+
+[[packages]]
+name = "pydantic-graph"
+version = "0.2.9"
+
+[[packages.wheels]]
+name = "pydantic_graph-0.2.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a4/cc/e609261763a76f4d23a545afb462847592bc6b4d8eb412990b9b913c073e/pydantic_graph-0.2.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "38ad929a0ec205bd7d5875b0b408d4f13448276aa89b6ce2a1143a7552b070ce"
+
+[[packages]]
+name = "pydantic-settings"
+version = "2.8.1"
+
+[[packages.wheels]]
+name = "pydantic_settings-2.8.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0b/53/a64f03044927dc47aafe029c42a5b7aabc38dfb813475e0e1bf71c4a59d0/pydantic_settings-2.8.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "81942d5ac3d905f7f3ee1a70df5dfb62d5569c12f51a5a647defc1c3d9ee2e9c"
+
+[[packages]]
+name = "pydeck"
+version = "0.9.1"
+
+[[packages.wheels]]
+name = "pydeck-0.9.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ab/4c/b888e6cf58bd9db9c93f40d1c6be8283ff49d88919231afe93a6bcf61626/pydeck-0.9.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b3f75ba0d273fc917094fa61224f3f6076ca8752b93d46faf3bcfd9f9d59b038"
+
+[[packages]]
+name = "pydocstyle"
+version = "6.3.0"
+
+[[packages.wheels]]
+name = "pydocstyle-6.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/36/ea/99ddefac41971acad68f14114f38261c1f27dac0b3ec529824ebc739bdaa/pydocstyle-6.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"
+
+[[packages]]
+name = "pydub"
+version = "0.25.1"
+
+[[packages.wheels]]
+name = "pydub-0.25.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"
+
+[[packages]]
+name = "pyerfa"
+version = "2.0.1.5"
+
+[[packages.wheels]]
+name = "pyerfa-2.0.1.5-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b4/11/97233cf23ad5411ac6f13b1d6ee3888f90ace4f974d9bf9db887aa428912/pyerfa-2.0.1.5-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "66292d437dcf75925b694977aa06eb697126e7b86553e620371ed3e48b5e0ad0"
+
+[[packages]]
+name = "pyflakes"
+version = "3.2.0"
+
+[[packages.wheels]]
+name = "pyflakes-3.2.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d4/d7/f1b7db88d8e4417c5d47adad627a93547f44bdc9028372dbd2313f34a855/pyflakes-3.2.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"
+
+[[packages]]
+name = "pygithub"
+version = "2.6.1"
+
+[[packages.wheels]]
+name = "PyGithub-2.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ac/fc/a444cd19ccc8c4946a512f3827ed0b3565c88488719d800d54a75d541c0b/PyGithub-2.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3"
+
+[[packages]]
+name = "pygments"
+version = "2.19.1"
+
+[[packages.wheels]]
+name = "pygments-2.19.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"
+
+[[packages]]
+name = "pyjwt"
+version = "2.10.1"
+
+[[packages.wheels]]
+name = "PyJWT-2.10.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"
+
+[[packages]]
+name = "pylint"
+version = "3.3.6"
+
+[[packages.wheels]]
+name = "pylint-3.3.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/31/21/9537fc94aee9ec7316a230a49895266cf02d78aa29b0a2efbc39566e0935/pylint-3.3.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8b7c2d3e86ae3f94fb27703d521dd0b9b6b378775991f504d7c3a6275aa0a6a6"
+
+[[packages]]
+name = "pylint-venv"
+version = "3.0.4"
+
+[[packages.wheels]]
+name = "pylint_venv-3.0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a6/10/040e1928236e3d34b26639e3427df88c7249a85aadc621cea2158589b4f8/pylint_venv-3.0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "31006a3df398f58f962c9e5620e756b284e8b2bc490594ce5ee5da41920cb32c"
+
+[[packages]]
+name = "pyls-spyder"
+version = "0.4.0"
+
+[[packages.wheels]]
+name = "pyls_spyder-0.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d0/26/d0975972af1f18c3bb02ec5889191cc09ebb982bcbe45438d90ca763f4ec/pyls_spyder-0.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1505d975f866a343d0554b6dab41b53717f4b4bc6df450dfd7d48f889fe450b9"
+
+[[packages]]
+name = "pymongo"
+version = "4.10.1"
+
+[[packages.wheels]]
+name = "pymongo-4.10.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/76/8b/5afce891d78159912c43726fab32641e3f9718f14be40f978c148ea8db48/pymongo-4.10.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "dcc07b1277e8b4bf4d7382ca133850e323b7ab048b8353af496d050671c7ac52"
+
+[[packages]]
+name = "pympler"
+version = "1.1"
+
+[[packages.wheels]]
+name = "Pympler-1.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/79/4f/a6a2e2b202d7fd97eadfe90979845b8706676b41cbd3b42ba75adf329d1f/Pympler-1.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5b223d6027d0619584116a0cbc28e8d2e378f7a79c1e5e024f9ff3b673c58506"
+
+[[packages]]
+name = "pynacl"
+version = "1.5.0"
+
+[[packages.wheels]]
+name = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"
+
+[[packages]]
+name = "pynndescent"
+version = "0.5.13"
+
+[[packages.wheels]]
+name = "pynndescent-0.5.13-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d2/53/d23a97e0a2c690d40b165d1062e2c4ccc796be458a1ce59f6ba030434663/pynndescent-0.5.13-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "69aabb8f394bc631b6ac475a1c7f3994c54adf3f51cd63b2730fefba5771b949"
+
+[[packages]]
+name = "pyodbc"
+version = "5.2.0"
+
+[[packages.wheels]]
+name = "pyodbc-5.2.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/21/7f/3a47e022a97b017ffb73351a1061e4401bcb5aa4fc0162d04f4e5452e4fc/pyodbc-5.2.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "b1f5686b142759c5b2bdbeaa0692622c2ebb1f10780eb3c174b85f5607fbcf55"
+
+[[packages]]
+name = "pyogrio"
+version = "0.10.0"
+
+[[packages.wheels]]
+name = "pyogrio-0.10.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/43/97/34605480f06b0ad9611bf58a174eccc6f3673275f3d519cf763391892881/pyogrio-0.10.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "2a3e09839590d71ff832aa95c4f23fa00a2c63c3de82c1fbd4fb8d265792acfc"
+
+[[packages]]
+name = "pyomo"
+version = "6.9.2"
+
+[[packages.wheels]]
+name = "pyomo-6.9.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7f/88/0a07233e39357d3d620186485b927074d6d0ae0f64ad72cc5222ae05844e/pyomo-6.9.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "13ebb2f974f97afa626c2712d4f27e09a1c3d18ca11755676b743504a76e5161"
+
+[[packages]]
+name = "pypandoc"
+version = "1.15"
+
+[[packages.wheels]]
+name = "pypandoc-1.15-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/61/06/0763e0ccc81754d3eadb21b2cb86cf21bdedc9b52698c2ad6785db7f0a4e/pypandoc-1.15-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4ededcc76c8770f27aaca6dff47724578428eca84212a31479403a9731fc2b16"
+
+[[packages]]
+name = "pyparsing"
+version = "3.2.3"
+
+[[packages.wheels]]
+name = "pyparsing-3.2.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"
+
+[[packages]]
+name = "pypdf"
+version = "5.4.0"
+
+[[packages.wheels]]
+name = "pypdf-5.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0b/27/d83f8f2a03ca5408dc2cc84b49c0bf3fbf059398a6a2ea7c10acfe28859f/pypdf-5.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "db994ab47cadc81057ea1591b90e5b543e2b7ef2d0e31ef41a9bfe763c119dab"
+
+[[packages]]
+name = "pyproj"
+version = "3.7.0"
+
+[[packages.wheels]]
+name = "pyproj-3.7.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/a1/8b/96bc8c8f3eca4eb7fa3758fde0b755d1df30a19f494376e3ee8de1ef4e79/pyproj-3.7.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "0692f806224e8ed82fe4acfa57268ff444fdaf9f330689f24c0d96e59480cce1"
+
+[[packages]]
+name = "pyproject-hooks"
+version = "1.2.0"
+
+[[packages.wheels]]
+name = "pyproject_hooks-1.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"
+
+[[packages]]
+name = "pyqt5"
+version = "5.15.11"
+
+[[packages.wheels]]
+name = "PyQt5-5.15.11-cp38-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/56/d5/68eb9f3d19ce65df01b6c7b7a577ad3bbc9ab3a5dd3491a4756e71838ec9/PyQt5-5.15.11-cp38-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517"
+
+[[packages]]
+name = "pyqt5-qt5"
+version = "5.15.2"
+
+[[packages.wheels]]
+name = "PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/37/97/5d3b222b924fa2ed4c2488925155cd0b03fd5d09ee1cfcf7c553c11c9f66/PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962"
+
+[[packages]]
+name = "pyqt5-sip"
+version = "12.17.0"
+
+[[packages.wheels]]
+name = "PyQt5_sip-12.17.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/fe/c5/1174988d52c732d07033cf9a5067142b01d76be7731c6394a64d5c3ef65c/PyQt5_sip-12.17.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "54c31de7706d8a9a8c0fc3ea2c70468aba54b027d4974803f8eace9c22aad41c"
+
+[[packages]]
+name = "pyqtgraph"
+version = "0.13.7"
+
+[[packages.wheels]]
+name = "pyqtgraph-0.13.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7b/34/5702b3b7cafe99be1d94b42f100e8cc5e6957b761fcb1cf5f72d492851da/pyqtgraph-0.13.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a"
+
+[[packages]]
+name = "pyqtwebengine"
+version = "5.15.7"
+
+[[packages.wheels]]
+name = "PyQtWebEngine-5.15.7-cp38-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/39/67/0dead50889d905fc99f40e61e5ab7f73746605ce8f74c4fa7fb3fc1d6c5e/PyQtWebEngine-5.15.7-cp38-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "bd5e8c426d6f6b352cd15800d64a89b2a4a11e098460b818c7bdcf5e5612e44f"
+
+[[packages]]
+name = "pyqtwebengine-qt5"
+version = "5.15.2"
+
+[[packages.wheels]]
+name = "PyQtWebEngine_Qt5-5.15.2-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e0/db/0f29bd882aee8b5754f3e1ab104d2d09cdd9138a889558b43badcd81ce11/PyQtWebEngine_Qt5-5.15.2-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "24231f19e1595018779977de6722b5c69f3d03f34a5f7574ff21cd1e764ef76d"
+
+[[packages]]
+name = "pyserial"
+version = "3.5"
+
+[[packages.wheels]]
+name = "pyserial-3.5-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"
+
+[[packages]]
+name = "pysocks"
+version = "1.7.1"
+
+[[packages.wheels]]
+name = "PySocks-1.7.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"
+
+[[packages]]
+name = "pyspnego"
+version = "0.11.2"
+
+[[packages.wheels]]
+name = "pyspnego-0.11.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/57/ea/b3c1438839d8724beff7b31ec42b9d041265dc9ca27ccb54477d442bfbcf/pyspnego-0.11.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "74abc1fb51e59360eb5c5c9086e5962174f1072c7a50cf6da0bda9a4bcfdfbd4"
+
+[[packages]]
+name = "pytest"
+version = "8.3.5"
+
+[[packages.wheels]]
+name = "pytest-8.3.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"
+
+[[packages]]
+name = "python-barcode"
+version = "0.15.1"
+
+[[packages.wheels]]
+name = "python_barcode-0.15.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/10/27/9b5c5bb1938d4e6b12f4c95f40ea905c11df3cd58e128e9305397b9a2697/python_barcode-0.15.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "057636fba37369c22852410c8535b36adfbeb965ddfd4e5b6924455d692e0886"
+
+[[packages]]
+name = "python-dateutil"
+version = "2.8.2"
+
+[[packages.wheels]]
+name = "python_dateutil-2.8.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"
+
+[[packages]]
+name = "python-dotenv"
+version = "1.1.0"
+
+[[packages.wheels]]
+name = "python_dotenv-1.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d"
+
+[[packages]]
+name = "python-json-logger"
+version = "3.3.0"
+
+[[packages.wheels]]
+name = "python_json_logger-3.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"
+
+[[packages]]
+name = "python-lsp-black"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "python_lsp_black-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/78/44/fef9b4d027b3d6321e6f30b6b5946bef18cd84a96e1d81012ac0f69ea53c/python_lsp_black-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d5efdee45f5fa9e5241f5d4d396cd46127f45c85817916b1fd92c2986652bf7e"
+
+[[packages]]
+name = "python-lsp-jsonrpc"
+version = "1.1.2"
+
+[[packages.wheels]]
+name = "python_lsp_jsonrpc-1.1.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cb/d9/656659d5b5d5f402b2b174cd0ba9bc827e07ce3c0bf88da65424baf64af8/python_lsp_jsonrpc-1.1.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7339c2e9630ae98903fdaea1ace8c47fba0484983794d6aafd0bd8989be2b03c"
+
+[[packages]]
+name = "python-lsp-server"
+version = "1.12.2"
+
+[[packages.wheels]]
+name = "python_lsp_server-1.12.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cb/e7/28010a326ef591e1409daf9d57a47de94156c147ad1befe74d8196d82729/python_lsp_server-1.12.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "750116459449184ba20811167cdf96f91296ae12f1f65ebd975c5c159388111b"
+
+[[packages]]
+name = "python-multipart"
+version = "0.0.20"
+
+[[packages.wheels]]
+name = "python_multipart-0.0.20-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"
+
+[[packages]]
+name = "python-slugify"
+version = "8.0.4"
+
+[[packages.wheels]]
+name = "python_slugify-8.0.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"
+
+[[packages]]
+name = "pythonqwt"
+version = "0.14.5"
+
+[[packages.wheels]]
+name = "pythonqwt-0.14.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/28/e9/1e6e93e1aaaec57d6ef427291e8fb3d9f18ebd91147c24f2b241b01e2def/pythonqwt-0.14.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "be5a9d2e1ba22aaa02eb397c5b3b5e4e1d9ed2c08f45554d8b920d8fc3be6dc7"
+
+[[packages]]
+name = "pytoolconfig"
+version = "1.3.1"
+
+[[packages.wheels]]
+name = "pytoolconfig-1.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/92/44/da239917f5711ca7105f7d7f9e2765716dd883b241529beafc0f28504725/pytoolconfig-1.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5d8cea8ae1996938ec3eaf44567bbc5ef1bc900742190c439a44a704d6e1b62b"
+
+[[packages]]
+name = "pytz"
+version = "2025.2"
+
+[[packages.wheels]]
+name = "pytz-2025.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"
+
+[[packages]]
+name = "pyuca"
+version = "1.2"
+
+[[packages.wheels]]
+name = "pyuca-1.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/98/88/aeeee34d88f841aca712a8c18fbd62a33eaad8f2dbe535e87f3c829b02f9/pyuca-1.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "abaa12e1bd2c7c68ca8396ff8383bc0654a739cef3ae68fd7af58bf29af0a91e"
+
+[[packages]]
+name = "pyusb"
+version = "1.3.1"
+
+[[packages.wheels]]
+name = "pyusb-1.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/28/b8/27e6312e86408a44fe16bd28ee12dd98608b39f7e7e57884a24e8f29b573/pyusb-1.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "bf9b754557af4717fe80c2b07cc2b923a9151f5c08d17bdb5345dac09d6a0430"
+
+[[packages]]
+name = "pyviz-comms"
+version = "3.0.4"
+
+[[packages.wheels]]
+name = "pyviz_comms-3.0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/98/cc/ba051cfaef2525054e3367f2d5ff4df38f8f775125b3eebb82af4060026b/pyviz_comms-3.0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a40d17db26ec13cf975809633804e712bd24b473e77388c193c44043f85d0b25"
+
+[[packages]]
+name = "pywavelets"
+version = "1.8.0"
+
+[[packages.wheels]]
+name = "pywavelets-1.8.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/1c/88/9e2aa9d5fde08bfc0fb18ffb1b5307c1ed49c24930b4147e5f48571a7251/pywavelets-1.8.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "810a23a631da596fef7196ddec49b345b1aab13525bb58547eeebe1769edbbc1"
+
+[[packages]]
+name = "pywin32"
+version = "310"
+
+[[packages.wheels]]
+name = "pywin32-310-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060"
+
+[[packages]]
+name = "pywin32-ctypes"
+version = "0.2.3"
+
+[[packages.wheels]]
+name = "pywin32_ctypes-0.2.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"
+
+[[packages]]
+name = "pywinpty"
+version = "2.0.15"
+
+[[packages.wheels]]
+name = "pywinpty-2.0.15-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/88/e5/9714def18c3a411809771a3fbcec70bffa764b9675afb00048a620fca604/pywinpty-2.0.15-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "83a8f20b430bbc5d8957249f875341a60219a4e971580f2ba694fbfb54a45ebc"
+
+[[packages]]
+name = "pyyaml"
+version = "6.0.2"
+
+[[packages.wheels]]
+name = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"
+
+[[packages]]
+name = "pyzmq"
+version = "26.4.0"
+
+[[packages.wheels]]
+name = "pyzmq-26.4.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/30/0f/55f8c02c182856743b82dde46b2dc3e314edda7f1098c12a8227eeda0833/pyzmq-26.4.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "056a97aab4064f526ecb32f4343917a4022a5d9efb6b9df990ff72e1879e40be"
+
+[[packages]]
+name = "qdarkstyle"
+version = "3.2.3"
+
+[[packages.wheels]]
+name = "QDarkStyle-3.2.3-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/93/7d/c3c10498430dadcea4def5faddf71cd199e577d20a125e7ef1e9d7bdbbfa/QDarkStyle-3.2.3-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ea980ee426d594909cf1058306832af71ff6cbad6f69237b036d1550635aefbc"
+
+[[packages]]
+name = "qdldl"
+version = "0.1.7.post5"
+
+[[packages.wheels]]
+name = "qdldl-0.1.7.post5-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/c1/82/730d0d2c6093c4dc574947eea94e0cddeea836f43823a80fc8b064a82ddf/qdldl-0.1.7.post5-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "13dfc0b225a5c180512488fa51f1771e8fa3c06d7fce9fd3c1d018bc03ba0eec"
+
+[[packages]]
+name = "qrcode"
+version = "8.0"
+
+[[packages.wheels]]
+name = "qrcode-8.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/74/ab/df8d889fd01139db68ae9e5cb5c8f0ea016823559a6ecb427582d52b07dc/qrcode-8.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9fc05f03305ad27a709eb742cf3097fa19e6f6f93bb9e2f039c0979190f6f1b1"
+
+[[packages]]
+name = "qstylizer"
+version = "0.2.4"
+
+[[packages.wheels]]
+name = "qstylizer-0.2.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2d/ba/2a4e51861942c2bc3be60400c69f6713359c3e307aee4696f2ea47f35811/qstylizer-0.2.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8f384dfe86f9edb0bb596b93663a51f124f0794b94fd54057cc7cf9cea59fb6f"
+
+[[packages]]
+name = "qtawesome"
+version = "1.4.0"
+
+[[packages.wheels]]
+name = "qtawesome-1.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a5/ee/6e6c6715129c929af2d95ddb2e9decf54c1beffe58f336911197aacc0448/qtawesome-1.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a4d689fa071c595aa6184171ce1f0f847677cb8d2db45382c43129f1d72a3d93"
+
+[[packages]]
+name = "qtconsole"
+version = "5.6.1"
+
+[[packages.wheels]]
+name = "qtconsole-5.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c6/8a/635610fb6131bc702229e2780d7b042416866ab78f8ed1ff24c4b23a2f4c/qtconsole-5.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3d22490d9589bace566ad4f3455b61fa2209156f40e87e19e2c3cb64e9264950"
+
+[[packages]]
+name = "qtpy"
+version = "2.4.3"
+
+[[packages.wheels]]
+name = "QtPy-2.4.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/69/76/37c0ccd5ab968a6a438f9c623aeecc84c202ab2fabc6a8fd927580c15b5a/QtPy-2.4.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "72095afe13673e017946cc258b8d5da43314197b741ed2890e563cf384b51aa1"
+
+[[packages]]
+name = "quantecon"
+version = "0.7.2"
+
+[[packages.wheels]]
+name = "quantecon-0.7.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/77/1b/75e44bd482abe2e87dcbead8cfd99b8fa6582fdc0906967c34f64abfdf13/quantecon-0.7.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d1333ca7bc3046efe3655d9eeeefb299051b00870b8608cb5bc0b88e3bdb8b67"
+
+[[packages]]
+name = "quart"
+version = "0.20.0"
+
+[[packages.wheels]]
+name = "quart-0.20.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7e/e9/cc28f21f52913adf333f653b9e0a3bf9cb223f5083a26422968ba73edd8d/quart-0.20.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "003c08f551746710acb757de49d9b768986fd431517d0eb127380b656b98b8f1"
+
+[[packages]]
+name = "rapidfuzz"
+version = "3.13.0"
+
+[[packages.wheels]]
+name = "rapidfuzz-3.13.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/03/25/5ee7ab6841ca668567d0897905eebc79c76f6297b73bf05957be887e9c74/rapidfuzz-3.13.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "6e2065f68fb1d0bf65adc289c1bdc45ba7e464e406b319d67bb54441a1b9da9e"
+
+[[packages]]
+name = "readme-renderer"
+version = "44.0"
+
+[[packages.wheels]]
+name = "readme_renderer-44.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151"
+
+[[packages]]
+name = "redis"
+version = "5.2.1"
+
+[[packages.wheels]]
+name = "redis-5.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3c/5f/fa26b9b2672cbe30e07d9a5bdf39cf16e3b80b42916757c5f92bca88e4ba/redis-5.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"
+
+[[packages]]
+name = "referencing"
+version = "0.36.2"
+
+[[packages.wheels]]
+name = "referencing-0.36.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"
+
+[[packages]]
+name = "regex"
+version = "2024.11.6"
+
+[[packages.wheels]]
+name = "regex-2024.11.6-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/38/ec/ad2d7de49a600cdb8dd78434a1aeffe28b9d6fc42eb36afab4a27ad23384/regex-2024.11.6-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"
+
+[[packages]]
+name = "reportlab"
+version = "4.3.1"
+
+[[packages.wheels]]
+name = "reportlab-4.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ce/6b/42805895ed08a314a01be6110584b5d059328386988ddbc4f8f10014d30e/reportlab-4.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0f37dd16652db3ef84363cf744632a28c38bd480d5bf94683466852d7bb678dd"
+
+[[packages]]
+name = "requests"
+version = "2.32.3"
+
+[[packages.wheels]]
+name = "requests-2.32.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"
+
+[[packages]]
+name = "requests-ntlm"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "requests_ntlm-1.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9e/5d/836b97537a390cf811b0488490c389c5a614f0a93acb23f347bd37a2d914/requests_ntlm-1.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4c7534a7d0e482bb0928531d621be4b2c74ace437e88c5a357ceb7452d25a510"
+
+[[packages]]
+name = "requests-toolbelt"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "requests_toolbelt-1.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"
+
+[[packages]]
+name = "rfc3339-validator"
+version = "0.1.4"
+
+[[packages.wheels]]
+name = "rfc3339_validator-0.1.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"
+
+[[packages]]
+name = "rfc3986"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "rfc3986-2.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"
+
+[[packages]]
+name = "rfc3986-validator"
+version = "0.1.1"
+
+[[packages.wheels]]
+name = "rfc3986_validator-0.1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"
+
+[[packages]]
+name = "rich"
+version = "14.0.0"
+
+[[packages.wheels]]
+name = "rich-14.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"
+
+[[packages]]
+name = "rope"
+version = "1.13.0"
+
+[[packages.wheels]]
+name = "rope-1.13.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a0/d0/e213e5adfa162e437dff3669131dc476043fc3a22fe99ef891516100610d/rope-1.13.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b435a0c0971244fdcd8741676a9fae697ae614c20cc36003678a7782f25c0d6c"
+
+[[packages]]
+name = "rpds-py"
+version = "0.24.0"
+
+[[packages.wheels]]
+name = "rpds_py-0.24.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/bb/46/b8b5424d1d21f2f2f3f2d468660085318d4f74a8df8289e3dd6ad224d488/rpds_py-0.24.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034"
+
+[[packages]]
+name = "rsa"
+version = "4.7.2"
+
+[[packages.wheels]]
+name = "rsa-4.7.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e9/93/0c0f002031f18b53af7a6166103c02b9c0667be528944137cc954ec921b3/rsa-4.7.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"
+
+[[packages]]
+name = "rtree"
+version = "1.4.0"
+
+[[packages.wheels]]
+name = "rtree-1.4.0-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/ce/c2/362f2cc36a7a57b47380061c23fc109c7222c1a544ffd24cda289ba19673/rtree-1.4.0-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "ba83efc7b7563905b1bfdfc14490c4bfb59e92e5e6156bdeb6ec5df5117252f4"
+
+[[packages]]
+name = "rx"
+version = "3.2.0"
+
+[[packages.wheels]]
+name = "Rx-3.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e2/a9/efeaeca4928a9a56d04d609b5730994d610c82cf4d9dd7aa173e6ef4233e/Rx-3.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "922c5f4edb3aa1beaa47bf61d65d5380011ff6adcd527f26377d05cb73ed8ec8"
+
+[[packages]]
+name = "scikit-image"
+version = "0.25.2"
+
+[[packages.wheels]]
+name = "scikit_image-0.25.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/34/e3/49beb08ebccda3c21e871b607c1cb2f258c3fa0d2f609fed0a5ba741b92d/scikit_image-0.25.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "bdd2b8c1de0849964dbc54037f36b4e9420157e67e45a8709a80d727f52c7da2"
+
+[[packages]]
+name = "scikit-learn"
+version = "1.6.1"
+
+[[packages.wheels]]
+name = "scikit_learn-1.6.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/62/27/585859e72e117fe861c2079bcba35591a84f801e21bc1ab85bce6ce60305/scikit_learn-1.6.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52"
+
+[[packages]]
+name = "scipy"
+version = "1.15.3"
+
+[[packages.wheels]]
+name = "scipy-1.15.3-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed"
+
+[[packages]]
+name = "scramp"
+version = "1.4.5"
+
+[[packages.wheels]]
+name = "scramp-1.4.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d9/9f/8b2f2749ccfbe4fcef08650896ac47ed919ff25b7ac57b7a1ae7da16c8c3/scramp-1.4.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "50e37c464fc67f37994e35bee4151e3d8f9320e9c204fca83a5d313c121bbbe7"
+
+[[packages]]
+name = "scs"
+version = "3.2.7.post2"
+
+[[packages.wheels]]
+name = "scs-3.2.7.post2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/30/49/1645fa1219493ac94475ab8f48a2520d2fc27f486327f2b0f167440a8188/scs-3.2.7.post2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "2995d4099943c3fd754b3e39fe178a9c03dcb9c7d84b40f64ac5eb26d8d6085a"
+
+[[packages]]
+name = "seaborn"
+version = "0.13.2"
+
+[[packages.wheels]]
+name = "seaborn-0.13.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"
+
+[[packages]]
+name = "send2trash"
+version = "1.8.3"
+
+[[packages.wheels]]
+name = "Send2Trash-1.8.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"
+
+[[packages]]
+name = "setuptools"
+version = "79.0.1"
+
+[[packages.wheels]]
+name = "setuptools-79.0.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0d/6d/b4752b044bf94cb802d88a888dc7d288baaf77d7910b7dedda74b5ceea0c/setuptools-79.0.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e147c0549f27767ba362f9da434eab9c5dc0045d5304feb602a0af001089fc51"
+
+[[packages]]
+name = "shapely"
+version = "2.1.0"
+
+[[packages.wheels]]
+name = "shapely-2.1.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b8/bd/9249bd6dda948441e25e4fb14cbbb5205146b0fff12c66b19331f1ff2141/shapely-2.1.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "f4f47e631aa4f9ec5576eac546eb3f38802e2f82aeb0552f9612cb9a14ece1db"
+
+[[packages]]
+name = "shellingham"
+version = "1.5.4"
+
+[[packages.wheels]]
+name = "shellingham-1.5.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"
+
+[[packages]]
+name = "simplejson"
+version = "3.19.3"
+
+[[packages.wheels]]
+name = "simplejson-3.19.3-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/fe/68/9f0e5df0651cb79ef83cba1378765a00ee8038e6201cc82b8e7178a7778e/simplejson-3.19.3-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "1e662336db50ad665777e6548b5076329a94a0c3d4a0472971c588b3ef27de3a"
+
+[[packages]]
+name = "simpy"
+version = "4.1.1"
+
+[[packages.wheels]]
+name = "simpy-4.1.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/48/72/920ed1224c94a8a5a69e6c1275ac7fe4eb911ba8feffddf469f1629d47f3/simpy-4.1.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7c5ae380240fd2238671160e4830956f8055830a8317edf5c05e495b3823cd88"
+
+[[packages]]
+name = "six"
+version = "1.17.0"
+
+[[packages.wheels]]
+name = "six-1.17.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"
+
+[[packages]]
+name = "sklearn-compat"
+version = "0.1.3"
+
+[[packages.wheels]]
+name = "sklearn_compat-0.1.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f0/a8/ad69cf130fbd017660cdd64abbef3f28135d9e2e15fe3002e03c5be0ca38/sklearn_compat-0.1.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a8aaf8ef711988cbd63f187c5560b5f16b25df663aaa1d2d0e1291341d339f80"
+
+[[packages]]
+name = "skrub"
+version = "0.5.3"
+
+[[packages.wheels]]
+name = "skrub-0.5.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/80/cf/5a1e0dabfa3cad1ab9b09e690fede4aa8fdc0c04d9d7ec8aa9338d56e1e4/skrub-0.5.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b6ba417fa83d1f7e9a69656e0860b061381b9bd19808692a2b5bef8588c72775"
+
+[[packages]]
+name = "smmap"
+version = "5.0.2"
+
+[[packages.wheels]]
+name = "smmap-5.0.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"
+
+[[packages]]
+name = "sniffio"
+version = "1.3.1"
+
+[[packages.wheels]]
+name = "sniffio-1.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"
+
+[[packages]]
+name = "snowballstemmer"
+version = "2.2.0"
+
+[[packages.wheels]]
+name = "snowballstemmer-2.2.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"
+
+[[packages]]
+name = "sortedcontainers"
+version = "2.4.0"
+
+[[packages.wheels]]
+name = "sortedcontainers-2.4.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"
+
+[[packages]]
+name = "sounddevice"
+version = "0.5.1"
+
+[[packages.wheels]]
+name = "sounddevice-0.5.1-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/af/9b/15217b04f3b36d30de55fef542389d722de63f1ad81f9c72d8afc98cb6ab/sounddevice-0.5.1-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "4313b63f2076552b23ac3e0abd3bcfc0c1c6a696fc356759a13bd113c9df90f1"
+
+[[packages]]
+name = "soupsieve"
+version = "2.6"
+
+[[packages.wheels]]
+name = "soupsieve-2.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"
+
+[[packages]]
+name = "sphinx"
+version = "8.1.3"
+
+[[packages.wheels]]
+name = "sphinx-8.1.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2"
+
+[[packages]]
+name = "sphinx-rtd-theme"
+version = "3.0.2"
+
+[[packages.wheels]]
+name = "sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/85/77/46e3bac77b82b4df5bb5b61f2de98637724f246b4966cfc34bc5895d852a/sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13"
+
+[[packages]]
+name = "sphinxcontrib-applehelp"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"
+
+[[packages]]
+name = "sphinxcontrib-devhelp"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"
+
+[[packages]]
+name = "sphinxcontrib-htmlhelp"
+version = "2.1.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"
+
+[[packages]]
+name = "sphinxcontrib-jquery"
+version = "4.1"
+
+[[packages.wheels]]
+name = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"
+
+[[packages]]
+name = "sphinxcontrib-jsmath"
+version = "1.0.1"
+
+[[packages.wheels]]
+name = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"
+
+[[packages]]
+name = "sphinxcontrib-qthelp"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"
+
+[[packages]]
+name = "sphinxcontrib-serializinghtml"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"
+
+[[packages]]
+name = "spyder"
+version = "6.0.7"
+
+[[packages.wheels]]
+name = "spyder-6.0.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ee/c8/1568fa96351ddad878d42e7487d9637604c7f34030171acf810f47914d9d/spyder-6.0.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b725569bb8ddc7b0aab73d747d85312dc0456978370cc0f9b1a101c0fe4f076b"
+
+[[packages]]
+name = "spyder-kernels"
+version = "3.0.5"
+
+[[packages.wheels]]
+name = "spyder_kernels-3.0.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/10/2d/b1c88e914ebdec2a9cf066b2c283ee234f4052c31922017407fa8adb89f3/spyder_kernels-3.0.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9cc808e0ec4426b9ba911128e221fa2234e6c8d6e08526132e90112ff9c2bb7c"
+
+[[packages]]
+name = "sqlalchemy"
+version = "2.0.40"
+
+[[packages.wheels]]
+name = "sqlalchemy-2.0.40-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/2a/9f/14c511cda174aa1ad9b0e42b64ff5a71db35d08b0d80dc044dae958921e5/sqlalchemy-2.0.40-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0"
+
+[[packages]]
+name = "sqlite-bro"
+version = "0.13.1"
+
+[[packages.wheels]]
+name = "sqlite_bro-0.13.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2a/b3/81b91f5b26fff329c59dbf826a87637bd51d1903120427912322f86e7d33/sqlite_bro-0.13.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c26033b0af133049ca578b5fd30b2372f002e7ff934b39774aa4d2da7638c23d"
+
+[[packages]]
+name = "sqlite-fts4"
+version = "1.0.3"
+
+[[packages.wheels]]
+name = "sqlite_fts4-1.0.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/51/29/0096e8b1811aaa78cfb296996f621f41120c21c2f5cd448ae1d54979d9fc/sqlite_fts4-1.0.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0359edd8dea6fd73c848989e1e2b1f31a50fe5f9d7272299ff0e8dbaa62d035f"
+
+[[packages]]
+name = "sqlite-utils"
+version = "3.38"
+
+[[packages.wheels]]
+name = "sqlite_utils-3.38-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4d/eb/f8e8e827805f810838efff3311cccd2601238c5fa3fc35c1f878709e161b/sqlite_utils-3.38-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8a27441015c3b2ef475f555861f7a2592f73bc60d247af9803a11b65fc605bf9"
+
+[[packages]]
+name = "sqlparse"
+version = "0.5.3"
+
+[[packages.wheels]]
+name = "sqlparse-0.5.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca"
+
+[[packages]]
+name = "squarify"
+version = "0.4.4"
+
+[[packages.wheels]]
+name = "squarify-0.4.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b7/3c/eedbe9fb07cc20fd9a8423da14b03bc270d0570b3ba9174a4497156a2152/squarify-0.4.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d7597724e29d48aa14fd2f551060d6b09e1f0a67e4cd3ea329fe03b4c9a56f11"
+
+[[packages]]
+name = "sse-starlette"
+version = "2.2.1"
+
+[[packages.wheels]]
+name = "sse_starlette-2.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d9/e0/5b8bd393f27f4a62461c5cf2479c75a2cc2ffa330976f9f00f5f6e4f50eb/sse_starlette-2.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6410a3d3ba0c89e7675d4c273a301d64649c03a5ef1ca101f10b47f895fd0e99"
+
+[[packages]]
+name = "sspilib"
+version = "0.2.0"
+
+[[packages.wheels]]
+name = "sspilib-0.2.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/38/54/949a9e9c07cd6efead79a7f78cc951cb5fa4f9f1fcb25b8520fd2adcdbe0/sspilib-0.2.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "40a97ca83e503a175d1dc9461836994e47e8b9bcf56cab81a2c22e27f1993079"
+
+[[packages]]
+name = "stack-data"
+version = "0.6.3"
+
+[[packages.wheels]]
+name = "stack_data-0.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"
+
+[[packages]]
+name = "starlette"
+version = "0.46.2"
+
+[[packages.wheels]]
+name = "starlette-0.46.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35"
+
+[[packages]]
+name = "statsmodels"
+version = "0.14.4"
+
+[[packages.wheels]]
+name = "statsmodels-0.14.4-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/59/9a/e466a1b887a1441141e52dbcc98152f013d85076576da6eed2357f2016ae/statsmodels-0.14.4-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7f7917a51766b4e074da283c507a25048ad29a18e527207883d73535e0dc6184"
+
+[[packages]]
+name = "streamlit"
+version = "1.46.0"
+
+[[packages.wheels]]
+name = "streamlit-1.46.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/be/26/79bbb77bec3d605f7de7a4b45c806b44d112e8c9bce77fb620e03d9f2b88/streamlit-1.46.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f8624acabafcf18611a0fac2635cf181a7ba922b45bd131ae15fc8f80e1a5482"
+
+[[packages]]
+name = "superqt"
+version = "0.7.3"
+
+[[packages.wheels]]
+name = "superqt-0.7.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4f/53/ce8e705a0fca9ff08406d0232409c6dacd09a04cdc5124e33aa3ad97c117/superqt-0.7.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8f7d141665b31baa484747f324fc9fc2d14223f2fefc92ffed6ea35c92221304"
+
+[[packages]]
+name = "sv-ttk"
+version = "2.6.0"
+
+[[packages.wheels]]
+name = "sv_ttk-2.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0f/3d/be0abc3202e90f282ad465f4e7c6e41bc8dce810ce5d1611566a1e7dfba8/sv_ttk-2.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4319c52edf2e14732fe84bdc9788e26f9e9a1ad79451ec0f89f0120ffc8105d9"
+
+[[packages]]
+name = "sympy"
+version = "1.14.0"
+
+[[packages.wheels]]
+name = "sympy-1.14.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"
+
+[[packages]]
+name = "tabulate"
+version = "0.9.0"
+
+[[packages.wheels]]
+name = "tabulate-0.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"
+
+[[packages]]
+name = "tblib"
+version = "3.1.0"
+
+[[packages.wheels]]
+name = "tblib-3.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/27/44/aa5c8b10b2cce7a053018e0d132bd58e27527a0243c4985383d5b6fd93e9/tblib-3.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "670bb4582578134b3d81a84afa1b016128b429f3d48e6cbbaecc9d15675e984e"
+
+[[packages]]
+name = "tenacity"
+version = "9.1.2"
+
+[[packages.wheels]]
+name = "tenacity-9.1.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"
+
+[[packages]]
+name = "termcolor"
+version = "3.1.0"
+
+[[packages.wheels]]
+name = "termcolor-3.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4f/bd/de8d508070629b6d84a30d01d57e4a65c69aa7f5abe7560b8fad3b50ea59/termcolor-3.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa"
+
+[[packages]]
+name = "terminado"
+version = "0.18.1"
+
+[[packages.wheels]]
+name = "terminado-0.18.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"
+
+[[packages]]
+name = "text-unidecode"
+version = "1.3"
+
+[[packages.wheels]]
+name = "text_unidecode-1.3-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"
+
+[[packages]]
+name = "textdistance"
+version = "4.6.3"
+
+[[packages.wheels]]
+name = "textdistance-4.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c6/c2/c62601c858010b0513a6434b9be19bd740533a6e861eddfd30b7258d92a0/textdistance-4.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0cb1b2cc8e3339ddc3e0f8c870e49fb49de6ecc42a718917308b3c971f34aa56"
+
+[[packages]]
+name = "thefuzz"
+version = "0.22.1"
+
+[[packages.wheels]]
+name = "thefuzz-0.22.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/82/4f/1695e70ceb3604f19eda9908e289c687ea81c4fecef4d90a9d1d0f2f7ae9/thefuzz-0.22.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "59729b33556850b90e1093c4cf9e618af6f2e4c985df193fdf3c5b5cf02ca481"
+
+[[packages]]
+name = "threadpoolctl"
+version = "3.6.0"
+
+[[packages.wheels]]
+name = "threadpoolctl-3.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"
+
+[[packages]]
+name = "three-merge"
+version = "0.1.1"
+
+[[packages.wheels]]
+name = "three_merge-0.1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/23/be/a52588102605ec52b4e88340d65a290b6465c1dbcd2d943ab149b012908b/three_merge-0.1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dd219f4696aa0bbec6099ac3528b4de0450ff9bde862dd8f6d6f52e745f83464"
+
+[[packages]]
+name = "tifffile"
+version = "2025.3.30"
+
+[[packages.wheels]]
+name = "tifffile-2025.3.30-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6e/be/10d23cfd4078fbec6aba768a357eff9e70c0b6d2a07398425985c524ad2a/tifffile-2025.3.30-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0ed6eee7b66771db2d1bfc42262a51b01887505d35539daef118f4ff8c0f629c"
+
+[[packages]]
+name = "tiktoken"
+version = "0.9.0"
+
+[[packages.wheels]]
+name = "tiktoken-0.9.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/5b/64/b16003419a1d7728d0d8c0d56a4c24325e7b10a21a9dd1fc0f7115c02f0a/tiktoken-0.9.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "5a62d7a25225bafed786a524c1b9f0910a1128f4232615bf3f8257a73aaa3b16"
+
+[[packages]]
+name = "tinycss2"
+version = "1.4.0"
+
+[[packages.wheels]]
+name = "tinycss2-1.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"
+
+[[packages]]
+name = "tokenizers"
+version = "0.21.1"
+
+[[packages.wheels]]
+name = "tokenizers-0.21.1-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382"
+
+[[packages]]
+name = "toml"
+version = "0.10.2"
+
+[[packages.wheels]]
+name = "toml-0.10.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+
+[[packages]]
+name = "tomli"
+version = "2.2.1"
+
+[[packages.wheels]]
+name = "tomli-2.2.1-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"
+
+[[packages]]
+name = "tomli-w"
+version = "1.2.0"
+
+[[packages.wheels]]
+name = "tomli_w-1.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90"
+
+[[packages]]
+name = "tomlkit"
+version = "0.13.2"
+
+[[packages.wheels]]
+name = "tomlkit-0.13.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"
+
+[[packages]]
+name = "toolz"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "toolz-1.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"
+
+[[packages]]
+name = "tornado"
+version = "6.5.1"
+
+[[packages.wheels]]
+name = "tornado-6.5.1-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b"
+
+[[packages]]
+name = "tqdm"
+version = "4.67.1"
+
+[[packages.wheels]]
+name = "tqdm-4.67.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"
+
+[[packages]]
+name = "traitlets"
+version = "5.14.3"
+
+[[packages.wheels]]
+name = "traitlets-5.14.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"
+
+[[packages]]
+name = "traittypes"
+version = "0.2.1"
+
+[[packages.wheels]]
+name = "traittypes-0.2.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9c/d1/8d5bd662703cc1764d986f6908a608777305946fa634d34c470cd4a1e729/traittypes-0.2.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1340af133810b6eee1a2eb2e988f862b0d12b6c2d16f282aaf3207b782134c2e"
+
+[[packages]]
+name = "trio"
+version = "0.30.0"
+
+[[packages.wheels]]
+name = "trio-0.30.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/69/8e/3f6dfda475ecd940e786defe6df6c500734e686c9cd0a0f8ef6821e9b2f2/trio-0.30.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3bf4f06b8decf8d3cf00af85f40a89824669e2d033bb32469d34840edcfc22a5"
+
+[[packages]]
+name = "trove-classifiers"
+version = "2025.5.9.12"
+
+[[packages.wheels]]
+name = "trove_classifiers-2025.5.9.12-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/92/ef/c6deb083748be3bcad6f471b6ae983950c161890bf5ae1b2af80cc56c530/trove_classifiers-2025.5.9.12-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e381c05537adac78881c8fa345fd0e9970159f4e4a04fcc42cfd3129cca640ce"
+
+[[packages]]
+name = "twine"
+version = "6.1.0"
+
+[[packages.wheels]]
+name = "twine-6.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7c/b6/74e927715a285743351233f33ea3c684528a0d374d2e43ff9ce9585b73fe/twine-6.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384"
+
+[[packages]]
+name = "typer"
+version = "0.15.2"
+
+[[packages.wheels]]
+name = "typer-0.15.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7f/fc/5b29fea8cee020515ca82cc68e3b8e1e34bb19a3535ad854cac9257b414c/typer-0.15.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc"
+
+[[packages]]
+name = "types-python-dateutil"
+version = "2.9.0.20240316"
+
+[[packages.wheels]]
+name = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c7/1b/af4f4c4f3f7339a4b7eb3c0ab13416db98f8ac09de3399129ee5fdfa282b/types_python_dateutil-2.9.0.20240316-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"
+
+[[packages]]
+name = "types-requests"
+version = "2.32.0.20250328"
+
+[[packages.wheels]]
+name = "types_requests-2.32.0.20250328-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cc/15/3700282a9d4ea3b37044264d3e4d1b1f0095a4ebf860a99914fd544e3be3/types_requests-2.32.0.20250328-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "72ff80f84b15eb3aa7a8e2625fffb6a93f2ad5a0c20215fc1dcfa61117bcb2a2"
+
+[[packages]]
+name = "typing-extensions"
+version = "4.13.2"
+
+[[packages.wheels]]
+name = "typing_extensions-4.13.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"
+
+[[packages]]
+name = "typing-inspection"
+version = "0.4.0"
+
+[[packages.wheels]]
+name = "typing_inspection-0.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"
+
+[[packages]]
+name = "tzdata"
+version = "2025.2"
+
+[[packages.wheels]]
+name = "tzdata-2025.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"
+
+[[packages]]
+name = "tzlocal"
+version = "5.3.1"
+
+[[packages.wheels]]
+name = "tzlocal-5.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d"
+
+[[packages]]
+name = "uc-micro-py"
+version = "1.0.3"
+
+[[packages.wheels]]
+name = "uc_micro_py-1.0.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5"
+
+[[packages]]
+name = "ujson"
+version = "5.10.0"
+
+[[packages.wheels]]
+name = "ujson-5.10.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/59/2d/691f741ffd72b6c84438a93749ac57bf1a3f217ac4b0ea4fd0e96119e118/ujson-5.10.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "38665e7d8290188b1e0d57d584eb8110951a9591363316dd41cf8686ab1d0abc"
+
+[[packages]]
+name = "umap-learn"
+version = "0.5.7"
+
+[[packages.wheels]]
+name = "umap_learn-0.5.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3c/8f/671c0e1f2572ba625cbcc1faeba9435e00330c3d6962858711445cf1e817/umap_learn-0.5.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6a7e0be2facfa365a5ed6588447102bdbef32a0ef449535c25c97ea7e680073c"
+
+[[packages]]
+name = "uncertainties"
+version = "3.2.2"
+
+[[packages.wheels]]
+name = "uncertainties-3.2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fa/fc/97711d2a502881d871e3cf2d2645e21e7f8e4d4fd9a56937557790cade6a/uncertainties-3.2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7"
+
+[[packages]]
+name = "uri-template"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "uri_template-1.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"
+
+[[packages]]
+name = "urllib3"
+version = "2.4.0"
+
+[[packages.wheels]]
+name = "urllib3-2.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"
+
+[[packages]]
+name = "uvicorn"
+version = "0.34.2"
+
+[[packages.wheels]]
+name = "uvicorn-0.34.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b1/4b/4cef6ce21a2aaca9d852a6e84ef4f135d99fcd74fa75105e2fc0c8308acd/uvicorn-0.34.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "deb49af569084536d269fe0a6d67e3754f104cf03aba7c11c40f01aadf33c403"
+
+[[packages]]
+name = "vega-datasets"
+version = "0.9.0"
+
+[[packages.wheels]]
+name = "vega_datasets-0.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e6/9f/ca52771fe972e0dcc5167fedb609940e01516066938ff2ee28b273ae4f29/vega_datasets-0.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3d7c63917be6ca9b154b565f4779a31fedce57b01b5b9d99d8a34a7608062a1d"
+
+[[packages]]
+name = "waitress"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "waitress-3.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5b/a9/485c953a1ac4cb98c28e41fd2c7184072df36bbf99734a51d44d04176878/waitress-3.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2a06f242f4ba0cc563444ca3d1998959447477363a2d7e9b8b4d75d35cfd1669"
+
+[[packages]]
+name = "watchdog"
+version = "6.0.0"
+
+[[packages.wheels]]
+name = "watchdog-6.0.0-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"
+
+[[packages]]
+name = "wcwidth"
+version = "0.2.13"
+
+[[packages.wheels]]
+name = "wcwidth-0.2.13-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"
+
+[[packages]]
+name = "webcolors"
+version = "24.11.1"
+
+[[packages.wheels]]
+name = "webcolors-24.11.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"
+
+[[packages]]
+name = "webencodings"
+version = "0.5.1"
+
+[[packages.wheels]]
+name = "webencodings-0.5.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"
+
+[[packages]]
+name = "websocket-client"
+version = "1.8.0"
+
+[[packages.wheels]]
+name = "websocket_client-1.8.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"
+
+[[packages]]
+name = "websockets"
+version = "14.2"
+
+[[packages.wheels]]
+name = "websockets-14.2-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b3/7d/32cdb77990b3bdc34a306e0a0f73a1275221e9a66d869f6ff833c95b56ef/websockets-14.2-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "44bba1a956c2c9d268bdcdf234d5e5ff4c9b6dc3e300545cbe99af59dda9dcce"
+
+[[packages]]
+name = "werkzeug"
+version = "3.1.3"
+
+[[packages.wheels]]
+name = "werkzeug-3.1.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"
+
+[[packages]]
+name = "whatthepatch"
+version = "1.0.7"
+
+[[packages.wheels]]
+name = "whatthepatch-1.0.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8e/93/af1d6ccb69ab6b5a00e03fa0cefa563f9862412667776ea15dd4eece3a90/whatthepatch-1.0.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1b6f655fd31091c001c209529dfaabbabdbad438f5de14e3951266ea0fc6e7ed"
+
+[[packages]]
+name = "wheel"
+version = "0.45.1"
+
+[[packages.wheels]]
+name = "wheel-0.45.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248"
+
+[[packages]]
+name = "widgetsnbextension"
+version = "4.0.14"
+
+[[packages.wheels]]
+name = "widgetsnbextension-4.0.14-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575"
+
+[[packages]]
+name = "wordcloud"
+version = "1.9.4"
+
+[[packages.wheels]]
+name = "wordcloud-1.9.4-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b9/74/6a15f68f59bc90032bfcf62eca796a5675be95e1aaf84f7861e1bfcfa8e5/wordcloud-1.9.4-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "360977705d0808a1795fcbe98afb5dc4833cb4bb8e421cbb10e93ef0bce816ff"
+
+[[packages]]
+name = "wrapt"
+version = "1.16.0"
+
+[[packages.wheels]]
+name = "wrapt-1.16.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/5c/cc/8297f9658506b224aa4bd71906447dea6bb0ba629861a758c28f67428b91/wrapt-1.16.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"
+
+[[packages]]
+name = "wsproto"
+version = "1.2.0"
+
+[[packages.wheels]]
+name = "wsproto-1.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"
+
+[[packages]]
+name = "xarray"
+version = "2025.4.0"
+
+[[packages.wheels]]
+name = "xarray-2025.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a4/1e/96fd96419fec1a37da998a1ca3d558f2cae2f6f3cd5015170371b05a2b6b/xarray-2025.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b27defd082c5cb85d32c695708de6bb05c2838fb7caaf3f952982e602a35b9b8"
+
+[[packages]]
+name = "xlsxwriter"
+version = "3.2.3"
+
+[[packages.wheels]]
+name = "XlsxWriter-3.2.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/37/b1/a252d499f2760b314fcf264d2b36fcc4343a1ecdb25492b210cb0db70a68/XlsxWriter-3.2.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "593f8296e8a91790c6d0378ab08b064f34a642b3feb787cf6738236bd0a4860d"
+
+[[packages]]
+name = "xyzservices"
+version = "2023.10.1"
+
+[[packages.wheels]]
+name = "xyzservices-2023.10.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/82/c3/e06dfa46464cce3eda4b86df8847cab99d9bc545c76807ee689545187a4c/xyzservices-2023.10.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6a4c38d3a9f89d3e77153eff9414b36a8ee0850c9e8b85796fd1b2a85b8dfd68"
+
+[[packages]]
+name = "yapf"
+version = "0.40.1"
+
+[[packages.wheels]]
+name = "yapf-0.40.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/23/75/c374517c09e31bf22d3b3f156d73e0f38d08e29b2afdd607cef5f1e10aa9/yapf-0.40.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b8bfc1f280949153e795181768ca14ef43d7312629a06c43e7abd279323af313"
+
+[[packages]]
+name = "yarl"
+version = "1.18.3"
+
+[[packages.wheels]]
+name = "yarl-1.18.3-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/34/45/0e055320daaabfc169b21ff6174567b2c910c45617b0d79c68d7ab349b02/yarl-1.18.3-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"
+
+[[packages]]
+name = "yt-dlp"
+version = "2025.2.19"
+
+[[packages.wheels]]
+name = "yt_dlp-2025.2.19-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9e/45/6d1b759e68f5363b919828fb0e0c167a1cd5003b5b7c74cc0f0c2096be4f/yt_dlp-2025.2.19-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3ed218eaeece55e9d715afd41abc450dc406ee63bf79355169dfde312d38fdb8"
+
+[[packages]]
+name = "zict"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "zict-3.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae"
+
+[[packages]]
+name = "zipp"
+version = "3.21.0"
+
+[[packages.wheels]]
+name = "zipp-3.21.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"
+
+[[packages]]
+name = "zstandard"
+version = "0.23.0"
+
+[[packages.wheels]]
+name = "zstandard-0.23.0-cp312-cp312-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b"
diff --git a/changelogs/pylock.64-3_13_5_0slim.toml b/changelogs/pylock.64-3_13_5_0slim.toml
new file mode 100644
index 00000000..c8739b74
--- /dev/null
+++ b/changelogs/pylock.64-3_13_5_0slim.toml
@@ -0,0 +1,5491 @@
+lock-version = "1.0"
+created-by = "pip"
+
+[[packages]]
+name = "absl-py"
+version = "2.2.2"
+
+[[packages.wheels]]
+name = "absl_py-2.2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f6/d4/349f7f4bd5ea92dab34f5bb0fe31775ef6c311427a14d5a5b31ecb442341/absl_py-2.2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e5797bc6abe45f64fd95dc06394ca3f2bedf3b5d895e9da691c9ee3397d70092"
+
+[[packages]]
+name = "adbc-driver-manager"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "adbc_driver_manager-1.3.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/2a/a7/a97c778466e0fca5ebb8566794f07334689a086f3564d1250608bb943494/adbc_driver_manager-1.3.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "0d327006f5993385b3625e3524a851ea7050aa3b1716bddd52c8892ac9c42145"
+
+[[packages]]
+name = "aiofiles"
+version = "23.2.1"
+
+[[packages.wheels]]
+name = "aiofiles-23.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107"
+
+[[packages]]
+name = "aiohappyeyeballs"
+version = "2.6.1"
+
+[[packages.wheels]]
+name = "aiohappyeyeballs-2.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"
+
+[[packages]]
+name = "aiohttp"
+version = "3.11.18"
+
+[[packages.wheels]]
+name = "aiohttp-3.11.18-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/1e/3c/143831b32cd23b5263a995b2a1794e10aa42f8a895aae5074c20fda36c07/aiohttp-3.11.18-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01"
+
+[[packages]]
+name = "aiosignal"
+version = "1.3.2"
+
+[[packages.wheels]]
+name = "aiosignal-1.3.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"
+
+[[packages]]
+name = "aiosqlite"
+version = "0.20.0"
+
+[[packages.wheels]]
+name = "aiosqlite-0.20.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/00/c4/c93eb22025a2de6b83263dfe3d7df2e19138e345bca6f18dba7394120930/aiosqlite-0.20.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6"
+
+[[packages]]
+name = "alabaster"
+version = "0.7.16"
+
+[[packages.wheels]]
+name = "alabaster-0.7.16-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"
+
+[[packages]]
+name = "alembic"
+version = "1.15.2"
+
+[[packages.wheels]]
+name = "alembic-1.15.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/41/18/d89a443ed1ab9bcda16264716f809c663866d4ca8de218aa78fd50b38ead/alembic-1.15.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2e76bd916d547f6900ec4bb5a90aeac1485d2c92536923d0b138c02b126edc53"
+
+[[packages]]
+name = "altair"
+version = "5.5.0"
+
+[[packages.wheels]]
+name = "altair-5.5.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/aa/f3/0b6ced594e51cc95d8c1fc1640d3623770d01e4969d29c0bd09945fafefa/altair-5.5.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "91a310b926508d560fe0148d02a194f38b824122641ef528113d029fcd129f8c"
+
+[[packages]]
+name = "annotated-types"
+version = "0.7.0"
+
+[[packages.wheels]]
+name = "annotated_types-0.7.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"
+
+[[packages]]
+name = "ansicolors"
+version = "1.1.8"
+
+[[packages.wheels]]
+name = "ansicolors-1.1.8-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/53/18/a56e2fe47b259bb52201093a3a9d4a32014f9d85071ad07e9d60600890ca/ansicolors-1.1.8-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "00d2dde5a675579325902536738dd27e4fac1fd68f773fe36c21044eb559e187"
+
+[[packages]]
+name = "anthropic"
+version = "0.51.0"
+
+[[packages.wheels]]
+name = "anthropic-0.51.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8c/6e/9637122c5f007103bd5a259f4250bd8f1533dd2473227670fd10a1457b62/anthropic-0.51.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b8b47d482c9aa1f81b923555cebb687c2730309a20d01be554730c8302e0f62a"
+
+[[packages]]
+name = "anyio"
+version = "4.9.0"
+
+[[packages.wheels]]
+name = "anyio-4.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"
+
+[[packages]]
+name = "anywidget"
+version = "0.9.18"
+
+[[packages.wheels]]
+name = "anywidget-0.9.18-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2b/f0/09a30ca0551af20c7cefa7464b7ccb6f5407a550b83c4dcb15c410814849/anywidget-0.9.18-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "944b82ef1dd17b8ff0fb6d1f199f613caf9111338e6e2857da478f6e73770cb8"
+
+[[packages]]
+name = "appdirs"
+version = "1.4.4"
+
+[[packages.wheels]]
+name = "appdirs-1.4.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"
+
+[[packages]]
+name = "argcomplete"
+version = "3.6.2"
+
+[[packages.wheels]]
+name = "argcomplete-3.6.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/31/da/e42d7a9d8dd33fa775f467e4028a47936da2f01e4b0e561f9ba0d74cb0ca/argcomplete-3.6.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "65b3133a29ad53fb42c48cf5114752c7ab66c1c38544fdf6460f450c09b42591"
+
+[[packages]]
+name = "argon2-cffi"
+version = "23.1.0"
+
+[[packages.wheels]]
+name = "argon2_cffi-23.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a4/6a/e8a041599e78b6b3752da48000b14c8d1e8a04ded09c88c714ba047f34f5/argon2_cffi-23.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"
+
+[[packages]]
+name = "argon2-cffi-bindings"
+version = "21.2.0"
+
+[[packages.wheels]]
+name = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"
+
+[[packages]]
+name = "array-api-compat"
+version = "1.12.0"
+
+[[packages.wheels]]
+name = "array_api_compat-1.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a0b4795b6944a9507fde54679f9350e2ad2b1e2acf4a2408a098cdc27f890a8b"
+
+[[packages]]
+name = "arrow"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "arrow-1.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"
+
+[[packages]]
+name = "asgi-csrf"
+version = "0.11"
+
+[[packages.wheels]]
+name = "asgi_csrf-0.11-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/82/1c/5d954baaf144852a4762368b37c06202b277378ea412acc5565f69acc9e9/asgi_csrf-0.11-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "03ac140115f39d4295288a9adf74fdc6ae607f6ef44abee8466520458207242b"
+
+[[packages]]
+name = "asgiref"
+version = "3.8.1"
+
+[[packages.wheels]]
+name = "asgiref-3.8.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/39/e3/893e8757be2612e6c266d9bb58ad2e3651524b5b40cf56761e985a28b13e/asgiref-3.8.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"
+
+[[packages]]
+name = "asn1crypto"
+version = "1.5.1"
+
+[[packages.wheels]]
+name = "asn1crypto-1.5.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c9/7f/09065fd9e27da0eda08b4d6897f1c13535066174cc023af248fc2a8d5e5a/asn1crypto-1.5.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67"
+
+[[packages]]
+name = "asteval"
+version = "1.0.5"
+
+[[packages.wheels]]
+name = "asteval-1.0.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0a/0d/2c6aaab67ac566d76322e87827d707214c5f6ffb5a4fcd456a8633da1788/asteval-1.0.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "082b95312578affc8a6d982f7d92b7ac5de05634985c87e7eedd3188d31149fa"
+
+[[packages]]
+name = "astroid"
+version = "3.3.9"
+
+[[packages.wheels]]
+name = "astroid-3.3.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/de/80/c749efbd8eef5ea77c7d6f1956e8fbfb51963b7f93ef79647afd4d9886e3/astroid-3.3.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248"
+
+[[packages]]
+name = "astropy"
+version = "6.1.6"
+
+[[packages.wheels]]
+name = "astropy-6.1.6-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/cc/6b/3a25746d94111c8523ac02b810451987128ab61ac05847e24dd1b2093e18/astropy-6.1.6-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "fafc65f47dedcc4a8112bce8b67f215a8076af214be34a2c34abc96d078f2b37"
+
+[[packages]]
+name = "astropy-iers-data"
+version = "0.2024.12.23.0.33.24"
+
+[[packages.wheels]]
+name = "astropy_iers_data-0.2024.12.23.0.33.24-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e8/4d/565740d9ac54640c09d2fdd22ef3583103438fb97305a9cfb66595a4b259/astropy_iers_data-0.2024.12.23.0.33.24-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "40d3c6b6a5cf4dc6ad91b92b7e0f949e5366234e3c4440302247429fc8294302"
+
+[[packages]]
+name = "asttokens"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "asttokens-3.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"
+
+[[packages]]
+name = "async-lru"
+version = "2.0.5"
+
+[[packages.wheels]]
+name = "async_lru-2.0.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"
+
+[[packages]]
+name = "asyncssh"
+version = "2.20.0"
+
+[[packages.wheels]]
+name = "asyncssh-2.20.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f2/c5/7a9d42c065f272f74792663194966a68810e851a34c0dd080246bd7308f5/asyncssh-2.20.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "af6888d937c07a4bf31293335a6166b4d87608cdb5957b49547da6ad87ecf174"
+
+[[packages]]
+name = "atomicwrites"
+version = "1.4.0"
+
+[[packages.wheels]]
+name = "atomicwrites-1.4.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/a0/da5f49008ec6e9a658dbf5d7310a4debd397bce0b4db03cf8a410066bb87/atomicwrites-1.4.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"
+
+[[packages]]
+name = "attrs"
+version = "25.3.0"
+
+[[packages.wheels]]
+name = "attrs-25.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"
+
+[[packages]]
+name = "autopep8"
+version = "2.0.4"
+
+[[packages.wheels]]
+name = "autopep8-2.0.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d8/f2/e63c9f9c485cd90df8e4e7ae90fa3be2469c9641888558c7b45fa98a76f8/autopep8-2.0.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb"
+
+[[packages]]
+name = "azure-core"
+version = "1.32.0"
+
+[[packages.wheels]]
+name = "azure_core-1.32.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/39/83/325bf5e02504dbd8b4faa98197a44cdf8a325ef259b48326a2b6f17f8383/azure_core-1.32.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4"
+
+[[packages]]
+name = "azure-cosmos"
+version = "4.9.0"
+
+[[packages.wheels]]
+name = "azure_cosmos-4.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/61/dc/380f843744535497acd0b85aacb59565c84fc28bf938c8d6e897a858cd95/azure_cosmos-4.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3b60eaa01a16a857d0faf0cec304bac6fa8620a81bc268ce760339032ef617fe"
+
+[[packages]]
+name = "azure-identity"
+version = "1.21.0"
+
+[[packages.wheels]]
+name = "azure_identity-1.21.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3d/9f/1f9f3ef4f49729ee207a712a5971a9ca747f2ca47d9cbf13cf6953e3478a/azure_identity-1.21.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "258ea6325537352440f71b35c3dffe9d240eae4a5126c1b7ce5efd5766bd9fd9"
+
+[[packages]]
+name = "babel"
+version = "2.17.0"
+
+[[packages.wheels]]
+name = "babel-2.17.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"
+
+[[packages]]
+name = "baresql"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "baresql-1.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d6/d2/fe24bcd99d97bddbbccdf191edf4e84c0fdfe894dfff9f54b05f36096ebb/baresql-1.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a24d17f46beb47c221f328f7e06710e3896c6203a8e1909788d7128f27b86f01"
+
+[[packages]]
+name = "bcrypt"
+version = "4.3.0"
+
+[[packages.wheels]]
+name = "bcrypt-4.3.0-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/a9/cf/45fb5261ece3e6b9817d3d82b2f343a505fd58674a92577923bc500bd1aa/bcrypt-4.3.0-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "e53e074b120f2877a35cc6c736b8eb161377caae8925c17688bd46ba56daaa5b"
+
+[[packages]]
+name = "beautifulsoup4"
+version = "4.13.3"
+
+[[packages.wheels]]
+name = "beautifulsoup4-4.13.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"
+
+[[packages]]
+name = "binaryornot"
+version = "0.4.4"
+
+[[packages.wheels]]
+name = "binaryornot-0.4.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/24/7e/f7b6f453e6481d1e233540262ccbfcf89adcd43606f44a028d7f5fae5eb2/binaryornot-0.4.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4"
+
+[[packages]]
+name = "black"
+version = "25.1.0"
+
+[[packages.wheels]]
+name = "black-25.1.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18"
+
+[[packages]]
+name = "bleach"
+version = "6.2.0"
+
+[[packages.wheels]]
+name = "bleach-6.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"
+
+[[packages]]
+name = "blinker"
+version = "1.9.0"
+
+[[packages.wheels]]
+name = "blinker-1.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"
+
+[[packages]]
+name = "bokeh"
+version = "3.7.3"
+
+[[packages.wheels]]
+name = "bokeh-3.7.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/91/48/08b2382e739236aa3360b7976360ba3e0c043b6234e25951c18c1eb6fa06/bokeh-3.7.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b0e79dd737f088865212e4fdcb0f3b95d087f0f088bf8ca186a300ab1641e2c7"
+
+[[packages]]
+name = "branca"
+version = "0.8.1"
+
+[[packages.wheels]]
+name = "branca-0.8.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f8/9d/91cddd38bd00170aad1a4b198c47b4ed716be45c234e09b835af41f4e717/branca-0.8.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d29c5fab31f7c21a92e34bf3f854234e29fecdcf5d2df306b616f20d816be425"
+
+[[packages]]
+name = "brotli"
+version = "1.1.0"
+
+[[packages.wheels]]
+name = "Brotli-1.1.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/7e/c1/ec214e9c94000d1c1974ec67ced1c970c148aa6b8d8373066123fc3dbf06/Brotli-1.1.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b"
+
+[[packages]]
+name = "build"
+version = "1.2.2.post1"
+
+[[packages.wheels]]
+name = "build-1.2.2.post1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/84/c2/80633736cd183ee4a62107413def345f7e6e3c01563dbca1417363cf957e/build-1.2.2.post1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"
+
+[[packages]]
+name = "cachetools"
+version = "5.5.2"
+
+[[packages.wheels]]
+name = "cachetools-5.5.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/72/76/20fa66124dbe6be5cafeb312ece67de6b61dd91a0247d1ea13db4ebb33c2/cachetools-5.5.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"
+
+[[packages]]
+name = "certifi"
+version = "2025.1.31"
+
+[[packages.wheels]]
+name = "certifi-2025.1.31-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"
+
+[[packages]]
+name = "cffi"
+version = "1.17.1"
+
+[[packages.wheels]]
+name = "cffi-1.17.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"
+
+[[packages]]
+name = "chardet"
+version = "5.2.0"
+
+[[packages.wheels]]
+name = "chardet-5.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"
+
+[[packages]]
+name = "charset-normalizer"
+version = "3.4.2"
+
+[[packages.wheels]]
+name = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"
+
+[[packages]]
+name = "clarabel"
+version = "0.10.0"
+
+[[packages.wheels]]
+name = "clarabel-0.10.0-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e6/ba/67a0defb70ed910877049e915e6738fc0432edd5e46b97743ce78a1e5b95/clarabel-0.10.0-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7871b6f499ad66f71d4e7fb40754c4d986d4316f242beb62ff4f63a69785a50c"
+
+[[packages]]
+name = "click"
+version = "8.1.8"
+
+[[packages.wheels]]
+name = "click-8.1.8-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"
+
+[[packages]]
+name = "click-default-group"
+version = "1.2.4"
+
+[[packages.wheels]]
+name = "click_default_group-1.2.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f"
+
+[[packages]]
+name = "cloudpickle"
+version = "3.1.1"
+
+[[packages.wheels]]
+name = "cloudpickle-3.1.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"
+
+[[packages]]
+name = "cohere"
+version = "5.15.0"
+
+[[packages.wheels]]
+name = "cohere-5.15.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c7/87/94694db7fe6df979fbc03286eaabdfa98f1c8fa532960e5afdf965e10960/cohere-5.15.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "22ff867c2a6f2fc2b585360c6072f584f11f275ef6d9242bac24e0fa2df1dfb5"
+
+[[packages]]
+name = "colorama"
+version = "0.4.6"
+
+[[packages.wheels]]
+name = "colorama-0.4.6-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"
+
+[[packages]]
+name = "colorcet"
+version = "3.1.0"
+
+[[packages.wheels]]
+name = "colorcet-3.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c6/c6/9963d588cc3d75d766c819e0377a168ef83cf3316a92769971527a1ad1de/colorcet-3.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2a7d59cc8d0f7938eeedd08aad3152b5319b4ba3bcb7a612398cc17a384cb296"
+
+[[packages]]
+name = "colorlog"
+version = "6.9.0"
+
+[[packages.wheels]]
+name = "colorlog-6.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e3/51/9b208e85196941db2f0654ad0357ca6388ab3ed67efdbfc799f35d1f83aa/colorlog-6.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff"
+
+[[packages]]
+name = "comm"
+version = "0.2.2"
+
+[[packages.wheels]]
+name = "comm-0.2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"
+
+[[packages]]
+name = "contourpy"
+version = "1.3.2"
+
+[[packages.wheels]]
+name = "contourpy-1.3.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9"
+
+[[packages]]
+name = "cookiecutter"
+version = "2.6.0"
+
+[[packages.wheels]]
+name = "cookiecutter-2.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b6/d9/0137658a353168ffa9d0fc14b812d3834772040858ddd1cb6eeaf09f7a44/cookiecutter-2.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a54a8e37995e4ed963b3e82831072d1ad4b005af736bb17b99c2cbd9d41b6e2d"
+
+[[packages]]
+name = "cryptography"
+version = "44.0.0"
+
+[[packages.wheels]]
+name = "cryptography-44.0.0-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede"
+
+[[packages]]
+name = "cvxopt"
+version = "1.3.2"
+
+[[packages.wheels]]
+name = "cvxopt-1.3.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b9/55/90b40b489a235a9f35a532eb77cec81782e466779d9a531ffda6b2f99410/cvxopt-1.3.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "0a0987966009ad383de0918e61255d34ed9ebc783565bcb15470d4155010b6bf"
+
+[[packages]]
+name = "cvxpy"
+version = "1.6.4"
+
+[[packages.wheels]]
+name = "cvxpy-1.6.4-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/56/a2/625f99661e43bd3fac3926b64cd6e8ab60d75ddd2451d9c6aba17a908c22/cvxpy-1.6.4-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "1eed0ac8d8c0141abc73535d652f7b133acfbab2149f5d9d6fa348353c90b442"
+
+[[packages]]
+name = "cycler"
+version = "0.12.1"
+
+[[packages.wheels]]
+name = "cycler-0.12.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"
+
+[[packages]]
+name = "cython"
+version = "3.1.1"
+
+[[packages.wheels]]
+name = "cython-3.1.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/79/5e/c469f7b42e145a06af79a3f7b599454c028a823c6a83adc867ddfd02f941/cython-3.1.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "e000f0533eedf3d6dfbe30bb3c58a054c58f0a7778390342fa577a0dc47adab3"
+
+[[packages]]
+name = "cytoolz"
+version = "1.0.1"
+
+[[packages.wheels]]
+name = "cytoolz-1.0.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/40/eb/dde173cf2357084ca9423950be1f2f11ab11d65d8bd30165bfb8fd4213e9/cytoolz-1.0.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "90e577e08d3a4308186d9e1ec06876d4756b1e8164b92971c69739ea17e15297"
+
+[[packages]]
+name = "dask"
+version = "2025.4.1"
+
+[[packages.wheels]]
+name = "dask-2025.4.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b4/12/f9effea5fe2bebfdd8b0d9c857f798382afacd57dc1cd0e9ce21e66c1bc2/dask-2025.4.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "aacbb0a9667856fe58385015efd64aca22f0c0b2c5e1b5e633531060303bb4be"
+
+[[packages]]
+name = "datasette"
+version = "0.65.1"
+
+[[packages.wheels]]
+name = "datasette-0.65.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/08/f7/fc15b9ddc7a2cafe546f0e2696d71940d7604a128e2f903e98238c3435f7/datasette-0.65.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ba7adf717ddcc24a2a8ac57890fffd384a2ebb909b342e4f731ba09eba764305"
+
+[[packages]]
+name = "datasette-graphql"
+version = "2.2"
+
+[[packages.wheels]]
+name = "datasette_graphql-2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f1/12/e8fb59d77c59ec47a2aa53a6d4ac57ad55fce2b48c8397c2866c3f2c66cd/datasette_graphql-2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cd9f61afdcaab1ce4ff6775296e6ece99305bf05cbfae4c1c938a6c9e60cd485"
+
+[[packages]]
+name = "datashader"
+version = "0.17.0"
+
+[[packages.wheels]]
+name = "datashader-0.17.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/dc/52/755bbab06c4d10f693abb724e82271ccf8adc98e9305a5c559867ee40c98/datashader-0.17.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "39421ff999294913e63d41954af955a5dece5d0c55d8fce1426043d70b22d07a"
+
+[[packages]]
+name = "deap"
+version = "1.4.2"
+
+[[packages.wheels]]
+name = "deap-1.4.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/6e/22/614264336b00b1a01447e31c941fd4576478b5d32184dbb552db27b1c2a1/deap-1.4.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "1abab976c75b0f18c36e81f968fcc77fac69fc9bedbab8be3323ca376f6fcfa4"
+
+[[packages]]
+name = "debugpy"
+version = "1.8.13"
+
+[[packages.wheels]]
+name = "debugpy-1.8.13-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/15/63/aa92fb341a78ec40f1c414ec7a7885c2ee17032eee00d12cee0cdc502af4/debugpy-1.8.13-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8"
+
+[[packages]]
+name = "decorator"
+version = "5.2.1"
+
+[[packages.wheels]]
+name = "decorator-5.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"
+
+[[packages]]
+name = "defusedxml"
+version = "0.7.1"
+
+[[packages.wheels]]
+name = "defusedxml-0.7.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"
+
+[[packages]]
+name = "deprecated"
+version = "1.2.14"
+
+[[packages.wheels]]
+name = "Deprecated-1.2.14-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/20/8d/778b7d51b981a96554f29136cd59ca7880bf58094338085bcf2a979a0e6a/Deprecated-1.2.14-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"
+
+[[packages]]
+name = "diff-match-patch"
+version = "20241021"
+
+[[packages.wheels]]
+name = "diff_match_patch-20241021-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f7/bb/2aa9b46a01197398b901e458974c20ed107935c26e44e37ad5b0e5511e44/diff_match_patch-20241021-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "93cea333fb8b2bc0d181b0de5e16df50dd344ce64828226bda07728818936782"
+
+[[packages]]
+name = "dill"
+version = "0.4.0"
+
+[[packages.wheels]]
+name = "dill-0.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049"
+
+[[packages]]
+name = "distributed"
+version = "2025.4.1"
+
+[[packages.wheels]]
+name = "distributed-2025.4.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/df/33/b956f0dc74b292ea3d206a45467fde838f005b64123a729898a6390a291a/distributed-2025.4.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3a7834451b04ef059928045eab6ff6d88ad7bcfd48adc99403127d9a6818b5fa"
+
+[[packages]]
+name = "distro"
+version = "1.9.0"
+
+[[packages.wheels]]
+name = "distro-1.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"
+
+[[packages]]
+name = "django"
+version = "5.2"
+
+[[packages.wheels]]
+name = "Django-5.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/63/e0/6a5b5ea350c5bd63fe94b05e4c146c18facb51229d9dee42aa39f9fc2214/Django-5.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "91ceed4e3a6db5aedced65e3c8f963118ea9ba753fc620831c77074e620e7d83"
+
+[[packages]]
+name = "dnspython"
+version = "2.7.0"
+
+[[packages.wheels]]
+name = "dnspython-2.7.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"
+
+[[packages]]
+name = "docstring-to-markdown"
+version = "0.17"
+
+[[packages.wheels]]
+name = "docstring_to_markdown-0.17-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/56/7b/af3d0da15bed3a8665419bb3a630585756920f4ad67abfdfef26240ebcc0/docstring_to_markdown-0.17-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "fd7d5094aa83943bf5f9e1a13701866b7c452eac19765380dead666e36d3711c"
+
+[[packages]]
+name = "docutils"
+version = "0.21.2"
+
+[[packages.wheels]]
+name = "docutils-0.21.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"
+
+[[packages]]
+name = "duckdb"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "duckdb-1.3.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/ab/e9/f83285b0cb3729f24321a038f272490dfb76ca531b7cef832037b7bd077c/duckdb-1.3.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "fbdfc1c0b83b90f780ae74038187ee696bb56ab727a289752372d7ec42dda65b"
+
+[[packages]]
+name = "entrypoints"
+version = "0.4"
+
+[[packages.wheels]]
+name = "entrypoints-0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"
+
+[[packages]]
+name = "et-xmlfile"
+version = "1.1.0"
+
+[[packages.wheels]]
+name = "et_xmlfile-1.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/96/c2/3dd434b0108730014f1b96fd286040dc3bcb70066346f7e01ec2ac95865f/et_xmlfile-1.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"
+
+[[packages]]
+name = "eval-type-backport"
+version = "0.2.2"
+
+[[packages.wheels]]
+name = "eval_type_backport-0.2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ce/31/55cd413eaccd39125368be33c46de24a1f639f2e12349b0361b4678f3915/eval_type_backport-0.2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a"
+
+[[packages]]
+name = "executing"
+version = "2.2.0"
+
+[[packages.wheels]]
+name = "executing-2.2.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"
+
+[[packages]]
+name = "faker"
+version = "37.1.0"
+
+[[packages.wheels]]
+name = "faker-37.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d7/a1/8936bc8e79af80ca38288dd93ed44ed1f9d63beb25447a4c59e746e01f8d/faker-37.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dc2f730be71cb770e9c715b13374d80dbcee879675121ab51f9683d262ae9a1c"
+
+[[packages]]
+name = "fasta2a"
+version = "0.2.9"
+
+[[packages.wheels]]
+name = "fasta2a-0.2.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7a/df/dd967535662ecc9e101a7d6c0c643a055aabc3de47411c31c1dd624356c8/fasta2a-0.2.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8b855b36f29fde6dcb79ad55be337a8165381b679bec829913009c55581e284e"
+
+[[packages]]
+name = "fastapi"
+version = "0.115.12"
+
+[[packages.wheels]]
+name = "fastapi-0.115.12-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"
+
+[[packages]]
+name = "fastavro"
+version = "1.10.0"
+
+[[packages.wheels]]
+name = "fastavro-1.10.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/1f/2c/43927e22a2d57587b3aa09765098a6d833246b672d34c10c5f135414745a/fastavro-1.10.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "86baf8c9740ab570d0d4d18517da71626fe9be4d1142bea684db52bd5adb078f"
+
+[[packages]]
+name = "fastjsonschema"
+version = "2.21.1"
+
+[[packages.wheels]]
+name = "fastjsonschema-2.21.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"
+
+[[packages]]
+name = "filelock"
+version = "3.18.0"
+
+[[packages.wheels]]
+name = "filelock-3.18.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"
+
+[[packages]]
+name = "flake8"
+version = "7.1.1"
+
+[[packages.wheels]]
+name = "flake8-7.1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d9/42/65004373ac4617464f35ed15931b30d764f53cdd30cc78d5aea349c8c050/flake8-7.1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"
+
+[[packages]]
+name = "flask"
+version = "3.1.0"
+
+[[packages.wheels]]
+name = "flask-3.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/af/47/93213ee66ef8fae3b93b3e29206f6b251e65c97bd91d8e1c5596ef15af0a/flask-3.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136"
+
+[[packages]]
+name = "flexcache"
+version = "0.3"
+
+[[packages.wheels]]
+name = "flexcache-0.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32"
+
+[[packages]]
+name = "flexparser"
+version = "0.4"
+
+[[packages.wheels]]
+name = "flexparser-0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846"
+
+[[packages]]
+name = "flit"
+version = "3.12.0"
+
+[[packages.wheels]]
+name = "flit-3.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f5/82/ce1d3bb380b227e26e517655d1de7b32a72aad61fa21ff9bd91a2e2db6ee/flit-3.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2b4e7171dc22881fa6adc2dbf083e5ecc72520be3cd7587d2a803da94d6ef431"
+
+[[packages]]
+name = "flit-core"
+version = "3.12.0"
+
+[[packages.wheels]]
+name = "flit_core-3.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f2/65/b6ba90634c984a4fcc02c7e3afe523fef500c4980fec67cc27536ee50acf/flit_core-3.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e7a0304069ea895172e3c7bb703292e992c5d1555dd1233ab7b5621b5b69e62c"
+
+[[packages]]
+name = "folium"
+version = "0.19.5"
+
+[[packages.wheels]]
+name = "folium-0.19.5-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/81/4d/bcbee0676dc06f0b014a030cb928e158c96daafb872a01ddee7e60a8c998/folium-0.19.5-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4333fb3e6f3e9eedb231615d22c6d7df20aea5829554bd6908675865a37803b3"
+
+[[packages]]
+name = "fonttools"
+version = "4.57.0"
+
+[[packages.wheels]]
+name = "fonttools-4.57.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/c4/0d/2177b7fdd23d017bcfb702fd41e47d4573766b9114da2fddbac20dcc4957/fonttools-4.57.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3"
+
+[[packages]]
+name = "fqdn"
+version = "1.5.1"
+
+[[packages.wheels]]
+name = "fqdn-1.5.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"
+
+[[packages]]
+name = "frozenlist"
+version = "1.5.0"
+
+[[packages.wheels]]
+name = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/17/c4/b7db1206a3fea44bf3b838ca61deb6f74424a8a5db1dd53ecb21da669be6/frozenlist-1.5.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"
+
+[[packages]]
+name = "fsspec"
+version = "2025.3.2"
+
+[[packages.wheels]]
+name = "fsspec-2025.3.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711"
+
+[[packages]]
+name = "fuzzywuzzy"
+version = "0.18.0"
+
+[[packages.wheels]]
+name = "fuzzywuzzy-0.18.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/43/ff/74f23998ad2f93b945c0309f825be92e04e0348e062026998b5eefef4c33/fuzzywuzzy-0.18.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "928244b28db720d1e0ee7587acf660ea49d7e4c632569cad4f1cd7e68a5f0993"
+
+[[packages]]
+name = "geographiclib"
+version = "2.0"
+
+[[packages.wheels]]
+name = "geographiclib-2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9f/5a/a26132406f1f40cf51ea349a5f11b0a46cec02a2031ff82e391c2537247a/geographiclib-2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734"
+
+[[packages]]
+name = "geopandas"
+version = "1.0.1"
+
+[[packages.wheels]]
+name = "geopandas-1.0.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c4/64/7d344cfcef5efddf9cf32f59af7f855828e9d74b5f862eddf5bfd9f25323/geopandas-1.0.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6"
+
+[[packages]]
+name = "geopy"
+version = "2.4.1"
+
+[[packages.wheels]]
+name = "geopy-2.4.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e5/15/cf2a69ade4b194aa524ac75112d5caac37414b20a3a03e6865dfe0bd1539/geopy-2.4.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7"
+
+[[packages]]
+name = "gitdb"
+version = "4.0.12"
+
+[[packages.wheels]]
+name = "gitdb-4.0.12-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"
+
+[[packages]]
+name = "gitpython"
+version = "3.1.44"
+
+[[packages.wheels]]
+name = "GitPython-3.1.44-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"
+
+[[packages]]
+name = "google-auth"
+version = "2.38.0"
+
+[[packages.wheels]]
+name = "google_auth-2.38.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a"
+
+[[packages]]
+name = "google-genai"
+version = "1.16.1"
+
+[[packages.wheels]]
+name = "google_genai-1.16.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/bc/31/30caa8d4ae987e47c5250fb6680588733863fd5b39cacb03ba1977c29bde/google_genai-1.16.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6ae5d24282244f577ca4f0d95c09f75ab29e556602c9d3531b70161e34cd2a39"
+
+[[packages]]
+name = "graphene"
+version = "3.4.3"
+
+[[packages.wheels]]
+name = "graphene-3.4.3-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/66/e0/61d8e98007182e6b2aca7cf65904721fb2e4bce0192272ab9cb6f69d8812/graphene-3.4.3-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "820db6289754c181007a150db1f7fff544b94142b556d12e3ebc777a7bf36c71"
+
+[[packages]]
+name = "graphql-core"
+version = "3.2.6"
+
+[[packages.wheels]]
+name = "graphql_core-3.2.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ae/4f/7297663840621022bc73c22d7d9d80dbc78b4db6297f764b545cd5dd462d/graphql_core-3.2.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f"
+
+[[packages]]
+name = "graphql-relay"
+version = "3.2.0"
+
+[[packages.wheels]]
+name = "graphql_relay-3.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/74/16/a4cf06adbc711bd364a73ce043b0b08d8fa5aae3df11b6ee4248bcdad2e0/graphql_relay-3.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c9b22bd28b170ba1fe674c74384a8ff30a76c8e26f88ac3aa1584dd3179953e5"
+
+[[packages]]
+name = "greenlet"
+version = "3.1.1"
+
+[[packages.wheels]]
+name = "greenlet-3.1.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/1f/1b/54336d876186920e185066d8c3024ad55f21d7cc3683c856127ddb7b13ce/greenlet-3.1.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"
+
+[[packages]]
+name = "griffe"
+version = "1.7.2"
+
+[[packages.wheels]]
+name = "griffe-1.7.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b1/5e/38b408f41064c9fcdbb0ea27c1bd13a1c8657c4846e04dab9f5ea770602c/griffe-1.7.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1ed9c2e338a75741fc82083fe5a1bc89cb6142efe126194cc313e34ee6af5423"
+
+[[packages]]
+name = "groq"
+version = "0.25.0"
+
+[[packages.wheels]]
+name = "groq-0.25.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4d/11/1019a6cfdb2e520cb461cf70d859216be8ca122ddf5ad301fc3b0ee45fd4/groq-0.25.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "aadc78b40b1809cdb196b1aa8c7f7293108767df1508cafa3e0d5045d9328e7a"
+
+[[packages]]
+name = "guidata"
+version = "3.9.0"
+
+[[packages.wheels]]
+name = "guidata-3.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5b/03/44afe4b4d634ea77ea7979be78bba4256607f92a6570241925e5b129966d/guidata-3.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "96a19dc92850bdb3e463fa06e8c22793e090db42d1e72c6dae9bda1a98b61210"
+
+[[packages]]
+name = "h11"
+version = "0.14.0"
+
+[[packages.wheels]]
+name = "h11-0.14.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"
+
+[[packages]]
+name = "h2"
+version = "4.2.0"
+
+[[packages.wheels]]
+name = "h2-4.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d0/9e/984486f2d0a0bd2b024bf4bc1c62688fcafa9e61991f041fb0e2def4a982/h2-4.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0"
+
+[[packages]]
+name = "h5py"
+version = "3.12.1"
+
+[[packages.wheels]]
+name = "h5py-3.12.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/50/51/0bbf3663062b2eeee78aa51da71e065f8a0a6e3cb950cc7020b4444999e6/h5py-3.12.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8"
+
+[[packages]]
+name = "hatchling"
+version = "1.27.0"
+
+[[packages.wheels]]
+name = "hatchling-1.27.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/08/e7/ae38d7a6dfba0533684e0b2136817d667588ae3ec984c1a4e5df5eb88482/hatchling-1.27.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b"
+
+[[packages]]
+name = "holoviews"
+version = "1.20.2"
+
+[[packages.wheels]]
+name = "holoviews-1.20.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/df/67/066a1d984fa259ad7300084a70789579e104afd75fc58a1d44cda9c365d5/holoviews-1.20.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1f892c04bc23e8a3a9cde082b606b9463c9ff78c3d0c00e2ddcc41fe6e738458"
+
+[[packages]]
+name = "hpack"
+version = "4.1.0"
+
+[[packages.wheels]]
+name = "hpack-4.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496"
+
+[[packages]]
+name = "html5lib"
+version = "1.1"
+
+[[packages.wheels]]
+name = "html5lib-1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"
+
+[[packages]]
+name = "httpcore"
+version = "1.0.7"
+
+[[packages.wheels]]
+name = "httpcore-1.0.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"
+
+[[packages]]
+name = "httpie"
+version = "3.2.4"
+
+[[packages.wheels]]
+name = "httpie-3.2.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/03/b6/39bcf01e1185882f34bc9fb77d1fb4a27911a55f60ab407de34abc8a2347/httpie-3.2.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4bd0435cc4b9bca59501bc65089de96f3e93b393803f32a81951db62050ebf0b"
+
+[[packages]]
+name = "httpx"
+version = "0.28.1"
+
+[[packages.wheels]]
+name = "httpx-0.28.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"
+
+[[packages]]
+name = "httpx-sse"
+version = "0.4.0"
+
+[[packages.wheels]]
+name = "httpx_sse-0.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"
+
+[[packages]]
+name = "huggingface-hub"
+version = "0.33.0"
+
+[[packages.wheels]]
+name = "huggingface_hub-0.33.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/33/fb/53587a89fbc00799e4179796f51b3ad713c5de6bb680b2becb6d37c94649/huggingface_hub-0.33.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e8668875b40c68f9929150d99727d39e5ebb8a05a98e4191b908dc7ded9074b3"
+
+[[packages]]
+name = "hupper"
+version = "1.12.1"
+
+[[packages.wheels]]
+name = "hupper-1.12.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/86/7d/3888833e4f5ea56af4a9935066ec09a83228e533d7b8877f65889d706ee4/hupper-1.12.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e872b959f09d90be5fb615bd2e62de89a0b57efc037bdf9637fb09cdf8552b19"
+
+[[packages]]
+name = "hvplot"
+version = "0.11.2"
+
+[[packages.wheels]]
+name = "hvplot-0.11.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ed/d9/466e22e60dd6b1eb09680d7155c47b58da17eda51bbaf4aad8392a45fe12/hvplot-0.11.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9d576a0c2df0f1cf5041545f2a2eddcf962510162876991cae4d1779fad74556"
+
+[[packages]]
+name = "hypercorn"
+version = "0.17.3"
+
+[[packages.wheels]]
+name = "hypercorn-0.17.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0e/3b/dfa13a8d96aa24e40ea74a975a9906cfdc2ab2f4e3b498862a57052f04eb/hypercorn-0.17.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "059215dec34537f9d40a69258d323f56344805efb462959e727152b0aa504547"
+
+[[packages]]
+name = "hyperframe"
+version = "6.1.0"
+
+[[packages.wheels]]
+name = "hyperframe-6.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5"
+
+[[packages]]
+name = "hypothesis"
+version = "6.130.4"
+
+[[packages.wheels]]
+name = "hypothesis-6.130.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5c/d4/5a0c46cc8d266626cdc8082f07f836fa4a96e8715002de69be46ed406d1d/hypothesis-6.130.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cda4a57115d10ecbefe0a9cc8d69d20a13eb56ecbfe7c24eaee5d368c2b7c477"
+
+[[packages]]
+name = "id"
+version = "1.5.0"
+
+[[packages.wheels]]
+name = "id-1.5.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9f/cb/18326d2d89ad3b0dd143da971e77afd1e6ca6674f1b1c3df4b6bec6279fc/id-1.5.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658"
+
+[[packages]]
+name = "idna"
+version = "3.10"
+
+[[packages.wheels]]
+name = "idna-3.10-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"
+
+[[packages]]
+name = "imageio"
+version = "2.37.0"
+
+[[packages.wheels]]
+name = "imageio-2.37.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed"
+
+[[packages]]
+name = "imagesize"
+version = "1.4.1"
+
+[[packages.wheels]]
+name = "imagesize-1.4.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"
+
+[[packages]]
+name = "imbalanced-learn"
+version = "0.13.0"
+
+[[packages.wheels]]
+name = "imbalanced_learn-0.13.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9d/41/721fec82606242a2072ee909086ff918dfad7d0199a9dfd4928df9c72494/imbalanced_learn-0.13.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7eb5859f7827cb3babfa5789978c22fe36e56527d9c9768df2d864d98d9b40fe"
+
+[[packages]]
+name = "importlib-metadata"
+version = "8.6.1"
+
+[[packages.wheels]]
+name = "importlib_metadata-8.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/79/9d/0fb148dc4d6fa4a7dd1d8378168d9b4cd8d4560a6fbf6f0121c5fc34eb68/importlib_metadata-8.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"
+
+[[packages]]
+name = "inflection"
+version = "0.5.1"
+
+[[packages.wheels]]
+name = "inflection-0.5.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"
+
+[[packages]]
+name = "iniconfig"
+version = "2.1.0"
+
+[[packages.wheels]]
+name = "iniconfig-2.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"
+
+[[packages]]
+name = "intervaltree"
+version = "3.1.0"
+
+[packages.sdist]
+name = "intervaltree-3.1.0.tar.gz"
+url = "https://files.pythonhosted.org/packages/50/fb/396d568039d21344639db96d940d40eb62befe704ef849b27949ded5c3bb/intervaltree-3.1.0.tar.gz"
+
+[packages.sdist.hashes]
+sha256 = "902b1b88936918f9b2a19e0e5eb7ccb430ae45cde4f39ea4b36932920d33952d"
+
+[[packages]]
+name = "ipycanvas"
+version = "0.13.3"
+
+[[packages.wheels]]
+name = "ipycanvas-0.13.3-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e2/fc/e3867e413adbfede3a9c372ec015416ccb0a6493659db5812eeec447a73b/ipycanvas-0.13.3-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d37adb2f45d2fef1c3d33c69a0518055694d87827b2f577f3c426d7712f75daa"
+
+[[packages]]
+name = "ipykernel"
+version = "6.29.5"
+
+[[packages.wheels]]
+name = "ipykernel-6.29.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"
+
+[[packages]]
+name = "ipyleaflet"
+version = "0.19.2"
+
+[[packages.wheels]]
+name = "ipyleaflet-0.19.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/56/6f/00d60e93a316a178ae04457ceea5bcbb4e2d7e7e469882ac59ec4cccfb8c/ipyleaflet-0.19.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7cc9157848baca2e1793b96e79f8bdb1aa7340521d2b7d8a62aa8bc30eab5278"
+
+[[packages]]
+name = "ipympl"
+version = "0.9.7"
+
+[[packages.wheels]]
+name = "ipympl-0.9.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/86/6b/21c62f1b2b5e18c6553f7364487dfdf7eb7952b1000a1b7863c1f97819e9/ipympl-0.9.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3698ee7eaa0b047a7603517d7aa1b71b32118a5f51754cab45ec5d994f67208f"
+
+[[packages]]
+name = "ipython"
+version = "8.36.0"
+
+[[packages.wheels]]
+name = "ipython-8.36.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d6/d7/c1c9f371790b3a181e343c4815a361e5a0cc7d90ef6642d64ba5d05de289/ipython-8.36.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "12b913914d010dcffa2711505ec8be4bf0180742d97f1e5175e51f22086428c1"
+
+[[packages]]
+name = "ipython-genutils"
+version = "0.2.0"
+
+[[packages.wheels]]
+name = "ipython_genutils-0.2.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fa/bc/9bd3b5c2b4774d5f33b2d544f1460be9df7df2fe42f352135381c347c69a/ipython_genutils-0.2.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"
+
+[[packages]]
+name = "ipython-sql"
+version = "0.5.0"
+
+[[packages.wheels]]
+name = "ipython_sql-0.5.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/30/8f/9e50fa53ffc371483f9d1b90c1175b706d28a2e978e90a8894035af01905/ipython_sql-0.5.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "61b46ecffb956f62dbc17b5744cf70c649104c8db9afd821aa39b31f7cbb5d5b"
+
+[[packages]]
+name = "ipywidgets"
+version = "8.1.6"
+
+[[packages.wheels]]
+name = "ipywidgets-8.1.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/53/b8/62952729573d983d9433faacf62a52ee2e8cf46504418061ad1739967abe/ipywidgets-8.1.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "446e7630a1d025bdc7635e1169fcc06f2ce33b5bd41c2003edeb4a47c8d4bbb1"
+
+[[packages]]
+name = "isoduration"
+version = "20.11.0"
+
+[[packages.wheels]]
+name = "isoduration-20.11.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"
+
+[[packages]]
+name = "isort"
+version = "5.13.2"
+
+[[packages.wheels]]
+name = "isort-5.13.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d1/b3/8def84f539e7d2289a02f0524b944b15d7c75dab7628bedf1c4f0992029c/isort-5.13.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"
+
+[[packages]]
+name = "itsdangerous"
+version = "2.2.0"
+
+[[packages.wheels]]
+name = "itsdangerous-2.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"
+
+[[packages]]
+name = "janus"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "janus-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/68/34/65604740edcb20e1bda6a890348ed7d282e7dd23aa00401cbe36fd0edbd9/janus-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7e6449d34eab04cd016befbd7d8c0d8acaaaab67cb59e076a69149f9031745f9"
+
+[[packages]]
+name = "jaraco-classes"
+version = "3.4.0"
+
+[[packages.wheels]]
+name = "jaraco.classes-3.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790"
+
+[[packages]]
+name = "jaraco-context"
+version = "6.0.1"
+
+[[packages.wheels]]
+name = "jaraco.context-6.0.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4"
+
+[[packages]]
+name = "jaraco-functools"
+version = "4.1.0"
+
+[[packages.wheels]]
+name = "jaraco.functools-4.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649"
+
+[[packages]]
+name = "jedi"
+version = "0.19.2"
+
+[[packages.wheels]]
+name = "jedi-0.19.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"
+
+[[packages]]
+name = "jellyfish"
+version = "1.1.3"
+
+[[packages.wheels]]
+name = "jellyfish-1.1.3-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/0c/c2/73b67a1a9444c5804ed4e2e4d55df3e94035efc279fe7426d2dbd2bca5c5/jellyfish-1.1.3-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "2113195a48ce8cb99d2bb2c6d9b119f58025dde1d727101518e7150c093a66da"
+
+[[packages]]
+name = "jinja2"
+version = "3.1.6"
+
+[[packages.wheels]]
+name = "jinja2-3.1.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"
+
+[[packages]]
+name = "jiter"
+version = "0.9.0"
+
+[[packages.wheels]]
+name = "jiter-0.9.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/f4/1c/0c996fd90639acda75ed7fa698ee5fd7d80243057185dc2f63d4c1c9f6b9/jiter-0.9.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "c8ae3bf27cd1ac5e6e8b7a27487bf3ab5f82318211ec2e1346a5b058756361f7"
+
+[[packages]]
+name = "joblib"
+version = "1.4.2"
+
+[[packages.wheels]]
+name = "joblib-1.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"
+
+[[packages]]
+name = "json5"
+version = "0.10.0"
+
+[[packages.wheels]]
+name = "json5-0.10.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/aa/42/797895b952b682c3dafe23b1834507ee7f02f4d6299b65aaa61425763278/json5-0.10.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"
+
+[[packages]]
+name = "jsonpatch"
+version = "1.33"
+
+[[packages.wheels]]
+name = "jsonpatch-1.33-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"
+
+[[packages]]
+name = "jsonpointer"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "jsonpointer-3.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"
+
+[[packages]]
+name = "jsonschema"
+version = "4.23.0"
+
+[[packages.wheels]]
+name = "jsonschema-4.23.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"
+
+[[packages]]
+name = "jsonschema-specifications"
+version = "2024.10.1"
+
+[[packages.wheels]]
+name = "jsonschema_specifications-2024.10.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"
+
+[[packages]]
+name = "julia"
+version = "0.6.2"
+
+[[packages.wheels]]
+name = "julia-0.6.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/82/af/2e9a1a996f32b34249582392bb419cf8983b627a1d31412acbe9d6dea5b0/julia-0.6.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "90752f71376fdb9919439d20496c2dab24486dfa4fe8a831d6dd14a1bcbc04d1"
+
+[[packages]]
+name = "jupyter"
+version = "1.1.1"
+
+[[packages.wheels]]
+name = "jupyter-1.1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"
+
+[[packages]]
+name = "jupyter-bokeh"
+version = "4.0.5"
+
+[[packages.wheels]]
+name = "jupyter_bokeh-4.0.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/47/78/33b2294aad62e5f95b89a89379c5995c2bd978018387ef8bec79f6dc272c/jupyter_bokeh-4.0.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1110076c14c779071cf492646a1a871aefa8a477261e4721327a666e65df1a2c"
+
+[[packages]]
+name = "jupyter-client"
+version = "8.6.3"
+
+[[packages.wheels]]
+name = "jupyter_client-8.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"
+
+[[packages]]
+name = "jupyter-console"
+version = "6.6.3"
+
+[[packages.wheels]]
+name = "jupyter_console-6.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"
+
+[[packages]]
+name = "jupyter-core"
+version = "5.7.2"
+
+[[packages.wheels]]
+name = "jupyter_core-5.7.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"
+
+[[packages]]
+name = "jupyter-events"
+version = "0.12.0"
+
+[[packages.wheels]]
+name = "jupyter_events-0.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"
+
+[[packages]]
+name = "jupyter-leaflet"
+version = "0.19.2"
+
+[[packages.wheels]]
+name = "jupyter_leaflet-0.19.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/81/7c/3ade59500a358b9018a996d00c26eaede79f76ed362b7051bc5038d4a0d4/jupyter_leaflet-0.19.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0d57e15e80c08a4360f0cde0b4c490beddc5d422bb0e9bc1c0b4479d3fb725a6"
+
+[[packages]]
+name = "jupyter-lsp"
+version = "2.2.5"
+
+[[packages.wheels]]
+name = "jupyter_lsp-2.2.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/e0/7bd7cff65594fd9936e2f9385701e44574fc7d721331ff676ce440b14100/jupyter_lsp-2.2.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"
+
+[[packages]]
+name = "jupyter-server"
+version = "2.15.0"
+
+[[packages.wheels]]
+name = "jupyter_server-2.15.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e2/a2/89eeaf0bb954a123a909859fa507fa86f96eb61b62dc30667b60dbd5fdaf/jupyter_server-2.15.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"
+
+[[packages]]
+name = "jupyter-server-terminals"
+version = "0.5.3"
+
+[[packages.wheels]]
+name = "jupyter_server_terminals-0.5.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"
+
+[[packages]]
+name = "jupyterlab"
+version = "4.4.2"
+
+[[packages.wheels]]
+name = "jupyterlab-4.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f6/ae/fbb93f4990b7648849b19112d8b3e7427bbfc9c5cc8fdc6bf14c0e86d104/jupyterlab-4.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "857111a50bed68542bf55dca784522fe728f9f88b4fe69e8c585db5c50900419"
+
+[[packages]]
+name = "jupyterlab-pygments"
+version = "0.3.0"
+
+[[packages.wheels]]
+name = "jupyterlab_pygments-0.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"
+
+[[packages]]
+name = "jupyterlab-server"
+version = "2.27.3"
+
+[[packages.wheels]]
+name = "jupyterlab_server-2.27.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"
+
+[[packages]]
+name = "jupyterlab-widgets"
+version = "3.0.14"
+
+[[packages.wheels]]
+name = "jupyterlab_widgets-3.0.14-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/64/7a/f2479ba401e02f7fcbd3fc6af201eac888eaa188574b8e9df19452ab4972/jupyterlab_widgets-3.0.14-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "54c33e3306b7fca139d165d6190dc6c0627aafa5d14adfc974a4e9a3d26cb703"
+
+[[packages]]
+name = "keras"
+version = "3.10.0"
+
+[[packages.wheels]]
+name = "keras-3.10.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/95/e6/4179c461a5fc43e3736880f64dbdc9b1a5349649f0ae32ded927c0e3a227/keras-3.10.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c095a6bf90cd50defadf73d4859ff794fad76b775357ef7bd1dbf96388dae7d3"
+
+[[packages]]
+name = "keyring"
+version = "25.6.0"
+
+[[packages.wheels]]
+name = "keyring-25.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd"
+
+[[packages]]
+name = "kiwisolver"
+version = "1.4.8"
+
+[[packages.wheels]]
+name = "kiwisolver-1.4.8-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2"
+
+[[packages]]
+name = "langchain"
+version = "0.3.25"
+
+[[packages.wheels]]
+name = "langchain-0.3.25-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ed/5c/5c0be747261e1f8129b875fa3bfea736bc5fe17652f9d5e15ca118571b6f/langchain-0.3.25-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "931f7d2d1eaf182f9f41c5e3272859cfe7f94fc1f7cef6b3e5a46024b4884c21"
+
+[[packages]]
+name = "langchain-core"
+version = "0.3.59"
+
+[[packages.wheels]]
+name = "langchain_core-0.3.59-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/30/40/aa440a7cd05f1dab5d7c91a1284eb776c3cf3eb59fa18ed39927650cfa38/langchain_core-0.3.59-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9686baaff43f2c8175535da13faf40e6866769015e93130c3c1e4243e7244d70"
+
+[[packages]]
+name = "langchain-text-splitters"
+version = "0.3.8"
+
+[[packages.wheels]]
+name = "langchain_text_splitters-0.3.8-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8b/a3/3696ff2444658053c01b6b7443e761f28bb71217d82bb89137a978c5f66f/langchain_text_splitters-0.3.8-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02"
+
+[[packages]]
+name = "langsmith"
+version = "0.3.42"
+
+[[packages.wheels]]
+name = "langsmith-0.3.42-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/89/8e/e8a58e0abaae3f3ac4702e9ca35d1fc6159711556b64ffd0e247771a3f12/langsmith-0.3.42-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "18114327f3364385dae4026ebfd57d1c1cb46d8f80931098f0f10abe533475ff"
+
+[[packages]]
+name = "lazy-loader"
+version = "0.4"
+
+[[packages.wheels]]
+name = "lazy_loader-0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc"
+
+[[packages]]
+name = "linkify-it-py"
+version = "2.0.3"
+
+[[packages.wheels]]
+name = "linkify_it_py-2.0.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79"
+
+[[packages]]
+name = "llvmlite"
+version = "0.44.0"
+
+[[packages.wheels]]
+name = "llvmlite-0.44.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/d0/81/e66fc86539293282fd9cb7c9417438e897f369e79ffb62e1ae5e5154d4dd/llvmlite-0.44.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "2fb7c4f2fb86cbae6dca3db9ab203eeea0e22d73b99bc2341cdf9de93612e930"
+
+[[packages]]
+name = "lmfit"
+version = "1.3.3"
+
+[[packages.wheels]]
+name = "lmfit-1.3.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6a/e1/d5aeb89530550c7e797d3528225fa31012490e79c9df5cf72a0f07cc66d3/lmfit-1.3.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a9e9ec7d0d0ec962cc6c078ad1ec6c8311d3ac0e5f0947a00a91f5509dacc2b2"
+
+[[packages]]
+name = "locket"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "locket-1.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3"
+
+[[packages]]
+name = "logfire-api"
+version = "3.12.0"
+
+[[packages.wheels]]
+name = "logfire_api-3.12.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/97/c6/210bb1da7119af155276046c18ceff29867dfe9ea4bcb7d03397b28bd1cd/logfire_api-3.12.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "fc092c2dcb24c8462ba776f3b0c2183f82e1cd55f86e29b38cf21a048e66a17d"
+
+[[packages]]
+name = "lxml"
+version = "5.3.0"
+
+[[packages.wheels]]
+name = "lxml-5.3.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/7d/db/214290d58ad68c587bd5d6af3d34e56830438733d0d0856c0275fde43652/lxml-5.3.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"
+
+[[packages]]
+name = "mako"
+version = "1.3.9"
+
+[[packages.wheels]]
+name = "Mako-1.3.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cd/83/de0a49e7de540513f53ab5d2e105321dedeb08a8f5850f0208decf4390ec/Mako-1.3.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "95920acccb578427a9aa38e37a186b1e43156c87260d7ba18ca63aa4c7cbd3a1"
+
+[[packages]]
+name = "markdown"
+version = "3.7"
+
+[[packages.wheels]]
+name = "Markdown-3.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3f/08/83871f3c50fc983b88547c196d11cf8c3340e37c32d2e9d6152abe2c61f7/Markdown-3.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"
+
+[[packages]]
+name = "markdown-it-py"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "markdown_it_py-3.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"
+
+[[packages]]
+name = "markupsafe"
+version = "3.0.2"
+
+[[packages.wheels]]
+name = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"
+
+[[packages]]
+name = "matplotlib"
+version = "3.10.3"
+
+[[packages.wheels]]
+name = "matplotlib-3.10.3-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b1/0f/eed564407bd4d935ffabf561ed31099ed609e19287409a27b6d336848653/matplotlib-3.10.3-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93"
+
+[[packages]]
+name = "matplotlib-inline"
+version = "0.1.7"
+
+[[packages.wheels]]
+name = "matplotlib_inline-0.1.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"
+
+[[packages]]
+name = "maturin"
+version = "1.8.3"
+
+[[packages.wheels]]
+name = "maturin-1.8.3-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/d5/62/f92a130a370dd7aca13c316844b82853647f048cfe1594a81f628ab7101f/maturin-1.8.3-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "85f2b882d8235c1c1cb0a38d382ccd5b3ba0674d99cb548d49df9342cc688e36"
+
+[[packages]]
+name = "mccabe"
+version = "0.7.0"
+
+[[packages.wheels]]
+name = "mccabe-0.7.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
+
+[[packages]]
+name = "mcp"
+version = "1.9.3"
+
+[[packages.wheels]]
+name = "mcp-1.9.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/79/45/823ad05504bea55cb0feb7470387f151252127ad5c72f8882e8fe6cf5c0e/mcp-1.9.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "69b0136d1ac9927402ed4cf221d4b8ff875e7132b0b06edd446448766f34f9b9"
+
+[[packages]]
+name = "mdit-py-plugins"
+version = "0.4.2"
+
+[[packages.wheels]]
+name = "mdit_py_plugins-0.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"
+
+[[packages]]
+name = "mdurl"
+version = "0.1.2"
+
+[[packages.wheels]]
+name = "mdurl-0.1.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"
+
+[[packages]]
+name = "mercantile"
+version = "1.2.1"
+
+[[packages.wheels]]
+name = "mercantile-1.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b2/d6/de0cc74f8d36976aeca0dd2e9cbf711882ff8e177495115fd82459afdc4d/mercantile-1.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "30f457a73ee88261aab787b7069d85961a5703bb09dc57a170190bc042cd023f"
+
+[[packages]]
+name = "mergedeep"
+version = "1.3.4"
+
+[[packages.wheels]]
+name = "mergedeep-1.3.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"
+
+[[packages]]
+name = "missingno"
+version = "0.5.2"
+
+[[packages.wheels]]
+name = "missingno-0.5.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/87/22/cd5cf999af21c2f97486622c551ac3d07361ced8125121e907f588ff5f24/missingno-0.5.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "55782621ce09ba0f0a1d08e5bd6d6fe1946469fb03951fadf7d209911ca5b072"
+
+[[packages]]
+name = "mistralai"
+version = "1.8.1"
+
+[[packages.wheels]]
+name = "mistralai-1.8.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b0/14/e9ef675928768f508dfcedbb0e0ed601784a6911620a2bc25c9065921420/mistralai-1.8.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "badfc7e6832d894b3e9071d92ad621212b7cccd7df622c6cacdb525162ae338f"
+
+[[packages]]
+name = "mistune"
+version = "3.1.3"
+
+[[packages.wheels]]
+name = "mistune-3.1.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9"
+
+[[packages]]
+name = "mizani"
+version = "0.11.4"
+
+[[packages.wheels]]
+name = "mizani-0.11.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2a/11/f3777ad46c5d92e3ead121c22ea45fafb6c3b2c1edca0c0c6494969c125c/mizani-0.11.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5b6271dc3da2c88694dca2e0e0a7e1879f0e2fb046c789776f54d090a5243735"
+
+[[packages]]
+name = "ml-dtypes"
+version = "0.5.1"
+
+[[packages.wheels]]
+name = "ml_dtypes-0.5.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/da/8a/a2b9375c94077e5a488a624a195621407846f504068ce22ccf805c674156/ml_dtypes-0.5.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "fd918d4e6a4e0c110e2e05be7a7814d10dc1b95872accbf6512b80a109b71ae1"
+
+[[packages]]
+name = "mlxtend"
+version = "0.23.3"
+
+[[packages.wheels]]
+name = "mlxtend-0.23.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0f/92/5c322336a0991949a1e91f6acd7e04f7e05b0fb6252a3f00fcdc0cb5e97d/mlxtend-0.23.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f9fec721c4121be87dac00e513456dde5bf56b7427750719c0a291cd58b6538e"
+
+[[packages]]
+name = "more-itertools"
+version = "10.6.0"
+
+[[packages.wheels]]
+name = "more_itertools-10.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89"
+
+[[packages]]
+name = "mpld3"
+version = "0.5.10"
+
+[[packages.wheels]]
+name = "mpld3-0.5.10-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/95/6a/e3691bcc47485f38b09853207c928130571821d187cf174eed5418d45e82/mpld3-0.5.10-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "80877acce87ea447380fad7374668737505c8c0684aab05238e7c5dc1fab38c1"
+
+[[packages]]
+name = "mpmath"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "mpmath-1.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"
+
+[[packages]]
+name = "msal"
+version = "1.30.0"
+
+[[packages.wheels]]
+name = "msal-1.30.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ab/82/8f19334da43b7ef72d995587991a446f140346d76edb96a2c1a2689588e9/msal-1.30.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "423872177410cb61683566dc3932db7a76f661a5d2f6f52f02a047f101e1c1de"
+
+[[packages]]
+name = "msal-extensions"
+version = "1.2.0"
+
+[[packages.wheels]]
+name = "msal_extensions-1.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/69/314d887a01599669fb330da14e5c6ff5f138609e322812a942a74ef9b765/msal_extensions-1.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d"
+
+[[packages]]
+name = "msgpack"
+version = "1.1.0"
+
+[[packages.wheels]]
+name = "msgpack-1.1.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b6/bc/8bd826dd03e022153bfa1766dcdec4976d6c818865ed54223d71f07862b3/msgpack-1.1.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f"
+
+[[packages]]
+name = "multidict"
+version = "6.4.3"
+
+[[packages.wheels]]
+name = "multidict-6.4.3-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/23/57/2c0167a1bffa30d9a1383c3dab99d8caae985defc8636934b5668830d2ef/multidict-6.4.3-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5"
+
+[[packages]]
+name = "multipledispatch"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "multipledispatch-1.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/51/c0/00c9809d8b9346eb238a6bbd5f83e846a4ce4503da94a4c08cb7284c325b/multipledispatch-1.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0c53cd8b077546da4e48869f49b13164bebafd0c2a5afceb6bb6a316e7fb46e4"
+
+[[packages]]
+name = "mypy"
+version = "1.15.0"
+
+[[packages.wheels]]
+name = "mypy-1.15.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/83/3e/57bb447f7bbbfaabf1712d96f9df142624a386d98fb026a761532526057e/mypy-1.15.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"
+
+[[packages]]
+name = "mypy-extensions"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "mypy_extensions-1.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"
+
+[[packages]]
+name = "mysql-connector-python"
+version = "9.2.0"
+
+[[packages.wheels]]
+name = "mysql_connector_python-9.2.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/22/4b/4f5462a81d046bb54bbb62ffbcea654e78f3ae2a64eb24a14c2872c4d75e/mysql_connector_python-9.2.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "6557942f6c6be3b41d2965456b53a244a7ce3e6fb81cb195c243549be72a6a24"
+
+[[packages]]
+name = "namex"
+version = "0.0.8"
+
+[[packages.wheels]]
+name = "namex-0.0.8-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/73/59/7854fbfb59f8ae35483ce93493708be5942ebb6328cd85b3a609df629736/namex-0.0.8-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7ddb6c2bb0e753a311b7590f84f6da659dd0c05e65cb89d519d54c0a250c0487"
+
+[[packages]]
+name = "narwhals"
+version = "1.36.0"
+
+[[packages.wheels]]
+name = "narwhals-1.36.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/42/bf/fbcbd9f8676e06ed43d644a4ddbf31478a44056487578ce67f191da430cb/narwhals-1.36.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e3c50dd1d769bc145f57ae17c1f0f0da6c3d397d62cdd0bb167e9b618e95c9d6"
+
+[[packages]]
+name = "nbclient"
+version = "0.10.2"
+
+[[packages.wheels]]
+name = "nbclient-0.10.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"
+
+[[packages]]
+name = "nbconvert"
+version = "7.16.6"
+
+[[packages.wheels]]
+name = "nbconvert-7.16.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"
+
+[[packages]]
+name = "nbformat"
+version = "5.10.4"
+
+[[packages.wheels]]
+name = "nbformat-5.10.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"
+
+[[packages]]
+name = "nest-asyncio"
+version = "1.6.0"
+
+[[packages.wheels]]
+name = "nest_asyncio-1.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"
+
+[[packages]]
+name = "networkx"
+version = "3.4.2"
+
+[[packages.wheels]]
+name = "networkx-3.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"
+
+[[packages]]
+name = "nh3"
+version = "0.2.18"
+
+[[packages.wheels]]
+name = "nh3-0.2.18-cp37-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844"
+
+[[packages]]
+name = "nltk"
+version = "3.9.1"
+
+[[packages.wheels]]
+name = "nltk-3.9.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1"
+
+[[packages]]
+name = "notebook"
+version = "7.4.2"
+
+[[packages.wheels]]
+name = "notebook-7.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/1e/16/d3c36a0b1f6dfcf218add8eaf803bf0473ff50681ac4d51acb7ba02bce34/notebook-7.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9ccef602721aaa5530852e3064710b8ae5415c4e2ce26f8896d0433222755259"
+
+[[packages]]
+name = "notebook-shim"
+version = "0.2.4"
+
+[[packages.wheels]]
+name = "notebook_shim-0.2.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"
+
+[[packages]]
+name = "numba"
+version = "0.61.2"
+
+[[packages.wheels]]
+name = "numba-0.61.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/af/a4/6d3a0f2d3989e62a18749e1e9913d5fa4910bbb3e3311a035baea6caf26d/numba-0.61.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "59321215e2e0ac5fa928a8020ab00b8e57cda8a97384963ac0dfa4d4e6aa54e7"
+
+[[packages]]
+name = "numpy"
+version = "2.2.6"
+
+[[packages.wheels]]
+name = "numpy-2.2.6-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c"
+
+[[packages]]
+name = "numpydoc"
+version = "1.8.0"
+
+[[packages.wheels]]
+name = "numpydoc-1.8.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6c/45/56d99ba9366476cd8548527667f01869279cedb9e66b28eb4dfb27701679/numpydoc-1.8.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "72024c7fd5e17375dec3608a27c03303e8ad00c81292667955c6fea7a3ccf541"
+
+[[packages]]
+name = "openai"
+version = "1.82.0"
+
+[[packages.wheels]]
+name = "openai-1.82.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/51/4b/a59464ee5f77822a81ee069b4021163a0174940a92685efc3cf8b4c443a3/openai-1.82.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8c40647fea1816516cb3de5189775b30b5f4812777e40b8768f361f232b61b30"
+
+[[packages]]
+name = "opencv-python"
+version = "4.11.0.86"
+
+[[packages.wheels]]
+name = "opencv_python-4.11.0.86-cp37-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/a4/7d/f1c30a92854540bf789e9cd5dde7ef49bbe63f855b85a2e6b3db8135c591/opencv_python-4.11.0.86-cp37-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "085ad9b77c18853ea66283e98affefe2de8cc4c1f43eda4c100cf9b2721142ec"
+
+[[packages]]
+name = "openpyxl"
+version = "3.1.5"
+
+[[packages.wheels]]
+name = "openpyxl-3.1.5-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"
+
+[[packages]]
+name = "opentelemetry-api"
+version = "1.32.1"
+
+[[packages.wheels]]
+name = "opentelemetry_api-1.32.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/12/f2/89ea3361a305466bc6460a532188830351220b5f0851a5fa133155c16eca/opentelemetry_api-1.32.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "bbd19f14ab9f15f0e85e43e6a958aa4cb1f36870ee62b7fd205783a112012724"
+
+[[packages]]
+name = "optree"
+version = "0.14.1"
+
+[[packages.wheels]]
+name = "optree-0.14.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/90/43/93aa65f56b857b8364e76d76eb188a4a6912ed305374b90f9ba30dcf0de9/optree-0.14.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "25ea23fc6d6c0fa7dcf85afcfe10b43ed4fdf0e9d958a3677cd27fcdf0ca17d6"
+
+[[packages]]
+name = "optuna"
+version = "4.2.1"
+
+[[packages.wheels]]
+name = "optuna-4.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/28/09/c4d329f7969443cdd4d482048ca406b6f61cda3c8e99ace71feaec7c8734/optuna-4.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6d38199013441d3f70fac27136e05c0188c5f4ec3848db708ac311cbdeb30dbf"
+
+[[packages]]
+name = "orjson"
+version = "3.10.16"
+
+[[packages.wheels]]
+name = "orjson-3.10.16-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/81/9c/b66ce9245ff319df2c3278acd351a3f6145ef34b4a2d7f4b0f739368370f/orjson-3.10.16-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "fe0a145e96d51971407cb8ba947e63ead2aa915db59d6631a355f5f2150b56b7"
+
+[[packages]]
+name = "osqp"
+version = "0.6.7.post3"
+
+[[packages.wheels]]
+name = "osqp-0.6.7.post3-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/4b/0a/acd48ad432ccf2538972805095108801a3b29a2433b48bd3a34e640df1e4/osqp-0.6.7.post3-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "acb219e941f5248da5de3ee9b70e6a5aaddf5f3989dffd1d4c03b0f7b1dfa17b"
+
+[[packages]]
+name = "outcome"
+version = "1.3.0.post0"
+
+[[packages.wheels]]
+name = "outcome-1.3.0.post0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"
+
+[[packages]]
+name = "overrides"
+version = "7.7.0"
+
+[[packages.wheels]]
+name = "overrides-7.7.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"
+
+[[packages]]
+name = "packaging"
+version = "24.2"
+
+[[packages.wheels]]
+name = "packaging-24.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"
+
+[[packages]]
+name = "pandas"
+version = "2.2.3"
+
+[[packages.wheels]]
+name = "pandas-2.2.3-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"
+
+[[packages]]
+name = "pandocfilters"
+version = "1.5.1"
+
+[[packages.wheels]]
+name = "pandocfilters-1.5.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"
+
+[[packages]]
+name = "panel"
+version = "1.6.3"
+
+[[packages.wheels]]
+name = "panel-1.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7a/fe/d01b6eae59933d56c345e57cdde5ffe379b7b1f56d192782ab8071249f73/panel-1.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ccd2a0587ab382bd55b8ea099706f31b64aadac697b8a41923d3b18b9ed618d6"
+
+[[packages]]
+name = "papermill"
+version = "2.6.0"
+
+[[packages.wheels]]
+name = "papermill-2.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/61/55/83ce641bc61a70cc0721af6f50154ecaaccedfbdbc27366c1755a2a34972/papermill-2.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0f09da6ef709f3f14dde77cb1af052d05b14019189869affff374c9e612f2dd5"
+
+[[packages]]
+name = "param"
+version = "2.2.0"
+
+[[packages.wheels]]
+name = "param-2.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/99/56/370a6636e072a037b52499edd8928942df7f887974fc54444ece5152d26a/param-2.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "777f8c7b66ab820b70ea5ad09faaa6818308220caae89da3b5c5f359faa72a5e"
+
+[[packages]]
+name = "parso"
+version = "0.8.4"
+
+[[packages.wheels]]
+name = "parso-0.8.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"
+
+[[packages]]
+name = "partd"
+version = "1.4.2"
+
+[[packages.wheels]]
+name = "partd-1.4.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f"
+
+[[packages]]
+name = "pathspec"
+version = "0.12.1"
+
+[[packages.wheels]]
+name = "pathspec-0.12.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"
+
+[[packages]]
+name = "patsy"
+version = "1.0.1"
+
+[[packages.wheels]]
+name = "patsy-1.0.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/87/2b/b50d3d08ea0fc419c183a84210571eba005328efa62b6b98bc28e9ead32a/patsy-1.0.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c"
+
+[[packages]]
+name = "pep8"
+version = "1.7.1"
+
+[[packages.wheels]]
+name = "pep8-1.7.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/42/3f/669429ce58de2c22d8d2c542752e137ec4b9885fff398d3eceb1a7f5acb4/pep8-1.7.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b22cfae5db09833bb9bd7c8463b53e1a9c9b39f12e304a8d0bba729c501827ee"
+
+[[packages]]
+name = "pexpect"
+version = "4.9.0"
+
+[[packages.wheels]]
+name = "pexpect-4.9.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"
+
+[[packages]]
+name = "pg8000"
+version = "1.31.2"
+
+[[packages.wheels]]
+name = "pg8000-1.31.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/09/a0/2b30d52017c4ced8fc107386666ea7573954eb708bf66121f0229df05d41/pg8000-1.31.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "436c771ede71af4d4c22ba867a30add0bc5c942d7ab27fadbb6934a487ecc8f6"
+
+[[packages]]
+name = "pickleshare"
+version = "0.7.5"
+
+[[packages.wheels]]
+name = "pickleshare-0.7.5-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9a/41/220f49aaea88bc6fa6cba8d05ecf24676326156c23b991e80b3f2fc24c77/pickleshare-0.7.5-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"
+
+[[packages]]
+name = "pillow"
+version = "11.1.0"
+
+[[packages.wheels]]
+name = "pillow-11.1.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"
+
+[[packages]]
+name = "platformdirs"
+version = "4.3.7"
+
+[[packages.wheels]]
+name = "platformdirs-4.3.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6d/45/59578566b3275b8fd9157885918fcd0c4d74162928a5310926887b856a51/platformdirs-4.3.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"
+
+[[packages]]
+name = "plotly"
+version = "6.0.1"
+
+[[packages.wheels]]
+name = "plotly-6.0.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768"
+
+[[packages]]
+name = "plotnine"
+version = "0.13.6"
+
+[[packages.wheels]]
+name = "plotnine-0.13.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/93/b1/e1c84e68cf24e83c4d251122e04c48840be203dafb4727e738381cdefa74/plotnine-0.13.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4acc1af29fa4e91e726b67d49277e8368f62e1c817f01bf14ecd8ca5e83bfaea"
+
+[[packages]]
+name = "plotpy"
+version = "2.7.4"
+
+[[packages.wheels]]
+name = "plotpy-2.7.4-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/61/98/9bc8f5a00dd45b53c37292c08ebcf9f94e895838ab2ad295d1c0eec88332/plotpy-2.7.4-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8dff5fd388048a8d3b4251329a9fe4027920386e0ebcc3c3642f59c432118c29"
+
+[[packages]]
+name = "pluggy"
+version = "1.5.0"
+
+[[packages.wheels]]
+name = "pluggy-1.5.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"
+
+[[packages]]
+name = "ply"
+version = "3.11"
+
+[[packages.wheels]]
+name = "ply-3.11-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"
+
+[[packages]]
+name = "polars"
+version = "1.31.0"
+
+[[packages.wheels]]
+name = "polars-1.31.0-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/6e/f6/9d9ad9dc4480d66502497e90ce29efc063373e1598f4bd9b6a38af3e08e7/polars-1.31.0-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "3fd874d3432fc932863e8cceff2cff8a12a51976b053f2eb6326a0672134a632"
+
+[[packages]]
+name = "portalocker"
+version = "2.7.0"
+
+[[packages.wheels]]
+name = "portalocker-2.7.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8c/df/d4f711d168524f5aebd7fb30969eaa31e3048cf8979688cde3b08f6e5eb8/portalocker-2.7.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983"
+
+[[packages]]
+name = "prettytable"
+version = "3.16.0"
+
+[[packages.wheels]]
+name = "prettytable-3.16.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/02/c7/5613524e606ea1688b3bdbf48aa64bafb6d0a4ac3750274c43b6158a390f/prettytable-3.16.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b5eccfabb82222f5aa46b798ff02a8452cf530a352c31bddfa29be41242863aa"
+
+[[packages]]
+name = "prince"
+version = "0.16.0"
+
+[[packages.wheels]]
+name = "prince-0.16.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/18/d5/b4480a0f381cbbcfad31f4d118732ab717216857508a730938ee615669a1/prince-0.16.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7e21a78d4dd06ca3ec526ee714a50b349f26de3fca6b79664150a951b31688f3"
+
+[[packages]]
+name = "priority"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "priority-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5e/5f/82c8074f7e84978129347c2c6ec8b6c59f3584ff1a20bc3c940a3e061790/priority-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa"
+
+[[packages]]
+name = "prometheus-client"
+version = "0.21.1"
+
+[[packages.wheels]]
+name = "prometheus_client-0.21.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ff/c2/ab7d37426c179ceb9aeb109a85cda8948bb269b7561a0be870cc656eefe4/prometheus_client-0.21.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"
+
+[[packages]]
+name = "prompt-toolkit"
+version = "3.0.51"
+
+[[packages.wheels]]
+name = "prompt_toolkit-3.0.51-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"
+
+[[packages]]
+name = "propcache"
+version = "0.3.1"
+
+[[packages.wheels]]
+name = "propcache-0.3.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/a6/2c/a54614d61895ba6dd7ac8f107e2b2a0347259ab29cbf2ecc7b94fa38c4dc/propcache-0.3.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037"
+
+[[packages]]
+name = "protobuf"
+version = "6.30.2"
+
+[[packages.wheels]]
+name = "protobuf-6.30.2-cp310-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/97/e9/7b9f1b259d509aef2b833c29a1f3c39185e2bf21c9c1be1cd11c22cb2149/protobuf-6.30.2-cp310-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7653c99774f73fe6b9301b87da52af0e69783a2e371e8b599b3e9cb4da4b12b9"
+
+[[packages]]
+name = "psutil"
+version = "7.0.0"
+
+[[packages.wheels]]
+name = "psutil-7.0.0-cp37-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"
+
+[[packages]]
+name = "psygnal"
+version = "0.12.0"
+
+[[packages.wheels]]
+name = "psygnal-0.12.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/5e/ae/a3d6815db583b6d05878b3647ea0e2aa21ce6941d03c9d2c6caad1afbcf6/psygnal-0.12.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "d779f20c6977ec9d5b9fece23b4b28bbcf0a7773539a4a176b5527aea5da27c7"
+
+[[packages]]
+name = "ptpython"
+version = "3.0.29"
+
+[[packages.wheels]]
+name = "ptpython-3.0.29-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0f/39/c6fd4dd531e067b6a01624126cff0b3ddc6569e22f83e48d8418ffa9e3be/ptpython-3.0.29-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "65d75c4871859e4305a020c9b9e204366dceb4d08e0e2bd7b7511bd5e917a402"
+
+[[packages]]
+name = "ptyprocess"
+version = "0.7.0"
+
+[[packages.wheels]]
+name = "ptyprocess-0.7.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"
+
+[[packages]]
+name = "pure-eval"
+version = "0.2.3"
+
+[[packages.wheels]]
+name = "pure_eval-0.2.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"
+
+[[packages]]
+name = "pyarrow"
+version = "20.0.0"
+
+[[packages.wheels]]
+name = "pyarrow-20.0.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/9d/07/290f4abf9ca702c5df7b47739c1b2c83588641ddfa2cc75e34a301d42e55/pyarrow-20.0.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031"
+
+[[packages]]
+name = "pyasn1"
+version = "0.6.1"
+
+[[packages.wheels]]
+name = "pyasn1-0.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"
+
+[[packages]]
+name = "pyasn1-modules"
+version = "0.4.1"
+
+[[packages.wheels]]
+name = "pyasn1_modules-0.4.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"
+
+[[packages]]
+name = "pybind11"
+version = "2.13.6"
+
+[[packages.wheels]]
+name = "pybind11-2.13.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/13/2f/0f24b288e2ce56f51c920137620b4434a38fd80583dbbe24fc2a1656c388/pybind11-2.13.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "237c41e29157b962835d356b370ededd57594a26d5894a795960f0047cb5caf5"
+
+[[packages]]
+name = "pycodestyle"
+version = "2.12.0"
+
+[[packages.wheels]]
+name = "pycodestyle-2.12.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/55/c4/bf8ede2d1641e0a2e027c6d0c7060e00332851ea772cc5cee42a4a207707/pycodestyle-2.12.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4"
+
+[[packages]]
+name = "pycparser"
+version = "2.22"
+
+[[packages.wheels]]
+name = "pycparser-2.22-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"
+
+[[packages]]
+name = "pyct"
+version = "0.5.0"
+
+[[packages.wheels]]
+name = "pyct-0.5.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/75/e7/c7c1e9e1b6b23ca1db7af3c6826d57d8da883021f751edcc9c82143b127a/pyct-0.5.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a4038a8885059ab8cac6f946ea30e0b5e6bdbe0b92b6723f06737035f9d65e8c"
+
+[[packages]]
+name = "pydantic"
+version = "2.10.6"
+
+[[packages.wheels]]
+name = "pydantic-2.10.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"
+
+[[packages]]
+name = "pydantic-ai-slim"
+version = "0.2.9"
+
+[[packages.wheels]]
+name = "pydantic_ai_slim-0.2.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d8/23/b4d52d83c302859e1e251a8c8a360b993cf8b4818c8b633adaa98b043556/pydantic_ai_slim-0.2.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d954ff84cb250d7150a7ed694e4f1f92f820205d036ee006d02fce3e62a3bc4e"
+
+[[packages]]
+name = "pydantic-core"
+version = "2.27.2"
+
+[[packages.wheels]]
+name = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/71/47/82b5e846e01b26ac6f1893d3c5f9f3a2eb6ba79be26eef0b759b4fe72946/pydantic_core-2.27.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"
+
+[[packages]]
+name = "pydantic-evals"
+version = "0.2.9"
+
+[[packages.wheels]]
+name = "pydantic_evals-0.2.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b6/6e/8d88e00f624a8348b286b219a292fe3e077ee973660dcff6b4ddd5a04e85/pydantic_evals-0.2.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "62035ae3a5321e4d892c7372ef91af0f46b675863e827f011d5cb8550dede400"
+
+[[packages]]
+name = "pydantic-graph"
+version = "0.2.9"
+
+[[packages.wheels]]
+name = "pydantic_graph-0.2.9-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a4/cc/e609261763a76f4d23a545afb462847592bc6b4d8eb412990b9b913c073e/pydantic_graph-0.2.9-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "38ad929a0ec205bd7d5875b0b408d4f13448276aa89b6ce2a1143a7552b070ce"
+
+[[packages]]
+name = "pydantic-settings"
+version = "2.8.1"
+
+[[packages.wheels]]
+name = "pydantic_settings-2.8.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0b/53/a64f03044927dc47aafe029c42a5b7aabc38dfb813475e0e1bf71c4a59d0/pydantic_settings-2.8.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "81942d5ac3d905f7f3ee1a70df5dfb62d5569c12f51a5a647defc1c3d9ee2e9c"
+
+[[packages]]
+name = "pydeck"
+version = "0.9.1"
+
+[[packages.wheels]]
+name = "pydeck-0.9.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ab/4c/b888e6cf58bd9db9c93f40d1c6be8283ff49d88919231afe93a6bcf61626/pydeck-0.9.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b3f75ba0d273fc917094fa61224f3f6076ca8752b93d46faf3bcfd9f9d59b038"
+
+[[packages]]
+name = "pydocstyle"
+version = "6.3.0"
+
+[[packages.wheels]]
+name = "pydocstyle-6.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/36/ea/99ddefac41971acad68f14114f38261c1f27dac0b3ec529824ebc739bdaa/pydocstyle-6.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"
+
+[[packages]]
+name = "pydub"
+version = "0.25.1"
+
+[[packages.wheels]]
+name = "pydub-0.25.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"
+
+[[packages]]
+name = "pyerfa"
+version = "2.0.1.5"
+
+[[packages.wheels]]
+name = "pyerfa-2.0.1.5-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/b4/11/97233cf23ad5411ac6f13b1d6ee3888f90ace4f974d9bf9db887aa428912/pyerfa-2.0.1.5-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "66292d437dcf75925b694977aa06eb697126e7b86553e620371ed3e48b5e0ad0"
+
+[[packages]]
+name = "pyflakes"
+version = "3.2.0"
+
+[[packages.wheels]]
+name = "pyflakes-3.2.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d4/d7/f1b7db88d8e4417c5d47adad627a93547f44bdc9028372dbd2313f34a855/pyflakes-3.2.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"
+
+[[packages]]
+name = "pygithub"
+version = "2.6.1"
+
+[[packages.wheels]]
+name = "PyGithub-2.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ac/fc/a444cd19ccc8c4946a512f3827ed0b3565c88488719d800d54a75d541c0b/PyGithub-2.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3"
+
+[[packages]]
+name = "pygments"
+version = "2.19.1"
+
+[[packages.wheels]]
+name = "pygments-2.19.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"
+
+[[packages]]
+name = "pyjwt"
+version = "2.10.1"
+
+[[packages.wheels]]
+name = "PyJWT-2.10.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"
+
+[[packages]]
+name = "pylint"
+version = "3.3.6"
+
+[[packages.wheels]]
+name = "pylint-3.3.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/31/21/9537fc94aee9ec7316a230a49895266cf02d78aa29b0a2efbc39566e0935/pylint-3.3.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8b7c2d3e86ae3f94fb27703d521dd0b9b6b378775991f504d7c3a6275aa0a6a6"
+
+[[packages]]
+name = "pylint-venv"
+version = "3.0.4"
+
+[[packages.wheels]]
+name = "pylint_venv-3.0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a6/10/040e1928236e3d34b26639e3427df88c7249a85aadc621cea2158589b4f8/pylint_venv-3.0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "31006a3df398f58f962c9e5620e756b284e8b2bc490594ce5ee5da41920cb32c"
+
+[[packages]]
+name = "pyls-spyder"
+version = "0.4.0"
+
+[[packages.wheels]]
+name = "pyls_spyder-0.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d0/26/d0975972af1f18c3bb02ec5889191cc09ebb982bcbe45438d90ca763f4ec/pyls_spyder-0.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1505d975f866a343d0554b6dab41b53717f4b4bc6df450dfd7d48f889fe450b9"
+
+[[packages]]
+name = "pymongo"
+version = "4.10.1"
+
+[[packages.wheels]]
+name = "pymongo-4.10.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/0d/2a/7c24a6144eaa06d18ed52822ea2b0f119fd9267cd1abbb75dae4d89a3803/pymongo-4.10.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "45ee87a4e12337353242bc758accc7fb47a2f2d9ecc0382a61e64c8f01e86708"
+
+[[packages]]
+name = "pympler"
+version = "1.1"
+
+[[packages.wheels]]
+name = "Pympler-1.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/79/4f/a6a2e2b202d7fd97eadfe90979845b8706676b41cbd3b42ba75adf329d1f/Pympler-1.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5b223d6027d0619584116a0cbc28e8d2e378f7a79c1e5e024f9ff3b673c58506"
+
+[[packages]]
+name = "pynacl"
+version = "1.5.0"
+
+[[packages.wheels]]
+name = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"
+
+[[packages]]
+name = "pynndescent"
+version = "0.5.13"
+
+[[packages.wheels]]
+name = "pynndescent-0.5.13-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d2/53/d23a97e0a2c690d40b165d1062e2c4ccc796be458a1ce59f6ba030434663/pynndescent-0.5.13-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "69aabb8f394bc631b6ac475a1c7f3994c54adf3f51cd63b2730fefba5771b949"
+
+[[packages]]
+name = "pyodbc"
+version = "5.2.0"
+
+[[packages.wheels]]
+name = "pyodbc-5.2.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/73/2a/3219c8b7fa3788fc9f27b5fc2244017223cf070e5ab370f71c519adf9120/pyodbc-5.2.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "96d3127f28c0dacf18da7ae009cd48eac532d3dcc718a334b86a3c65f6a5ef5c"
+
+[[packages]]
+name = "pyogrio"
+version = "0.10.0"
+
+[[packages.wheels]]
+name = "pyogrio-0.10.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/27/5d/0deb16d228362a097ee3258d0a887c9c0add4b9678bb4847b08a241e124d/pyogrio-0.10.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "02e54bcfb305af75f829044b0045f74de31b77c2d6546f7aaf96822066147848"
+
+[[packages]]
+name = "pyomo"
+version = "6.9.2"
+
+[[packages.wheels]]
+name = "pyomo-6.9.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7f/88/0a07233e39357d3d620186485b927074d6d0ae0f64ad72cc5222ae05844e/pyomo-6.9.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "13ebb2f974f97afa626c2712d4f27e09a1c3d18ca11755676b743504a76e5161"
+
+[[packages]]
+name = "pypandoc"
+version = "1.15"
+
+[[packages.wheels]]
+name = "pypandoc-1.15-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/61/06/0763e0ccc81754d3eadb21b2cb86cf21bdedc9b52698c2ad6785db7f0a4e/pypandoc-1.15-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4ededcc76c8770f27aaca6dff47724578428eca84212a31479403a9731fc2b16"
+
+[[packages]]
+name = "pyparsing"
+version = "3.2.3"
+
+[[packages.wheels]]
+name = "pyparsing-3.2.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"
+
+[[packages]]
+name = "pypdf"
+version = "5.4.0"
+
+[[packages.wheels]]
+name = "pypdf-5.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0b/27/d83f8f2a03ca5408dc2cc84b49c0bf3fbf059398a6a2ea7c10acfe28859f/pypdf-5.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "db994ab47cadc81057ea1591b90e5b543e2b7ef2d0e31ef41a9bfe763c119dab"
+
+[[packages]]
+name = "pyproj"
+version = "3.7.0"
+
+[[packages.wheels]]
+name = "pyproj-3.7.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/f8/33/3c8c6302717096b54aa14ccbb271045ba04629e21cbf348f2f2dc94f69b4/pyproj-3.7.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "10a8dc6ec61af97c89ff032647d743f8dc023645773da42ef43f7ae1125b3509"
+
+[[packages]]
+name = "pyproject-hooks"
+version = "1.2.0"
+
+[[packages.wheels]]
+name = "pyproject_hooks-1.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"
+
+[[packages]]
+name = "pyqt5"
+version = "5.15.11"
+
+[[packages.wheels]]
+name = "PyQt5-5.15.11-cp38-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/56/d5/68eb9f3d19ce65df01b6c7b7a577ad3bbc9ab3a5dd3491a4756e71838ec9/PyQt5-5.15.11-cp38-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517"
+
+[[packages]]
+name = "pyqt5-qt5"
+version = "5.15.2"
+
+[[packages.wheels]]
+name = "PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/37/97/5d3b222b924fa2ed4c2488925155cd0b03fd5d09ee1cfcf7c553c11c9f66/PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962"
+
+[[packages]]
+name = "pyqt5-sip"
+version = "12.17.0"
+
+[[packages.wheels]]
+name = "PyQt5_sip-12.17.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/15/ed/ff94d6b2910e7627380cb1fc9a518ff966e6d78285c8e54c9422b68305db/PyQt5_sip-12.17.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "672c209d05661fab8e17607c193bf43991d268a1eefbc2c4551fbf30fd8bb2ca"
+
+[[packages]]
+name = "pyqtgraph"
+version = "0.13.7"
+
+[[packages.wheels]]
+name = "pyqtgraph-0.13.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7b/34/5702b3b7cafe99be1d94b42f100e8cc5e6957b761fcb1cf5f72d492851da/pyqtgraph-0.13.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a"
+
+[[packages]]
+name = "pyqtwebengine"
+version = "5.15.7"
+
+[[packages.wheels]]
+name = "PyQtWebEngine-5.15.7-cp38-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/39/67/0dead50889d905fc99f40e61e5ab7f73746605ce8f74c4fa7fb3fc1d6c5e/PyQtWebEngine-5.15.7-cp38-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "bd5e8c426d6f6b352cd15800d64a89b2a4a11e098460b818c7bdcf5e5612e44f"
+
+[[packages]]
+name = "pyqtwebengine-qt5"
+version = "5.15.2"
+
+[[packages.wheels]]
+name = "PyQtWebEngine_Qt5-5.15.2-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e0/db/0f29bd882aee8b5754f3e1ab104d2d09cdd9138a889558b43badcd81ce11/PyQtWebEngine_Qt5-5.15.2-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "24231f19e1595018779977de6722b5c69f3d03f34a5f7574ff21cd1e764ef76d"
+
+[[packages]]
+name = "pyserial"
+version = "3.5"
+
+[[packages.wheels]]
+name = "pyserial-3.5-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"
+
+[[packages]]
+name = "pysocks"
+version = "1.7.1"
+
+[[packages.wheels]]
+name = "PySocks-1.7.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"
+
+[[packages]]
+name = "pyspnego"
+version = "0.11.2"
+
+[[packages.wheels]]
+name = "pyspnego-0.11.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/57/ea/b3c1438839d8724beff7b31ec42b9d041265dc9ca27ccb54477d442bfbcf/pyspnego-0.11.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "74abc1fb51e59360eb5c5c9086e5962174f1072c7a50cf6da0bda9a4bcfdfbd4"
+
+[[packages]]
+name = "pytest"
+version = "8.3.5"
+
+[[packages.wheels]]
+name = "pytest-8.3.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"
+
+[[packages]]
+name = "python-barcode"
+version = "0.15.1"
+
+[[packages.wheels]]
+name = "python_barcode-0.15.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/10/27/9b5c5bb1938d4e6b12f4c95f40ea905c11df3cd58e128e9305397b9a2697/python_barcode-0.15.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "057636fba37369c22852410c8535b36adfbeb965ddfd4e5b6924455d692e0886"
+
+[[packages]]
+name = "python-dateutil"
+version = "2.8.2"
+
+[[packages.wheels]]
+name = "python_dateutil-2.8.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"
+
+[[packages]]
+name = "python-dotenv"
+version = "1.1.0"
+
+[[packages.wheels]]
+name = "python_dotenv-1.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d"
+
+[[packages]]
+name = "python-json-logger"
+version = "3.3.0"
+
+[[packages.wheels]]
+name = "python_json_logger-3.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"
+
+[[packages]]
+name = "python-lsp-black"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "python_lsp_black-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/78/44/fef9b4d027b3d6321e6f30b6b5946bef18cd84a96e1d81012ac0f69ea53c/python_lsp_black-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d5efdee45f5fa9e5241f5d4d396cd46127f45c85817916b1fd92c2986652bf7e"
+
+[[packages]]
+name = "python-lsp-jsonrpc"
+version = "1.1.2"
+
+[[packages.wheels]]
+name = "python_lsp_jsonrpc-1.1.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cb/d9/656659d5b5d5f402b2b174cd0ba9bc827e07ce3c0bf88da65424baf64af8/python_lsp_jsonrpc-1.1.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7339c2e9630ae98903fdaea1ace8c47fba0484983794d6aafd0bd8989be2b03c"
+
+[[packages]]
+name = "python-lsp-server"
+version = "1.12.2"
+
+[[packages.wheels]]
+name = "python_lsp_server-1.12.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cb/e7/28010a326ef591e1409daf9d57a47de94156c147ad1befe74d8196d82729/python_lsp_server-1.12.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "750116459449184ba20811167cdf96f91296ae12f1f65ebd975c5c159388111b"
+
+[[packages]]
+name = "python-multipart"
+version = "0.0.20"
+
+[[packages.wheels]]
+name = "python_multipart-0.0.20-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"
+
+[[packages]]
+name = "python-slugify"
+version = "8.0.4"
+
+[[packages.wheels]]
+name = "python_slugify-8.0.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"
+
+[[packages]]
+name = "pythonqwt"
+version = "0.14.5"
+
+[[packages.wheels]]
+name = "pythonqwt-0.14.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/28/e9/1e6e93e1aaaec57d6ef427291e8fb3d9f18ebd91147c24f2b241b01e2def/pythonqwt-0.14.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "be5a9d2e1ba22aaa02eb397c5b3b5e4e1d9ed2c08f45554d8b920d8fc3be6dc7"
+
+[[packages]]
+name = "pytoolconfig"
+version = "1.3.1"
+
+[[packages.wheels]]
+name = "pytoolconfig-1.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/92/44/da239917f5711ca7105f7d7f9e2765716dd883b241529beafc0f28504725/pytoolconfig-1.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5d8cea8ae1996938ec3eaf44567bbc5ef1bc900742190c439a44a704d6e1b62b"
+
+[[packages]]
+name = "pytz"
+version = "2025.2"
+
+[[packages.wheels]]
+name = "pytz-2025.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"
+
+[[packages]]
+name = "pyuca"
+version = "1.2"
+
+[[packages.wheels]]
+name = "pyuca-1.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/98/88/aeeee34d88f841aca712a8c18fbd62a33eaad8f2dbe535e87f3c829b02f9/pyuca-1.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "abaa12e1bd2c7c68ca8396ff8383bc0654a739cef3ae68fd7af58bf29af0a91e"
+
+[[packages]]
+name = "pyusb"
+version = "1.3.1"
+
+[[packages.wheels]]
+name = "pyusb-1.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/28/b8/27e6312e86408a44fe16bd28ee12dd98608b39f7e7e57884a24e8f29b573/pyusb-1.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "bf9b754557af4717fe80c2b07cc2b923a9151f5c08d17bdb5345dac09d6a0430"
+
+[[packages]]
+name = "pyviz-comms"
+version = "3.0.4"
+
+[[packages.wheels]]
+name = "pyviz_comms-3.0.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/98/cc/ba051cfaef2525054e3367f2d5ff4df38f8f775125b3eebb82af4060026b/pyviz_comms-3.0.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a40d17db26ec13cf975809633804e712bd24b473e77388c193c44043f85d0b25"
+
+[[packages]]
+name = "pywavelets"
+version = "1.8.0"
+
+[[packages.wheels]]
+name = "pywavelets-1.8.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/c9/4f/0a709a5732e6cf9297fc87bf545cb879997cde204115f8c0cbc296c5bdd3/pywavelets-1.8.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "4dbebcfd55ea8a85b7fc8802d411e75337170422abf6e96019d7e46c394e80e5"
+
+[[packages]]
+name = "pywin32"
+version = "310"
+
+[[packages.wheels]]
+name = "pywin32-310-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e"
+
+[[packages]]
+name = "pywin32-ctypes"
+version = "0.2.3"
+
+[[packages.wheels]]
+name = "pywin32_ctypes-0.2.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"
+
+[[packages]]
+name = "pywinpty"
+version = "2.0.15"
+
+[[packages.wheels]]
+name = "pywinpty-2.0.15-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/fb/16/2ab7b3b7f55f3c6929e5f629e1a68362981e4e5fed592a2ed1cb4b4914a5/pywinpty-2.0.15-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408"
+
+[[packages]]
+name = "pyyaml"
+version = "6.0.2"
+
+[[packages.wheels]]
+name = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"
+
+[[packages]]
+name = "pyzmq"
+version = "26.4.0"
+
+[[packages.wheels]]
+name = "pyzmq-26.4.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/c6/6c/f289c1789d7bb6e5a3b3bef7b2a55089b8561d17132be7d960d3ff33b14e/pyzmq-26.4.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b"
+
+[[packages]]
+name = "qdarkstyle"
+version = "3.2.3"
+
+[[packages.wheels]]
+name = "QDarkStyle-3.2.3-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/93/7d/c3c10498430dadcea4def5faddf71cd199e577d20a125e7ef1e9d7bdbbfa/QDarkStyle-3.2.3-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ea980ee426d594909cf1058306832af71ff6cbad6f69237b036d1550635aefbc"
+
+[[packages]]
+name = "qdldl"
+version = "0.1.7.post5"
+
+[[packages.wheels]]
+name = "qdldl-0.1.7.post5-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/08/f7/abac03a09f6848cee6d5dd7a7a8bd1dfed68766ee77f9cbf3e9de596ad68/qdldl-0.1.7.post5-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "cc9be378e7bec67d4c62b7fa27cafb4f77d3e5e059d753c3dce0a5ae1ef5fea0"
+
+[[packages]]
+name = "qrcode"
+version = "8.0"
+
+[[packages.wheels]]
+name = "qrcode-8.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/74/ab/df8d889fd01139db68ae9e5cb5c8f0ea016823559a6ecb427582d52b07dc/qrcode-8.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9fc05f03305ad27a709eb742cf3097fa19e6f6f93bb9e2f039c0979190f6f1b1"
+
+[[packages]]
+name = "qstylizer"
+version = "0.2.4"
+
+[[packages.wheels]]
+name = "qstylizer-0.2.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2d/ba/2a4e51861942c2bc3be60400c69f6713359c3e307aee4696f2ea47f35811/qstylizer-0.2.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8f384dfe86f9edb0bb596b93663a51f124f0794b94fd54057cc7cf9cea59fb6f"
+
+[[packages]]
+name = "qtawesome"
+version = "1.4.0"
+
+[[packages.wheels]]
+name = "qtawesome-1.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a5/ee/6e6c6715129c929af2d95ddb2e9decf54c1beffe58f336911197aacc0448/qtawesome-1.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a4d689fa071c595aa6184171ce1f0f847677cb8d2db45382c43129f1d72a3d93"
+
+[[packages]]
+name = "qtconsole"
+version = "5.6.1"
+
+[[packages.wheels]]
+name = "qtconsole-5.6.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c6/8a/635610fb6131bc702229e2780d7b042416866ab78f8ed1ff24c4b23a2f4c/qtconsole-5.6.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3d22490d9589bace566ad4f3455b61fa2209156f40e87e19e2c3cb64e9264950"
+
+[[packages]]
+name = "qtpy"
+version = "2.4.3"
+
+[[packages.wheels]]
+name = "QtPy-2.4.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/69/76/37c0ccd5ab968a6a438f9c623aeecc84c202ab2fabc6a8fd927580c15b5a/QtPy-2.4.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "72095afe13673e017946cc258b8d5da43314197b741ed2890e563cf384b51aa1"
+
+[[packages]]
+name = "quantecon"
+version = "0.7.2"
+
+[[packages.wheels]]
+name = "quantecon-0.7.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/77/1b/75e44bd482abe2e87dcbead8cfd99b8fa6582fdc0906967c34f64abfdf13/quantecon-0.7.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d1333ca7bc3046efe3655d9eeeefb299051b00870b8608cb5bc0b88e3bdb8b67"
+
+[[packages]]
+name = "quart"
+version = "0.20.0"
+
+[[packages.wheels]]
+name = "quart-0.20.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7e/e9/cc28f21f52913adf333f653b9e0a3bf9cb223f5083a26422968ba73edd8d/quart-0.20.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "003c08f551746710acb757de49d9b768986fd431517d0eb127380b656b98b8f1"
+
+[[packages]]
+name = "rapidfuzz"
+version = "3.13.0"
+
+[[packages.wheels]]
+name = "rapidfuzz-3.13.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/96/e3/a98c25c4f74051df4dcf2f393176b8663bfd93c7afc6692c84e96de147a2/rapidfuzz-3.13.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "9a7c6232be5f809cd39da30ee5d24e6cadd919831e6020ec6c2391f4c3bc9264"
+
+[[packages]]
+name = "readme-renderer"
+version = "44.0"
+
+[[packages.wheels]]
+name = "readme_renderer-44.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151"
+
+[[packages]]
+name = "redis"
+version = "5.2.1"
+
+[[packages.wheels]]
+name = "redis-5.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3c/5f/fa26b9b2672cbe30e07d9a5bdf39cf16e3b80b42916757c5f92bca88e4ba/redis-5.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"
+
+[[packages]]
+name = "referencing"
+version = "0.36.2"
+
+[[packages.wheels]]
+name = "referencing-0.36.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"
+
+[[packages]]
+name = "regex"
+version = "2024.11.6"
+
+[[packages.wheels]]
+name = "regex-2024.11.6-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"
+
+[[packages]]
+name = "reportlab"
+version = "4.3.1"
+
+[[packages.wheels]]
+name = "reportlab-4.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ce/6b/42805895ed08a314a01be6110584b5d059328386988ddbc4f8f10014d30e/reportlab-4.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0f37dd16652db3ef84363cf744632a28c38bd480d5bf94683466852d7bb678dd"
+
+[[packages]]
+name = "requests"
+version = "2.32.3"
+
+[[packages.wheels]]
+name = "requests-2.32.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"
+
+[[packages]]
+name = "requests-ntlm"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "requests_ntlm-1.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9e/5d/836b97537a390cf811b0488490c389c5a614f0a93acb23f347bd37a2d914/requests_ntlm-1.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4c7534a7d0e482bb0928531d621be4b2c74ace437e88c5a357ceb7452d25a510"
+
+[[packages]]
+name = "requests-toolbelt"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "requests_toolbelt-1.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"
+
+[[packages]]
+name = "rfc3339-validator"
+version = "0.1.4"
+
+[[packages.wheels]]
+name = "rfc3339_validator-0.1.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"
+
+[[packages]]
+name = "rfc3986"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "rfc3986-2.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"
+
+[[packages]]
+name = "rfc3986-validator"
+version = "0.1.1"
+
+[[packages.wheels]]
+name = "rfc3986_validator-0.1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"
+
+[[packages]]
+name = "rich"
+version = "14.0.0"
+
+[[packages.wheels]]
+name = "rich-14.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"
+
+[[packages]]
+name = "rope"
+version = "1.13.0"
+
+[[packages.wheels]]
+name = "rope-1.13.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a0/d0/e213e5adfa162e437dff3669131dc476043fc3a22fe99ef891516100610d/rope-1.13.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b435a0c0971244fdcd8741676a9fae697ae614c20cc36003678a7782f25c0d6c"
+
+[[packages]]
+name = "rpds-py"
+version = "0.24.0"
+
+[[packages.wheels]]
+name = "rpds_py-0.24.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/f9/12/09e048d1814195e01f354155fb772fb0854bd3450b5f5a82224b3a319f0e/rpds_py-0.24.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a"
+
+[[packages]]
+name = "rsa"
+version = "4.7.2"
+
+[[packages.wheels]]
+name = "rsa-4.7.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e9/93/0c0f002031f18b53af7a6166103c02b9c0667be528944137cc954ec921b3/rsa-4.7.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"
+
+[[packages]]
+name = "rtree"
+version = "1.4.0"
+
+[[packages.wheels]]
+name = "rtree-1.4.0-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/ce/c2/362f2cc36a7a57b47380061c23fc109c7222c1a544ffd24cda289ba19673/rtree-1.4.0-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "ba83efc7b7563905b1bfdfc14490c4bfb59e92e5e6156bdeb6ec5df5117252f4"
+
+[[packages]]
+name = "rx"
+version = "3.2.0"
+
+[[packages.wheels]]
+name = "Rx-3.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e2/a9/efeaeca4928a9a56d04d609b5730994d610c82cf4d9dd7aa173e6ef4233e/Rx-3.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "922c5f4edb3aa1beaa47bf61d65d5380011ff6adcd527f26377d05cb73ed8ec8"
+
+[[packages]]
+name = "scikit-image"
+version = "0.25.2"
+
+[[packages.wheels]]
+name = "scikit_image-0.25.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/8a/97/5fcf332e1753831abb99a2525180d3fb0d70918d461ebda9873f66dcc12f/scikit_image-0.25.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "64785a8acefee460ec49a354706db0b09d1f325674107d7fa3eadb663fb56d6f"
+
+[[packages]]
+name = "scikit-learn"
+version = "1.6.1"
+
+[[packages.wheels]]
+name = "scikit_learn-1.6.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/34/b0/ca92b90859070a1487827dbc672f998da95ce83edce1270fc23f96f1f61a/scikit_learn-1.6.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb"
+
+[[packages]]
+name = "scipy"
+version = "1.15.3"
+
+[[packages.wheels]]
+name = "scipy-1.15.3-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163"
+
+[[packages]]
+name = "scramp"
+version = "1.4.5"
+
+[[packages.wheels]]
+name = "scramp-1.4.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d9/9f/8b2f2749ccfbe4fcef08650896ac47ed919ff25b7ac57b7a1ae7da16c8c3/scramp-1.4.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "50e37c464fc67f37994e35bee4151e3d8f9320e9c204fca83a5d313c121bbbe7"
+
+[[packages]]
+name = "scs"
+version = "3.2.7.post2"
+
+[[packages.wheels]]
+name = "scs-3.2.7.post2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/9d/f9/840ef19a298ef7099f4a692772001f2f552b0917a3fb230f872a1c40ba11/scs-3.2.7.post2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "a2c48cd19e39bf87dae0b20a289fff44930458fc2ca2afa0f899058dc41e5545"
+
+[[packages]]
+name = "seaborn"
+version = "0.13.2"
+
+[[packages.wheels]]
+name = "seaborn-0.13.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"
+
+[[packages]]
+name = "send2trash"
+version = "1.8.3"
+
+[[packages.wheels]]
+name = "Send2Trash-1.8.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"
+
+[[packages]]
+name = "setuptools"
+version = "79.0.1"
+
+[[packages.wheels]]
+name = "setuptools-79.0.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0d/6d/b4752b044bf94cb802d88a888dc7d288baaf77d7910b7dedda74b5ceea0c/setuptools-79.0.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e147c0549f27767ba362f9da434eab9c5dc0045d5304feb602a0af001089fc51"
+
+[[packages]]
+name = "shapely"
+version = "2.1.0"
+
+[[packages.wheels]]
+name = "shapely-2.1.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e3/f0/9f8cdf2258d7aed742459cea51c70d184de92f5d2d6f5f7f1ded90a18c31/shapely-2.1.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "1dc8d4364483a14aba4c844b7bd16a6fa3728887e2c33dfa1afa34a3cf4d08a5"
+
+[[packages]]
+name = "shellingham"
+version = "1.5.4"
+
+[[packages.wheels]]
+name = "shellingham-1.5.4-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"
+
+[[packages]]
+name = "simplejson"
+version = "3.19.3"
+
+[[packages.wheels]]
+name = "simplejson-3.19.3-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e2/58/b06226e6b0612f2b1fa13d5273551da259f894566b1eef32249ddfdcce44/simplejson-3.19.3-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "3bbcdc438dc1683b35f7a8dc100960c721f922f9ede8127f63bed7dfded4c64c"
+
+[[packages]]
+name = "simpy"
+version = "4.1.1"
+
+[[packages.wheels]]
+name = "simpy-4.1.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/48/72/920ed1224c94a8a5a69e6c1275ac7fe4eb911ba8feffddf469f1629d47f3/simpy-4.1.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7c5ae380240fd2238671160e4830956f8055830a8317edf5c05e495b3823cd88"
+
+[[packages]]
+name = "six"
+version = "1.17.0"
+
+[[packages.wheels]]
+name = "six-1.17.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"
+
+[[packages]]
+name = "sklearn-compat"
+version = "0.1.3"
+
+[[packages.wheels]]
+name = "sklearn_compat-0.1.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f0/a8/ad69cf130fbd017660cdd64abbef3f28135d9e2e15fe3002e03c5be0ca38/sklearn_compat-0.1.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a8aaf8ef711988cbd63f187c5560b5f16b25df663aaa1d2d0e1291341d339f80"
+
+[[packages]]
+name = "skrub"
+version = "0.5.3"
+
+[[packages.wheels]]
+name = "skrub-0.5.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/80/cf/5a1e0dabfa3cad1ab9b09e690fede4aa8fdc0c04d9d7ec8aa9338d56e1e4/skrub-0.5.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b6ba417fa83d1f7e9a69656e0860b061381b9bd19808692a2b5bef8588c72775"
+
+[[packages]]
+name = "smmap"
+version = "5.0.2"
+
+[[packages.wheels]]
+name = "smmap-5.0.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"
+
+[[packages]]
+name = "sniffio"
+version = "1.3.1"
+
+[[packages.wheels]]
+name = "sniffio-1.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"
+
+[[packages]]
+name = "snowballstemmer"
+version = "2.2.0"
+
+[[packages.wheels]]
+name = "snowballstemmer-2.2.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"
+
+[[packages]]
+name = "sortedcontainers"
+version = "2.4.0"
+
+[[packages.wheels]]
+name = "sortedcontainers-2.4.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"
+
+[[packages]]
+name = "sounddevice"
+version = "0.5.1"
+
+[[packages.wheels]]
+name = "sounddevice-0.5.1-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/af/9b/15217b04f3b36d30de55fef542389d722de63f1ad81f9c72d8afc98cb6ab/sounddevice-0.5.1-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "4313b63f2076552b23ac3e0abd3bcfc0c1c6a696fc356759a13bd113c9df90f1"
+
+[[packages]]
+name = "soupsieve"
+version = "2.6"
+
+[[packages.wheels]]
+name = "soupsieve-2.6-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"
+
+[[packages]]
+name = "sphinx"
+version = "8.1.3"
+
+[[packages.wheels]]
+name = "sphinx-8.1.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2"
+
+[[packages]]
+name = "sphinx-rtd-theme"
+version = "3.0.2"
+
+[[packages.wheels]]
+name = "sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/85/77/46e3bac77b82b4df5bb5b61f2de98637724f246b4966cfc34bc5895d852a/sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13"
+
+[[packages]]
+name = "sphinxcontrib-applehelp"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"
+
+[[packages]]
+name = "sphinxcontrib-devhelp"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"
+
+[[packages]]
+name = "sphinxcontrib-htmlhelp"
+version = "2.1.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"
+
+[[packages]]
+name = "sphinxcontrib-jquery"
+version = "4.1"
+
+[[packages.wheels]]
+name = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"
+
+[[packages]]
+name = "sphinxcontrib-jsmath"
+version = "1.0.1"
+
+[[packages.wheels]]
+name = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"
+
+[[packages]]
+name = "sphinxcontrib-qthelp"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"
+
+[[packages]]
+name = "sphinxcontrib-serializinghtml"
+version = "2.0.0"
+
+[[packages.wheels]]
+name = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"
+
+[[packages]]
+name = "spyder"
+version = "6.0.7"
+
+[[packages.wheels]]
+name = "spyder-6.0.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ee/c8/1568fa96351ddad878d42e7487d9637604c7f34030171acf810f47914d9d/spyder-6.0.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b725569bb8ddc7b0aab73d747d85312dc0456978370cc0f9b1a101c0fe4f076b"
+
+[[packages]]
+name = "spyder-kernels"
+version = "3.0.5"
+
+[[packages.wheels]]
+name = "spyder_kernels-3.0.5-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/10/2d/b1c88e914ebdec2a9cf066b2c283ee234f4052c31922017407fa8adb89f3/spyder_kernels-3.0.5-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "9cc808e0ec4426b9ba911128e221fa2234e6c8d6e08526132e90112ff9c2bb7c"
+
+[[packages]]
+name = "sqlalchemy"
+version = "2.0.40"
+
+[[packages.wheels]]
+name = "sqlalchemy-2.0.40-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/1c/cb/f38c61f7f2fd4d10494c1c135ff6a6ddb63508d0b47bccccd93670637309/sqlalchemy-2.0.40-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad"
+
+[[packages]]
+name = "sqlite-bro"
+version = "0.13.1"
+
+[[packages.wheels]]
+name = "sqlite_bro-0.13.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/2a/b3/81b91f5b26fff329c59dbf826a87637bd51d1903120427912322f86e7d33/sqlite_bro-0.13.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "c26033b0af133049ca578b5fd30b2372f002e7ff934b39774aa4d2da7638c23d"
+
+[[packages]]
+name = "sqlite-fts4"
+version = "1.0.3"
+
+[[packages.wheels]]
+name = "sqlite_fts4-1.0.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/51/29/0096e8b1811aaa78cfb296996f621f41120c21c2f5cd448ae1d54979d9fc/sqlite_fts4-1.0.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0359edd8dea6fd73c848989e1e2b1f31a50fe5f9d7272299ff0e8dbaa62d035f"
+
+[[packages]]
+name = "sqlite-utils"
+version = "3.38"
+
+[[packages.wheels]]
+name = "sqlite_utils-3.38-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4d/eb/f8e8e827805f810838efff3311cccd2601238c5fa3fc35c1f878709e161b/sqlite_utils-3.38-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8a27441015c3b2ef475f555861f7a2592f73bc60d247af9803a11b65fc605bf9"
+
+[[packages]]
+name = "sqlparse"
+version = "0.5.3"
+
+[[packages.wheels]]
+name = "sqlparse-0.5.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca"
+
+[[packages]]
+name = "squarify"
+version = "0.4.4"
+
+[[packages.wheels]]
+name = "squarify-0.4.4-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b7/3c/eedbe9fb07cc20fd9a8423da14b03bc270d0570b3ba9174a4497156a2152/squarify-0.4.4-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d7597724e29d48aa14fd2f551060d6b09e1f0a67e4cd3ea329fe03b4c9a56f11"
+
+[[packages]]
+name = "sse-starlette"
+version = "2.2.1"
+
+[[packages.wheels]]
+name = "sse_starlette-2.2.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d9/e0/5b8bd393f27f4a62461c5cf2479c75a2cc2ffa330976f9f00f5f6e4f50eb/sse_starlette-2.2.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6410a3d3ba0c89e7675d4c273a301d64649c03a5ef1ca101f10b47f895fd0e99"
+
+[[packages]]
+name = "sspilib"
+version = "0.2.0"
+
+[[packages.wheels]]
+name = "sspilib-0.2.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/49/ad/40f898075c913c75060c17c9cc6d6b86e8f83b6f5e1e017627b07ff53fcd/sspilib-0.2.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "c39a698491f43618efca8776a40fb7201d08c415c507f899f0df5ada15abefaa"
+
+[[packages]]
+name = "stack-data"
+version = "0.6.3"
+
+[[packages.wheels]]
+name = "stack_data-0.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"
+
+[[packages]]
+name = "starlette"
+version = "0.46.2"
+
+[[packages.wheels]]
+name = "starlette-0.46.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35"
+
+[[packages]]
+name = "statsmodels"
+version = "0.14.4"
+
+[[packages.wheels]]
+name = "statsmodels-0.14.4-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/1d/eb/cb8b01f5edf8f135eb3d0553d159db113a35b2948d0e51eeb735e7ae09ea/statsmodels-0.14.4-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "81030108d27aecc7995cac05aa280cf8c6025f6a6119894eef648997936c2dd0"
+
+[[packages]]
+name = "streamlit"
+version = "1.46.0"
+
+[[packages.wheels]]
+name = "streamlit-1.46.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/be/26/79bbb77bec3d605f7de7a4b45c806b44d112e8c9bce77fb620e03d9f2b88/streamlit-1.46.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f8624acabafcf18611a0fac2635cf181a7ba922b45bd131ae15fc8f80e1a5482"
+
+[[packages]]
+name = "superqt"
+version = "0.7.3"
+
+[[packages.wheels]]
+name = "superqt-0.7.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4f/53/ce8e705a0fca9ff08406d0232409c6dacd09a04cdc5124e33aa3ad97c117/superqt-0.7.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "8f7d141665b31baa484747f324fc9fc2d14223f2fefc92ffed6ea35c92221304"
+
+[[packages]]
+name = "sv-ttk"
+version = "2.6.0"
+
+[[packages.wheels]]
+name = "sv_ttk-2.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0f/3d/be0abc3202e90f282ad465f4e7c6e41bc8dce810ce5d1611566a1e7dfba8/sv_ttk-2.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4319c52edf2e14732fe84bdc9788e26f9e9a1ad79451ec0f89f0120ffc8105d9"
+
+[[packages]]
+name = "sympy"
+version = "1.14.0"
+
+[[packages.wheels]]
+name = "sympy-1.14.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"
+
+[[packages]]
+name = "tabulate"
+version = "0.9.0"
+
+[[packages.wheels]]
+name = "tabulate-0.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"
+
+[[packages]]
+name = "tblib"
+version = "3.1.0"
+
+[[packages.wheels]]
+name = "tblib-3.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/27/44/aa5c8b10b2cce7a053018e0d132bd58e27527a0243c4985383d5b6fd93e9/tblib-3.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "670bb4582578134b3d81a84afa1b016128b429f3d48e6cbbaecc9d15675e984e"
+
+[[packages]]
+name = "tenacity"
+version = "9.1.2"
+
+[[packages.wheels]]
+name = "tenacity-9.1.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"
+
+[[packages]]
+name = "termcolor"
+version = "3.1.0"
+
+[[packages.wheels]]
+name = "termcolor-3.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/4f/bd/de8d508070629b6d84a30d01d57e4a65c69aa7f5abe7560b8fad3b50ea59/termcolor-3.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa"
+
+[[packages]]
+name = "terminado"
+version = "0.18.1"
+
+[[packages.wheels]]
+name = "terminado-0.18.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"
+
+[[packages]]
+name = "text-unidecode"
+version = "1.3"
+
+[[packages.wheels]]
+name = "text_unidecode-1.3-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"
+
+[[packages]]
+name = "textdistance"
+version = "4.6.3"
+
+[[packages.wheels]]
+name = "textdistance-4.6.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c6/c2/c62601c858010b0513a6434b9be19bd740533a6e861eddfd30b7258d92a0/textdistance-4.6.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0cb1b2cc8e3339ddc3e0f8c870e49fb49de6ecc42a718917308b3c971f34aa56"
+
+[[packages]]
+name = "thefuzz"
+version = "0.22.1"
+
+[[packages.wheels]]
+name = "thefuzz-0.22.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/82/4f/1695e70ceb3604f19eda9908e289c687ea81c4fecef4d90a9d1d0f2f7ae9/thefuzz-0.22.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "59729b33556850b90e1093c4cf9e618af6f2e4c985df193fdf3c5b5cf02ca481"
+
+[[packages]]
+name = "threadpoolctl"
+version = "3.6.0"
+
+[[packages.wheels]]
+name = "threadpoolctl-3.6.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"
+
+[[packages]]
+name = "three-merge"
+version = "0.1.1"
+
+[[packages.wheels]]
+name = "three_merge-0.1.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/23/be/a52588102605ec52b4e88340d65a290b6465c1dbcd2d943ab149b012908b/three_merge-0.1.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "dd219f4696aa0bbec6099ac3528b4de0450ff9bde862dd8f6d6f52e745f83464"
+
+[[packages]]
+name = "tifffile"
+version = "2025.3.30"
+
+[[packages.wheels]]
+name = "tifffile-2025.3.30-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6e/be/10d23cfd4078fbec6aba768a357eff9e70c0b6d2a07398425985c524ad2a/tifffile-2025.3.30-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "0ed6eee7b66771db2d1bfc42262a51b01887505d35539daef118f4ff8c0f629c"
+
+[[packages]]
+name = "tiktoken"
+version = "0.9.0"
+
+[[packages.wheels]]
+name = "tiktoken-0.9.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/de/a8/8f499c179ec900783ffe133e9aab10044481679bb9aad78436d239eee716/tiktoken-0.9.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95"
+
+[[packages]]
+name = "tinycss2"
+version = "1.4.0"
+
+[[packages.wheels]]
+name = "tinycss2-1.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"
+
+[[packages]]
+name = "tokenizers"
+version = "0.21.1"
+
+[[packages.wheels]]
+name = "tokenizers-0.21.1-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382"
+
+[[packages]]
+name = "toml"
+version = "0.10.2"
+
+[[packages.wheels]]
+name = "toml-0.10.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+
+[[packages]]
+name = "tomli"
+version = "2.2.1"
+
+[[packages.wheels]]
+name = "tomli-2.2.1-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"
+
+[[packages]]
+name = "tomli-w"
+version = "1.2.0"
+
+[[packages.wheels]]
+name = "tomli_w-1.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90"
+
+[[packages]]
+name = "tomlkit"
+version = "0.13.2"
+
+[[packages.wheels]]
+name = "tomlkit-0.13.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"
+
+[[packages]]
+name = "toolz"
+version = "1.0.0"
+
+[[packages.wheels]]
+name = "toolz-1.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"
+
+[[packages]]
+name = "tornado"
+version = "6.5.1"
+
+[[packages.wheels]]
+name = "tornado-6.5.1-cp39-abi3-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b"
+
+[[packages]]
+name = "tqdm"
+version = "4.67.1"
+
+[[packages.wheels]]
+name = "tqdm-4.67.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"
+
+[[packages]]
+name = "traitlets"
+version = "5.14.3"
+
+[[packages.wheels]]
+name = "traitlets-5.14.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"
+
+[[packages]]
+name = "traittypes"
+version = "0.2.1"
+
+[[packages.wheels]]
+name = "traittypes-0.2.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9c/d1/8d5bd662703cc1764d986f6908a608777305946fa634d34c470cd4a1e729/traittypes-0.2.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1340af133810b6eee1a2eb2e988f862b0d12b6c2d16f282aaf3207b782134c2e"
+
+[[packages]]
+name = "trio"
+version = "0.30.0"
+
+[[packages.wheels]]
+name = "trio-0.30.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/69/8e/3f6dfda475ecd940e786defe6df6c500734e686c9cd0a0f8ef6821e9b2f2/trio-0.30.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3bf4f06b8decf8d3cf00af85f40a89824669e2d033bb32469d34840edcfc22a5"
+
+[[packages]]
+name = "trove-classifiers"
+version = "2025.5.9.12"
+
+[[packages.wheels]]
+name = "trove_classifiers-2025.5.9.12-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/92/ef/c6deb083748be3bcad6f471b6ae983950c161890bf5ae1b2af80cc56c530/trove_classifiers-2025.5.9.12-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "e381c05537adac78881c8fa345fd0e9970159f4e4a04fcc42cfd3129cca640ce"
+
+[[packages]]
+name = "twine"
+version = "6.1.0"
+
+[[packages.wheels]]
+name = "twine-6.1.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7c/b6/74e927715a285743351233f33ea3c684528a0d374d2e43ff9ce9585b73fe/twine-6.1.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384"
+
+[[packages]]
+name = "typer"
+version = "0.15.2"
+
+[[packages.wheels]]
+name = "typer-0.15.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/7f/fc/5b29fea8cee020515ca82cc68e3b8e1e34bb19a3535ad854cac9257b414c/typer-0.15.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc"
+
+[[packages]]
+name = "types-python-dateutil"
+version = "2.9.0.20240316"
+
+[[packages.wheels]]
+name = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c7/1b/af4f4c4f3f7339a4b7eb3c0ab13416db98f8ac09de3399129ee5fdfa282b/types_python_dateutil-2.9.0.20240316-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"
+
+[[packages]]
+name = "types-requests"
+version = "2.32.0.20250328"
+
+[[packages.wheels]]
+name = "types_requests-2.32.0.20250328-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/cc/15/3700282a9d4ea3b37044264d3e4d1b1f0095a4ebf860a99914fd544e3be3/types_requests-2.32.0.20250328-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "72ff80f84b15eb3aa7a8e2625fffb6a93f2ad5a0c20215fc1dcfa61117bcb2a2"
+
+[[packages]]
+name = "typing-extensions"
+version = "4.13.2"
+
+[[packages.wheels]]
+name = "typing_extensions-4.13.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"
+
+[[packages]]
+name = "typing-inspection"
+version = "0.4.0"
+
+[[packages.wheels]]
+name = "typing_inspection-0.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"
+
+[[packages]]
+name = "tzdata"
+version = "2025.2"
+
+[[packages.wheels]]
+name = "tzdata-2025.2-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"
+
+[[packages]]
+name = "tzlocal"
+version = "5.3.1"
+
+[[packages.wheels]]
+name = "tzlocal-5.3.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d"
+
+[[packages]]
+name = "uc-micro-py"
+version = "1.0.3"
+
+[[packages.wheels]]
+name = "uc_micro_py-1.0.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5"
+
+[[packages]]
+name = "ujson"
+version = "5.10.0"
+
+[[packages.wheels]]
+name = "ujson-5.10.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/d7/72/6cb6728e2738c05bbe9bd522d6fc79f86b9a28402f38663e85a28fddd4a0/ujson-5.10.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539"
+
+[[packages]]
+name = "umap-learn"
+version = "0.5.7"
+
+[[packages.wheels]]
+name = "umap_learn-0.5.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/3c/8f/671c0e1f2572ba625cbcc1faeba9435e00330c3d6962858711445cf1e817/umap_learn-0.5.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6a7e0be2facfa365a5ed6588447102bdbef32a0ef449535c25c97ea7e680073c"
+
+[[packages]]
+name = "uncertainties"
+version = "3.2.2"
+
+[[packages.wheels]]
+name = "uncertainties-3.2.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fa/fc/97711d2a502881d871e3cf2d2645e21e7f8e4d4fd9a56937557790cade6a/uncertainties-3.2.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7"
+
+[[packages]]
+name = "uri-template"
+version = "1.3.0"
+
+[[packages.wheels]]
+name = "uri_template-1.3.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"
+
+[[packages]]
+name = "urllib3"
+version = "2.4.0"
+
+[[packages.wheels]]
+name = "urllib3-2.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"
+
+[[packages]]
+name = "uvicorn"
+version = "0.34.2"
+
+[[packages.wheels]]
+name = "uvicorn-0.34.2-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b1/4b/4cef6ce21a2aaca9d852a6e84ef4f135d99fcd74fa75105e2fc0c8308acd/uvicorn-0.34.2-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "deb49af569084536d269fe0a6d67e3754f104cf03aba7c11c40f01aadf33c403"
+
+[[packages]]
+name = "vega-datasets"
+version = "0.9.0"
+
+[[packages.wheels]]
+name = "vega_datasets-0.9.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/e6/9f/ca52771fe972e0dcc5167fedb609940e01516066938ff2ee28b273ae4f29/vega_datasets-0.9.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3d7c63917be6ca9b154b565f4779a31fedce57b01b5b9d99d8a34a7608062a1d"
+
+[[packages]]
+name = "waitress"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "waitress-3.0.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5b/a9/485c953a1ac4cb98c28e41fd2c7184072df36bbf99734a51d44d04176878/waitress-3.0.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "2a06f242f4ba0cc563444ca3d1998959447477363a2d7e9b8b4d75d35cfd1669"
+
+[[packages]]
+name = "watchdog"
+version = "6.0.0"
+
+[[packages.wheels]]
+name = "watchdog-6.0.0-py3-none-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"
+
+[[packages]]
+name = "wcwidth"
+version = "0.2.13"
+
+[[packages.wheels]]
+name = "wcwidth-0.2.13-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"
+
+[[packages]]
+name = "webcolors"
+version = "24.11.1"
+
+[[packages.wheels]]
+name = "webcolors-24.11.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"
+
+[[packages]]
+name = "webencodings"
+version = "0.5.1"
+
+[[packages.wheels]]
+name = "webencodings-0.5.1-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"
+
+[[packages]]
+name = "websocket-client"
+version = "1.8.0"
+
+[[packages.wheels]]
+name = "websocket_client-1.8.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"
+
+[[packages]]
+name = "websockets"
+version = "14.2"
+
+[[packages.wheels]]
+name = "websockets-14.2-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/14/13/8b7fc4cb551b9cfd9890f0fd66e53c18a06240319915533b033a56a3d520/websockets-14.2-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "b439ea828c4ba99bb3176dc8d9b933392a2413c0f6b149fdcba48393f573377f"
+
+[[packages]]
+name = "werkzeug"
+version = "3.1.3"
+
+[[packages.wheels]]
+name = "werkzeug-3.1.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"
+
+[[packages]]
+name = "whatthepatch"
+version = "1.0.7"
+
+[[packages.wheels]]
+name = "whatthepatch-1.0.7-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/8e/93/af1d6ccb69ab6b5a00e03fa0cefa563f9862412667776ea15dd4eece3a90/whatthepatch-1.0.7-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "1b6f655fd31091c001c209529dfaabbabdbad438f5de14e3951266ea0fc6e7ed"
+
+[[packages]]
+name = "wheel"
+version = "0.45.1"
+
+[[packages.wheels]]
+name = "wheel-0.45.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248"
+
+[[packages]]
+name = "widgetsnbextension"
+version = "4.0.14"
+
+[[packages.wheels]]
+name = "widgetsnbextension-4.0.14-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575"
+
+[[packages]]
+name = "wordcloud"
+version = "1.9.4"
+
+[[packages.wheels]]
+name = "wordcloud-1.9.4-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/84/47/d482f7d2decc6e59e69e105b12c53d6d2967f0d703e664484c5f2f87fca8/wordcloud-1.9.4-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "8c9a5af2fbcf029a19e827adbee58e86efe7536dca7a42380a8601113a86069b"
+
+[[packages]]
+name = "wrapt"
+version = "1.16.0"
+
+[[packages.wheels]]
+name = "wrapt-1.16.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/ff/21/abdedb4cdf6ff41ebf01a74087740a709e2edb146490e4d9beea054b0b7a/wrapt-1.16.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"
+
+[[packages]]
+name = "wsproto"
+version = "1.2.0"
+
+[[packages.wheels]]
+name = "wsproto-1.2.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"
+
+[[packages]]
+name = "xarray"
+version = "2025.4.0"
+
+[[packages.wheels]]
+name = "xarray-2025.4.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/a4/1e/96fd96419fec1a37da998a1ca3d558f2cae2f6f3cd5015170371b05a2b6b/xarray-2025.4.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b27defd082c5cb85d32c695708de6bb05c2838fb7caaf3f952982e602a35b9b8"
+
+[[packages]]
+name = "xlsxwriter"
+version = "3.2.3"
+
+[[packages.wheels]]
+name = "XlsxWriter-3.2.3-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/37/b1/a252d499f2760b314fcf264d2b36fcc4343a1ecdb25492b210cb0db70a68/XlsxWriter-3.2.3-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "593f8296e8a91790c6d0378ab08b064f34a642b3feb787cf6738236bd0a4860d"
+
+[[packages]]
+name = "xyzservices"
+version = "2023.10.1"
+
+[[packages.wheels]]
+name = "xyzservices-2023.10.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/82/c3/e06dfa46464cce3eda4b86df8847cab99d9bc545c76807ee689545187a4c/xyzservices-2023.10.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "6a4c38d3a9f89d3e77153eff9414b36a8ee0850c9e8b85796fd1b2a85b8dfd68"
+
+[[packages]]
+name = "yapf"
+version = "0.40.1"
+
+[[packages.wheels]]
+name = "yapf-0.40.1-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/23/75/c374517c09e31bf22d3b3f156d73e0f38d08e29b2afdd607cef5f1e10aa9/yapf-0.40.1-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "b8bfc1f280949153e795181768ca14ef43d7312629a06c43e7abd279323af313"
+
+[[packages]]
+name = "yarl"
+version = "1.18.3"
+
+[[packages.wheels]]
+name = "yarl-1.18.3-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/f5/d5/688db678e987c3e0fb17867970700b92603cadf36c56e5fb08f23e822a0c/yarl-1.18.3-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"
+
+[[packages]]
+name = "yt-dlp"
+version = "2025.2.19"
+
+[[packages.wheels]]
+name = "yt_dlp-2025.2.19-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/9e/45/6d1b759e68f5363b919828fb0e0c167a1cd5003b5b7c74cc0f0c2096be4f/yt_dlp-2025.2.19-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "3ed218eaeece55e9d715afd41abc450dc406ee63bf79355169dfde312d38fdb8"
+
+[[packages]]
+name = "zict"
+version = "3.0.0"
+
+[[packages.wheels]]
+name = "zict-3.0.0-py2.py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae"
+
+[[packages]]
+name = "zipp"
+version = "3.21.0"
+
+[[packages.wheels]]
+name = "zipp-3.21.0-py3-none-any.whl"
+url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl"
+
+[packages.wheels.hashes]
+sha256 = "ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"
+
+[[packages]]
+name = "zstandard"
+version = "0.23.0"
+
+[[packages.wheels]]
+name = "zstandard-0.23.0-cp313-cp313-win_amd64.whl"
+url = "https://files.pythonhosted.org/packages/a2/bf/c6aaba098e2d04781e8f4f7c0ba3c7aa73d00e4c436bcc0cf059a66691d1/zstandard-0.23.0-cp313-cp313-win_amd64.whl"
+
+[packages.wheels.hashes]
+sha256 = "f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b"
diff --git a/changelogs/requir.64-3_12_10_1slim.txt b/changelogs/requir.64-3_12_10_1slim.txt
new file mode 100644
index 00000000..40ca03cb
--- /dev/null
+++ b/changelogs/requir.64-3_12_10_1slim.txt
@@ -0,0 +1,998 @@
+absl-py==2.2.2 \
+ --hash=sha256:e5797bc6abe45f64fd95dc06394ca3f2bedf3b5d895e9da691c9ee3397d70092
+adbc-driver-manager==1.3.0 \
+ --hash=sha256:0646996a7bbd31b321a16810f7110e9155b08607c0a83fed97414ad1bd2cac9e
+aiofiles==23.2.1 \
+ --hash=sha256:19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107
+aiohappyeyeballs==2.6.1 \
+ --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8
+aiohttp==3.11.18 \
+ --hash=sha256:364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8
+aiosignal==1.3.2 \
+ --hash=sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5
+aiosqlite==0.20.0 \
+ --hash=sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6
+alabaster==0.7.16 \
+ --hash=sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92
+alembic==1.15.2 \
+ --hash=sha256:2e76bd916d547f6900ec4bb5a90aeac1485d2c92536923d0b138c02b126edc53
+altair==5.5.0 \
+ --hash=sha256:91a310b926508d560fe0148d02a194f38b824122641ef528113d029fcd129f8c
+annotated-types==0.7.0 \
+ --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53
+ansicolors==1.1.8 \
+ --hash=sha256:00d2dde5a675579325902536738dd27e4fac1fd68f773fe36c21044eb559e187
+anthropic==0.51.0 \
+ --hash=sha256:b8b47d482c9aa1f81b923555cebb687c2730309a20d01be554730c8302e0f62a
+anyio==4.9.0 \
+ --hash=sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c
+anywidget==0.9.18 \
+ --hash=sha256:944b82ef1dd17b8ff0fb6d1f199f613caf9111338e6e2857da478f6e73770cb8
+appdirs==1.4.4 \
+ --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128
+argcomplete==3.6.2 \
+ --hash=sha256:65b3133a29ad53fb42c48cf5114752c7ab66c1c38544fdf6460f450c09b42591
+argon2-cffi==23.1.0 \
+ --hash=sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea
+argon2-cffi-bindings==21.2.0 \
+ --hash=sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f
+array-api-compat==1.12.0 \
+ --hash=sha256:a0b4795b6944a9507fde54679f9350e2ad2b1e2acf4a2408a098cdc27f890a8b
+arrow==1.3.0 \
+ --hash=sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80
+asgi-csrf==0.11 \
+ --hash=sha256:03ac140115f39d4295288a9adf74fdc6ae607f6ef44abee8466520458207242b
+asgiref==3.8.1 \
+ --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47
+asn1crypto==1.5.1 \
+ --hash=sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67
+asteval==1.0.5 \
+ --hash=sha256:082b95312578affc8a6d982f7d92b7ac5de05634985c87e7eedd3188d31149fa
+astroid==3.3.9 \
+ --hash=sha256:d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248
+astropy==6.1.6 \
+ --hash=sha256:344c6433b66c770917cb55f9f3754427774d7066bfa7ccf1ca638f45c7c00738
+astropy-iers-data==0.2024.12.23.0.33.24 \
+ --hash=sha256:40d3c6b6a5cf4dc6ad91b92b7e0f949e5366234e3c4440302247429fc8294302
+asttokens==3.0.0 \
+ --hash=sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2
+async-lru==2.0.5 \
+ --hash=sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943
+asyncssh==2.20.0 \
+ --hash=sha256:af6888d937c07a4bf31293335a6166b4d87608cdb5957b49547da6ad87ecf174
+atomicwrites==1.4.0 \
+ --hash=sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197
+attrs==25.3.0 \
+ --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3
+autopep8==2.0.4 \
+ --hash=sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb
+azure-core==1.32.0 \
+ --hash=sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4
+azure-cosmos==4.9.0 \
+ --hash=sha256:3b60eaa01a16a857d0faf0cec304bac6fa8620a81bc268ce760339032ef617fe
+azure-identity==1.21.0 \
+ --hash=sha256:258ea6325537352440f71b35c3dffe9d240eae4a5126c1b7ce5efd5766bd9fd9
+babel==2.17.0 \
+ --hash=sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2
+baresql==1.0.0 \
+ --hash=sha256:a24d17f46beb47c221f328f7e06710e3896c6203a8e1909788d7128f27b86f01
+bcrypt==4.3.0 \
+ --hash=sha256:e53e074b120f2877a35cc6c736b8eb161377caae8925c17688bd46ba56daaa5b
+beautifulsoup4==4.13.3 \
+ --hash=sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16
+binaryornot==0.4.4 \
+ --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4
+black==25.1.0 \
+ --hash=sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba
+bleach==6.2.0 \
+ --hash=sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e
+blinker==1.9.0 \
+ --hash=sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc
+bokeh==3.7.3 \
+ --hash=sha256:b0e79dd737f088865212e4fdcb0f3b95d087f0f088bf8ca186a300ab1641e2c7
+branca==0.8.1 \
+ --hash=sha256:d29c5fab31f7c21a92e34bf3f854234e29fecdcf5d2df306b616f20d816be425
+brotli==1.1.0 \
+ --hash=sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951
+build==1.2.2.post1 \
+ --hash=sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5
+cachetools==5.5.2 \
+ --hash=sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a
+certifi==2025.1.31 \
+ --hash=sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe
+cffi==1.17.1 \
+ --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903
+chardet==5.2.0 \
+ --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970
+charset-normalizer==3.4.2 \
+ --hash=sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e
+clarabel==0.10.0 \
+ --hash=sha256:7871b6f499ad66f71d4e7fb40754c4d986d4316f242beb62ff4f63a69785a50c
+click==8.1.8 \
+ --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2
+click-default-group==1.2.4 \
+ --hash=sha256:9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f
+cloudpickle==3.1.1 \
+ --hash=sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e
+cohere==5.15.0 \
+ --hash=sha256:22ff867c2a6f2fc2b585360c6072f584f11f275ef6d9242bac24e0fa2df1dfb5
+colorama==0.4.6 \
+ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
+colorcet==3.1.0 \
+ --hash=sha256:2a7d59cc8d0f7938eeedd08aad3152b5319b4ba3bcb7a612398cc17a384cb296
+colorlog==6.9.0 \
+ --hash=sha256:5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff
+comm==0.2.2 \
+ --hash=sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3
+contourpy==1.3.2 \
+ --hash=sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73
+cookiecutter==2.6.0 \
+ --hash=sha256:a54a8e37995e4ed963b3e82831072d1ad4b005af736bb17b99c2cbd9d41b6e2d
+cryptography==44.0.0 \
+ --hash=sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede
+cvxopt==1.3.2 \
+ --hash=sha256:a92ebfc5df77fea57544f8ad2102bfc45af0e77ac4dfe98ed1b9628e8bba77c3
+cvxpy==1.6.4 \
+ --hash=sha256:052a09716cfb630a48e911e7c9512015ae651100f64530d8eb973a195e105fa3
+cycler==0.12.1 \
+ --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30
+cython==3.1.1 \
+ --hash=sha256:307f216ed319ea07644f2ef9974406c830f01bc8e677e2147e9bfcdf9e3ca8ad
+cytoolz==1.0.1 \
+ --hash=sha256:8f89c48d8e5aec55ffd566a8ec858706d70ed0c6a50228eca30986bfa5b4da8b
+dask==2025.4.1 \
+ --hash=sha256:aacbb0a9667856fe58385015efd64aca22f0c0b2c5e1b5e633531060303bb4be
+datasette==0.65.1 \
+ --hash=sha256:ba7adf717ddcc24a2a8ac57890fffd384a2ebb909b342e4f731ba09eba764305
+datasette-graphql==2.2 \
+ --hash=sha256:cd9f61afdcaab1ce4ff6775296e6ece99305bf05cbfae4c1c938a6c9e60cd485
+datashader==0.17.0 \
+ --hash=sha256:39421ff999294913e63d41954af955a5dece5d0c55d8fce1426043d70b22d07a
+deap==1.4.2 \
+ --hash=sha256:02b8b664cfa0b6c18ff3e36d0b982fb66f38fb98c5b4292515a305527d57294e
+debugpy==1.8.13 \
+ --hash=sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea
+decorator==5.2.1 \
+ --hash=sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a
+defusedxml==0.7.1 \
+ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61
+deprecated==1.2.14 \
+ --hash=sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c
+diff-match-patch==20241021 \
+ --hash=sha256:93cea333fb8b2bc0d181b0de5e16df50dd344ce64828226bda07728818936782
+dill==0.4.0 \
+ --hash=sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049
+distributed==2025.4.1 \
+ --hash=sha256:3a7834451b04ef059928045eab6ff6d88ad7bcfd48adc99403127d9a6818b5fa
+distro==1.9.0 \
+ --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2
+django==5.2 \
+ --hash=sha256:91ceed4e3a6db5aedced65e3c8f963118ea9ba753fc620831c77074e620e7d83
+dnspython==2.7.0 \
+ --hash=sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86
+docstring-to-markdown==0.17 \
+ --hash=sha256:fd7d5094aa83943bf5f9e1a13701866b7c452eac19765380dead666e36d3711c
+docutils==0.21.2 \
+ --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2
+duckdb==1.3.0 \
+ --hash=sha256:8754c40dac0f26d9fb0363bbb5df02f7a61ce6a6728d5efc02c3bc925d7c89c3
+entrypoints==0.4 \
+ --hash=sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f
+et-xmlfile==1.1.0 \
+ --hash=sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada
+eval-type-backport==0.2.2 \
+ --hash=sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a
+executing==2.2.0 \
+ --hash=sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa
+faker==37.1.0 \
+ --hash=sha256:dc2f730be71cb770e9c715b13374d80dbcee879675121ab51f9683d262ae9a1c
+fasta2a==0.2.9 \
+ --hash=sha256:8b855b36f29fde6dcb79ad55be337a8165381b679bec829913009c55581e284e
+fastapi==0.115.12 \
+ --hash=sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d
+fastavro==1.10.0 \
+ --hash=sha256:567ff515f2a5d26d9674b31c95477f3e6022ec206124c62169bc2ffaf0889089
+fastjsonschema==2.21.1 \
+ --hash=sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667
+filelock==3.18.0 \
+ --hash=sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de
+flake8==7.1.1 \
+ --hash=sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213
+flask==3.1.0 \
+ --hash=sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136
+flexcache==0.3 \
+ --hash=sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32
+flexparser==0.4 \
+ --hash=sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846
+flit==3.12.0 \
+ --hash=sha256:2b4e7171dc22881fa6adc2dbf083e5ecc72520be3cd7587d2a803da94d6ef431
+flit-core==3.12.0 \
+ --hash=sha256:e7a0304069ea895172e3c7bb703292e992c5d1555dd1233ab7b5621b5b69e62c
+folium==0.19.5 \
+ --hash=sha256:4333fb3e6f3e9eedb231615d22c6d7df20aea5829554bd6908675865a37803b3
+fonttools==4.57.0 \
+ --hash=sha256:57e30241524879ea10cdf79c737037221f77cc126a8cdc8ff2c94d4a522504b9
+fqdn==1.5.1 \
+ --hash=sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014
+frozenlist==1.5.0 \
+ --hash=sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f
+fsspec==2025.3.2 \
+ --hash=sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711
+fuzzywuzzy==0.18.0 \
+ --hash=sha256:928244b28db720d1e0ee7587acf660ea49d7e4c632569cad4f1cd7e68a5f0993
+geographiclib==2.0 \
+ --hash=sha256:6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734
+geopandas==1.0.1 \
+ --hash=sha256:01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6
+geopy==2.4.1 \
+ --hash=sha256:ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7
+gitdb==4.0.12 \
+ --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf
+gitpython==3.1.44 \
+ --hash=sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110
+google-auth==2.38.0 \
+ --hash=sha256:e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a
+google-genai==1.16.1 \
+ --hash=sha256:6ae5d24282244f577ca4f0d95c09f75ab29e556602c9d3531b70161e34cd2a39
+graphene==3.4.3 \
+ --hash=sha256:820db6289754c181007a150db1f7fff544b94142b556d12e3ebc777a7bf36c71
+graphql-core==3.2.6 \
+ --hash=sha256:78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f
+graphql-relay==3.2.0 \
+ --hash=sha256:c9b22bd28b170ba1fe674c74384a8ff30a76c8e26f88ac3aa1584dd3179953e5
+greenlet==3.1.1 \
+ --hash=sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01
+griffe==1.7.2 \
+ --hash=sha256:1ed9c2e338a75741fc82083fe5a1bc89cb6142efe126194cc313e34ee6af5423
+groq==0.25.0 \
+ --hash=sha256:aadc78b40b1809cdb196b1aa8c7f7293108767df1508cafa3e0d5045d9328e7a
+guidata==3.9.0 \
+ --hash=sha256:96a19dc92850bdb3e463fa06e8c22793e090db42d1e72c6dae9bda1a98b61210
+h11==0.14.0 \
+ --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761
+h2==4.2.0 \
+ --hash=sha256:479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0
+h5py==3.12.1 \
+ --hash=sha256:e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc
+hatchling==1.27.0 \
+ --hash=sha256:d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b
+holoviews==1.20.2 \
+ --hash=sha256:1f892c04bc23e8a3a9cde082b606b9463c9ff78c3d0c00e2ddcc41fe6e738458
+hpack==4.1.0 \
+ --hash=sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496
+html5lib==1.1 \
+ --hash=sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d
+httpcore==1.0.7 \
+ --hash=sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd
+httpie==3.2.4 \
+ --hash=sha256:4bd0435cc4b9bca59501bc65089de96f3e93b393803f32a81951db62050ebf0b
+httpx==0.28.1 \
+ --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad
+httpx-sse==0.4.0 \
+ --hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
+huggingface-hub==0.33.0 \
+ --hash=sha256:e8668875b40c68f9929150d99727d39e5ebb8a05a98e4191b908dc7ded9074b3
+hupper==1.12.1 \
+ --hash=sha256:e872b959f09d90be5fb615bd2e62de89a0b57efc037bdf9637fb09cdf8552b19
+hvplot==0.11.2 \
+ --hash=sha256:9d576a0c2df0f1cf5041545f2a2eddcf962510162876991cae4d1779fad74556
+hypercorn==0.17.3 \
+ --hash=sha256:059215dec34537f9d40a69258d323f56344805efb462959e727152b0aa504547
+hyperframe==6.1.0 \
+ --hash=sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5
+hypothesis==6.130.4 \
+ --hash=sha256:cda4a57115d10ecbefe0a9cc8d69d20a13eb56ecbfe7c24eaee5d368c2b7c477
+id==1.5.0 \
+ --hash=sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658
+idna==3.10 \
+ --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
+imageio==2.37.0 \
+ --hash=sha256:11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed
+imagesize==1.4.1 \
+ --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b
+imbalanced-learn==0.13.0 \
+ --hash=sha256:7eb5859f7827cb3babfa5789978c22fe36e56527d9c9768df2d864d98d9b40fe
+importlib-metadata==8.6.1 \
+ --hash=sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e
+inflection==0.5.1 \
+ --hash=sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2
+iniconfig==2.1.0 \
+ --hash=sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760
+intervaltree==3.1.0 \
+ --hash=sha256:902b1b88936918f9b2a19e0e5eb7ccb430ae45cde4f39ea4b36932920d33952d
+ipycanvas==0.13.3 \
+ --hash=sha256:d37adb2f45d2fef1c3d33c69a0518055694d87827b2f577f3c426d7712f75daa
+ipykernel==6.29.5 \
+ --hash=sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5
+ipyleaflet==0.19.2 \
+ --hash=sha256:7cc9157848baca2e1793b96e79f8bdb1aa7340521d2b7d8a62aa8bc30eab5278
+ipympl==0.9.7 \
+ --hash=sha256:3698ee7eaa0b047a7603517d7aa1b71b32118a5f51754cab45ec5d994f67208f
+ipython==8.36.0 \
+ --hash=sha256:12b913914d010dcffa2711505ec8be4bf0180742d97f1e5175e51f22086428c1
+ipython-genutils==0.2.0 \
+ --hash=sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8
+ipython-sql==0.5.0 \
+ --hash=sha256:61b46ecffb956f62dbc17b5744cf70c649104c8db9afd821aa39b31f7cbb5d5b
+ipywidgets==8.1.6 \
+ --hash=sha256:446e7630a1d025bdc7635e1169fcc06f2ce33b5bd41c2003edeb4a47c8d4bbb1
+isoduration==20.11.0 \
+ --hash=sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042
+isort==5.13.2 \
+ --hash=sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6
+itsdangerous==2.2.0 \
+ --hash=sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef
+janus==2.0.0 \
+ --hash=sha256:7e6449d34eab04cd016befbd7d8c0d8acaaaab67cb59e076a69149f9031745f9
+jaraco-classes==3.4.0 \
+ --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790
+jaraco-context==6.0.1 \
+ --hash=sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4
+jaraco-functools==4.1.0 \
+ --hash=sha256:ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649
+jedi==0.19.2 \
+ --hash=sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9
+jellyfish==1.1.3 \
+ --hash=sha256:c8c70b1cc92ee15031db16db0d2ca7d5841744f5f626a35c29c3dd7b4ea7002b
+jinja2==3.1.6 \
+ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67
+jiter==0.9.0 \
+ --hash=sha256:099500d07b43f61d8bd780466d429c45a7b25411b334c60ca875fa775f68ccb0
+joblib==1.4.2 \
+ --hash=sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6
+json5==0.10.0 \
+ --hash=sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa
+jsonpatch==1.33 \
+ --hash=sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade
+jsonpointer==3.0.0 \
+ --hash=sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942
+jsonschema==4.23.0 \
+ --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566
+jsonschema-specifications==2024.10.1 \
+ --hash=sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf
+julia==0.6.2 \
+ --hash=sha256:90752f71376fdb9919439d20496c2dab24486dfa4fe8a831d6dd14a1bcbc04d1
+jupyter==1.1.1 \
+ --hash=sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83
+jupyter-bokeh==4.0.5 \
+ --hash=sha256:1110076c14c779071cf492646a1a871aefa8a477261e4721327a666e65df1a2c
+jupyter-client==8.6.3 \
+ --hash=sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f
+jupyter-console==6.6.3 \
+ --hash=sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485
+jupyter-core==5.7.2 \
+ --hash=sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409
+jupyter-events==0.12.0 \
+ --hash=sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb
+jupyter-leaflet==0.19.2 \
+ --hash=sha256:0d57e15e80c08a4360f0cde0b4c490beddc5d422bb0e9bc1c0b4479d3fb725a6
+jupyter-lsp==2.2.5 \
+ --hash=sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da
+jupyter-server==2.15.0 \
+ --hash=sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3
+jupyter-server-terminals==0.5.3 \
+ --hash=sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa
+jupyterlab==4.4.2 \
+ --hash=sha256:857111a50bed68542bf55dca784522fe728f9f88b4fe69e8c585db5c50900419
+jupyterlab-pygments==0.3.0 \
+ --hash=sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780
+jupyterlab-server==2.27.3 \
+ --hash=sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4
+jupyterlab-widgets==3.0.14 \
+ --hash=sha256:54c33e3306b7fca139d165d6190dc6c0627aafa5d14adfc974a4e9a3d26cb703
+keras==3.10.0 \
+ --hash=sha256:c095a6bf90cd50defadf73d4859ff794fad76b775357ef7bd1dbf96388dae7d3
+keyring==25.6.0 \
+ --hash=sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd
+kiwisolver==1.4.8 \
+ --hash=sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50
+langchain==0.3.25 \
+ --hash=sha256:931f7d2d1eaf182f9f41c5e3272859cfe7f94fc1f7cef6b3e5a46024b4884c21
+langchain-core==0.3.59 \
+ --hash=sha256:9686baaff43f2c8175535da13faf40e6866769015e93130c3c1e4243e7244d70
+langchain-text-splitters==0.3.8 \
+ --hash=sha256:e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02
+langsmith==0.3.42 \
+ --hash=sha256:18114327f3364385dae4026ebfd57d1c1cb46d8f80931098f0f10abe533475ff
+lazy-loader==0.4 \
+ --hash=sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc
+linkify-it-py==2.0.3 \
+ --hash=sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79
+llvmlite==0.44.0 \
+ --hash=sha256:eae7e2d4ca8f88f89d315b48c6b741dcb925d6a1042da694aa16ab3dd4cbd3a1
+lmfit==1.3.3 \
+ --hash=sha256:a9e9ec7d0d0ec962cc6c078ad1ec6c8311d3ac0e5f0947a00a91f5509dacc2b2
+locket==1.0.0 \
+ --hash=sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3
+logfire-api==3.12.0 \
+ --hash=sha256:fc092c2dcb24c8462ba776f3b0c2183f82e1cd55f86e29b38cf21a048e66a17d
+lxml==5.3.0 \
+ --hash=sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f
+mako==1.3.9 \
+ --hash=sha256:95920acccb578427a9aa38e37a186b1e43156c87260d7ba18ca63aa4c7cbd3a1
+markdown==3.7 \
+ --hash=sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803
+markdown-it-py==3.0.0 \
+ --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1
+markupsafe==3.0.2 \
+ --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87
+matplotlib==3.10.3 \
+ --hash=sha256:cf37d8c6ef1a48829443e8ba5227b44236d7fcaf7647caa3178a4ff9f7a5be05
+matplotlib-inline==0.1.7 \
+ --hash=sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca
+maturin==1.8.3 \
+ --hash=sha256:85f2b882d8235c1c1cb0a38d382ccd5b3ba0674d99cb548d49df9342cc688e36
+mccabe==0.7.0 \
+ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e
+mcp==1.9.3 \
+ --hash=sha256:69b0136d1ac9927402ed4cf221d4b8ff875e7132b0b06edd446448766f34f9b9
+mdit-py-plugins==0.4.2 \
+ --hash=sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636
+mdurl==0.1.2 \
+ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8
+mercantile==1.2.1 \
+ --hash=sha256:30f457a73ee88261aab787b7069d85961a5703bb09dc57a170190bc042cd023f
+mergedeep==1.3.4 \
+ --hash=sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307
+missingno==0.5.2 \
+ --hash=sha256:55782621ce09ba0f0a1d08e5bd6d6fe1946469fb03951fadf7d209911ca5b072
+mistralai==1.8.1 \
+ --hash=sha256:badfc7e6832d894b3e9071d92ad621212b7cccd7df622c6cacdb525162ae338f
+mistune==3.1.3 \
+ --hash=sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9
+mizani==0.11.4 \
+ --hash=sha256:5b6271dc3da2c88694dca2e0e0a7e1879f0e2fb046c789776f54d090a5243735
+ml-dtypes==0.5.1 \
+ --hash=sha256:9626d0bca1fb387d5791ca36bacbba298c5ef554747b7ebeafefb4564fc83566
+mlxtend==0.23.3 \
+ --hash=sha256:f9fec721c4121be87dac00e513456dde5bf56b7427750719c0a291cd58b6538e
+more-itertools==10.6.0 \
+ --hash=sha256:6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89
+mpld3==0.5.10 \
+ --hash=sha256:80877acce87ea447380fad7374668737505c8c0684aab05238e7c5dc1fab38c1
+mpmath==1.3.0 \
+ --hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c
+msal==1.30.0 \
+ --hash=sha256:423872177410cb61683566dc3932db7a76f661a5d2f6f52f02a047f101e1c1de
+msal-extensions==1.2.0 \
+ --hash=sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d
+msgpack==1.1.0 \
+ --hash=sha256:115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f
+multidict==6.4.3 \
+ --hash=sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db
+multipledispatch==1.0.0 \
+ --hash=sha256:0c53cd8b077546da4e48869f49b13164bebafd0c2a5afceb6bb6a316e7fb46e4
+mypy==1.15.0 \
+ --hash=sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22
+mypy-extensions==1.0.0 \
+ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d
+mysql-connector-python==9.2.0 \
+ --hash=sha256:b7d149bcc455cf606a4aa604d45267fba16c8abf36056b804f8d16e8f5e753c1
+namex==0.0.8 \
+ --hash=sha256:7ddb6c2bb0e753a311b7590f84f6da659dd0c05e65cb89d519d54c0a250c0487
+narwhals==1.36.0 \
+ --hash=sha256:e3c50dd1d769bc145f57ae17c1f0f0da6c3d397d62cdd0bb167e9b618e95c9d6
+nbclient==0.10.2 \
+ --hash=sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d
+nbconvert==7.16.6 \
+ --hash=sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b
+nbformat==5.10.4 \
+ --hash=sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b
+nest-asyncio==1.6.0 \
+ --hash=sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c
+networkx==3.4.2 \
+ --hash=sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f
+nh3==0.2.18 \
+ --hash=sha256:8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844
+nltk==3.9.1 \
+ --hash=sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1
+notebook==7.4.2 \
+ --hash=sha256:9ccef602721aaa5530852e3064710b8ae5415c4e2ce26f8896d0433222755259
+notebook-shim==0.2.4 \
+ --hash=sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef
+numba==0.61.2 \
+ --hash=sha256:97cf4f12c728cf77c9c1d7c23707e4d8fb4632b46275f8f3397de33e5877af18
+numpy==2.2.6 \
+ --hash=sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2
+numpydoc==1.8.0 \
+ --hash=sha256:72024c7fd5e17375dec3608a27c03303e8ad00c81292667955c6fea7a3ccf541
+openai==1.82.0 \
+ --hash=sha256:8c40647fea1816516cb3de5189775b30b5f4812777e40b8768f361f232b61b30
+opencv-python==4.11.0.86 \
+ --hash=sha256:085ad9b77c18853ea66283e98affefe2de8cc4c1f43eda4c100cf9b2721142ec
+openpyxl==3.1.5 \
+ --hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2
+opentelemetry-api==1.32.1 \
+ --hash=sha256:bbd19f14ab9f15f0e85e43e6a958aa4cb1f36870ee62b7fd205783a112012724
+optree==0.14.1 \
+ --hash=sha256:98f858daa588ccb70bb554087e87d4192852a11416e5b14f3ee70ae1861b92b0
+optuna==4.2.1 \
+ --hash=sha256:6d38199013441d3f70fac27136e05c0188c5f4ec3848db708ac311cbdeb30dbf
+orjson==3.10.16 \
+ --hash=sha256:86d127efdd3f9bf5f04809b70faca1e6836556ea3cc46e662b44dab3fe71f3d6
+osqp==0.6.7.post3 \
+ --hash=sha256:468588cfb690becba4d1f460c2a53e75530584e3efcf2caed59f5219032e6888
+outcome==1.3.0.post0 \
+ --hash=sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b
+overrides==7.7.0 \
+ --hash=sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49
+packaging==24.2 \
+ --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759
+pandas==2.2.3 \
+ --hash=sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13
+pandocfilters==1.5.1 \
+ --hash=sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc
+panel==1.6.3 \
+ --hash=sha256:ccd2a0587ab382bd55b8ea099706f31b64aadac697b8a41923d3b18b9ed618d6
+papermill==2.6.0 \
+ --hash=sha256:0f09da6ef709f3f14dde77cb1af052d05b14019189869affff374c9e612f2dd5
+param==2.2.0 \
+ --hash=sha256:777f8c7b66ab820b70ea5ad09faaa6818308220caae89da3b5c5f359faa72a5e
+parso==0.8.4 \
+ --hash=sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18
+partd==1.4.2 \
+ --hash=sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f
+pathspec==0.12.1 \
+ --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08
+patsy==1.0.1 \
+ --hash=sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c
+pep8==1.7.1 \
+ --hash=sha256:b22cfae5db09833bb9bd7c8463b53e1a9c9b39f12e304a8d0bba729c501827ee
+pexpect==4.9.0 \
+ --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523
+pg8000==1.31.2 \
+ --hash=sha256:436c771ede71af4d4c22ba867a30add0bc5c942d7ab27fadbb6934a487ecc8f6
+pickleshare==0.7.5 \
+ --hash=sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56
+pillow==11.1.0 \
+ --hash=sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf
+platformdirs==4.3.7 \
+ --hash=sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94
+plotly==6.0.1 \
+ --hash=sha256:4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768
+plotnine==0.13.6 \
+ --hash=sha256:4acc1af29fa4e91e726b67d49277e8368f62e1c817f01bf14ecd8ca5e83bfaea
+plotpy==2.7.4 \
+ --hash=sha256:716fee6b2c2a2156fd267e3941bcef28b3b169e6f95d2ab7f1417ef8c76f8a14
+pluggy==1.5.0 \
+ --hash=sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669
+ply==3.11 \
+ --hash=sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce
+polars==1.31.0 \
+ --hash=sha256:3fd874d3432fc932863e8cceff2cff8a12a51976b053f2eb6326a0672134a632
+portalocker==2.7.0 \
+ --hash=sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983
+prettytable==3.16.0 \
+ --hash=sha256:b5eccfabb82222f5aa46b798ff02a8452cf530a352c31bddfa29be41242863aa
+prince==0.16.0 \
+ --hash=sha256:7e21a78d4dd06ca3ec526ee714a50b349f26de3fca6b79664150a951b31688f3
+priority==2.0.0 \
+ --hash=sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa
+prometheus-client==0.21.1 \
+ --hash=sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301
+prompt-toolkit==3.0.51 \
+ --hash=sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07
+propcache==0.3.1 \
+ --hash=sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3
+protobuf==6.30.2 \
+ --hash=sha256:7653c99774f73fe6b9301b87da52af0e69783a2e371e8b599b3e9cb4da4b12b9
+psutil==7.0.0 \
+ --hash=sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553
+psygnal==0.12.0 \
+ --hash=sha256:25a9f2db710a6cd2566b3e0e03cf6e04d56276f36ac86b42fa22d81f9a4ac0f2
+ptpython==3.0.29 \
+ --hash=sha256:65d75c4871859e4305a020c9b9e204366dceb4d08e0e2bd7b7511bd5e917a402
+ptyprocess==0.7.0 \
+ --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35
+pure-eval==0.2.3 \
+ --hash=sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0
+pyarrow==20.0.0 \
+ --hash=sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b
+pyasn1==0.6.1 \
+ --hash=sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629
+pyasn1-modules==0.4.1 \
+ --hash=sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd
+pybind11==2.13.6 \
+ --hash=sha256:237c41e29157b962835d356b370ededd57594a26d5894a795960f0047cb5caf5
+pycodestyle==2.12.0 \
+ --hash=sha256:949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4
+pycparser==2.22 \
+ --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
+pyct==0.5.0 \
+ --hash=sha256:a4038a8885059ab8cac6f946ea30e0b5e6bdbe0b92b6723f06737035f9d65e8c
+pydantic==2.10.6 \
+ --hash=sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584
+pydantic-ai-slim==0.2.9 \
+ --hash=sha256:d954ff84cb250d7150a7ed694e4f1f92f820205d036ee006d02fce3e62a3bc4e
+pydantic-core==2.27.2 \
+ --hash=sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9
+pydantic-evals==0.2.9 \
+ --hash=sha256:62035ae3a5321e4d892c7372ef91af0f46b675863e827f011d5cb8550dede400
+pydantic-graph==0.2.9 \
+ --hash=sha256:38ad929a0ec205bd7d5875b0b408d4f13448276aa89b6ce2a1143a7552b070ce
+pydantic-settings==2.8.1 \
+ --hash=sha256:81942d5ac3d905f7f3ee1a70df5dfb62d5569c12f51a5a647defc1c3d9ee2e9c
+pydeck==0.9.1 \
+ --hash=sha256:b3f75ba0d273fc917094fa61224f3f6076ca8752b93d46faf3bcfd9f9d59b038
+pydocstyle==6.3.0 \
+ --hash=sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019
+pydub==0.25.1 \
+ --hash=sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6
+pyerfa==2.0.1.5 \
+ --hash=sha256:66292d437dcf75925b694977aa06eb697126e7b86553e620371ed3e48b5e0ad0
+pyflakes==3.2.0 \
+ --hash=sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a
+pygithub==2.6.1 \
+ --hash=sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3
+pygments==2.19.1 \
+ --hash=sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c
+pyjwt==2.10.1 \
+ --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb
+pylint==3.3.6 \
+ --hash=sha256:8b7c2d3e86ae3f94fb27703d521dd0b9b6b378775991f504d7c3a6275aa0a6a6
+pylint-venv==3.0.4 \
+ --hash=sha256:31006a3df398f58f962c9e5620e756b284e8b2bc490594ce5ee5da41920cb32c
+pyls-spyder==0.4.0 \
+ --hash=sha256:1505d975f866a343d0554b6dab41b53717f4b4bc6df450dfd7d48f889fe450b9
+pymongo==4.10.1 \
+ --hash=sha256:dcc07b1277e8b4bf4d7382ca133850e323b7ab048b8353af496d050671c7ac52
+pympler==1.1 \
+ --hash=sha256:5b223d6027d0619584116a0cbc28e8d2e378f7a79c1e5e024f9ff3b673c58506
+pynacl==1.5.0 \
+ --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93
+pynndescent==0.5.13 \
+ --hash=sha256:69aabb8f394bc631b6ac475a1c7f3994c54adf3f51cd63b2730fefba5771b949
+pyodbc==5.2.0 \
+ --hash=sha256:b1f5686b142759c5b2bdbeaa0692622c2ebb1f10780eb3c174b85f5607fbcf55
+pyogrio==0.10.0 \
+ --hash=sha256:2a3e09839590d71ff832aa95c4f23fa00a2c63c3de82c1fbd4fb8d265792acfc
+pyomo==6.9.2 \
+ --hash=sha256:13ebb2f974f97afa626c2712d4f27e09a1c3d18ca11755676b743504a76e5161
+pypandoc==1.15 \
+ --hash=sha256:4ededcc76c8770f27aaca6dff47724578428eca84212a31479403a9731fc2b16
+pyparsing==3.2.3 \
+ --hash=sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf
+pypdf==5.4.0 \
+ --hash=sha256:db994ab47cadc81057ea1591b90e5b543e2b7ef2d0e31ef41a9bfe763c119dab
+pyproj==3.7.0 \
+ --hash=sha256:0692f806224e8ed82fe4acfa57268ff444fdaf9f330689f24c0d96e59480cce1
+pyproject-hooks==1.2.0 \
+ --hash=sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913
+pyqt5==5.15.11 \
+ --hash=sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517
+pyqt5-qt5==5.15.2 \
+ --hash=sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962
+pyqt5-sip==12.17.0 \
+ --hash=sha256:54c31de7706d8a9a8c0fc3ea2c70468aba54b027d4974803f8eace9c22aad41c
+pyqtgraph==0.13.7 \
+ --hash=sha256:7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a
+pyqtwebengine==5.15.7 \
+ --hash=sha256:bd5e8c426d6f6b352cd15800d64a89b2a4a11e098460b818c7bdcf5e5612e44f
+pyqtwebengine-qt5==5.15.2 \
+ --hash=sha256:24231f19e1595018779977de6722b5c69f3d03f34a5f7574ff21cd1e764ef76d
+pyserial==3.5 \
+ --hash=sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0
+pysocks==1.7.1 \
+ --hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5
+pyspnego==0.11.2 \
+ --hash=sha256:74abc1fb51e59360eb5c5c9086e5962174f1072c7a50cf6da0bda9a4bcfdfbd4
+pytest==8.3.5 \
+ --hash=sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820
+python-barcode==0.15.1 \
+ --hash=sha256:057636fba37369c22852410c8535b36adfbeb965ddfd4e5b6924455d692e0886
+python-dateutil==2.8.2 \
+ --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
+python-dotenv==1.1.0 \
+ --hash=sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d
+python-json-logger==3.3.0 \
+ --hash=sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7
+python-lsp-black==2.0.0 \
+ --hash=sha256:d5efdee45f5fa9e5241f5d4d396cd46127f45c85817916b1fd92c2986652bf7e
+python-lsp-jsonrpc==1.1.2 \
+ --hash=sha256:7339c2e9630ae98903fdaea1ace8c47fba0484983794d6aafd0bd8989be2b03c
+python-lsp-server==1.12.2 \
+ --hash=sha256:750116459449184ba20811167cdf96f91296ae12f1f65ebd975c5c159388111b
+python-multipart==0.0.20 \
+ --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104
+python-slugify==8.0.4 \
+ --hash=sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8
+pythonqwt==0.14.5 \
+ --hash=sha256:be5a9d2e1ba22aaa02eb397c5b3b5e4e1d9ed2c08f45554d8b920d8fc3be6dc7
+pytoolconfig==1.3.1 \
+ --hash=sha256:5d8cea8ae1996938ec3eaf44567bbc5ef1bc900742190c439a44a704d6e1b62b
+pytz==2025.2 \
+ --hash=sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00
+pyuca==1.2 \
+ --hash=sha256:abaa12e1bd2c7c68ca8396ff8383bc0654a739cef3ae68fd7af58bf29af0a91e
+pyusb==1.3.1 \
+ --hash=sha256:bf9b754557af4717fe80c2b07cc2b923a9151f5c08d17bdb5345dac09d6a0430
+pyviz-comms==3.0.4 \
+ --hash=sha256:a40d17db26ec13cf975809633804e712bd24b473e77388c193c44043f85d0b25
+pywavelets==1.8.0 \
+ --hash=sha256:810a23a631da596fef7196ddec49b345b1aab13525bb58547eeebe1769edbbc1
+pywin32==310 \
+ --hash=sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060
+pywin32-ctypes==0.2.3 \
+ --hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8
+pywinpty==2.0.15 \
+ --hash=sha256:83a8f20b430bbc5d8957249f875341a60219a4e971580f2ba694fbfb54a45ebc
+pyyaml==6.0.2 \
+ --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8
+pyzmq==26.4.0 \
+ --hash=sha256:056a97aab4064f526ecb32f4343917a4022a5d9efb6b9df990ff72e1879e40be
+qdarkstyle==3.2.3 \
+ --hash=sha256:ea980ee426d594909cf1058306832af71ff6cbad6f69237b036d1550635aefbc
+qdldl==0.1.7.post5 \
+ --hash=sha256:13dfc0b225a5c180512488fa51f1771e8fa3c06d7fce9fd3c1d018bc03ba0eec
+qrcode==8.0 \
+ --hash=sha256:9fc05f03305ad27a709eb742cf3097fa19e6f6f93bb9e2f039c0979190f6f1b1
+qstylizer==0.2.4 \
+ --hash=sha256:8f384dfe86f9edb0bb596b93663a51f124f0794b94fd54057cc7cf9cea59fb6f
+qtawesome==1.4.0 \
+ --hash=sha256:a4d689fa071c595aa6184171ce1f0f847677cb8d2db45382c43129f1d72a3d93
+qtconsole==5.6.1 \
+ --hash=sha256:3d22490d9589bace566ad4f3455b61fa2209156f40e87e19e2c3cb64e9264950
+qtpy==2.4.3 \
+ --hash=sha256:72095afe13673e017946cc258b8d5da43314197b741ed2890e563cf384b51aa1
+quantecon==0.7.2 \
+ --hash=sha256:d1333ca7bc3046efe3655d9eeeefb299051b00870b8608cb5bc0b88e3bdb8b67
+quart==0.20.0 \
+ --hash=sha256:003c08f551746710acb757de49d9b768986fd431517d0eb127380b656b98b8f1
+rapidfuzz==3.13.0 \
+ --hash=sha256:6e2065f68fb1d0bf65adc289c1bdc45ba7e464e406b319d67bb54441a1b9da9e
+readme-renderer==44.0 \
+ --hash=sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151
+redis==5.2.1 \
+ --hash=sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4
+referencing==0.36.2 \
+ --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0
+regex==2024.11.6 \
+ --hash=sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b
+reportlab==4.3.1 \
+ --hash=sha256:0f37dd16652db3ef84363cf744632a28c38bd480d5bf94683466852d7bb678dd
+requests==2.32.3 \
+ --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
+requests-ntlm==1.3.0 \
+ --hash=sha256:4c7534a7d0e482bb0928531d621be4b2c74ace437e88c5a357ceb7452d25a510
+requests-toolbelt==1.0.0 \
+ --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06
+rfc3339-validator==0.1.4 \
+ --hash=sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa
+rfc3986==2.0.0 \
+ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd
+rfc3986-validator==0.1.1 \
+ --hash=sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9
+rich==14.0.0 \
+ --hash=sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0
+rope==1.13.0 \
+ --hash=sha256:b435a0c0971244fdcd8741676a9fae697ae614c20cc36003678a7782f25c0d6c
+rpds-py==0.24.0 \
+ --hash=sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034
+rsa==4.7.2 \
+ --hash=sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2
+rtree==1.4.0 \
+ --hash=sha256:ba83efc7b7563905b1bfdfc14490c4bfb59e92e5e6156bdeb6ec5df5117252f4
+rx==3.2.0 \
+ --hash=sha256:922c5f4edb3aa1beaa47bf61d65d5380011ff6adcd527f26377d05cb73ed8ec8
+scikit-image==0.25.2 \
+ --hash=sha256:bdd2b8c1de0849964dbc54037f36b4e9420157e67e45a8709a80d727f52c7da2
+scikit-learn==1.6.1 \
+ --hash=sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52
+scipy==1.15.3 \
+ --hash=sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed
+scramp==1.4.5 \
+ --hash=sha256:50e37c464fc67f37994e35bee4151e3d8f9320e9c204fca83a5d313c121bbbe7
+scs==3.2.7.post2 \
+ --hash=sha256:2995d4099943c3fd754b3e39fe178a9c03dcb9c7d84b40f64ac5eb26d8d6085a
+seaborn==0.13.2 \
+ --hash=sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987
+send2trash==1.8.3 \
+ --hash=sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9
+setuptools==79.0.1 \
+ --hash=sha256:e147c0549f27767ba362f9da434eab9c5dc0045d5304feb602a0af001089fc51
+shapely==2.1.0 \
+ --hash=sha256:f4f47e631aa4f9ec5576eac546eb3f38802e2f82aeb0552f9612cb9a14ece1db
+shellingham==1.5.4 \
+ --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686
+simplejson==3.19.3 \
+ --hash=sha256:1e662336db50ad665777e6548b5076329a94a0c3d4a0472971c588b3ef27de3a
+simpy==4.1.1 \
+ --hash=sha256:7c5ae380240fd2238671160e4830956f8055830a8317edf5c05e495b3823cd88
+six==1.17.0 \
+ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274
+sklearn-compat==0.1.3 \
+ --hash=sha256:a8aaf8ef711988cbd63f187c5560b5f16b25df663aaa1d2d0e1291341d339f80
+skrub==0.5.3 \
+ --hash=sha256:b6ba417fa83d1f7e9a69656e0860b061381b9bd19808692a2b5bef8588c72775
+smmap==5.0.2 \
+ --hash=sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e
+sniffio==1.3.1 \
+ --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2
+snowballstemmer==2.2.0 \
+ --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a
+sortedcontainers==2.4.0 \
+ --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0
+sounddevice==0.5.1 \
+ --hash=sha256:4313b63f2076552b23ac3e0abd3bcfc0c1c6a696fc356759a13bd113c9df90f1
+soupsieve==2.6 \
+ --hash=sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9
+sphinx==8.1.3 \
+ --hash=sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2
+sphinx-rtd-theme==3.0.2 \
+ --hash=sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13
+sphinxcontrib-applehelp==2.0.0 \
+ --hash=sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5
+sphinxcontrib-devhelp==2.0.0 \
+ --hash=sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2
+sphinxcontrib-htmlhelp==2.1.0 \
+ --hash=sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8
+sphinxcontrib-jquery==4.1 \
+ --hash=sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae
+sphinxcontrib-jsmath==1.0.1 \
+ --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178
+sphinxcontrib-qthelp==2.0.0 \
+ --hash=sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb
+sphinxcontrib-serializinghtml==2.0.0 \
+ --hash=sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331
+spyder==6.0.7 \
+ --hash=sha256:b725569bb8ddc7b0aab73d747d85312dc0456978370cc0f9b1a101c0fe4f076b
+spyder-kernels==3.0.5 \
+ --hash=sha256:9cc808e0ec4426b9ba911128e221fa2234e6c8d6e08526132e90112ff9c2bb7c
+sqlalchemy==2.0.40 \
+ --hash=sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0
+sqlite-bro==0.13.1 \
+ --hash=sha256:c26033b0af133049ca578b5fd30b2372f002e7ff934b39774aa4d2da7638c23d
+sqlite-fts4==1.0.3 \
+ --hash=sha256:0359edd8dea6fd73c848989e1e2b1f31a50fe5f9d7272299ff0e8dbaa62d035f
+sqlite-utils==3.38 \
+ --hash=sha256:8a27441015c3b2ef475f555861f7a2592f73bc60d247af9803a11b65fc605bf9
+sqlparse==0.5.3 \
+ --hash=sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca
+squarify==0.4.4 \
+ --hash=sha256:d7597724e29d48aa14fd2f551060d6b09e1f0a67e4cd3ea329fe03b4c9a56f11
+sse-starlette==2.2.1 \
+ --hash=sha256:6410a3d3ba0c89e7675d4c273a301d64649c03a5ef1ca101f10b47f895fd0e99
+sspilib==0.2.0 \
+ --hash=sha256:40a97ca83e503a175d1dc9461836994e47e8b9bcf56cab81a2c22e27f1993079
+stack-data==0.6.3 \
+ --hash=sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695
+starlette==0.46.2 \
+ --hash=sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35
+statsmodels==0.14.4 \
+ --hash=sha256:7f7917a51766b4e074da283c507a25048ad29a18e527207883d73535e0dc6184
+streamlit==1.46.0 \
+ --hash=sha256:f8624acabafcf18611a0fac2635cf181a7ba922b45bd131ae15fc8f80e1a5482
+superqt==0.7.3 \
+ --hash=sha256:8f7d141665b31baa484747f324fc9fc2d14223f2fefc92ffed6ea35c92221304
+sv-ttk==2.6.0 \
+ --hash=sha256:4319c52edf2e14732fe84bdc9788e26f9e9a1ad79451ec0f89f0120ffc8105d9
+sympy==1.14.0 \
+ --hash=sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5
+tabulate==0.9.0 \
+ --hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f
+tblib==3.1.0 \
+ --hash=sha256:670bb4582578134b3d81a84afa1b016128b429f3d48e6cbbaecc9d15675e984e
+tenacity==9.1.2 \
+ --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138
+termcolor==3.1.0 \
+ --hash=sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa
+terminado==0.18.1 \
+ --hash=sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0
+text-unidecode==1.3 \
+ --hash=sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8
+textdistance==4.6.3 \
+ --hash=sha256:0cb1b2cc8e3339ddc3e0f8c870e49fb49de6ecc42a718917308b3c971f34aa56
+thefuzz==0.22.1 \
+ --hash=sha256:59729b33556850b90e1093c4cf9e618af6f2e4c985df193fdf3c5b5cf02ca481
+threadpoolctl==3.6.0 \
+ --hash=sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb
+three-merge==0.1.1 \
+ --hash=sha256:dd219f4696aa0bbec6099ac3528b4de0450ff9bde862dd8f6d6f52e745f83464
+tifffile==2025.3.30 \
+ --hash=sha256:0ed6eee7b66771db2d1bfc42262a51b01887505d35539daef118f4ff8c0f629c
+tiktoken==0.9.0 \
+ --hash=sha256:5a62d7a25225bafed786a524c1b9f0910a1128f4232615bf3f8257a73aaa3b16
+tinycss2==1.4.0 \
+ --hash=sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289
+tokenizers==0.21.1 \
+ --hash=sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382
+toml==0.10.2 \
+ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b
+tomli==2.2.1 \
+ --hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4
+tomli-w==1.2.0 \
+ --hash=sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90
+tomlkit==0.13.2 \
+ --hash=sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde
+toolz==1.0.0 \
+ --hash=sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236
+tornado==6.5.1 \
+ --hash=sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b
+tqdm==4.67.1 \
+ --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2
+traitlets==5.14.3 \
+ --hash=sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f
+traittypes==0.2.1 \
+ --hash=sha256:1340af133810b6eee1a2eb2e988f862b0d12b6c2d16f282aaf3207b782134c2e
+trio==0.30.0 \
+ --hash=sha256:3bf4f06b8decf8d3cf00af85f40a89824669e2d033bb32469d34840edcfc22a5
+trove-classifiers==2025.5.9.12 \
+ --hash=sha256:e381c05537adac78881c8fa345fd0e9970159f4e4a04fcc42cfd3129cca640ce
+twine==6.1.0 \
+ --hash=sha256:a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384
+typer==0.15.2 \
+ --hash=sha256:46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc
+types-python-dateutil==2.9.0.20240316 \
+ --hash=sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b
+types-requests==2.32.0.20250328 \
+ --hash=sha256:72ff80f84b15eb3aa7a8e2625fffb6a93f2ad5a0c20215fc1dcfa61117bcb2a2
+typing-extensions==4.13.2 \
+ --hash=sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c
+typing-inspection==0.4.0 \
+ --hash=sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f
+tzdata==2025.2 \
+ --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8
+tzlocal==5.3.1 \
+ --hash=sha256:eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d
+uc-micro-py==1.0.3 \
+ --hash=sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5
+ujson==5.10.0 \
+ --hash=sha256:38665e7d8290188b1e0d57d584eb8110951a9591363316dd41cf8686ab1d0abc
+umap-learn==0.5.7 \
+ --hash=sha256:6a7e0be2facfa365a5ed6588447102bdbef32a0ef449535c25c97ea7e680073c
+uncertainties==3.2.2 \
+ --hash=sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7
+uri-template==1.3.0 \
+ --hash=sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363
+urllib3==2.4.0 \
+ --hash=sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813
+uvicorn==0.34.2 \
+ --hash=sha256:deb49af569084536d269fe0a6d67e3754f104cf03aba7c11c40f01aadf33c403
+vega-datasets==0.9.0 \
+ --hash=sha256:3d7c63917be6ca9b154b565f4779a31fedce57b01b5b9d99d8a34a7608062a1d
+waitress==3.0.0 \
+ --hash=sha256:2a06f242f4ba0cc563444ca3d1998959447477363a2d7e9b8b4d75d35cfd1669
+watchdog==6.0.0 \
+ --hash=sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680
+wcwidth==0.2.13 \
+ --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859
+webcolors==24.11.1 \
+ --hash=sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9
+webencodings==0.5.1 \
+ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78
+websocket-client==1.8.0 \
+ --hash=sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526
+websockets==14.2 \
+ --hash=sha256:44bba1a956c2c9d268bdcdf234d5e5ff4c9b6dc3e300545cbe99af59dda9dcce
+werkzeug==3.1.3 \
+ --hash=sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e
+whatthepatch==1.0.7 \
+ --hash=sha256:1b6f655fd31091c001c209529dfaabbabdbad438f5de14e3951266ea0fc6e7ed
+wheel==0.45.1 \
+ --hash=sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248
+widgetsnbextension==4.0.14 \
+ --hash=sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575
+wordcloud==1.9.4 \
+ --hash=sha256:360977705d0808a1795fcbe98afb5dc4833cb4bb8e421cbb10e93ef0bce816ff
+wrapt==1.16.0 \
+ --hash=sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8
+wsproto==1.2.0 \
+ --hash=sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736
+xarray==2025.4.0 \
+ --hash=sha256:b27defd082c5cb85d32c695708de6bb05c2838fb7caaf3f952982e602a35b9b8
+xlsxwriter==3.2.3 \
+ --hash=sha256:593f8296e8a91790c6d0378ab08b064f34a642b3feb787cf6738236bd0a4860d
+xyzservices==2023.10.1 \
+ --hash=sha256:6a4c38d3a9f89d3e77153eff9414b36a8ee0850c9e8b85796fd1b2a85b8dfd68
+yapf==0.40.1 \
+ --hash=sha256:b8bfc1f280949153e795181768ca14ef43d7312629a06c43e7abd279323af313
+yarl==1.18.3 \
+ --hash=sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477
+yt-dlp==2025.2.19 \
+ --hash=sha256:3ed218eaeece55e9d715afd41abc450dc406ee63bf79355169dfde312d38fdb8
+zict==3.0.0 \
+ --hash=sha256:5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae
+zipp==3.21.0 \
+ --hash=sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931
+zstandard==0.23.0 \
+ --hash=sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b
diff --git a/changelogs/requir.64-3_13_5_0slim.txt b/changelogs/requir.64-3_13_5_0slim.txt
new file mode 100644
index 00000000..d01e834e
--- /dev/null
+++ b/changelogs/requir.64-3_13_5_0slim.txt
@@ -0,0 +1,998 @@
+absl-py==2.2.2 \
+ --hash=sha256:e5797bc6abe45f64fd95dc06394ca3f2bedf3b5d895e9da691c9ee3397d70092
+adbc-driver-manager==1.3.0 \
+ --hash=sha256:0d327006f5993385b3625e3524a851ea7050aa3b1716bddd52c8892ac9c42145
+aiofiles==23.2.1 \
+ --hash=sha256:19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107
+aiohappyeyeballs==2.6.1 \
+ --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8
+aiohttp==3.11.18 \
+ --hash=sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01
+aiosignal==1.3.2 \
+ --hash=sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5
+aiosqlite==0.20.0 \
+ --hash=sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6
+alabaster==0.7.16 \
+ --hash=sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92
+alembic==1.15.2 \
+ --hash=sha256:2e76bd916d547f6900ec4bb5a90aeac1485d2c92536923d0b138c02b126edc53
+altair==5.5.0 \
+ --hash=sha256:91a310b926508d560fe0148d02a194f38b824122641ef528113d029fcd129f8c
+annotated-types==0.7.0 \
+ --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53
+ansicolors==1.1.8 \
+ --hash=sha256:00d2dde5a675579325902536738dd27e4fac1fd68f773fe36c21044eb559e187
+anthropic==0.51.0 \
+ --hash=sha256:b8b47d482c9aa1f81b923555cebb687c2730309a20d01be554730c8302e0f62a
+anyio==4.9.0 \
+ --hash=sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c
+anywidget==0.9.18 \
+ --hash=sha256:944b82ef1dd17b8ff0fb6d1f199f613caf9111338e6e2857da478f6e73770cb8
+appdirs==1.4.4 \
+ --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128
+argcomplete==3.6.2 \
+ --hash=sha256:65b3133a29ad53fb42c48cf5114752c7ab66c1c38544fdf6460f450c09b42591
+argon2-cffi==23.1.0 \
+ --hash=sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea
+argon2-cffi-bindings==21.2.0 \
+ --hash=sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f
+array-api-compat==1.12.0 \
+ --hash=sha256:a0b4795b6944a9507fde54679f9350e2ad2b1e2acf4a2408a098cdc27f890a8b
+arrow==1.3.0 \
+ --hash=sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80
+asgi-csrf==0.11 \
+ --hash=sha256:03ac140115f39d4295288a9adf74fdc6ae607f6ef44abee8466520458207242b
+asgiref==3.8.1 \
+ --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47
+asn1crypto==1.5.1 \
+ --hash=sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67
+asteval==1.0.5 \
+ --hash=sha256:082b95312578affc8a6d982f7d92b7ac5de05634985c87e7eedd3188d31149fa
+astroid==3.3.9 \
+ --hash=sha256:d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248
+astropy==6.1.6 \
+ --hash=sha256:fafc65f47dedcc4a8112bce8b67f215a8076af214be34a2c34abc96d078f2b37
+astropy-iers-data==0.2024.12.23.0.33.24 \
+ --hash=sha256:40d3c6b6a5cf4dc6ad91b92b7e0f949e5366234e3c4440302247429fc8294302
+asttokens==3.0.0 \
+ --hash=sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2
+async-lru==2.0.5 \
+ --hash=sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943
+asyncssh==2.20.0 \
+ --hash=sha256:af6888d937c07a4bf31293335a6166b4d87608cdb5957b49547da6ad87ecf174
+atomicwrites==1.4.0 \
+ --hash=sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197
+attrs==25.3.0 \
+ --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3
+autopep8==2.0.4 \
+ --hash=sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb
+azure-core==1.32.0 \
+ --hash=sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4
+azure-cosmos==4.9.0 \
+ --hash=sha256:3b60eaa01a16a857d0faf0cec304bac6fa8620a81bc268ce760339032ef617fe
+azure-identity==1.21.0 \
+ --hash=sha256:258ea6325537352440f71b35c3dffe9d240eae4a5126c1b7ce5efd5766bd9fd9
+babel==2.17.0 \
+ --hash=sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2
+baresql==1.0.0 \
+ --hash=sha256:a24d17f46beb47c221f328f7e06710e3896c6203a8e1909788d7128f27b86f01
+bcrypt==4.3.0 \
+ --hash=sha256:e53e074b120f2877a35cc6c736b8eb161377caae8925c17688bd46ba56daaa5b
+beautifulsoup4==4.13.3 \
+ --hash=sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16
+binaryornot==0.4.4 \
+ --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4
+black==25.1.0 \
+ --hash=sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18
+bleach==6.2.0 \
+ --hash=sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e
+blinker==1.9.0 \
+ --hash=sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc
+bokeh==3.7.3 \
+ --hash=sha256:b0e79dd737f088865212e4fdcb0f3b95d087f0f088bf8ca186a300ab1641e2c7
+branca==0.8.1 \
+ --hash=sha256:d29c5fab31f7c21a92e34bf3f854234e29fecdcf5d2df306b616f20d816be425
+brotli==1.1.0 \
+ --hash=sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b
+build==1.2.2.post1 \
+ --hash=sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5
+cachetools==5.5.2 \
+ --hash=sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a
+certifi==2025.1.31 \
+ --hash=sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe
+cffi==1.17.1 \
+ --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a
+chardet==5.2.0 \
+ --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970
+charset-normalizer==3.4.2 \
+ --hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980
+clarabel==0.10.0 \
+ --hash=sha256:7871b6f499ad66f71d4e7fb40754c4d986d4316f242beb62ff4f63a69785a50c
+click==8.1.8 \
+ --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2
+click-default-group==1.2.4 \
+ --hash=sha256:9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f
+cloudpickle==3.1.1 \
+ --hash=sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e
+cohere==5.15.0 \
+ --hash=sha256:22ff867c2a6f2fc2b585360c6072f584f11f275ef6d9242bac24e0fa2df1dfb5
+colorama==0.4.6 \
+ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
+colorcet==3.1.0 \
+ --hash=sha256:2a7d59cc8d0f7938eeedd08aad3152b5319b4ba3bcb7a612398cc17a384cb296
+colorlog==6.9.0 \
+ --hash=sha256:5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff
+comm==0.2.2 \
+ --hash=sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3
+contourpy==1.3.2 \
+ --hash=sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9
+cookiecutter==2.6.0 \
+ --hash=sha256:a54a8e37995e4ed963b3e82831072d1ad4b005af736bb17b99c2cbd9d41b6e2d
+cryptography==44.0.0 \
+ --hash=sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede
+cvxopt==1.3.2 \
+ --hash=sha256:0a0987966009ad383de0918e61255d34ed9ebc783565bcb15470d4155010b6bf
+cvxpy==1.6.4 \
+ --hash=sha256:1eed0ac8d8c0141abc73535d652f7b133acfbab2149f5d9d6fa348353c90b442
+cycler==0.12.1 \
+ --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30
+cython==3.1.1 \
+ --hash=sha256:e000f0533eedf3d6dfbe30bb3c58a054c58f0a7778390342fa577a0dc47adab3
+cytoolz==1.0.1 \
+ --hash=sha256:90e577e08d3a4308186d9e1ec06876d4756b1e8164b92971c69739ea17e15297
+dask==2025.4.1 \
+ --hash=sha256:aacbb0a9667856fe58385015efd64aca22f0c0b2c5e1b5e633531060303bb4be
+datasette==0.65.1 \
+ --hash=sha256:ba7adf717ddcc24a2a8ac57890fffd384a2ebb909b342e4f731ba09eba764305
+datasette-graphql==2.2 \
+ --hash=sha256:cd9f61afdcaab1ce4ff6775296e6ece99305bf05cbfae4c1c938a6c9e60cd485
+datashader==0.17.0 \
+ --hash=sha256:39421ff999294913e63d41954af955a5dece5d0c55d8fce1426043d70b22d07a
+deap==1.4.2 \
+ --hash=sha256:1abab976c75b0f18c36e81f968fcc77fac69fc9bedbab8be3323ca376f6fcfa4
+debugpy==1.8.13 \
+ --hash=sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8
+decorator==5.2.1 \
+ --hash=sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a
+defusedxml==0.7.1 \
+ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61
+deprecated==1.2.14 \
+ --hash=sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c
+diff-match-patch==20241021 \
+ --hash=sha256:93cea333fb8b2bc0d181b0de5e16df50dd344ce64828226bda07728818936782
+dill==0.4.0 \
+ --hash=sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049
+distributed==2025.4.1 \
+ --hash=sha256:3a7834451b04ef059928045eab6ff6d88ad7bcfd48adc99403127d9a6818b5fa
+distro==1.9.0 \
+ --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2
+django==5.2 \
+ --hash=sha256:91ceed4e3a6db5aedced65e3c8f963118ea9ba753fc620831c77074e620e7d83
+dnspython==2.7.0 \
+ --hash=sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86
+docstring-to-markdown==0.17 \
+ --hash=sha256:fd7d5094aa83943bf5f9e1a13701866b7c452eac19765380dead666e36d3711c
+docutils==0.21.2 \
+ --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2
+duckdb==1.3.0 \
+ --hash=sha256:fbdfc1c0b83b90f780ae74038187ee696bb56ab727a289752372d7ec42dda65b
+entrypoints==0.4 \
+ --hash=sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f
+et-xmlfile==1.1.0 \
+ --hash=sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada
+eval-type-backport==0.2.2 \
+ --hash=sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a
+executing==2.2.0 \
+ --hash=sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa
+faker==37.1.0 \
+ --hash=sha256:dc2f730be71cb770e9c715b13374d80dbcee879675121ab51f9683d262ae9a1c
+fasta2a==0.2.9 \
+ --hash=sha256:8b855b36f29fde6dcb79ad55be337a8165381b679bec829913009c55581e284e
+fastapi==0.115.12 \
+ --hash=sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d
+fastavro==1.10.0 \
+ --hash=sha256:86baf8c9740ab570d0d4d18517da71626fe9be4d1142bea684db52bd5adb078f
+fastjsonschema==2.21.1 \
+ --hash=sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667
+filelock==3.18.0 \
+ --hash=sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de
+flake8==7.1.1 \
+ --hash=sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213
+flask==3.1.0 \
+ --hash=sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136
+flexcache==0.3 \
+ --hash=sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32
+flexparser==0.4 \
+ --hash=sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846
+flit==3.12.0 \
+ --hash=sha256:2b4e7171dc22881fa6adc2dbf083e5ecc72520be3cd7587d2a803da94d6ef431
+flit-core==3.12.0 \
+ --hash=sha256:e7a0304069ea895172e3c7bb703292e992c5d1555dd1233ab7b5621b5b69e62c
+folium==0.19.5 \
+ --hash=sha256:4333fb3e6f3e9eedb231615d22c6d7df20aea5829554bd6908675865a37803b3
+fonttools==4.57.0 \
+ --hash=sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3
+fqdn==1.5.1 \
+ --hash=sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014
+frozenlist==1.5.0 \
+ --hash=sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28
+fsspec==2025.3.2 \
+ --hash=sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711
+fuzzywuzzy==0.18.0 \
+ --hash=sha256:928244b28db720d1e0ee7587acf660ea49d7e4c632569cad4f1cd7e68a5f0993
+geographiclib==2.0 \
+ --hash=sha256:6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734
+geopandas==1.0.1 \
+ --hash=sha256:01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6
+geopy==2.4.1 \
+ --hash=sha256:ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7
+gitdb==4.0.12 \
+ --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf
+gitpython==3.1.44 \
+ --hash=sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110
+google-auth==2.38.0 \
+ --hash=sha256:e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a
+google-genai==1.16.1 \
+ --hash=sha256:6ae5d24282244f577ca4f0d95c09f75ab29e556602c9d3531b70161e34cd2a39
+graphene==3.4.3 \
+ --hash=sha256:820db6289754c181007a150db1f7fff544b94142b556d12e3ebc777a7bf36c71
+graphql-core==3.2.6 \
+ --hash=sha256:78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f
+graphql-relay==3.2.0 \
+ --hash=sha256:c9b22bd28b170ba1fe674c74384a8ff30a76c8e26f88ac3aa1584dd3179953e5
+greenlet==3.1.1 \
+ --hash=sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761
+griffe==1.7.2 \
+ --hash=sha256:1ed9c2e338a75741fc82083fe5a1bc89cb6142efe126194cc313e34ee6af5423
+groq==0.25.0 \
+ --hash=sha256:aadc78b40b1809cdb196b1aa8c7f7293108767df1508cafa3e0d5045d9328e7a
+guidata==3.9.0 \
+ --hash=sha256:96a19dc92850bdb3e463fa06e8c22793e090db42d1e72c6dae9bda1a98b61210
+h11==0.14.0 \
+ --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761
+h2==4.2.0 \
+ --hash=sha256:479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0
+h5py==3.12.1 \
+ --hash=sha256:52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8
+hatchling==1.27.0 \
+ --hash=sha256:d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b
+holoviews==1.20.2 \
+ --hash=sha256:1f892c04bc23e8a3a9cde082b606b9463c9ff78c3d0c00e2ddcc41fe6e738458
+hpack==4.1.0 \
+ --hash=sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496
+html5lib==1.1 \
+ --hash=sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d
+httpcore==1.0.7 \
+ --hash=sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd
+httpie==3.2.4 \
+ --hash=sha256:4bd0435cc4b9bca59501bc65089de96f3e93b393803f32a81951db62050ebf0b
+httpx==0.28.1 \
+ --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad
+httpx-sse==0.4.0 \
+ --hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f
+huggingface-hub==0.33.0 \
+ --hash=sha256:e8668875b40c68f9929150d99727d39e5ebb8a05a98e4191b908dc7ded9074b3
+hupper==1.12.1 \
+ --hash=sha256:e872b959f09d90be5fb615bd2e62de89a0b57efc037bdf9637fb09cdf8552b19
+hvplot==0.11.2 \
+ --hash=sha256:9d576a0c2df0f1cf5041545f2a2eddcf962510162876991cae4d1779fad74556
+hypercorn==0.17.3 \
+ --hash=sha256:059215dec34537f9d40a69258d323f56344805efb462959e727152b0aa504547
+hyperframe==6.1.0 \
+ --hash=sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5
+hypothesis==6.130.4 \
+ --hash=sha256:cda4a57115d10ecbefe0a9cc8d69d20a13eb56ecbfe7c24eaee5d368c2b7c477
+id==1.5.0 \
+ --hash=sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658
+idna==3.10 \
+ --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
+imageio==2.37.0 \
+ --hash=sha256:11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed
+imagesize==1.4.1 \
+ --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b
+imbalanced-learn==0.13.0 \
+ --hash=sha256:7eb5859f7827cb3babfa5789978c22fe36e56527d9c9768df2d864d98d9b40fe
+importlib-metadata==8.6.1 \
+ --hash=sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e
+inflection==0.5.1 \
+ --hash=sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2
+iniconfig==2.1.0 \
+ --hash=sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760
+intervaltree==3.1.0 \
+ --hash=sha256:902b1b88936918f9b2a19e0e5eb7ccb430ae45cde4f39ea4b36932920d33952d
+ipycanvas==0.13.3 \
+ --hash=sha256:d37adb2f45d2fef1c3d33c69a0518055694d87827b2f577f3c426d7712f75daa
+ipykernel==6.29.5 \
+ --hash=sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5
+ipyleaflet==0.19.2 \
+ --hash=sha256:7cc9157848baca2e1793b96e79f8bdb1aa7340521d2b7d8a62aa8bc30eab5278
+ipympl==0.9.7 \
+ --hash=sha256:3698ee7eaa0b047a7603517d7aa1b71b32118a5f51754cab45ec5d994f67208f
+ipython==8.36.0 \
+ --hash=sha256:12b913914d010dcffa2711505ec8be4bf0180742d97f1e5175e51f22086428c1
+ipython-genutils==0.2.0 \
+ --hash=sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8
+ipython-sql==0.5.0 \
+ --hash=sha256:61b46ecffb956f62dbc17b5744cf70c649104c8db9afd821aa39b31f7cbb5d5b
+ipywidgets==8.1.6 \
+ --hash=sha256:446e7630a1d025bdc7635e1169fcc06f2ce33b5bd41c2003edeb4a47c8d4bbb1
+isoduration==20.11.0 \
+ --hash=sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042
+isort==5.13.2 \
+ --hash=sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6
+itsdangerous==2.2.0 \
+ --hash=sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef
+janus==2.0.0 \
+ --hash=sha256:7e6449d34eab04cd016befbd7d8c0d8acaaaab67cb59e076a69149f9031745f9
+jaraco-classes==3.4.0 \
+ --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790
+jaraco-context==6.0.1 \
+ --hash=sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4
+jaraco-functools==4.1.0 \
+ --hash=sha256:ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649
+jedi==0.19.2 \
+ --hash=sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9
+jellyfish==1.1.3 \
+ --hash=sha256:2113195a48ce8cb99d2bb2c6d9b119f58025dde1d727101518e7150c093a66da
+jinja2==3.1.6 \
+ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67
+jiter==0.9.0 \
+ --hash=sha256:c8ae3bf27cd1ac5e6e8b7a27487bf3ab5f82318211ec2e1346a5b058756361f7
+joblib==1.4.2 \
+ --hash=sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6
+json5==0.10.0 \
+ --hash=sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa
+jsonpatch==1.33 \
+ --hash=sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade
+jsonpointer==3.0.0 \
+ --hash=sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942
+jsonschema==4.23.0 \
+ --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566
+jsonschema-specifications==2024.10.1 \
+ --hash=sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf
+julia==0.6.2 \
+ --hash=sha256:90752f71376fdb9919439d20496c2dab24486dfa4fe8a831d6dd14a1bcbc04d1
+jupyter==1.1.1 \
+ --hash=sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83
+jupyter-bokeh==4.0.5 \
+ --hash=sha256:1110076c14c779071cf492646a1a871aefa8a477261e4721327a666e65df1a2c
+jupyter-client==8.6.3 \
+ --hash=sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f
+jupyter-console==6.6.3 \
+ --hash=sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485
+jupyter-core==5.7.2 \
+ --hash=sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409
+jupyter-events==0.12.0 \
+ --hash=sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb
+jupyter-leaflet==0.19.2 \
+ --hash=sha256:0d57e15e80c08a4360f0cde0b4c490beddc5d422bb0e9bc1c0b4479d3fb725a6
+jupyter-lsp==2.2.5 \
+ --hash=sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da
+jupyter-server==2.15.0 \
+ --hash=sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3
+jupyter-server-terminals==0.5.3 \
+ --hash=sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa
+jupyterlab==4.4.2 \
+ --hash=sha256:857111a50bed68542bf55dca784522fe728f9f88b4fe69e8c585db5c50900419
+jupyterlab-pygments==0.3.0 \
+ --hash=sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780
+jupyterlab-server==2.27.3 \
+ --hash=sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4
+jupyterlab-widgets==3.0.14 \
+ --hash=sha256:54c33e3306b7fca139d165d6190dc6c0627aafa5d14adfc974a4e9a3d26cb703
+keras==3.10.0 \
+ --hash=sha256:c095a6bf90cd50defadf73d4859ff794fad76b775357ef7bd1dbf96388dae7d3
+keyring==25.6.0 \
+ --hash=sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd
+kiwisolver==1.4.8 \
+ --hash=sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2
+langchain==0.3.25 \
+ --hash=sha256:931f7d2d1eaf182f9f41c5e3272859cfe7f94fc1f7cef6b3e5a46024b4884c21
+langchain-core==0.3.59 \
+ --hash=sha256:9686baaff43f2c8175535da13faf40e6866769015e93130c3c1e4243e7244d70
+langchain-text-splitters==0.3.8 \
+ --hash=sha256:e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02
+langsmith==0.3.42 \
+ --hash=sha256:18114327f3364385dae4026ebfd57d1c1cb46d8f80931098f0f10abe533475ff
+lazy-loader==0.4 \
+ --hash=sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc
+linkify-it-py==2.0.3 \
+ --hash=sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79
+llvmlite==0.44.0 \
+ --hash=sha256:2fb7c4f2fb86cbae6dca3db9ab203eeea0e22d73b99bc2341cdf9de93612e930
+lmfit==1.3.3 \
+ --hash=sha256:a9e9ec7d0d0ec962cc6c078ad1ec6c8311d3ac0e5f0947a00a91f5509dacc2b2
+locket==1.0.0 \
+ --hash=sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3
+logfire-api==3.12.0 \
+ --hash=sha256:fc092c2dcb24c8462ba776f3b0c2183f82e1cd55f86e29b38cf21a048e66a17d
+lxml==5.3.0 \
+ --hash=sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d
+mako==1.3.9 \
+ --hash=sha256:95920acccb578427a9aa38e37a186b1e43156c87260d7ba18ca63aa4c7cbd3a1
+markdown==3.7 \
+ --hash=sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803
+markdown-it-py==3.0.0 \
+ --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1
+markupsafe==3.0.2 \
+ --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f
+matplotlib==3.10.3 \
+ --hash=sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93
+matplotlib-inline==0.1.7 \
+ --hash=sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca
+maturin==1.8.3 \
+ --hash=sha256:85f2b882d8235c1c1cb0a38d382ccd5b3ba0674d99cb548d49df9342cc688e36
+mccabe==0.7.0 \
+ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e
+mcp==1.9.3 \
+ --hash=sha256:69b0136d1ac9927402ed4cf221d4b8ff875e7132b0b06edd446448766f34f9b9
+mdit-py-plugins==0.4.2 \
+ --hash=sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636
+mdurl==0.1.2 \
+ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8
+mercantile==1.2.1 \
+ --hash=sha256:30f457a73ee88261aab787b7069d85961a5703bb09dc57a170190bc042cd023f
+mergedeep==1.3.4 \
+ --hash=sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307
+missingno==0.5.2 \
+ --hash=sha256:55782621ce09ba0f0a1d08e5bd6d6fe1946469fb03951fadf7d209911ca5b072
+mistralai==1.8.1 \
+ --hash=sha256:badfc7e6832d894b3e9071d92ad621212b7cccd7df622c6cacdb525162ae338f
+mistune==3.1.3 \
+ --hash=sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9
+mizani==0.11.4 \
+ --hash=sha256:5b6271dc3da2c88694dca2e0e0a7e1879f0e2fb046c789776f54d090a5243735
+ml-dtypes==0.5.1 \
+ --hash=sha256:fd918d4e6a4e0c110e2e05be7a7814d10dc1b95872accbf6512b80a109b71ae1
+mlxtend==0.23.3 \
+ --hash=sha256:f9fec721c4121be87dac00e513456dde5bf56b7427750719c0a291cd58b6538e
+more-itertools==10.6.0 \
+ --hash=sha256:6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89
+mpld3==0.5.10 \
+ --hash=sha256:80877acce87ea447380fad7374668737505c8c0684aab05238e7c5dc1fab38c1
+mpmath==1.3.0 \
+ --hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c
+msal==1.30.0 \
+ --hash=sha256:423872177410cb61683566dc3932db7a76f661a5d2f6f52f02a047f101e1c1de
+msal-extensions==1.2.0 \
+ --hash=sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d
+msgpack==1.1.0 \
+ --hash=sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f
+multidict==6.4.3 \
+ --hash=sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5
+multipledispatch==1.0.0 \
+ --hash=sha256:0c53cd8b077546da4e48869f49b13164bebafd0c2a5afceb6bb6a316e7fb46e4
+mypy==1.15.0 \
+ --hash=sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf
+mypy-extensions==1.0.0 \
+ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d
+mysql-connector-python==9.2.0 \
+ --hash=sha256:6557942f6c6be3b41d2965456b53a244a7ce3e6fb81cb195c243549be72a6a24
+namex==0.0.8 \
+ --hash=sha256:7ddb6c2bb0e753a311b7590f84f6da659dd0c05e65cb89d519d54c0a250c0487
+narwhals==1.36.0 \
+ --hash=sha256:e3c50dd1d769bc145f57ae17c1f0f0da6c3d397d62cdd0bb167e9b618e95c9d6
+nbclient==0.10.2 \
+ --hash=sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d
+nbconvert==7.16.6 \
+ --hash=sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b
+nbformat==5.10.4 \
+ --hash=sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b
+nest-asyncio==1.6.0 \
+ --hash=sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c
+networkx==3.4.2 \
+ --hash=sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f
+nh3==0.2.18 \
+ --hash=sha256:8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844
+nltk==3.9.1 \
+ --hash=sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1
+notebook==7.4.2 \
+ --hash=sha256:9ccef602721aaa5530852e3064710b8ae5415c4e2ce26f8896d0433222755259
+notebook-shim==0.2.4 \
+ --hash=sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef
+numba==0.61.2 \
+ --hash=sha256:59321215e2e0ac5fa928a8020ab00b8e57cda8a97384963ac0dfa4d4e6aa54e7
+numpy==2.2.6 \
+ --hash=sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c
+numpydoc==1.8.0 \
+ --hash=sha256:72024c7fd5e17375dec3608a27c03303e8ad00c81292667955c6fea7a3ccf541
+openai==1.82.0 \
+ --hash=sha256:8c40647fea1816516cb3de5189775b30b5f4812777e40b8768f361f232b61b30
+opencv-python==4.11.0.86 \
+ --hash=sha256:085ad9b77c18853ea66283e98affefe2de8cc4c1f43eda4c100cf9b2721142ec
+openpyxl==3.1.5 \
+ --hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2
+opentelemetry-api==1.32.1 \
+ --hash=sha256:bbd19f14ab9f15f0e85e43e6a958aa4cb1f36870ee62b7fd205783a112012724
+optree==0.14.1 \
+ --hash=sha256:25ea23fc6d6c0fa7dcf85afcfe10b43ed4fdf0e9d958a3677cd27fcdf0ca17d6
+optuna==4.2.1 \
+ --hash=sha256:6d38199013441d3f70fac27136e05c0188c5f4ec3848db708ac311cbdeb30dbf
+orjson==3.10.16 \
+ --hash=sha256:fe0a145e96d51971407cb8ba947e63ead2aa915db59d6631a355f5f2150b56b7
+osqp==0.6.7.post3 \
+ --hash=sha256:acb219e941f5248da5de3ee9b70e6a5aaddf5f3989dffd1d4c03b0f7b1dfa17b
+outcome==1.3.0.post0 \
+ --hash=sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b
+overrides==7.7.0 \
+ --hash=sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49
+packaging==24.2 \
+ --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759
+pandas==2.2.3 \
+ --hash=sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d
+pandocfilters==1.5.1 \
+ --hash=sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc
+panel==1.6.3 \
+ --hash=sha256:ccd2a0587ab382bd55b8ea099706f31b64aadac697b8a41923d3b18b9ed618d6
+papermill==2.6.0 \
+ --hash=sha256:0f09da6ef709f3f14dde77cb1af052d05b14019189869affff374c9e612f2dd5
+param==2.2.0 \
+ --hash=sha256:777f8c7b66ab820b70ea5ad09faaa6818308220caae89da3b5c5f359faa72a5e
+parso==0.8.4 \
+ --hash=sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18
+partd==1.4.2 \
+ --hash=sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f
+pathspec==0.12.1 \
+ --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08
+patsy==1.0.1 \
+ --hash=sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c
+pep8==1.7.1 \
+ --hash=sha256:b22cfae5db09833bb9bd7c8463b53e1a9c9b39f12e304a8d0bba729c501827ee
+pexpect==4.9.0 \
+ --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523
+pg8000==1.31.2 \
+ --hash=sha256:436c771ede71af4d4c22ba867a30add0bc5c942d7ab27fadbb6934a487ecc8f6
+pickleshare==0.7.5 \
+ --hash=sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56
+pillow==11.1.0 \
+ --hash=sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c
+platformdirs==4.3.7 \
+ --hash=sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94
+plotly==6.0.1 \
+ --hash=sha256:4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768
+plotnine==0.13.6 \
+ --hash=sha256:4acc1af29fa4e91e726b67d49277e8368f62e1c817f01bf14ecd8ca5e83bfaea
+plotpy==2.7.4 \
+ --hash=sha256:8dff5fd388048a8d3b4251329a9fe4027920386e0ebcc3c3642f59c432118c29
+pluggy==1.5.0 \
+ --hash=sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669
+ply==3.11 \
+ --hash=sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce
+polars==1.31.0 \
+ --hash=sha256:3fd874d3432fc932863e8cceff2cff8a12a51976b053f2eb6326a0672134a632
+portalocker==2.7.0 \
+ --hash=sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983
+prettytable==3.16.0 \
+ --hash=sha256:b5eccfabb82222f5aa46b798ff02a8452cf530a352c31bddfa29be41242863aa
+prince==0.16.0 \
+ --hash=sha256:7e21a78d4dd06ca3ec526ee714a50b349f26de3fca6b79664150a951b31688f3
+priority==2.0.0 \
+ --hash=sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa
+prometheus-client==0.21.1 \
+ --hash=sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301
+prompt-toolkit==3.0.51 \
+ --hash=sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07
+propcache==0.3.1 \
+ --hash=sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037
+protobuf==6.30.2 \
+ --hash=sha256:7653c99774f73fe6b9301b87da52af0e69783a2e371e8b599b3e9cb4da4b12b9
+psutil==7.0.0 \
+ --hash=sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553
+psygnal==0.12.0 \
+ --hash=sha256:d779f20c6977ec9d5b9fece23b4b28bbcf0a7773539a4a176b5527aea5da27c7
+ptpython==3.0.29 \
+ --hash=sha256:65d75c4871859e4305a020c9b9e204366dceb4d08e0e2bd7b7511bd5e917a402
+ptyprocess==0.7.0 \
+ --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35
+pure-eval==0.2.3 \
+ --hash=sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0
+pyarrow==20.0.0 \
+ --hash=sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031
+pyasn1==0.6.1 \
+ --hash=sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629
+pyasn1-modules==0.4.1 \
+ --hash=sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd
+pybind11==2.13.6 \
+ --hash=sha256:237c41e29157b962835d356b370ededd57594a26d5894a795960f0047cb5caf5
+pycodestyle==2.12.0 \
+ --hash=sha256:949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4
+pycparser==2.22 \
+ --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
+pyct==0.5.0 \
+ --hash=sha256:a4038a8885059ab8cac6f946ea30e0b5e6bdbe0b92b6723f06737035f9d65e8c
+pydantic==2.10.6 \
+ --hash=sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584
+pydantic-ai-slim==0.2.9 \
+ --hash=sha256:d954ff84cb250d7150a7ed694e4f1f92f820205d036ee006d02fce3e62a3bc4e
+pydantic-core==2.27.2 \
+ --hash=sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee
+pydantic-evals==0.2.9 \
+ --hash=sha256:62035ae3a5321e4d892c7372ef91af0f46b675863e827f011d5cb8550dede400
+pydantic-graph==0.2.9 \
+ --hash=sha256:38ad929a0ec205bd7d5875b0b408d4f13448276aa89b6ce2a1143a7552b070ce
+pydantic-settings==2.8.1 \
+ --hash=sha256:81942d5ac3d905f7f3ee1a70df5dfb62d5569c12f51a5a647defc1c3d9ee2e9c
+pydeck==0.9.1 \
+ --hash=sha256:b3f75ba0d273fc917094fa61224f3f6076ca8752b93d46faf3bcfd9f9d59b038
+pydocstyle==6.3.0 \
+ --hash=sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019
+pydub==0.25.1 \
+ --hash=sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6
+pyerfa==2.0.1.5 \
+ --hash=sha256:66292d437dcf75925b694977aa06eb697126e7b86553e620371ed3e48b5e0ad0
+pyflakes==3.2.0 \
+ --hash=sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a
+pygithub==2.6.1 \
+ --hash=sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3
+pygments==2.19.1 \
+ --hash=sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c
+pyjwt==2.10.1 \
+ --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb
+pylint==3.3.6 \
+ --hash=sha256:8b7c2d3e86ae3f94fb27703d521dd0b9b6b378775991f504d7c3a6275aa0a6a6
+pylint-venv==3.0.4 \
+ --hash=sha256:31006a3df398f58f962c9e5620e756b284e8b2bc490594ce5ee5da41920cb32c
+pyls-spyder==0.4.0 \
+ --hash=sha256:1505d975f866a343d0554b6dab41b53717f4b4bc6df450dfd7d48f889fe450b9
+pymongo==4.10.1 \
+ --hash=sha256:45ee87a4e12337353242bc758accc7fb47a2f2d9ecc0382a61e64c8f01e86708
+pympler==1.1 \
+ --hash=sha256:5b223d6027d0619584116a0cbc28e8d2e378f7a79c1e5e024f9ff3b673c58506
+pynacl==1.5.0 \
+ --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93
+pynndescent==0.5.13 \
+ --hash=sha256:69aabb8f394bc631b6ac475a1c7f3994c54adf3f51cd63b2730fefba5771b949
+pyodbc==5.2.0 \
+ --hash=sha256:96d3127f28c0dacf18da7ae009cd48eac532d3dcc718a334b86a3c65f6a5ef5c
+pyogrio==0.10.0 \
+ --hash=sha256:02e54bcfb305af75f829044b0045f74de31b77c2d6546f7aaf96822066147848
+pyomo==6.9.2 \
+ --hash=sha256:13ebb2f974f97afa626c2712d4f27e09a1c3d18ca11755676b743504a76e5161
+pypandoc==1.15 \
+ --hash=sha256:4ededcc76c8770f27aaca6dff47724578428eca84212a31479403a9731fc2b16
+pyparsing==3.2.3 \
+ --hash=sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf
+pypdf==5.4.0 \
+ --hash=sha256:db994ab47cadc81057ea1591b90e5b543e2b7ef2d0e31ef41a9bfe763c119dab
+pyproj==3.7.0 \
+ --hash=sha256:10a8dc6ec61af97c89ff032647d743f8dc023645773da42ef43f7ae1125b3509
+pyproject-hooks==1.2.0 \
+ --hash=sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913
+pyqt5==5.15.11 \
+ --hash=sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517
+pyqt5-qt5==5.15.2 \
+ --hash=sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962
+pyqt5-sip==12.17.0 \
+ --hash=sha256:672c209d05661fab8e17607c193bf43991d268a1eefbc2c4551fbf30fd8bb2ca
+pyqtgraph==0.13.7 \
+ --hash=sha256:7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a
+pyqtwebengine==5.15.7 \
+ --hash=sha256:bd5e8c426d6f6b352cd15800d64a89b2a4a11e098460b818c7bdcf5e5612e44f
+pyqtwebengine-qt5==5.15.2 \
+ --hash=sha256:24231f19e1595018779977de6722b5c69f3d03f34a5f7574ff21cd1e764ef76d
+pyserial==3.5 \
+ --hash=sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0
+pysocks==1.7.1 \
+ --hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5
+pyspnego==0.11.2 \
+ --hash=sha256:74abc1fb51e59360eb5c5c9086e5962174f1072c7a50cf6da0bda9a4bcfdfbd4
+pytest==8.3.5 \
+ --hash=sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820
+python-barcode==0.15.1 \
+ --hash=sha256:057636fba37369c22852410c8535b36adfbeb965ddfd4e5b6924455d692e0886
+python-dateutil==2.8.2 \
+ --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
+python-dotenv==1.1.0 \
+ --hash=sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d
+python-json-logger==3.3.0 \
+ --hash=sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7
+python-lsp-black==2.0.0 \
+ --hash=sha256:d5efdee45f5fa9e5241f5d4d396cd46127f45c85817916b1fd92c2986652bf7e
+python-lsp-jsonrpc==1.1.2 \
+ --hash=sha256:7339c2e9630ae98903fdaea1ace8c47fba0484983794d6aafd0bd8989be2b03c
+python-lsp-server==1.12.2 \
+ --hash=sha256:750116459449184ba20811167cdf96f91296ae12f1f65ebd975c5c159388111b
+python-multipart==0.0.20 \
+ --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104
+python-slugify==8.0.4 \
+ --hash=sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8
+pythonqwt==0.14.5 \
+ --hash=sha256:be5a9d2e1ba22aaa02eb397c5b3b5e4e1d9ed2c08f45554d8b920d8fc3be6dc7
+pytoolconfig==1.3.1 \
+ --hash=sha256:5d8cea8ae1996938ec3eaf44567bbc5ef1bc900742190c439a44a704d6e1b62b
+pytz==2025.2 \
+ --hash=sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00
+pyuca==1.2 \
+ --hash=sha256:abaa12e1bd2c7c68ca8396ff8383bc0654a739cef3ae68fd7af58bf29af0a91e
+pyusb==1.3.1 \
+ --hash=sha256:bf9b754557af4717fe80c2b07cc2b923a9151f5c08d17bdb5345dac09d6a0430
+pyviz-comms==3.0.4 \
+ --hash=sha256:a40d17db26ec13cf975809633804e712bd24b473e77388c193c44043f85d0b25
+pywavelets==1.8.0 \
+ --hash=sha256:4dbebcfd55ea8a85b7fc8802d411e75337170422abf6e96019d7e46c394e80e5
+pywin32==310 \
+ --hash=sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e
+pywin32-ctypes==0.2.3 \
+ --hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8
+pywinpty==2.0.15 \
+ --hash=sha256:ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408
+pyyaml==6.0.2 \
+ --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563
+pyzmq==26.4.0 \
+ --hash=sha256:23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b
+qdarkstyle==3.2.3 \
+ --hash=sha256:ea980ee426d594909cf1058306832af71ff6cbad6f69237b036d1550635aefbc
+qdldl==0.1.7.post5 \
+ --hash=sha256:cc9be378e7bec67d4c62b7fa27cafb4f77d3e5e059d753c3dce0a5ae1ef5fea0
+qrcode==8.0 \
+ --hash=sha256:9fc05f03305ad27a709eb742cf3097fa19e6f6f93bb9e2f039c0979190f6f1b1
+qstylizer==0.2.4 \
+ --hash=sha256:8f384dfe86f9edb0bb596b93663a51f124f0794b94fd54057cc7cf9cea59fb6f
+qtawesome==1.4.0 \
+ --hash=sha256:a4d689fa071c595aa6184171ce1f0f847677cb8d2db45382c43129f1d72a3d93
+qtconsole==5.6.1 \
+ --hash=sha256:3d22490d9589bace566ad4f3455b61fa2209156f40e87e19e2c3cb64e9264950
+qtpy==2.4.3 \
+ --hash=sha256:72095afe13673e017946cc258b8d5da43314197b741ed2890e563cf384b51aa1
+quantecon==0.7.2 \
+ --hash=sha256:d1333ca7bc3046efe3655d9eeeefb299051b00870b8608cb5bc0b88e3bdb8b67
+quart==0.20.0 \
+ --hash=sha256:003c08f551746710acb757de49d9b768986fd431517d0eb127380b656b98b8f1
+rapidfuzz==3.13.0 \
+ --hash=sha256:9a7c6232be5f809cd39da30ee5d24e6cadd919831e6020ec6c2391f4c3bc9264
+readme-renderer==44.0 \
+ --hash=sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151
+redis==5.2.1 \
+ --hash=sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4
+referencing==0.36.2 \
+ --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0
+regex==2024.11.6 \
+ --hash=sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a
+reportlab==4.3.1 \
+ --hash=sha256:0f37dd16652db3ef84363cf744632a28c38bd480d5bf94683466852d7bb678dd
+requests==2.32.3 \
+ --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
+requests-ntlm==1.3.0 \
+ --hash=sha256:4c7534a7d0e482bb0928531d621be4b2c74ace437e88c5a357ceb7452d25a510
+requests-toolbelt==1.0.0 \
+ --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06
+rfc3339-validator==0.1.4 \
+ --hash=sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa
+rfc3986==2.0.0 \
+ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd
+rfc3986-validator==0.1.1 \
+ --hash=sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9
+rich==14.0.0 \
+ --hash=sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0
+rope==1.13.0 \
+ --hash=sha256:b435a0c0971244fdcd8741676a9fae697ae614c20cc36003678a7782f25c0d6c
+rpds-py==0.24.0 \
+ --hash=sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a
+rsa==4.7.2 \
+ --hash=sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2
+rtree==1.4.0 \
+ --hash=sha256:ba83efc7b7563905b1bfdfc14490c4bfb59e92e5e6156bdeb6ec5df5117252f4
+rx==3.2.0 \
+ --hash=sha256:922c5f4edb3aa1beaa47bf61d65d5380011ff6adcd527f26377d05cb73ed8ec8
+scikit-image==0.25.2 \
+ --hash=sha256:64785a8acefee460ec49a354706db0b09d1f325674107d7fa3eadb663fb56d6f
+scikit-learn==1.6.1 \
+ --hash=sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb
+scipy==1.15.3 \
+ --hash=sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163
+scramp==1.4.5 \
+ --hash=sha256:50e37c464fc67f37994e35bee4151e3d8f9320e9c204fca83a5d313c121bbbe7
+scs==3.2.7.post2 \
+ --hash=sha256:a2c48cd19e39bf87dae0b20a289fff44930458fc2ca2afa0f899058dc41e5545
+seaborn==0.13.2 \
+ --hash=sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987
+send2trash==1.8.3 \
+ --hash=sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9
+setuptools==79.0.1 \
+ --hash=sha256:e147c0549f27767ba362f9da434eab9c5dc0045d5304feb602a0af001089fc51
+shapely==2.1.0 \
+ --hash=sha256:1dc8d4364483a14aba4c844b7bd16a6fa3728887e2c33dfa1afa34a3cf4d08a5
+shellingham==1.5.4 \
+ --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686
+simplejson==3.19.3 \
+ --hash=sha256:3bbcdc438dc1683b35f7a8dc100960c721f922f9ede8127f63bed7dfded4c64c
+simpy==4.1.1 \
+ --hash=sha256:7c5ae380240fd2238671160e4830956f8055830a8317edf5c05e495b3823cd88
+six==1.17.0 \
+ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274
+sklearn-compat==0.1.3 \
+ --hash=sha256:a8aaf8ef711988cbd63f187c5560b5f16b25df663aaa1d2d0e1291341d339f80
+skrub==0.5.3 \
+ --hash=sha256:b6ba417fa83d1f7e9a69656e0860b061381b9bd19808692a2b5bef8588c72775
+smmap==5.0.2 \
+ --hash=sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e
+sniffio==1.3.1 \
+ --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2
+snowballstemmer==2.2.0 \
+ --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a
+sortedcontainers==2.4.0 \
+ --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0
+sounddevice==0.5.1 \
+ --hash=sha256:4313b63f2076552b23ac3e0abd3bcfc0c1c6a696fc356759a13bd113c9df90f1
+soupsieve==2.6 \
+ --hash=sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9
+sphinx==8.1.3 \
+ --hash=sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2
+sphinx-rtd-theme==3.0.2 \
+ --hash=sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13
+sphinxcontrib-applehelp==2.0.0 \
+ --hash=sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5
+sphinxcontrib-devhelp==2.0.0 \
+ --hash=sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2
+sphinxcontrib-htmlhelp==2.1.0 \
+ --hash=sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8
+sphinxcontrib-jquery==4.1 \
+ --hash=sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae
+sphinxcontrib-jsmath==1.0.1 \
+ --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178
+sphinxcontrib-qthelp==2.0.0 \
+ --hash=sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb
+sphinxcontrib-serializinghtml==2.0.0 \
+ --hash=sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331
+spyder==6.0.7 \
+ --hash=sha256:b725569bb8ddc7b0aab73d747d85312dc0456978370cc0f9b1a101c0fe4f076b
+spyder-kernels==3.0.5 \
+ --hash=sha256:9cc808e0ec4426b9ba911128e221fa2234e6c8d6e08526132e90112ff9c2bb7c
+sqlalchemy==2.0.40 \
+ --hash=sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad
+sqlite-bro==0.13.1 \
+ --hash=sha256:c26033b0af133049ca578b5fd30b2372f002e7ff934b39774aa4d2da7638c23d
+sqlite-fts4==1.0.3 \
+ --hash=sha256:0359edd8dea6fd73c848989e1e2b1f31a50fe5f9d7272299ff0e8dbaa62d035f
+sqlite-utils==3.38 \
+ --hash=sha256:8a27441015c3b2ef475f555861f7a2592f73bc60d247af9803a11b65fc605bf9
+sqlparse==0.5.3 \
+ --hash=sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca
+squarify==0.4.4 \
+ --hash=sha256:d7597724e29d48aa14fd2f551060d6b09e1f0a67e4cd3ea329fe03b4c9a56f11
+sse-starlette==2.2.1 \
+ --hash=sha256:6410a3d3ba0c89e7675d4c273a301d64649c03a5ef1ca101f10b47f895fd0e99
+sspilib==0.2.0 \
+ --hash=sha256:c39a698491f43618efca8776a40fb7201d08c415c507f899f0df5ada15abefaa
+stack-data==0.6.3 \
+ --hash=sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695
+starlette==0.46.2 \
+ --hash=sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35
+statsmodels==0.14.4 \
+ --hash=sha256:81030108d27aecc7995cac05aa280cf8c6025f6a6119894eef648997936c2dd0
+streamlit==1.46.0 \
+ --hash=sha256:f8624acabafcf18611a0fac2635cf181a7ba922b45bd131ae15fc8f80e1a5482
+superqt==0.7.3 \
+ --hash=sha256:8f7d141665b31baa484747f324fc9fc2d14223f2fefc92ffed6ea35c92221304
+sv-ttk==2.6.0 \
+ --hash=sha256:4319c52edf2e14732fe84bdc9788e26f9e9a1ad79451ec0f89f0120ffc8105d9
+sympy==1.14.0 \
+ --hash=sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5
+tabulate==0.9.0 \
+ --hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f
+tblib==3.1.0 \
+ --hash=sha256:670bb4582578134b3d81a84afa1b016128b429f3d48e6cbbaecc9d15675e984e
+tenacity==9.1.2 \
+ --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138
+termcolor==3.1.0 \
+ --hash=sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa
+terminado==0.18.1 \
+ --hash=sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0
+text-unidecode==1.3 \
+ --hash=sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8
+textdistance==4.6.3 \
+ --hash=sha256:0cb1b2cc8e3339ddc3e0f8c870e49fb49de6ecc42a718917308b3c971f34aa56
+thefuzz==0.22.1 \
+ --hash=sha256:59729b33556850b90e1093c4cf9e618af6f2e4c985df193fdf3c5b5cf02ca481
+threadpoolctl==3.6.0 \
+ --hash=sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb
+three-merge==0.1.1 \
+ --hash=sha256:dd219f4696aa0bbec6099ac3528b4de0450ff9bde862dd8f6d6f52e745f83464
+tifffile==2025.3.30 \
+ --hash=sha256:0ed6eee7b66771db2d1bfc42262a51b01887505d35539daef118f4ff8c0f629c
+tiktoken==0.9.0 \
+ --hash=sha256:5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95
+tinycss2==1.4.0 \
+ --hash=sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289
+tokenizers==0.21.1 \
+ --hash=sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382
+toml==0.10.2 \
+ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b
+tomli==2.2.1 \
+ --hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69
+tomli-w==1.2.0 \
+ --hash=sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90
+tomlkit==0.13.2 \
+ --hash=sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde
+toolz==1.0.0 \
+ --hash=sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236
+tornado==6.5.1 \
+ --hash=sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b
+tqdm==4.67.1 \
+ --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2
+traitlets==5.14.3 \
+ --hash=sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f
+traittypes==0.2.1 \
+ --hash=sha256:1340af133810b6eee1a2eb2e988f862b0d12b6c2d16f282aaf3207b782134c2e
+trio==0.30.0 \
+ --hash=sha256:3bf4f06b8decf8d3cf00af85f40a89824669e2d033bb32469d34840edcfc22a5
+trove-classifiers==2025.5.9.12 \
+ --hash=sha256:e381c05537adac78881c8fa345fd0e9970159f4e4a04fcc42cfd3129cca640ce
+twine==6.1.0 \
+ --hash=sha256:a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384
+typer==0.15.2 \
+ --hash=sha256:46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc
+types-python-dateutil==2.9.0.20240316 \
+ --hash=sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b
+types-requests==2.32.0.20250328 \
+ --hash=sha256:72ff80f84b15eb3aa7a8e2625fffb6a93f2ad5a0c20215fc1dcfa61117bcb2a2
+typing-extensions==4.13.2 \
+ --hash=sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c
+typing-inspection==0.4.0 \
+ --hash=sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f
+tzdata==2025.2 \
+ --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8
+tzlocal==5.3.1 \
+ --hash=sha256:eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d
+uc-micro-py==1.0.3 \
+ --hash=sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5
+ujson==5.10.0 \
+ --hash=sha256:4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539
+umap-learn==0.5.7 \
+ --hash=sha256:6a7e0be2facfa365a5ed6588447102bdbef32a0ef449535c25c97ea7e680073c
+uncertainties==3.2.2 \
+ --hash=sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7
+uri-template==1.3.0 \
+ --hash=sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363
+urllib3==2.4.0 \
+ --hash=sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813
+uvicorn==0.34.2 \
+ --hash=sha256:deb49af569084536d269fe0a6d67e3754f104cf03aba7c11c40f01aadf33c403
+vega-datasets==0.9.0 \
+ --hash=sha256:3d7c63917be6ca9b154b565f4779a31fedce57b01b5b9d99d8a34a7608062a1d
+waitress==3.0.0 \
+ --hash=sha256:2a06f242f4ba0cc563444ca3d1998959447477363a2d7e9b8b4d75d35cfd1669
+watchdog==6.0.0 \
+ --hash=sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680
+wcwidth==0.2.13 \
+ --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859
+webcolors==24.11.1 \
+ --hash=sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9
+webencodings==0.5.1 \
+ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78
+websocket-client==1.8.0 \
+ --hash=sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526
+websockets==14.2 \
+ --hash=sha256:b439ea828c4ba99bb3176dc8d9b933392a2413c0f6b149fdcba48393f573377f
+werkzeug==3.1.3 \
+ --hash=sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e
+whatthepatch==1.0.7 \
+ --hash=sha256:1b6f655fd31091c001c209529dfaabbabdbad438f5de14e3951266ea0fc6e7ed
+wheel==0.45.1 \
+ --hash=sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248
+widgetsnbextension==4.0.14 \
+ --hash=sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575
+wordcloud==1.9.4 \
+ --hash=sha256:8c9a5af2fbcf029a19e827adbee58e86efe7536dca7a42380a8601113a86069b
+wrapt==1.16.0 \
+ --hash=sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1
+wsproto==1.2.0 \
+ --hash=sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736
+xarray==2025.4.0 \
+ --hash=sha256:b27defd082c5cb85d32c695708de6bb05c2838fb7caaf3f952982e602a35b9b8
+xlsxwriter==3.2.3 \
+ --hash=sha256:593f8296e8a91790c6d0378ab08b064f34a642b3feb787cf6738236bd0a4860d
+xyzservices==2023.10.1 \
+ --hash=sha256:6a4c38d3a9f89d3e77153eff9414b36a8ee0850c9e8b85796fd1b2a85b8dfd68
+yapf==0.40.1 \
+ --hash=sha256:b8bfc1f280949153e795181768ca14ef43d7312629a06c43e7abd279323af313
+yarl==1.18.3 \
+ --hash=sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c
+yt-dlp==2025.2.19 \
+ --hash=sha256:3ed218eaeece55e9d715afd41abc450dc406ee63bf79355169dfde312d38fdb8
+zict==3.0.0 \
+ --hash=sha256:5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae
+zipp==3.21.0 \
+ --hash=sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931
+zstandard==0.23.0 \
+ --hash=sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b
diff --git a/constraints.txt b/constraints.txt
index bf61c161..843a382a 100644
--- a/constraints.txt
+++ b/constraints.txt
@@ -299,7 +299,7 @@ numba>=0.53.1
numcodecs>=0.7.3
numdifftools>=0.9.39
numexpr>=2.7.3
-numpy>=1.20.2+mkl
+numpy>=1.20.2
numpydoc>=1.1.0
oct2py>=5.2.0
octave-kernel>=0.32.0
@@ -425,7 +425,7 @@ pytest>=6.2.3
python-baseconv>=1.2.2
python-dateutil>=2.8.1
python-dotenv>=0.15.0
-python-hdf4>=0.10.0+dummy
+python-hdf4>=0.10.0
python-jsonrpc-server>=0.4.0
python-language-server>=0.36.2
python-Levenshtein>=0.12.2
@@ -547,15 +547,14 @@ tinycss>=0.4
toml>=0.10.2
toolz>=0.11.1
-torch>=1.8.1+cpu
+torch>=1.8.1
torchaudio>=0.8.1
-torchvision>=0.8.2+cpu
-
+torchvision>=0.8.2
tornado>=6.1
tqdm>=4.59.0
traitlets>=5.0.5
traittypes>=0.2.1
-tranquilizer>=0.5.0+1.gff8dd5f
+tranquilizer>=0.5.0
trio>=0.18.0
trio-asyncio>=0.12.0
twine>=3.4.1
diff --git a/diff.py b/diff.py
deleted file mode 100644
index 2d32efa8..00000000
--- a/diff.py
+++ /dev/null
@@ -1,353 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright © 2013 Pierre Raybaut
-# Licensed under the terms of the MIT License
-# (see winpython/__init__.py for details)
-
-"""
-WinPython diff script
-
-Created on Tue Jan 29 11:56:54 2013
-"""
-
-import os
-from pathlib import Path
-import re
-import shutil
-
-# Local imports
-from winpython import utils
-
-# pep503 defines normalized package names: www.python.org/dev/peps/pep-0503
-def normalize(name):
- return re.sub(r"[-_.]+", "-", name).lower()
-
-
-CHANGELOGS_DIR = str(Path(__file__).parent / "changelogs")
-assert Path(CHANGELOGS_DIR).is_dir()
-
-
-class Package(object):
- # SourceForge Wiki syntax:
- PATTERN = r"\[([a-zA-Z\-\:\/\.\_0-9]*)\]\(([^\]\ ]*)\) \| ([^\|]*) \| ([^\|]*)"
- # Google Code Wiki syntax:
- PATTERN_OLD = r"\[([a-zA-Z\-\:\/\.\_0-9]*) ([^\]\ ]*)\] \| ([^\|]*) \| ([^\|]*)"
-
- def __init__(self):
- self.name = None
- self.version = None
- self.description = None
- self.url = None
-
- def __str__(self):
- text = f"{self.name} {self.version}"
- text += f"\r\n{self.description}\r\nWebsite: {self.url}"
- return text
-
- def from_text(self, text):
- try:
- self.url, self.name, self.version, self.description = re.match(
- self.PATTERN_OLD, text
- ).groups()
- except AttributeError:
- self.name, self.url, self.version, self.description = re.match(
- self.PATTERN, text
- ).groups()
-
- def to_wiki(self):
- return f" * [{self.name}]({self.url}) {self.version} ({self.description})\r\n"
-
- def upgrade_wiki(self, other):
- # wheel replace '-' per '_' in package name
- assert (
- self.name.replace("-", "_").lower() == other.name.replace("-", "_").lower()
- )
- return f" * [{self.name}]({self.url}) {other.version} â {self.version} ({self.description})\r\n"
-
-
-class PackageIndex(object):
- WINPYTHON_PATTERN = r"\#\# WinPython\-*[0-9b-t]* ([0-9\.a-zA-Z]*)"
- TOOLS_LINE = "### Tools"
- PYTHON_PACKAGES_LINE = "### Python packages"
- HEADER_LINE1 = "Name | Version | Description"
- HEADER_LINE2 = "-----|---------|------------"
-
- def __init__(
- self,
- version,
- basedir=None,
- flavor="",
- architecture=64,
- ):
- self.version = version
- self.other_packages = {}
- self.python_packages = {}
- self.flavor = flavor
- self.basedir = basedir
- self.architecture = architecture
- self.from_file(basedir)
-
- def from_file(self, basedir):
- fname = str(
- Path(CHANGELOGS_DIR)
- / f"WinPython{self.flavor}-{self.architecture}bit-{self.version}.md"
- )
-
- try:
- with open(fname, "r", encoding = 'utf-8') as fdesc: # python3 doesn't like 'rb'
- text = fdesc.read()
- except:
- with open(fname, "r") as fdesc: # python3 doesn't like 'rb'
- text = fdesc.read()
- self.from_text(text)
-
- def from_text(self, text):
- version = re.match(self.WINPYTHON_PATTERN + self.flavor, text).groups()[0]
- assert version == self.version
- tools_flag = False
- python_flag = False
- for line in text.splitlines():
- if line:
- if line == self.TOOLS_LINE:
- tools_flag = True
- continue
- elif line == self.PYTHON_PACKAGES_LINE:
- tools_flag = False
- python_flag = True
- continue
- elif line in (
- self.HEADER_LINE1,
- self.HEADER_LINE2,
- "",
- " ",
- ):
- continue
- if tools_flag or python_flag:
- package = Package()
- package.from_text(line)
- if tools_flag:
- self.other_packages[package.name] = package
- else:
- self.python_packages[package.name] = package
-
-
-def diff_package_dicts(dict1_in, dict2_in):
- """Return difference between package dict1 and package dict2"""
- text = ""
- # wheel replace '-' per '_' in key
- dict1 = {}
- dict2 = {}
- for key in dict1_in:
- dict1[key.replace("-", "_").lower()] = dict1_in[key]
- for key in dict2_in:
- dict2[key.replace("-", "_").lower()] = dict2_in[key]
- set1, set2 = set(dict1.keys()), set(dict2.keys())
- # New packages
- new = sorted(set2 - set1)
- if new:
- text += "New packages:\r\n\r\n"
- for name in new:
- package = dict2[name]
- text += package.to_wiki()
- text += "\r\n"
- # Upgraded packages
- upgraded_list = []
- for name in sorted(set1 & set2):
- package1 = dict1[name]
- package2 = dict2[name]
- if package1.version != package2.version:
- upgraded_list.append(package2.upgrade_wiki(package1))
- if upgraded_list:
- text += "Upgraded packages:\r\n\r\n" + f"{''.join(upgraded_list)}" + "\r\n"
- # Removed packages
- removed = sorted(set1 - set2)
- if removed:
- text += "Removed packages:\r\n\r\n"
- for name in removed:
- package = dict1[name]
- text += package.to_wiki()
- text += "\r\n"
- return text
-
-
-def find_closer_version(version1, basedir=None, flavor="", architecture=64):
- """Find version which is the closest to `version`"""
- builddir = str(Path(basedir) / f"bu{flavor}")
- func = lambda name: re.match(
- r"WinPython%s-%sbit-([0-9\.]*)\.(txt|md)" % (flavor, architecture),
- name,
- )
- versions = [func(name).groups()[0] for name in os.listdir(builddir) if func(name)]
- # versions:['3.10.0.1', '3.10.10.0', '3.10.2.0'.... '3.10.8.1', '3.10.9.0']
- try:
- index = versions.index(version1)
- except ValueError:
- raise ValueError(f"Unknown version {version1}")
-
- from packaging import version
- version_below = '0.0.0.0'
- for v in versions:
- if version.parse(v) > version.parse(version_below) and version.parse(v)",
- "",
- ]
- )
- pi1 = PackageIndex(
- version1,
- basedir=basedir,
- flavor=flavor1,
- architecture=architecture,
- )
- pi2 = PackageIndex(
- version2,
- basedir=basedir,
- flavor=flavor,
- architecture=architecture,
- )
- tools_text = diff_package_dicts(pi1.other_packages, pi2.other_packages)
- if tools_text:
- text += PackageIndex.TOOLS_LINE + "\r\n\r\n" + tools_text
- py_text = diff_package_dicts(pi1.python_packages, pi2.python_packages)
- if py_text:
- text += PackageIndex.PYTHON_PACKAGES_LINE + "\r\n\r\n" + py_text
- text += "\r\n\r\n* * *\r\n"
- return text
-
-
-def _copy_all_changelogs(version, basedir, flavor="", architecture=64):
- basever = ".".join(version.split(".")[:2])
- for name in os.listdir(CHANGELOGS_DIR):
- if re.match(
- r"WinPython%s-%sbit-%s([0-9\.]*)\.(txt|md)"
- % (flavor, architecture, basever),
- name,
- ):
- shutil.copyfile(
- str(Path(CHANGELOGS_DIR) / name),
- str(Path(basedir) / f"bu{flavor}" / name),
- )
-
-
-def write_changelog(
- version2,
- version1=None,
- basedir=None,
- flavor="",
- release_level="",
- architecture=64,
-):
- """Write changelog between version1 and version2 of WinPython"""
- _copy_all_changelogs(
- version2,
- basedir,
- flavor=flavor,
- architecture=architecture,
- )
- print(
- "comparing_package_indexes",
- version2,
- basedir,
- flavor,
- architecture,
- )
- text = compare_package_indexes(
- version2,
- version1,
- basedir=basedir,
- flavor=flavor,
- architecture=architecture,
- )
- fname = str(
- Path(basedir)
- / f"bu{flavor}"
- / f"WinPython{flavor}-{architecture}bit-{version2}_History.md"
- )
-
- with open(fname, "w", encoding="utf-8-sig") as fdesc: # python 3 need
- fdesc.write(text)
- # Copy to winpython/changelogs
- shutil.copyfile(fname, str(Path(CHANGELOGS_DIR) / Path(fname).name))
-
-
-def test_parse_package_index_wiki(version, basedir=None, flavor="", architecture=64):
- """Parse the package index Wiki page"""
- pi = PackageIndex(
- version,
- basedir=basedir,
- flavor=flavor,
- architecture=architecture,
- )
- utils.print_box(f"WinPython {pi.version}:")
- utils.print_box("Tools:")
- for package in pi.other_packages.values():
- print(package)
- print("")
- utils.print_box("Python packages:")
- for package in pi.python_packages.values():
- print(package)
- print("")
-
-
-def test_compare(basedir, version2, version1, architecture=64):
- print(
- compare_package_indexes(
- basedir,
- version2,
- version1,
- architecture=architecture,
- )
- )
-
-
-if __name__ == "__main__":
- print(
- compare_package_indexes(
- version2="3.7.4.0",
- version1="3.7.2.0",
- basedir=r"C:\WinP\bd37",
- flavor="Zero",
- flavor1="Zero",
- architecture=32,
- )
- )
- write_changelog(
- version2="3.7.4.0",
- version1="3.7.2.0",
- basedir=r"C:\WinP\bd37",
- flavor="Ps2",
- architecture=64,
- )
- # test_parse_package_index_wiki('2.7.3.3')
- # print(compare_package_indexes('2.7.3.3', '2.7.3.1'))
- # write_changelog('2.7.4.1', '2.7.4.0')
- # write_changelog('3.3.0.0beta2', '3.3.0.0beta1')
diff --git a/dot_requirements.txt b/dot_requirements.txt
index 68a29ece..c5453f90 100644
--- a/dot_requirements.txt
+++ b/dot_requirements.txt
@@ -1,5 +1,9 @@
# the essential
sqlite_bro
-#idlex
+setuptools
wheel
+build
+##msvc_runtime
# end of requirements.txt
+
+
diff --git a/generate_a_winpython_distro.bat b/generate_a_winpython_distro.bat
deleted file mode 100644
index b37bffea..00000000
--- a/generate_a_winpython_distro.bat
+++ /dev/null
@@ -1,396 +0,0 @@
-rem to launch from a winpython package directory, where 'make.py' is
-@echo on
-
-rem *****************************
-rem 2020-07-05: install msvc_runtime before packages that may want to compile
-rem 2020-12-05 : add a constrints.txt file from a recent pip list
-rem 2021-03-20 : track successes packages combination are archived for future contraint update
-rem 2021-04-22 : path PyPy3 (as we don't try to copy PyPy3.exe to Python.exe)
-rem 2023-08-21a: add a pre_step with my_requirements_pre.txt + my_find_links_pre
-rem 2024-05-12a: use python -m pip instead of pip , and remove --upgrade %new_resolver%
-rem *****************************
-
-rem algorithm:
-rem 0.0 Initialize variables
-rem 1.0 Do 2021-04-22 : patch PyPy3 (as we don't try to copy PyPy3.exe to Python.exe)
-rem 2021-04-22b: Patch PyPy3, give '%my_python_target_release%' to make (otherwise known only after unzip)
-rem 2 a Pre-clear of previous build infrastructure
-rem 2.0 Create a new build
-rem 2.1 Create basic build infrastructure
-rem 2.2 check infrastructure is in place
-rem 2.3 add mandatory packages for build
-rem 2.4 add packages pre_requirements (if any)
-rem 2.5 add requirement packages
-rem 2.8 post-build (if specific workarounds)
-rem 2.9 archive success
-rem 3.0 Generate Changelog and binaries
-
-
-
-rem this is pre-initialised per the program calling this .bat
-rem set my_original_path=%path%
-rem set my_root_dir_for_builds=D:\WinP
-
-rem set my_python_target=34
-rem set my_pyver=3.4
-rem set my_flavor=mkl
-rem set my_release=84
-
-
-rem set my_find_link=C:\WinP\packages.srcreq
-
-rem this is optionaly pre-initialised per the calling program (simpler to manage here)
-rem set my_release_level=
-
-
-echo ------------------
-echo 0.0 Initialize variables
-echo ------------------
-
-if "%my_release_level%"=="" set my_release_level=b2
-
-set my_basedir=%my_root_dir_for_builds%\bd%my_python_target%
-
-rem since 2024-05-01, a building env need is reduced to a WinPythondot 3.8+ augmented with packages: flit + packaging
-set my_buildenv=C:\WinPdev\WPy64-310111
-
-if "%my_constraints%"=="" set my_constraints=C:\WinP\constraints.txt
-
-rem 2021-04-22 : path PyPy3 (as we don't try to copy PyPy3.exe to Python.exe)
-if "%target_python_exe%"=="" set target_python_exe=python.exe
-
-
-if %my_python_target%==38 (
- set my_python_target_release=3812
- set my_release=1
-)
-if %my_python_target%==39 (
- set my_python_target_release=3915
- set my_release=1
-)
-
-if %my_python_target%==310 (
- set my_python_target_release=31011
- set my_release=2
-)
-
-if %my_python_target%==311 (
- set my_python_target_release=3118
- set my_release=1
-)
-
-if %my_python_target%==312 (
- set my_python_target_release=3123
- set my_release=1
-)
-
-if %my_python_target%==313 (
- set my_python_target_release=3130
- set my_release=0
-)
-
-
-
-rem **** 2018-10-30 create_installer **
-if "%my_create_installer%"=="" set my_create_installer=True
-
-rem set my_flavor=Slim
-
-rem set my_arch=32
-rem set my_preclear_build_directory=Yes
-
-rem 20230821 add a requirement_pre.txt +
-rem set my_requirements_pre=C:\WinP\bd311\requirements_mkl_pre.txt
-rem set my_find_links_pre=C:\WinP\packages_mkl.srcreq
-
-rem set my_requirements=C:\Winpents=d:\my_req1.txt
-rem set my_find_links=D:\WinPython\packages.srcreq
-
-rem set my_source_dirs=D:\WinPython\bd34\packages.src D:\WinPython\bd34\packages.win32.Slim
-rem set my_toolsdirs=D:\WinPython\bd34\Tools.Slim
-rem set my_docsdirs=D:\WinPython\bd34\docs.Slim
-
-rem set my_install_options=--no-index --pre
-
-set my_day=%date:/=-%
-set my_time=%time:~0,5%
-set my_time=%my_time::=_%
-
-rem was the bug
-set my_time=%my_time: =0%
-
-set my_archive_dir=%~dp0WinPython_build_logs
-if not exist %my_archive_dir% mkdir %my_archive_dir%
-
-set my_archive_log=%my_archive_dir%\build_%my_pyver%._.%my_release%%my_flavor%_%my_release_level%_of_%my_day%_at_%my_time%.txt
-
-
-echo ===============
-echo preparing winPython for %my_pyver% (%my_python_target%)release %my_release%%my_flavor% (%my_release_level%) *** %my_arch% bit ***
-echo %date% %time%
-echo ===============
-echo ===============>>%my_archive_log%
-echo preparing winPython for %my_pyver% (%my_python_target%)release %my_release%%my_flavor% (%my_release_level%) *** %my_arch% bit ***>>%my_archive_log%
-echo %date% %time%>>%my_archive_log%
-echo ===============>>%my_archive_log%
-
-
-if not "%my_preclear_build_directory%"=="Yes" goto no_preclear
-
-
-echo ------------------
-echo 1.0 Do a Pre-clear of previous build infrastructure
-echo ------------------
-echo ------------------>>%my_archive_log%
-echo 1.0 Do a Pre-clear of previous build infrastructure>>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ------------------>>%my_archive_log%
-
-rem 2019-05-10 PATCH for build problem (asking permission to overwrite the file)
-del -y %userprofile%\.jupyter\jupyter_notebook_config.py
-
-cd /D %my_root_dir_for_builds%\bd%my_python_target%
-
-set build_det=\%my_flavor%
-if "%my_flavor%"=="" set build_det=
-
-dir %build_det%
-
-rem 2021-02-13 workaround to hard to remove json files
-echo ren bu%my_flavor% bu%my_flavor%_old
-ren bu%my_flavor% bu%my_flavor%_old
-
-rem pause
-start rmdir /S /Q bu%my_flavor%_old
-
-
-echo rmdir /S /Q bu%my_flavor%
-rem pause
-rmdir /S /Q bu%my_flavor%
-rmdir /S /Q bu%my_flavor%
-rmdir /S /Q bu%my_flavor%
-rmdir /S /Q bu%my_flavor%
-rmdir /S /Q bu%my_flavor%
-rmdir /S /Q dist
-
-echo %date% %time%
-echo %date% %time%>>%my_archive_log%
-
-:no_preclear
-
-e
-
-echo -----------------------------
-echo 2.0 Create a new build
-echo ---------------------------- >>%my_archive_log%
-echo 2.0 Create a new build>>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ---------------------------- >>%my_archive_log%
-
-
-echo cd /D %~dp0>>%my_archive_log%
-cd /D %~dp0
-
-echo set path=%my_original_path%>>%my_archive_log%
-set path=%my_original_path%
-
-echo call %my_buildenv%\scripts\env.bat>>%my_archive_log%
-call %my_buildenv%\scripts\env.bat
-
-echo -----------------------------
-echo 2.1 Create basic build infrastructure
-echo %date% %time%
-echo -----------------------------
-echo ----------------------------->>%my_archive_log%
-echo 2.1 Create basic build infrastructure>>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ----------------------------->>%my_archive_log%
-
-rem 2019-10-22 new age step1
-rem we don't use requirements
-rem we don't create installer at first path
-rem we use legacy python build cd /D %~dp0
-
-set my_buildenv_path=%path%
-
-echo python.exe -c "from make import *;make_all(%my_release%, '%my_release_level%', pyver='%my_pyver%', basedir=r'%my_basedir%', verbose=True, architecture=%my_arch%, flavor='%my_flavor%', install_options=r'%my_install_options%', find_links=r'%my_find_links%', source_dirs=r'%my_source_dirs%', toolsdirs=r'%my_toolsdirs%', docsdirs=r'%my_docsdirs%', create_installer='False', python_target_release='%my_python_target_release%')">>%my_archive_log%
-echo python.exe -c "from make import *;make_all(%my_release%, '%my_release_level%', pyver='%my_pyver%', basedir=r'%my_basedir%', verbose=True, architecture=%my_arch%, flavor='%my_flavor%', install_options=r'%my_install_options%', find_links=r'%my_find_links%', source_dirs=r'%my_source_dirs%', toolsdirs=r'%my_toolsdirs%', docsdirs=r'%my_docsdirs%', create_installer='False', python_target_release='%my_python_target_release%')"
-rem pause
-python.exe -c "from make import *;make_all(%my_release%, '%my_release_level%', pyver='%my_pyver%', basedir=r'%my_basedir%', verbose=True, architecture=%my_arch%, flavor='%my_flavor%', install_options=r'%my_install_options%', find_links=r'%my_find_links%', source_dirs=r'%my_source_dirs%', toolsdirs=r'%my_toolsdirs%', docsdirs=r'%my_docsdirs%', create_installer='False', python_target_release='%my_python_target_release%')">>%my_archive_log%
-
-rem old one
-rem echo python.exe -c "from make import *;make_all(%my_release%, '%my_release_level%', pyver='%my_pyver%', basedir=r'%my_basedir%', verbose=True, architecture=%my_arch%, flavor='%my_flavor%', requirements=r'%my_requirements%', install_options=r'%my_install_options%', find_links=r'%my_find_links%', source_dirs=r'%my_source_dirs%', toolsdirs=r'%my_toolsdirs%', docsdirs=r'%my_docsdirs%', create_installer='%my_create_installer%')">>%my_archive_log%
-
-
-echo -----------------------------
-echo 2.2 check infrastructure is in place
-echo %date% %time%
-echo -----------------------------
-echo ----------------------------->>%my_archive_log%
-echo 2.2 check infrastructure is in place>>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ----------------------------->>%my_archive_log%
-rem 2019-10-22 new age step2
-rem we use final environment to install requirements
-set path=%my_original_path%
-
-@echo on
-set my_WINPYDIRBASE=%my_root_dir_for_builds%\bd%my_python_target%\bu%my_flavor%\Wpy%my_arch%-%my_python_target_release%%my_release%%my_release_level%
-
-set WINPYDIRBASE=%my_WINPYDIRBASE%
-
-rem D/2020-07-04: poka-yoke
-if not exist %my_WINPYDIRBASE%\scripts\env.bat (
- echo please check and correct my_python_target_release=%my_python_target_release%
- echo my_arch=%my_arch%
- echo my_python_target_release=%my_python_target_release%
- echo my_release=%my_release%
- echo my_release_level=%my_release_level%
- echo in generate_a_winpython_distro.bat
- echo as %my_WINPYDIRBASE%\scripts\env.bat doesnt exist
- pause
- exit
-)
-rem F/2020-07-04: poka-yoke
-
-call %my_WINPYDIRBASE%\scripts\env.bat
-set
-echo beg of step 2/3
-rem ok no pause
-
-echo -----------------------------
-echo 2.3 add mandatory packages for build
-echo %date% %time%
-echo -----------------------------
-echo ----------------------------->>%my_archive_log%
-echo 2.3 add mandatory packages for build>>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ----------------------------->>%my_archive_log%
-
-rem D/2024-04-10: do not override "/vcruntime140_1.dll" with msvc_runtime wheel
-rem echo python.exe -c "import sys;from pathlib import Path;f=open(Path(sys.prefix) / 'pyenv.cfg', 'w');f.write('include-system-site-packages = true\n');f.close">>%my_archive_log%
-rem F/2024-04-10
-
-rem D/2020-07-05: install msvc_runtime before packages that may want to compile
-echo python -m pip install msvc_runtime --pre --no-index --trusted-host=None --find-links=%my_find_links% --upgrade
-echo python -m pip install msvc_runtime --pre --no-index --trusted-host=None --find-links=%my_find_links% --upgrade>>%my_archive_log%
-python -m pip install msvc_runtime --pre --no-index --trusted-host=None --find-links=%my_find_links% --upgrade
-rem F/2020-07-05: install msvc_runtime before packages that may want to compile
-
-
-rem D/2023-08-21a: add a pre_step with my_requirements_pre.txt + my_find_links_pre
-
-echo -----------------------------
-echo 2.4 add packages pre_requirements (if any)
-echo %date% %time%
-echo -----------------------------
-echo ----------------------------->>%my_archive_log%
-echo 2.4 add packages pre_requirements (if any)
-echo %date% %time% >>%my_archive_log%
-echo ----------------------------->>%my_archive_log%rem F/20230821 add a pre_step with my_requirements_pre.txt + my_find_links_pre
-
-if not "Z%my_requirements_pre%Z"=="ZZ" (
-
- rem 2023-08-21a: add a pre_step with my_requirements_pre.txt + my_find_links_pre
-if "%my_find_links_pre%"=="" set my_find_links_pre=%my_find_links%
-
-echo python -m pip install -r %my_requirements_pre% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links_pre%
-echo python -m pip install -r %my_requirements_pre% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links_pre% >>%my_archive_log%
-echo if pip doesn't work, check the path of %my_WINPYDIRBASE%
-
-python -m pip install -r %my_requirements_pre% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links_pre% >>%my_archive_log%
-) else (
-echo no packages pre_requirements
-echo no packages pre_requirements>>%my_archive_log%
-)
-rem F/2023-08-21a: add a pre_step with my_requirements_pre.txt + my_find_links_pre
-
-echo -----------------------------
-echo 2.5 add requirement packages
-echo %date% %time%
-echo -----------------------------
-echo ----------------------------->>%my_archive_log%
-echo 2.5 add requirement packages_versions>>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ----------------------------->>%my_archive_log%
-
-echo python -m pip install -r %my_requirements% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links%
-echo python -m pip install -r %my_requirements% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links% >>%my_archive_log%
-echo if pip doesn't work, check the path of %my_WINPYDIRBASE%
-
-
-rem 2020-12-05 : add a constraints.txt file from a recent pip list
-python -m pip install -r %my_requirements% -c %my_constraints% --pre --no-index --trusted-host=None --find-links=%my_find_links% >>%my_archive_log%
-
-echo mid of step 2/3
-
-echo -----------------------------
-echo 2.8 post-build (if specific workarounds)
-echo %date% %time%
-echo -----------------------------
-echo ----------------------------->>%my_archive_log%
-echo 2.8 post-build (if specific workarounds)>>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ----------------------------->>%my_archive_log%
-rem finalize
-@echo on
-call %my_basedir%\run_complement_newbuild.bat %my_WINPYDIRBASE%
-echo end of step 2/3
-echo end of step 2/3>>%my_archive_log%
-rem pause
-
-rem *****************************
-rem 2021-03-20 : track successes packages combination are archived for future contraint update
-rem *****************************
-echo -----------------------------
-echo 2.9 archive success
-echo %date% %time%
-echo -----------------------------
-echo ----------------------------->>%my_archive_log%
-echo 2.9 archive success >>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ----------------------------->>%my_archive_log%
-echo %target_python_exe% -m pip freeze>%my_archive_log%.packages_versions.txt>>%my_archive_log%
-
-%target_python_exe% -m pip freeze>%my_archive_log%.packages_versions.txt
-
-
-echo -----------------------------
-echo 3.0 Generate Changelog and binaries
-echo -----------------------------
-echo ----------------------------->>%my_archive_log%
-echo 3.0 Generate Changelog and binaries >>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ----------------------------->>%my_archive_log%
-
-rem build final changelog and binaries, using create_installer='%my_create_installer%', remove_existing=False , remove : requirements, toolsdirs and docdirs
-
-set path=%my_original_path%
-echo cd /D %~dp0>>%my_archive_log%
-cd /D %~dp0
-
-echo call %my_buildenv%\scripts\env.bat>>%my_archive_log%
-call %my_buildenv%\scripts\env.bat
-set
-
-echo python.exe -c "from make import *;make_all(%my_release%, '%my_release_level%', pyver='%my_pyver%', basedir=r'%my_basedir%', verbose=True, architecture=%my_arch%, flavor='%my_flavor%', install_options=r'%my_install_options%', find_links=r'%my_find_links%', source_dirs=r'%my_source_dirs%', create_installer='%my_create_installer%', remove_existing=False, python_target_release='%my_python_target_release%')">>%my_archive_log%
-echo python.exe -c "from make import *;make_all(%my_release%, '%my_release_level%', pyver='%my_pyver%', basedir=r'%my_basedir%', verbose=True, architecture=%my_arch%, flavor='%my_flavor%', install_options=r'%my_install_options%', find_links=r'%my_find_links%', source_dirs=r'%my_source_dirs%', create_installer='%my_create_installer%', remove_existing=False, python_target_release='%my_python_target_release%')"
-rem pause
-python.exe -c "from make import *;make_all(%my_release%, '%my_release_level%', pyver='%my_pyver%', basedir=r'%my_basedir%', verbose=True, architecture=%my_arch%, flavor='%my_flavor%', install_options=r'%my_install_options%', find_links=r'%my_find_links%', source_dirs=r'%my_source_dirs%', create_installer='%my_create_installer%', remove_existing=False, python_target_release='%my_python_target_release%')">>%my_archive_log%
-
-echo ===============
-echo END OF creation
-echo ===============
-echo ===============>>%my_archive_log%
-echo END OF creation>>%my_archive_log%
-echo %date% %time% >>%my_archive_log%
-echo ===============>>%my_archive_log%
-
-rem show logs
-start notepad.exe %my_archive_log%
-
-rem 2021-03-20 : track successes packages combination are archived for future contraint update
-start notepad.exe %my_archive_log%.packages_versions.txt
-
-set path=%my_original_path%
-rem pause
\ No newline at end of file
diff --git a/generate_a_winpython_distropy.bat b/generate_a_winpython_distropy.bat
new file mode 100644
index 00000000..0e8c37d7
--- /dev/null
+++ b/generate_a_winpython_distropy.bat
@@ -0,0 +1,42 @@
+rem generate_a_winpython_distropy.bat: to be launched with a winpython sub-directory
+rem where 'build_winpython.py' and 'make.py' are
+@echo on
+
+REM === Initialize default values ===
+if not defined my_release_level set "my_release_level=b1"
+if not defined my_create_installer set "my_create_installer=True"
+if not defined my_constraints set "my_constraints=C:\WinP\constraints.txt"
+if not defined target_python_exe set "target_python_exe=python.exe"
+if not defined mandatory_requirements set "mandatory_requirements=%~dp0mandatory_requirements.txt"
+
+set "my_archive_dir=%~dp0WinPython_build_logs"
+if not exist "%my_archive_dir%" mkdir "%my_archive_dir%"
+
+REM === Format log timestamp ===
+set "my_time=%time:~0,5%"
+set "my_time=%my_time::=_%"
+set "my_time=%my_time: =0%"
+
+REM === Determine Python target version ===
+if "%my_python_target%"=="311" (set "my_python_target_release=3119" & set "my_release=2")
+if "%my_python_target%"=="312" (set "my_python_target_release=31210" & set "my_release=2")
+if "%my_python_target%"=="313" (set "my_python_target_release=3135" & set "my_release=1")
+if "%my_python_target%"=="314" (set "my_python_target_release=3140" & set "my_release=1")
+
+REM === Define base build and distribution paths ===
+set "my_basedir=%my_root_dir_for_builds%\bd%my_python_target%"
+set "my_WINPYDIRBASE=%my_basedir%\bu%my_flavor%\WPy%my_arch%-%my_python_target_release%%my_release%%my_release_level%"
+
+rem a building env need is a Python with packages: WinPython + build + flit + packaging + mkshim400.py
+set "my_buildenv=C:\WinPdev\WPy64-310111"
+set "my_buildenvi=C:\WinPdev\WPy64-310111\python-3.10.11.amd64"
+set "my_python_exe=C:\WinPdev\WPy64-310111\python-3.10.11.amd64\python.exe"
+
+if "%my_requirements_pre%" == "" set "my_requirements_pre=%mandatory_requirements%"
+set "my_requirements_pre=%mandatory_requirements%"
+
+cd/d %~dp0
+echo %my_python_exe% -m winpython.build_winpython --buildenv %my_buildenvi% --python-target %my_python_target% --release %my_release% --release-level %my_release_level% --winpydirbase %my_WINPYDIRBASE% --flavor %my_flavor% --source_dirs %my_source_dirs% --tools_dirs %my_toolsdirs% --log-dir %~dp0WinPython_build_logs --mandatory-req %mandatory_requirements% --pre-req %my_requirements_pre% --requirements %my_requirements% --constraints %my_constraints% --find-links %my_find_links% --wheelhousereq "%wheelhousereq%" --create-installer "%my_create_installer%"
+%my_python_exe% -m winpython.build_winpython --buildenv %my_buildenvi% --python-target %my_python_target% --release %my_release% --release-level %my_release_level% --winpydirbase %my_WINPYDIRBASE% --flavor %my_flavor% --source_dirs %my_source_dirs% --tools_dirs %my_toolsdirs% --log-dir %~dp0WinPython_build_logs --mandatory-req %mandatory_requirements% --pre-req %my_requirements_pre% --requirements %my_requirements% --constraints %my_constraints% --find-links %my_find_links% --wheelhousereq "%wheelhousereq%" --create-installer "%my_create_installer%"
+pause
+exit
diff --git a/generate_a_winpython_distropy_meta.bat b/generate_a_winpython_distropy_meta.bat
new file mode 100644
index 00000000..443ab3fb
--- /dev/null
+++ b/generate_a_winpython_distropy_meta.bat
@@ -0,0 +1 @@
+"C:\WinPdev\WPy64-310111\python-3.10.11.amd64\python.exe" build_winpython_meta.py %1
diff --git a/generate_winpython_distros311_mkl.bat b/generate_winpython_distros311_mkl.bat
deleted file mode 100644
index 9f28bf24..00000000
--- a/generate_winpython_distros311_mkl.bat
+++ /dev/null
@@ -1,44 +0,0 @@
-rem 20230821 add a pre_step with my_requirements_pre.txt + my_find_links_pre
-rem this replace running manually from spyder the make.py
-rem to launch from a winpython module 'make' directory
-
-set my_original_path=%path%
-
-set my_root_dir_for_builds=C:\WinP
-set my_python_target=311
-set my_pyver=3.11
-
-set my_flavor=mkl
-
-set my_release=0
-
-set my_release_level=
-
-rem set my_create_installer=False
-set my_create_installer=nsis.zip
-set my_create_installer=7zip
-rem set my_create_installer=False
-
-set my_arch=64
-set my_preclear_build_directory=Yes
-
-set tmp_reqdir=%my_root_dir_for_builds%\bd%my_python_target%
-
-rem 20230821 add a requirement_pre.txt +
-set my_requirements_pre=C:\WinP\bd311\requirements_mkl_pre.txt
-set my_find_links_pre=C:\WinP\packages_mkl.srcreq
-
-rem just mkl = 204 Mo total
-
-set my_requirements=C:\WinP\bd311\requirements_mkl.txt
-set my_find_links=C:\WinP\packages.srcreq
-
-set my_source_dirs=C:\WinP\bd311\packages.win-amd64
-set my_toolsdirs=C:\WinP\bdTools\tools64
-set my_docsdirs=C:\WinP\bdDocs\docs
-set my_install_options=--no-index --pre --trusted-host=None
-
-call %~dp0\generate_a_winpython_distro.bat
-
-
-pause
\ No newline at end of file
diff --git a/generate_winpython_distros311_qt5.bat b/generate_winpython_distros311_qt5.bat
deleted file mode 100644
index b5640e7f..00000000
--- a/generate_winpython_distros311_qt5.bat
+++ /dev/null
@@ -1,37 +0,0 @@
-rem this replace running manually from spyder the make.py
-rem to launch from a winpython module 'make' directory
-
-set my_original_path=%path%
-
-set my_root_dir_for_builds=C:\WinP
-set my_python_target=311
-set my_pyver=3.11
-
-set my_flavor=
-
-set my_release=0
-
-set my_release_level=
-
-rem set my_create_installer=False
-set my_create_installer=nsis.zip
-set my_create_installer=7zip
-
-set my_arch=64
-set my_preclear_build_directory=Yes
-
-set tmp_reqdir=%my_root_dir_for_builds%\bd%my_python_target%
-
-set my_requirements=C:\WinP\bd311\Qt5_requirements64.txt
-
-set my_find_links=C:\WinP\packages.srcreq
-
-set my_source_dirs=C:\WinP\bd311\packages.win-amd64
-set my_toolsdirs=C:\WinP\bdTools\tools64
-set my_docsdirs=C:\WinP\bdDocs\docs
-set my_install_options=--no-index --pre --trusted-host=None
-
-call %~dp0\generate_a_winpython_distro.bat
-
-
-pause
\ No newline at end of file
diff --git a/generate_winpython_distros311_dot.bat b/generate_winpython_distros313_dot.bat
similarity index 54%
rename from generate_winpython_distros311_dot.bat
rename to generate_winpython_distros313_dot.bat
index 1fdd2ff8..cbd95581 100644
--- a/generate_winpython_distros311_dot.bat
+++ b/generate_winpython_distros313_dot.bat
@@ -4,43 +4,32 @@ rem to launch from a winpython module 'make' directory
set my_original_path=%path%
set my_root_dir_for_builds=C:\Winp
-set my_python_target=311
-set my_pyver=3.11
-
+set my_python_target=313
+set my_pyver=3.13
set my_flavor=dot
+set my_arch=64
-set my_release=0
-
+rem settings delegated to generate_a_winpython_distro.bat
+set my_release=
set my_release_level=
-rem set my_create_installer=False
-set my_create_installer=nsis.zip
-set my_create_installer=7zip
+rem list of installers to create separated per dot: False=none, .zip=zip, .7z=.7z, 7zip=auto-extractible 7z
+set my_create_installer=7zip.7z.zip
+set my_create_installer=7zip.zip
-set my_arch=64
set my_preclear_build_directory=Yes
set tmp_reqdir=%my_root_dir_for_builds%\bd%my_python_target%
-set my_requirements=C:\Winp\bd311\dot_requirements.txt
+set my_requirements=C:\Winp\bd313\dot_requirements.txt
+set my_source_dirs=C:\Winp\bd313\packages.win-amd64
set my_find_links=C:\Winp\packages.srcreq
-
-set my_source_dirs=C:\Winp\bd311\packages.win-amd64
set my_toolsdirs=C:\Winp\bdTools\Tools.dot
-set my_docsdirs=C:\WinP\bdDocs\docs.dot
set my_install_options=--no-index --pre --trusted-host=None
-call %~dp0\generate_a_winpython_distro.bat
-
-
-set my_arch=32
-set my_preclear_build_directory=No
-
-set my_source_dirs=C:\Winp\bd311\packages.win32
-
rem call %~dp0\generate_a_winpython_distro.bat
-
+call %~dp0\generate_a_winpython_distropy.bat
pause
\ No newline at end of file
diff --git a/generate_winpython_distros312_dot.bat b/generate_winpython_distros313_slim.bat
similarity index 51%
rename from generate_winpython_distros312_dot.bat
rename to generate_winpython_distros313_slim.bat
index b69e3090..67459b8c 100644
--- a/generate_winpython_distros312_dot.bat
+++ b/generate_winpython_distros313_slim.bat
@@ -4,47 +4,35 @@ rem to launch from a winpython module 'make' directory
set my_original_path=%path%
set my_root_dir_for_builds=C:\Winp
-set my_python_target=312
-set my_pyver=3.12
-
-set my_flavor=dot
+set my_python_target=313
+set my_pyver=3.13
+set my_flavor=slim
+set my_arch=64
+rem settings delegated to generate_a_winpython_distro.bat
set my_release=
-
set my_release_level=
-rem set my_create_installer=False
-set my_create_installer=nsis.zip
-set my_create_installer=7zip
-
-rem 2024-07-14: ask both the 7zip auto executable and the .7z simple archive
+rem list of installers to create separated per dot: False=none, .zip=zip, .7z=.7z, 7zip=auto-extractible 7z
+rem set my_create_installer=7zip.7z.zip
set my_create_installer=7zip.7z
-
-set my_arch=64
set my_preclear_build_directory=Yes
set tmp_reqdir=%my_root_dir_for_builds%\bd%my_python_target%
-set my_requirements=C:\Winp\bd312\dot_requirements.txt
+set my_requirements=C:\Winp\bd313\requirements64_slim.txt
+set my_source_dirs=C:\Winp\bd313\packages.win-amd64
set my_find_links=C:\Winp\packages.srcreq
-
-set my_source_dirs=C:\Winp\bd312\packages.win-amd64
set my_toolsdirs=C:\Winp\bdTools\Tools.dot
-set my_docsdirs=C:\WinP\bdDocs\docs.dot
-
-set my_install_options=--no-index --pre --trusted-host=None
-
-call %~dp0\generate_a_winpython_distro.bat
+REM 2024-07-13:put back pandoc (so from 598Mo to 518Mo?)
+set my_toolsdirs=C:\WinP\bdTools\tools64_pandoc_alone
-set my_arch=32
-set my_preclear_build_directory=No
-
-set my_source_dirs=C:\Winp\bd312\packages.win32
+set my_install_options=--no-index --pre --trusted-host=None
rem call %~dp0\generate_a_winpython_distro.bat
-
+call %~dp0\generate_a_winpython_distropy.bat
pause
\ No newline at end of file
diff --git a/generate_winpython_distros313_wheel.bat b/generate_winpython_distros313_wheel.bat
new file mode 100644
index 00000000..9afee135
--- /dev/null
+++ b/generate_winpython_distros313_wheel.bat
@@ -0,0 +1,40 @@
+rem this replace running manually from spyder the make.py
+rem to launch from a winpython module 'make' directory
+
+set my_original_path=%path%
+
+set my_root_dir_for_builds=C:\Winp
+set my_python_target=313
+set my_pyver=3.13
+set my_flavor=whl
+set my_arch=64
+
+rem settings delegated to generate_a_winpython_distro.bat
+set my_release=
+set my_release_level=
+
+rem list of installers to create separated per dot: False=none, .zip=zip, .7z=.7z, 7zip=auto-extractible 7z
+set my_create_installer=7zip-mx5.7z-mx7.zip
+set my_create_installer=.7z-mx9
+set my_preclear_build_directory=Yes
+
+set tmp_reqdir=%my_root_dir_for_builds%\bd%my_python_target%
+
+set my_requirements=C:\Winp\bd313\dot_requirements.txt
+set my_source_dirs=C:\Winp\bd313\packages.win-amd64
+
+set my_find_links=C:\Winp\packages.srcreq
+set my_toolsdirs=C:\Winp\bdTools\Tools.dot
+
+set my_install_options=--no-index --pre --trusted-host=None
+
+rem set addlockfile=dot
+
+set wheelhousereq=C:\Winp\bd313\dot_requirements.txt
+set wheelhousereq=C:\Winp\bd313\requirements64_whl.txt
+
+
+rem call %~dp0\generate_a_winpython_distro.bat
+call %~dp0\generate_a_winpython_distropy.bat
+
+pause
diff --git a/hash.py b/hash.py
deleted file mode 100644
index 525ab1f8..00000000
--- a/hash.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Tue Jun 23 21:30:06 2015
-
-@author: famille
-"""
-
-import io
-import os
-import sys
-import hashlib
-
-
-def give_hash(file_in, with_this):
- with io.open(file_in, 'rb') as f:
- return with_this(f.read()).hexdigest()
-
-def give_hashblake(file_in, with_this):
- with io.open(file_in, 'rb') as f:
- return with_this(f.read(),digest_size=32).hexdigest()
-
-
-if __name__ == '__main__':
- if len(sys.argv) < 2:
- print(
- "Usage: "
- + sys.argv[0]
- + " github-user [github-project]"
- )
- exit(1)
- file = sys.argv[1]
-
- header = (
- " MD5"
- + " " * (32 - 4)
- + " | SHA-1"
- + " " * (40 - 5)
- + " | SHA-256"
- + " " * (64 - 7)
- + " | Binary"
- + " " * (33 - 5)
- + "| Size"
- + " " * (20 - 6)
- #+ " | SHA3-256"
- #+ " " * (64 - 8)
- + " | blake2b-256"
- + " " * (64 - 11)
- )
- line = "|".join(
- ["-" * len(i) for i in header.split("|")]
- )
-
- print(header)
- print(line)
-
- print(""+
- f"{give_hash(file, hashlib.md5)} | " +
- f"{give_hash(file, hashlib.sha1)} | " +
- f"{give_hash(file, hashlib.sha256)} | " +
- f"{os.path.basename(file):33} |"+
- f"{os.path.getsize(file):13,}".replace(",", " ") + ' Bytes | ' +
- # f" | {give_hash(file, hashlib.sha3_256)}"
- f"{give_hashblake(file, hashlib.blake2b)}")
-
-
-
diff --git a/hash_launch.bat b/hash_launch.bat
index 08105e73..623765d7 100644
--- a/hash_launch.bat
+++ b/hash_launch.bat
@@ -1,8 +1,10 @@
-call C:\WPy64-3890\scripts\env.bat
+call C:\WinPdev\WPy64-310111\scripts\env.bat
cd %~dp0
rem echo %date% %time%>>gdc_counting.txt
-python hash.py %1 >>hash_counting_%date:/=_%.txt
+python -c "import sys;from winpython import hash; hash.print_hashes(sys.argv[1:])" %* >>hash_counting_%date:/=_%.txt
+rem python hash.py %* >>hash_counting_%date:/=_%.txt
start notepad.exe hash_counting_%date:/=_%.txt
+
\ No newline at end of file
diff --git a/make.py b/make.py
deleted file mode 100644
index b6d653f1..00000000
--- a/make.py
+++ /dev/null
@@ -1,1908 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright © 2012 Pierre Raybaut
-# Copyright © 2014-2024+ The Winpython development team https://github.com/winpython/
-# Licensed under the terms of the MIT License
-# (see winpython/__init__.py for details)
-
-"""
-WinPython build script
-
-Created on Sun Aug 12 11:17:50 2012
-"""
-
-import os
-from pathlib import Path
-import re
-import subprocess
-import shutil
-import sys
-
-# Local imports
-from winpython import wppm, utils
-import diff
-
-
-CHANGELOGS_DIR = str(Path(__file__).parent / "changelogs")
-assert Path(CHANGELOGS_DIR).is_dir()
-
-
-def get_drives():
- """
- This function retrieves a list of existing drives on a Windows system.
-
- Returns:
- list: A list of drive letters (e.g., ['C:', 'D:'])
- """
- if hasattr(os, 'listdrives'): # For Python 3.12 and above
- return os.listdrives()
- else:
- drives = [f"{d}:\\" for d in os.environ.get('HOMEDRIVE', '').split("\\") if d]
- return drives
-
-
-def get_nsis_exe():
- """Return NSIS executable"""
- localdir = str(Path(sys.prefix).parent.parent)
- for drive in get_drives():
- for dirname in (
- r"C:\Program Files",
- r"C:\Program Files (x86)",
- drive + r"PortableApps\NSISPortableANSI",
- drive + r"PortableApps\NSISPortable",
- str(Path(localdir) / "NSISPortableANSI"),
- str(Path(localdir) / "NSISPortable"),
- ):
- for subdirname in (".", "App"):
- exe = str(Path(dirname) / subdirname / "NSIS" / "makensis.exe")
- if Path(exe).is_file():
- return exe
- else:
- raise RuntimeError("NSIS is not installed on this computer.")
-
-
-def get_7zip_exe():
- """Return 7zip executable"""
- localdir = str(Path(sys.prefix).parent.parent)
- for drive in get_drives():
- for dirname in (
- r"C:\Program Files",
- r"C:\Program Files (x86)",
- str(Path(localdir) / "7-Zip"),
- ):
- for subdirname in (".", "App"):
- exe = str(Path(dirname) / subdirname / "7-Zip" / "7z.exe")
- if Path(exe).is_file():
- return exe
- else:
- raise RuntimeError("7ZIP is not installed on this computer.")
-
-
-def replace_in_nsis_file(fname, data):
- """Replace text in line starting with *start*, from this position:
- data is a list of (start, text) tuples"""
- fd = open(fname, "U")
- lines = fd.readlines()
- fd.close()
- for idx, line in enumerate(lines):
- for start, text in data:
- if start not in (
- "Icon",
- "OutFile",
- ) and not start.startswith("!"):
- start = "!define " + start
- if line.startswith(start + " "):
- lines[idx] = line[: len(start) + 1] + f'"{text}"' + "\n"
- fd = open(fname, "w")
- fd.writelines(lines)
- print("iss for ", fname, "is", lines)
- fd.close()
-
-
-def replace_in_7zip_file(fname, data):
- """Replace text in line starting with *start*, from this position:
- data is a list of (start, text) tuples"""
- fd = open(fname, "U")
- lines = fd.readlines()
- fd.close()
- for idx, line in enumerate(lines):
- for start, text in data:
- if start not in (
- "Icon",
- "OutFile",
- ) and not start.startswith("!"):
- start = "set " + start
- if line.startswith(start + "="):
- lines[idx] = line[: len(start) + 1] + f"{text}" + "\n"
- fd = open(fname, "w")
- fd.writelines(lines)
- print("7-zip for ", fname, "is", lines)
- fd.close()
-
-
-def build_nsis(srcname, dstname, data):
- """Build NSIS script"""
- NSIS_EXE = get_nsis_exe() # NSIS Compiler
- portable_dir = str(Path(__file__).resolve().parent / "portable")
- shutil.copy(str(Path(portable_dir) / srcname), dstname)
- data = [
- (
- "!addincludedir",
- str(Path(portable_dir) / "include"),
- )
- ] + list(data)
- replace_in_nsis_file(dstname, data)
- try:
- retcode = subprocess.call(
- f'"{NSIS_EXE}" -V2 "{dstname}"',
- shell=True,
- stdout=sys.stderr,
- )
- if retcode < 0:
- print(
- "Child was terminated by signal",
- -retcode,
- file=sys.stderr,
- )
- except OSError as e:
- print("Execution failed:", e, file=sys.stderr)
- os.remove(dstname)
-
-
-def build_shimmy_launcher(launcher_name, command, icon_path, mkshim_program='mkshim400.py', workdir=''):
- """Build .exe launcher with mkshim_program and pywin32"""
-
- # define where is mkshim
- mkshim_program = str(Path(__file__).resolve().parent / mkshim_program)
- python_program = utils.get_python_executable()
-
- # Create the executable using mkshim.py or mkshim240.py
- mkshim_command = f'{python_program} "{mkshim_program}" -f "{launcher_name}" -c "{command}"'
- if workdir !='': # V03 of shim: we can handle an optional sub-directory
- mkshim_command += f' --subdir "{workdir}"'
- # Embed the icon, if provided
- if Path(icon_path).is_file():
- mkshim_command += f' --i "{icon_path}"'
- print(f"Building .exe launcher with {mkshim_program}:", mkshim_command)
- subprocess.run(mkshim_command, shell=True)
-
-
-def build_7zip(srcname, dstname, data):
- """7-Zip Setup Script"""
- SEVENZIP_EXE = get_7zip_exe()
- portable_dir = str(Path(__file__).resolve().parent / "portable")
- shutil.copy(str(Path(portable_dir) / srcname), dstname)
- data = [
- ("PORTABLE_DIR", portable_dir),
- ("SEVENZIP_EXE", SEVENZIP_EXE),
- ] + list(data)
- replace_in_7zip_file(dstname, data)
- try:
- # insted of a 7zip command line, we launch a script that does it
- # retcode = subprocess.call(f'"{SEVENZIP_EXE}" "{dstname}"'),
- retcode = subprocess.call(
- f'"{dstname}" ',
- shell=True,
- stdout=sys.stderr,
- )
- if retcode < 0:
- print(
- "Child was terminated by signal",
- -retcode,
- file=sys.stderr,
- )
- except OSError as e:
- print("Execution failed:", e, file=sys.stderr)
- # os.remove(dstname)
-
-
-class WinPythonDistribution(object):
- """WinPython distribution"""
-
- MINGW32_PATH = r"\t\mingw32\bin"
- R_PATH = r"\t\R\bin"
- JULIA_PATH = r"\t\Julia\bin"
- NODEJS_PATH = r"\n" # r'\t\n'
-
- def __init__(
- self,
- build_number,
- release_level,
- target,
- wheeldir,
- toolsdirs=None,
- verbose=False,
- simulation=False,
- basedir=None,
- install_options=None,
- flavor="",
- docsdirs=None,
- ):
- assert isinstance(build_number, int)
- assert isinstance(release_level, str)
- self.build_number = build_number
- self.release_level = release_level
- self.target = target
- self.wheeldir = wheeldir
- if toolsdirs is None:
- toolsdirs = []
- self._toolsdirs = toolsdirs
- if docsdirs is None:
- docsdirs = []
- self._docsdirs = docsdirs
- self.verbose = verbose
- self.winpydir = None # new WinPython BaseDirectory
- self.distribution = None
- self.installed_packages = []
- self.simulation = simulation
- self.basedir = basedir # added to build from winpython
- self.install_options = install_options
- self.flavor = flavor
-
- # python_fname = the .zip of the python interpreter PyPy !
- # impot re
- # re.match(r'(pypy3*-v|python-)([0-9\.rcba]*)((\.|\-)(amd64|win64)?\.zip')
- try: # PyPy
- self.python_fname = self.get_package_fname(
- r"(pypy3|python-)([0-9]|[a-zA-Z]|.)*.zip"
- )
- except: # normal Python
- self.python_fname = self.get_package_fname(
- r"python-([0-9\.rcba]*)((\.|\-)amd64)?\.(zip|zip)"
- )
- # osp.join(self.winpydir, self.python_name) = Directory of Python exec
- # self.pythondir =osp.join(self.winpydir, self.python_name)
- self.python_name = Path(self.python_fname).name[:-4]
- self.distname = "winUNKNOWN" # f'win{self.python_name}' # PyPy ?
- # vlst = (
- # re.match(r'winpython-([0-9\.]*)', self.distname)
- # .groups()[0]
- # .split('.')
- # )
- self.python_fullversion = "winUNKNOWN" # '.'.join(vlst[:3])
-
- @property
- def package_index_wiki(self):
- """Return Package Index page in Wiki format"""
- installed_tools = []
-
- def get_tool_path_file(relpath):
- if self.simulation:
- for dirname in self.toolsdirs:
- path = dirname + relpath.replace(r"\t", "")
- if Path(path).is_file():
- return path
- else:
- path = self.winpydir + relpath
- if Path(path).is_file():
- return path
-
- def get_tool_path_dir(relpath):
- if self.simulation:
- for dirname in self.toolsdirs:
- path = dirname + relpath.replace(r"\t", "")
- if Path(path).is_dir():
- return path
- else:
- path = self.winpydir + relpath
- if Path(path).is_dir():
- return path
-
- if get_tool_path_file(r"\t\SciTE.exe"):
- installed_tools += [("SciTE", "3.3.7")]
- rpath = get_tool_path_dir(self.R_PATH)
- if rpath is not None:
- rver = utils.get_r_version(rpath)
- installed_tools += [("R", rver)]
- juliapath = get_tool_path_dir(self.JULIA_PATH)
- if juliapath is not None:
- juliaver = utils.get_julia_version(juliapath)
- installed_tools += [("Julia", juliaver)]
- nodepath = get_tool_path_dir(self.NODEJS_PATH)
- if nodepath is not None:
- nodever = utils.get_nodejs_version(nodepath)
- installed_tools += [("Nodejs", nodever)]
- npmver = utils.get_npmjs_version(nodepath)
- installed_tools += [("npmjs", npmver)]
- pandocexe = get_tool_path_file(r"\t\pandoc.exe")
- if pandocexe is not None:
- pandocver = utils.get_pandoc_version(str(Path(pandocexe).parent))
- installed_tools += [("Pandoc", pandocver)]
- vscodeexe = get_tool_path_file(r"\t\VSCode\Code.exe")
- if vscodeexe is not None:
- installed_tools += [
- ("VSCode", utils.getFileProperties(vscodeexe)["FileVersion"])
- ]
- tools = []
- for name, ver in installed_tools:
- metadata = utils.get_package_metadata("tools.ini", name)
- url, desc = (
- metadata["url"],
- metadata["description"],
- )
- tools += [f"[{name}]({url}) | {ver} | {desc}"]
- # get all packages installed in the changelog, whatever the method
- self.installed_packages = self.distribution.get_installed_packages(update=True)
-
- packages = [
- f"[{pack.name}]({pack.url}) | {pack.version} | {pack.description}"
- for pack in sorted(
- self.installed_packages,
- key=lambda p: p.name.lower(),
- )
- ]
- python_desc = "Python programming language with standard library"
- tools_f = "\n".join(tools)
- packages_f = "\n".join(packages)
- return (
- f"""## WinPython {self.winpyver2 + self.flavor}
-
-The following packages are included in WinPython-{self.winpy_arch}bit v{self.winpyver2+self.flavor} {self.release_level}.
-
-
-
-### Tools
-
-Name | Version | Description
------|---------|------------
-{tools_f}
-
-### Python packages
-
-Name | Version | Description
------|---------|------------
-[Python](http://www.python.org/) | {self.python_fullversion} | {python_desc}
-{packages_f}"""
- + "\n\n \n"
- )
-
- # @property makes self.winpyver becomes a call to self.winpyver()
- @property
- def winpyver(self):
- """Return WinPython version (with flavor and release level!)"""
- return f"{self.python_fullversion}.{self.build_number}{self.flavor}{self.release_level}"
-
- @property
- def python_dir(self):
- """Return Python dirname (full path) of the target distribution"""
- return str(Path(self.winpydir) / self.python_name) # python.exe path
-
- @property
- def winpy_arch(self):
- """Return WinPython architecture"""
- return f"{self.distribution.architecture}"
-
- @property
- def py_arch(self):
- """Return distribution architecture, in Python distutils format:
- win-amd64 or win32"""
- if self.distribution.architecture == 64:
- return "win-amd64"
- else:
- return "win32"
-
- @property
- def prepath(self):
- """Return PATH contents to be prepend to the environment variable"""
- path = [
- r"Lib\site-packages\PyQt5",
- r"Lib\site-packages\PySide2",
- "", # Python root directory
- "DLLs",
- "Scripts",
- r"..\t",
- # r"..\t\mingw32\bin",
- ]
- # if (
- # self.distribution.architecture == 32
- # and osp.isdir(self.winpydir + self.MINGW32_PATH)
- # ):
- # path += [r".." + self.MINGW32_PATH]
- # if self.distribution.architecture == 32:
- # path += [r".." + self.R_PATH + r"\i386"]
- # if self.distribution.architecture == 64:
- # path += [r".." + self.R_PATH + r"\x64"]
- path += [r".." + self.JULIA_PATH]
-
- path += [r".." + self.NODEJS_PATH]
-
- return path
-
- @property
- def postpath(self):
- """Return PATH contents to be append to the environment variable"""
- path = []
- # if osp.isfile(self.winpydir + self.THG_PATH):
- # path += [r"..\t\TortoiseHg"]
- return path
-
- @property
- def toolsdirs(self):
- """Return tools directory list"""
- # formerly was joining prepared tool dir + the one of building env..
- return [
- # osp.join(
- # osp.dirname(osp.abspath(__file__)), 't'
- # )
- ] + self._toolsdirs
-
- @property
- def docsdirs(self):
- """Return docs directory list"""
- if (Path(__file__).resolve().parent / "docs").is_dir():
- return [str(Path(__file__).resolve().parent / "docs")] + self._docsdirs
- else:
- return self._docsdirs
-
- def get_package_fname(self, pattern):
- """Get package matching pattern in wheeldir"""
- path = self.wheeldir
- for fname in os.listdir(path):
- match = re.match(pattern, fname)
- if match is not None or pattern == fname:
- return str((Path(path) / fname).resolve())
- else:
- raise RuntimeError(f"Could not find required package matching {pattern}")
-
- def create_batch_script(self, name, contents, do_changes=None):
- """Create batch script %WINPYDIR%/name"""
- scriptdir = str(Path(self.winpydir) / "scripts")
- if not Path(scriptdir).is_dir():
- os.mkdir(scriptdir)
- print("dochanges for %s %", name, do_changes)
- # live patch pypy3
- contents_final = contents
- if do_changes != None:
- for i in do_changes:
- contents_final = contents_final.replace(i[0], i[1])
- fd = open(str(Path(scriptdir) / name), "w")
- fd.write(contents_final)
- fd.close()
-
- def create_launcher_shimmy(
- self,
- name,
- icon,
- command=None,
- args=None,
- workdir=r"", # ".\script" to go to sub-directory of the icon
- mkshim_program="mkshim400.py", # to force another one
- ):
- """Create an exe launcher with mkshim.py"""
- assert name.endswith(".exe")
- portable_dir = str(Path(__file__).resolve().parent / "portable")
- icon_fname = str(Path(portable_dir) / "icons" / icon)
- assert Path(icon_fname).is_file()
-
- # prepare mkshim.py script
- # $env:WINPYDIRICONS variable give the icons directory
- if command is None:
- if args is not None and ".pyw" in args:
- command = "${WINPYDIR}\pythonw.exe" #not used
- else:
- command = "${WINPYDIR}\python.exe" #not used
- iconlauncherfullname= str(Path(self.winpydir) / name)
- true_command = command.replace(r"$SYSDIR\cmd.exe","cmd.exe")+ " " + args
- build_shimmy_launcher(iconlauncherfullname, true_command, icon_fname, mkshim_program=mkshim_program, workdir=workdir)
-
- def create_launcher(
- self,
- name,
- icon,
- command=None,
- args=None,
- workdir=r"$EXEDIR\scripts",
- launcher="launcher_basic.nsi",
- ):
- """Create exe launcher with NSIS"""
- assert name.endswith(".exe")
- portable_dir = str(Path(__file__).resolve().parent / "portable")
- icon_fname = str(Path(portable_dir) / "icons" / icon)
- assert Path(icon_fname).is_file()
-
- # Customizing NSIS script
- if command is None:
- if args is not None and ".pyw" in args:
- command = "${WINPYDIR}\pythonw.exe"
- else:
- command = "${WINPYDIR}\python.exe"
- if args is None:
- args = ""
- if workdir is None:
- workdir = ""
- fname = str(Path(self.winpydir) / (Path(name).stem + ".nsi"))
-
- data = [
- ("WINPYDIR", f"$EXEDIR\{self.python_name}"),
- ("WINPYVER", self.winpyver),
- ("COMMAND", command),
- ("PARAMETERS", args),
- ("WORKDIR", workdir),
- ("Icon", icon_fname),
- ("OutFile", name),
- ]
-
- build_nsis(launcher, fname, data)
-
- def create_python_batch(
- self,
- name,
- script_name,
- workdir=None,
- options=None,
- command=None,
- ):
- """Create batch file to run a Python script"""
- if options is None:
- options = ""
- else:
- options = " " + options
- if command is None:
- if script_name.endswith(".pyw"):
- command = 'start "%WINPYDIR%\pythonw.exe"'
- else:
- command = '"%WINPYDIR%\python.exe"'
- changedir = ""
- if workdir is not None:
- workdir = workdir
- changedir = (
- r"""cd/D %s
-"""
- % workdir
- )
- if script_name != "":
- script_name = " " + script_name
- self.create_batch_script(
- name,
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-"""
- + changedir
- + command
- + script_name
- + options
- + " %*",
- )
-
-
- def create_installer_7zip(self, installer_option=""):
- """Create installer with 7-ZIP"""
- self._print("Creating WinPython installer 7-ZIP")
- portable_dir = str(Path(__file__).resolve().parent / "portable")
- fname = str(Path(portable_dir) / "installer_7zip-tmp.bat")
- data = (
- ("DISTDIR", self.winpydir),
- ("ARCH", self.winpy_arch),
- (
- "VERSION",
- f"{self.python_fullversion}.{self.build_number}{self.flavor}",
- ),
- (
- "VERSION_INSTALL",
- f'{self.python_fullversion.replace(".", "")}' + f"{self.build_number}",
- ),
- ("RELEASELEVEL", self.release_level),
- )
- data += (("INSTALLER_OPTION", installer_option),)
- build_7zip("installer_7zip.bat", fname, data)
- self._print_done()
-
- def _print(self, text):
- """Print action text indicating progress"""
- if self.verbose:
- utils.print_box(text)
- else:
- print(text + "...", end=" ")
-
- def _print_done(self):
- """Print OK at the end of a process"""
- if not self.verbose:
- print("OK")
-
- def _extract_python(self):
- """Extracting Python installer, creating distribution object"""
- self._print("Extracting Python .zip version")
- utils.extract_archive(
- self.python_fname,
- targetdir=self.python_dir + r"\..",
- )
- self._print_done()
-
- def _copy_dev_tools(self):
- """Copy dev tools"""
- self._print(f"Copying tools from {self.toolsdirs} to {self.winpydir}/t")
- toolsdir = str(Path(self.winpydir) / "t")
- os.mkdir(toolsdir)
- for dirname in [
- ok_dir for ok_dir in self.toolsdirs if Path(ok_dir).is_dir()
- ]: # the ones in the make.py script environment
- for name in os.listdir(dirname):
- path = str(Path(dirname) / name)
- copy = shutil.copytree if Path(path).is_dir() else shutil.copyfile
- if self.verbose:
- print(path + " --> " + str(Path(toolsdir) / name))
- copy(path, str(Path(toolsdir) / name))
- self._print_done()
- # move node higher
- nodejs_current = str(Path(toolsdir) / "n")
- nodejs_target = self.winpydir + self.NODEJS_PATH
- if nodejs_current != nodejs_target and Path(nodejs_current).is_dir():
- shutil.move(nodejs_current, nodejs_target)
-
- def _copy_dev_docs(self):
- """Copy dev docs"""
- docsdir = str(Path(self.winpydir) / "notebooks")
- self._print(f"Copying Noteebook docs from {self.docsdirs} to {docsdir}")
- if not Path(docsdir).is_dir():
- os.mkdir(docsdir)
- docsdir = str(Path(self.winpydir) / "notebooks" / "docs")
- if not Path(docsdir).is_dir():
- os.mkdir(docsdir)
- for dirname in self.docsdirs:
- for name in os.listdir(dirname):
- path = str(Path(dirname) / name)
- copy = shutil.copytree if Path(path).is_dir() else shutil.copyfile
- copy(path, str(Path(docsdir) / name))
- if self.verbose:
- print(path + " --> " + str(Path(docsdir) / name))
- self._print_done()
-
- def _create_launchers(self):
- """Create launchers"""
-
- self._print("Creating launchers")
-
- self.create_launcher_shimmy(
- "WinPython Command Prompt.exe",
- "cmd.ico",
- command=".\\cmd.bat",
- args=r"",
- workdir=r".\scripts"
- )
-
- self.create_launcher_shimmy(
- "WinPython Powershell Prompt.exe",
- "powershell.ico",
- command="Powershell.exe",
- args=r"start-process -WindowStyle Hidden -FilePath ([dollar]ENV:WINPYDIRICONS + '\scripts\cmd_ps.bat')",
- #command="%WINPYDIRICONS%\\scripts\\cmd_ps.bat",
- #args=r"",
- )
-
- #self.create_launcher_shimmy(
- # "WinPython Terminal.exe",
- # "terminal.ico",
- # command="Powershell.exe",
- # args=r"start-process -WindowStyle Hidden './scripts/WinPython_Terminal.bat",
- #)
-
- self.create_launcher_shimmy(
- "WinPython Interpreter.exe",
- "python.ico",
- command=".\\winpython.bat",
- args=r"",
- workdir=r".\scripts"
- )
-
- self.create_launcher_shimmy(
- "IDLE (Python GUI).exe",
- "python.ico",
- command="Powershell.exe",
- args=r"start-process -WindowStyle Hidden -FilePath ([dollar]ENV:WINPYDIRICONS + '\scripts\winidle.bat')",
- #command="scripts\\Noshell.vbs scripts\\winidle.bat",
- #args=r"",
- )
-
- self.create_launcher_shimmy(
- "Spyder.exe",
- "spyder.ico",
- command="Powershell.exe",
- args=r"start-process -WindowStyle Hidden -FilePath ([dollar]ENV:WINPYDIRICONS + '\scripts\winspyder.bat')",
- )
-
- self.create_launcher_shimmy(
- "Spyder reset.exe",
- "spyder_reset.ico",
- command="Powershell.exe",
- args=r"start-process -WindowStyle Hidden -FilePath ([dollar]ENV:WINPYDIRICONS + '\scripts\spyder_reset.bat')",
- #args=r"start-process -WindowStyle Hidden './scripts/spyder_reset.bat",
- )
-
- self.create_launcher_shimmy(
- "WinPython Control Panel.exe",
- "winpython.ico",
- command=".\\wpcp.bat",
- args=r"",
- workdir=r".\scripts"
- )
-
- # Jupyter launchers
-
- # this one needs a shell to kill fantom processes
- self.create_launcher_shimmy(
- "Jupyter Notebook.exe",
- "jupyter.ico",
- command="winipython_notebook.bat",
- args=r"",
- workdir=r".\scripts"
- )
-
- self.create_launcher_shimmy(
- "Jupyter Lab.exe",
- "jupyter.ico",
- #command="$SYSDIR\cmd.exe",
- #args=r"/k winjupyter_lab.bat",
- command="winjupyter_lab.bat",
- args=r"",
- workdir=r".\scripts"
- )
-
- self.create_launcher_shimmy(
- "VS Code.exe",
- "code.ico",
- command="winvscode.bat",
- args=r"",
- workdir=r".\scripts"
- )
-
- self._print_done()
-
- def _create_batch_scripts_initial(self):
- """Create batch scripts"""
- self._print("Creating batch scripts initial")
- conv = lambda path: ";".join(["%WINPYDIR%\\" + pth for pth in path])
- path = conv(self.prepath) + ";%PATH%;" + conv(self.postpath)
-
- convps = lambda path: ";".join(["$env:WINPYDIR\\" + pth for pth in path])
- pathps = convps(self.prepath) + ";$env:path;" + convps(self.postpath)
-
- # PyPy3
- shorty = self.distribution.short_exe
- changes = (
- (r"DIR%\python.exe", r"DIR%" + "\\" + shorty),
- (r"DIR%\PYTHON.EXE", r"DIR%" + "\\" + shorty),
- )
- if (Path(self.distribution.target) / r"lib-python\3\idlelib").is_dir():
- changes += ((r"\Lib\idlelib", r"\lib-python\3\idlelib"),)
- self.create_batch_script(
- "env.bat",
- r"""@echo off
-set WINPYDIRBASE=%~dp0..
-rem set PYTHONUTF8=1 would create issues in "movable" patching
-rem get a normalize path
-set WINPYDIRBASETMP=%~dp0..
-pushd %WINPYDIRBASETMP%
-set WINPYDIRBASE=%__CD__%
-if "%WINPYDIRBASE:~-1%"=="\" set WINPYDIRBASE=%WINPYDIRBASE:~0,-1%
-set WINPYDIRBASETMP=
-popd
-
-set WINPYDIR=%WINPYDIRBASE%"""
- + "\\"
- + self.python_name
- + r"""
-rem 2019-08-25 pyjulia needs absolutely a variable PYTHON=%WINPYDIR%python.exe
-set PYTHON=%WINPYDIR%\python.exe
-set PYTHONPATHz=%WINPYDIR%;%WINPYDIR%\Lib;%WINPYDIR%\DLLs
-set WINPYVER="""
- + self.winpyver
- + r"""
-rem 2023-02-12 try utf-8 on console
-rem see https://github.com/pypa/pip/issues/11798#issuecomment-1427069681
-set PYTHONIOENCODING=utf-8
-
-set HOME=%WINPYDIRBASE%\settings
-rem read https://github.com/winpython/winpython/issues/839
-rem set USERPROFILE=%HOME%
-rem set WINPYDIRBASE=
-set JUPYTER_DATA_DIR=%HOME%
-set JUPYTER_CONFIG_DIR=%WINPYDIR%\etc\jupyter
-set JUPYTER_CONFIG_PATH=%WINPYDIR%\etc\jupyter
-set WINPYARCH=WIN32
-if "%WINPYDIR:~-5%"=="amd64" set WINPYARCH=WIN-AMD64
-set FINDDIR=%WINDIR%\system32
-echo ";%PATH%;" | %FINDDIR%\find.exe /C /I ";%WINPYDIR%\;" >nul
-if %ERRORLEVEL% NEQ 0 (
- set "PATH="""
- + path
- + r""""
- cd .
-)
-
-rem force default pyqt5 kit for Spyder if PyQt5 module is there
-if exist "%WINPYDIR%\Lib\site-packages\PyQt5\__init__.py" set QT_API=pyqt5
-
-rem ******************
-rem handle R if included
-rem ******************
-if not exist "%WINPYDIRBASE%\t\R\bin" goto r_bad
-set R_HOME=%WINPYDIRBASE%\t\R
-if "%WINPYARCH%"=="WIN32" set R_HOMEbin=%R_HOME%\bin\i386
-if not "%WINPYARCH%"=="WIN32" set R_HOMEbin=%R_HOME%\bin\x64
-:r_bad
-
-
-rem ******************
-rem handle Julia if included
-rem ******************
-if not exist "%WINPYDIRBASE%\t\Julia\bin" goto julia_bad
-set JULIA_HOME=%WINPYDIRBASE%\t\Julia\bin\
-set JULIA_EXE=julia.exe
-set JULIA=%JULIA_HOME%%JULIA_EXE%
-set JULIA_PKGDIR=%WINPYDIRBASE%\settings\.julia
-:julia_bad
-
-
-rem ******************
-rem handle PySide2 if included
-rem ******************
-set tmp_pyz=%WINPYDIR%\Lib\site-packages\PySide2
-if not exist "%tmp_pyz%" goto pyside2_conf_exist
-set tmp_pyz=%tmp_pyz%\qt.conf
-if not exist "%tmp_pyz%" (
- echo [Paths]
- echo Prefix = .
- echo Binaries = .
-)>> "%tmp_pyz%"
-:pyside2_conf_exist
-
-rem ******************
-rem handle PyQt5 if included
-rem ******************
-set tmp_pyz=%WINPYDIR%\Lib\site-packages\PyQt5
-if not exist "%tmp_pyz%" goto pyqt5_conf_exist
-set tmp_pyz=%tmp_pyz%\qt.conf
-if not exist "%tmp_pyz%" (
- echo [Paths]
- echo Prefix = .
- echo Binaries = .
-)>> "%tmp_pyz%"
-:pyqt5_conf_exist
-
-
-rem ******************
-rem handle pyqt5_tools if included
-rem ******************
-set tmp_pyz=%WINPYDIR%\Lib\site-packages\pyqt5_tools
-if not exist "%tmp_pyz%" goto end_pyqt5_tools_conf
-set QT_PLUGIN_PATH=%WINPYDIR%\Lib\site-packages\pyqt5_tools\Qt\plugins
-:end_pyqt5_tools_conf
-
-
-rem ******************
-rem handle Pyzo configuration part
-rem ******************
-if not exist "%HOME%\.pyzo" mkdir %HOME%\.pyzo
-if exist "%HOME%\.pyzo\config.ssdf" goto after_pyzo_conf
-set tmp_pyz="%HOME%\.pyzo\config.ssdf"
-(
- echo shellConfigs2 = list:
- echo dict:
- echo name = 'Python'
- echo exe = '.\\python.exe'
- echo ipython = 'no'
- echo gui = 'none'
-)>> "%tmp_pyz%"
-
-:after_pyzo_conf
-
-
-rem ******************
-rem WinPython.ini part (removed from nsis)
-rem ******************
-if not exist "%WINPYDIRBASE%\settings" mkdir "%WINPYDIRBASE%\settings"
-if not exist "%WINPYDIRBASE%\settings\AppData" mkdir "%WINPYDIRBASE%\settings\AppData"
-if not exist "%WINPYDIRBASE%\settings\AppData\Roaming" mkdir "%WINPYDIRBASE%\settings\AppData\Roaming"
-set winpython_ini=%WINPYDIRBASE%\settings\winpython.ini
-if not exist "%winpython_ini%" (
- echo [debug]
- echo state = disabled
- echo [environment]
- echo ## > Uncomment lines to override environment variables
- echo #HOME = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%
- echo #USERPROFILE = %%HOME%%
- echo #JUPYTER_DATA_DIR = %%HOME%%
- echo #JUPYTERLAB_SETTINGS_DIR = %%HOME%%\.jupyter\lab
- echo #JUPYTERLAB_WORKSPACES_DIR = %%HOME%%\.jupyter\lab\workspaces
- echo #WINPYWORKDIR = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%\Notebooks
-)>> "%winpython_ini%"
-
-""",
- do_changes=changes,
- )
-
- self.create_batch_script(
- "WinPython_PS_Prompt.ps1",
- r"""
-###############################
-### WinPython_PS_Prompt.ps1 ###
-###############################
-$0 = $myInvocation.MyCommand.Definition
-$dp0 = [System.IO.Path]::GetDirectoryName($0)
-# $env:PYTHONUTF8 = 1 would create issues in "movable" patching
-$env:WINPYDIRBASE = "$dp0\.."
-# get a normalize path
-# http://stackoverflow.com/questions/1645843/resolve-absolute-path-from-relative-path-and-or-file-name
-$env:WINPYDIRBASE = [System.IO.Path]::GetFullPath( $env:WINPYDIRBASE )
-
-# avoid double_init (will only resize screen)
-if (-not ($env:WINPYDIR -eq [System.IO.Path]::GetFullPath( $env:WINPYDIRBASE+"""
- + '"\\'
- + self.python_name
- + '"'
- + r""")) ) {
-
-
-$env:WINPYDIR = $env:WINPYDIRBASE+"""
- + '"'
- + "\\"
- + self.python_name
- + '"'
- + r"""
-# 2019-08-25 pyjulia needs absolutely a variable PYTHON=%WINPYDIR%python.exe
-$env:PYTHON = "%WINPYDIR%\python.exe"
-$env:PYTHONPATHz = "%WINPYDIR%;%WINPYDIR%\Lib;%WINPYDIR%\DLLs"
-
-
-$env:WINPYVER = '"""
- + self.winpyver
- + r"""'
-# rem 2023-02-12 try utf-8 on console
-# rem see https://github.com/pypa/pip/issues/11798#issuecomment-1427069681
-$env:PYTHONIOENCODING = "utf-8"
-
-$env:HOME = "$env:WINPYDIRBASE\settings"
-
-# rem read https://github.com/winpython/winpython/issues/839
-# $env:USERPROFILE = "$env:HOME"
-
-$env:WINPYDIRBASE = ""
-$env:JUPYTER_DATA_DIR = "$env:HOME"
-$env:WINPYARCH = 'WIN32'
-if ($env:WINPYARCH.subString($env:WINPYARCH.length-5, 5) -eq 'amd64') {
- $env:WINPYARCH = 'WIN-AMD64' }
-
-
-if (-not $env:PATH.ToLower().Contains(";"+ $env:WINPYDIR.ToLower()+ ";")) {
- $env:PATH = """
- + '"'
- + pathps
- + '"'
- + r""" }
-
-#rem force default pyqt5 kit for Spyder if PyQt5 module is there
-if (Test-Path "$env:WINPYDIR\Lib\site-packages\PyQt5\__init__.py") { $env:QT_API = "pyqt5" }
-
-
-
-#####################
-### handle R if included
-#####################
-if (Test-Path "$env:WINPYDIR\..\t\R\bin") {
- $env:R_HOME = "$env:WINPYDIR\..\t\R"
- $env:R_HOMEbin = "$env:R_HOME\bin\x64"
- if ("$env:WINPYARCH" -eq "WIN32") {
- $env:R_HOMEbin = "$env:R_HOME\bin\i386"
- }
-}
-
-#####################
-### handle Julia if included
-#####################
-if (Test-Path "$env:WINPYDIR\..\t\Julia\bin") {
- $env:JULIA_HOME = "$env:WINPYDIR\..\t\Julia\bin\"
- $env:JULIA_EXE = "julia.exe"
- $env:JULIA = "$env:JULIA_HOME$env:JULIA_EXE"
- $env:JULIA_PKGDIR = "$env:WINPYDIR\..\settings\.julia"
-}
-
-#####################
-### handle PySide2 if included
-#####################
-
-$env:tmp_pyz = "$env:WINPYDIR\Lib\site-packages\PySide2"
-if (Test-Path "$env:tmp_pyz") {
- $env:tmp_pyz = "$env:tmp_pyz\qt.conf"
- if (-not (Test-Path "$env:tmp_pyz")) {
- "[Paths]"| Add-Content -Path $env:tmp_pyz
- "Prefix = ."| Add-Content -Path $env:tmp_pyz
- "Binaries = ."| Add-Content -Path $env:tmp_pyz
- }
-}
-
-#####################
-### handle PyQt5 if included
-#####################
-$env:tmp_pyz = "$env:WINPYDIR\Lib\site-packages\PyQt5"
-if (Test-Path "$env:tmp_pyz") {
- $env:tmp_pyz = "$env:tmp_pyz\qt.conf"
- if (-not (Test-Path "$env:tmp_pyz")) {
- "[Paths]"| Add-Content -Path $env:tmp_pyz
- "Prefix = ."| Add-Content -Path $env:tmp_pyz
- "Binaries = ."| Add-Content -Path $env:tmp_pyz
- }
-}
-
-
-#####################
-### handle pyqt5_tools if included
-#####################
-$env:tmp_pyz = "$env:WINPYDIR\Lib\site-packages\pyqt5_tools"
-if (Test-Path "$env:tmp_pyz") {
- $env:QT_PLUGIN_PATH = "WINPYDIR\Lib\site-packages\pyqt5_tools\Qt\plugins"
-}
-
-
-#####################
-### handle Pyzo configuration part
-#####################
-$env:tmp_pyz = "$env:HOME\.pyzo"
-if (-not (Test-Path "$env:tmp_pyz")) { md -Path "$env:tmp_pyz" }
-$env:tmp_pyz = "$env:HOME\.pyzo\config.ssdf"
-if (-not (Test-Path "$env:tmp_pyz")) {
-shellConfigs2 = list:| Add-Content -Path $env:tmp_pyz
- dict:| Add-Content -Path $env:tmp_pyz
- name = 'Python'| Add-Content -Path $env:tmp_pyz
- exe = '.\\python.exe'| Add-Content -Path $env:tmp_pyz
- ipython = 'no'| Add-Content -Path $env:tmp_pyz
- gui = 'none'| Add-Content -Path $env:tmp_pyz
-}
-
-
-#####################
-### WinPython.ini part (removed from nsis)
-#####################
-if (-not (Test-Path "$env:WINPYDIR\..\settings")) { md -Path "$env:WINPYDIR\..\settings" }
-if (-not (Test-Path "$env:WINPYDIR\..\settings\AppData")) { md -Path "$env:WINPYDIR\..\settings\AppData" }
-if (-not (Test-Path "$env:WINPYDIR\..\settings\AppData\Roaming")) { md -Path "$env:WINPYDIR\..\settings\AppData\Roaming" }
-$env:winpython_ini = "$env:WINPYDIR\..\settings\winpython.ini"
-if (-not (Test-Path $env:winpython_ini)) {
- "[debug]" | Add-Content -Path $env:winpython_ini
- "state = disabled" | Add-Content -Path $env:winpython_ini
- "[environment]" | Add-Content -Path $env:winpython_ini
- "## > Uncomment lines to override environment variables" | Add-Content -Path $env:winpython_ini
- "#HOME = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%" | Add-Content -Path $env:winpython_ini
- "#USERPROFILE = %%HOME%%" | Add-Content -Path $env:winpython_ini
- "#JUPYTER_DATA_DIR = %%HOME%%" | Add-Content -Path $env:winpython_ini
- "#JUPYTERLAB_SETTINGS_DIR = %%HOME%%\.jupyter\lab" | Add-Content -Path $env:winpython_ini
- "#JUPYTERLAB_WORKSPACES_DIR = %%HOME%%\.jupyter\lab\workspaces" | Add-Content -Path $env:winpython_ini
- "#WINPYWORKDIR = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%\Notebooks" | Add-Content -Path $env:winpython_ini
-}
-
-
-}
-###############################
-### Set-WindowSize
-###############################
-Function Set-WindowSize {
-Param([int]$x=$host.ui.rawui.windowsize.width,
- [int]$y=$host.ui.rawui.windowsize.heigth,
- [int]$buffer=$host.UI.RawUI.BufferSize.heigth)
-
- $buffersize = new-object System.Management.Automation.Host.Size($x,$buffer)
- $host.UI.RawUI.BufferSize = $buffersize
- $size = New-Object System.Management.Automation.Host.Size($x,$y)
- $host.ui.rawui.WindowSize = $size
-}
-# Windows10 yelling at us with 150 40 6000
-# no more needed ?
-# Set-WindowSize 195 40 6000
-
-### Colorize to distinguish
-#$host.ui.RawUI.BackgroundColor = "DarkBlue"
-$host.ui.RawUI.BackgroundColor = "Black"
-$host.ui.RawUI.ForegroundColor = "White"
-
-""",
- do_changes=changes,
- )
-
- self.create_batch_script(
- "cmd_ps.bat",
- r"""@echo off
-rem safe bet
-call "%~dp0env_for_icons.bat"
-Powershell.exe -Command "& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -noexit -File ""%~dp0WinPython_PS_Prompt.ps1""'}"
-exit
-""",
- do_changes=changes,
- )
-
- self.create_batch_script(
- "WinPython_Interpreter_PS.bat",
- r"""@echo off
-rem no safe bet (for comparisons)
-Powershell.exe -Command "& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -noexit -File ""%~dp0WinPython_PS_Prompt.ps1""'}"
-exit
-""",
- do_changes=changes,
- )
-
- self.create_batch_script(
- "env_for_icons.bat",
- r"""@echo off
-call "%~dp0env.bat"
-set WINPYWORKDIR=%WINPYDIRBASE%\Notebooks
-
-rem default is as before: Winpython ..\Notebooks
-set WINPYWORKDIR1=%WINPYWORKDIR%
-
-rem if we have a file or directory in %1 parameter, we use that directory
-if not "%~1"=="" (
- if exist "%~1" (
- if exist "%~1\" (
- rem echo it is a directory %~1
- set WINPYWORKDIR1=%~1
- ) else (
- rem echo it is a file %~1, so we take the directory %~dp1
- set WINPYWORKDIR1=%~dp1
- )
- )
-) else (
-rem if it is launched from another directory than icon origin , we keep it that one echo %__CD__%
-if not "%__CD__%"=="%~dp0" if not "%__CD__%scripts\"=="%~dp0" set WINPYWORKDIR1="%__CD__%"
-)
-rem remove potential doublequote
-set WINPYWORKDIR1=%WINPYWORKDIR1:"=%
-rem remove some potential last \
-if "%WINPYWORKDIR1:~-1%"=="\" set WINPYWORKDIR1=%WINPYWORKDIR1:~0,-1%
-
-FOR /F "delims=" %%i IN ('cscript /nologo "%~dp0WinpythonIni.vbs"') DO set winpythontoexec=%%i
-%winpythontoexec%set winpythontoexec=
-
-rem 2024-08-18: we go initial directory WINPYWORKDIR if no direction and we are on icon directory
-rem old NSIS launcher is by default at icon\scripts level
-if "%__CD__%scripts\"=="%~dp0" if "%WINPYWORKDIR1%"=="%WINPYDIRBASE%\Notebooks" cd/D %WINPYWORKDIR1%
-rem new shimmy launcher is by default at icon level
-if "%__CD__%"=="%~dp0" if "%WINPYWORKDIR1%"=="%WINPYDIRBASE%\Notebooks" cd/D %WINPYWORKDIR1%
-
-
-rem ******************
-rem missing student directory part
-rem ******************
-
-if not exist "%WINPYWORKDIR%" mkdir "%WINPYWORKDIR%"
-
-if not exist "%HOME%\.spyder-py%WINPYVER:~0,1%" mkdir "%HOME%\.spyder-py%WINPYVER:~0,1%"
-if not exist "%HOME%\.spyder-py%WINPYVER:~0,1%\workingdir" echo %HOME%\Notebooks>"%HOME%\.spyder-py%WINPYVER:~0,1%\workingdir"
-
-rem ******* make cython use mingwpy part *******
-if not exist "%WINPYDIRBASE%\settings\pydistutils.cfg" goto no_cython
-if not exist "%HOME%\pydistutils.cfg" xcopy "%WINPYDIRBASE%\settings\pydistutils.cfg" "%HOME%"
-:no_cython
-""",
- do_changes=changes,
- )
-
- self.create_batch_script(
- "Noshell.vbs",
- r"""
-'from http://superuser.com/questions/140047/how-to-run-a-batch-file-without-launching-a-command-window/390129
-If WScript.Arguments.Count >= 1 Then
- ReDim arr(WScript.Arguments.Count-1)
- For i = 0 To WScript.Arguments.Count-1
- Arg = WScript.Arguments(i)
- If InStr(Arg, " ") > 0 or InStr(Arg, "&") > 0 Then Arg = chr(34) & Arg & chr(34)
- arr(i) = Arg
- Next
-
- RunCmd = Join(arr)
- CreateObject("Wscript.Shell").Run RunCmd, 0 , True
-End If
- """,
- )
-
- self.create_batch_script(
- "WinPythonIni.vbs",
- r"""
-Set colArgs = WScript.Arguments
-If colArgs.Count> 0 Then
- Filename=colArgs(0)
-else
- Filename="..\settings\winpython.ini"
-end if
-my_lines = Split(GetFile(FileName) & vbNewLine , vbNewLine )
-segment = "environment"
-txt=""
-Set objWSH = CreateObject("WScript.Shell")
-For each l in my_lines
- if left(l, 1)="[" then
- segment=split(mid(l, 2, 999) & "]","]")(0)
- ElseIf left(l, 1) <> "#" and instr(l, "=")>0 then
- data = Split(l & "=", "=")
- if segment="debug" and trim(data(0))="state" then data(0)= "WINPYDEBUG"
- if segment="environment" or segment= "debug" then
- txt= txt & "set " & rtrim(data(0)) & "=" & translate(ltrim(data(1))) & "&& "
- objWSH.Environment("PROCESS").Item(rtrim(data(0))) = translate(ltrim(data(1)))
- end if
- if segment="debug" and trim(data(0))="state" then txt= txt & "set WINPYDEBUG=" & trim(data(1)) & "&&"
- End If
-Next
-wscript.echo txt
-
-
-Function GetFile(ByVal FileName)
- Set FS = CreateObject("Scripting.FileSystemObject")
- If Left(FileName,3)="..\" then FileName = FS.GetParentFolderName(FS.GetParentFolderName(Wscript.ScriptFullName)) & mid(FileName,3,9999)
- If Left(FileName,3)=".\" then FileName = FS.GetParentFolderName(FS.GetParentFolderName(Wscript.ScriptFullName)) & mid(FileName,3,9999)
- On Error Resume Next
- GetFile = FS.OpenTextFile(FileName).ReadAll
-End Function
-
-Function translate(line)
- set dos = objWSH.Environment("PROCESS")
- tab = Split(line & "%", "%")
- for i = 1 to Ubound(tab) step 2
- if tab(i)& "" <> "" and dos.Item(tab(i)) & "" <> "" then tab(i) = dos.Item(tab(i))
- next
- translate = Join(tab, "")
-end function
- """,
- )
-
- def _create_batch_scripts(self):
- """Create batch scripts"""
- self._print("Creating batch scripts")
-
- # PyPy3
- shorty = self.distribution.short_exe
- changes = (
- (r"DIR%\python.exe", r"DIR%" + "\\" + shorty),
- (r"DIR%\PYTHON.EXE", r"DIR%" + "\\" + shorty),
- )
- if (Path(self.distribution.target) / r"lib-python\3\idlelib").is_dir():
- changes += ((r"\Lib\idlelib", r"\lib-python\3\idlelib"),)
- self.create_batch_script(
- "readme.txt",
- r"""These batch files are required to run WinPython icons.
-
-These files should help the user writing his/her own
-specific batch file to call Python scripts inside WinPython.
-The environment variables are set-up in 'env_.bat' and 'env_for_icons.bat'.""",
- )
-
- self.create_batch_script(
- "make_cython_use_vc.bat",
- r"""@echo off
-call "%~dp0env.bat"
-set pydistutils_cfg=%WINPYDIRBASE%\settings\pydistutils.cfg
-echo [config]>%pydistutils_cfg%
- """,
- )
-
- self.create_batch_script(
- "make_winpython_movable.bat",
- r"""@echo off
-call "%~dp0env.bat"
-echo patch pip and current launchers for move
-
-"%WINPYDIR%\python.exe" -c "from winpython import wppm;dist=wppm.Distribution(r'%WINPYDIR%');dist.patch_standard_packages('pip', to_movable=True)"
-pause
- """,
- do_changes=changes,
- )
-
- self.create_batch_script(
- "make_winpython_fix.bat",
- r"""@echo off
-call "%~dp0env.bat"
-echo patch pip and current launchers for non-move
-
-"%WINPYDIR%\python.exe" -c "from winpython import wppm;dist=wppm.Distribution(r'%WINPYDIR%');dist.patch_standard_packages('pip', to_movable=False)"
-pause
- """,
- do_changes=changes,
- )
-
- self.create_batch_script(
- "make_working_directory_be_not_winpython.bat",
- r"""@echo off
-set winpython_ini=%~dp0..\\settings\winpython.ini
-(
- echo [debug]
- echo state = disabled
- echo [environment]
- echo ## > Uncomment lines to override environment variables
- echo HOME = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%\settings
- echo USERPROFILE = %%HOME%%
- echo JUPYTER_DATA_DIR = %%HOME%%
- echo #JUPYTERLAB_SETTINGS_DIR = %%HOME%%\.jupyter\lab
- echo #JUPYTERLAB_WORKSPACES_DIR = %%HOME%%\.jupyter\lab\workspaces
- echo WINPYWORKDIR = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%\Notebooks
-) > "%winpython_ini%"
- call "%~dp0env_for_icons.bat"
- mkdir %HOMEDRIVE%%HOMEPATH%\Documents\WinPython%WINPYVER%\settings
- mkdir %HOMEDRIVE%%HOMEPATH%\Documents\WinPython%WINPYVER%\settings\AppData
- mkdir %HOMEDRIVE%%HOMEPATH%\Documents\WinPython%WINPYVER%\settings\AppData\Roaming
-""",
- )
-
- self.create_batch_script(
- "make_working_directory_be_winpython.bat",
- r"""@echo off
-set winpython_ini=%~dp0..\\settings\winpython.ini
-(
- echo [debug]
- echo state = disabled
- echo [environment]
- echo ## > Uncomment lines to override environment variables
- echo #HOME = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%\settings
- echo #USERPROFILE = %%HOME%%
- echo #JUPYTER_DATA_DIR = %%HOME%%
- echo #JUPYTERLAB_SETTINGS_DIR = %%HOME%%\.jupyter\lab
- echo #JUPYTERLAB_WORKSPACES_DIR = %%HOME%%\.jupyter\lab\workspaces
- echo #WINPYWORKDIR = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%\Notebooks
-) > "%winpython_ini%"
-""",
- )
-
- self.create_batch_script(
- "make_working_directory_and_userprofile_be_winpython.bat",
- r"""@echo off
-set winpython_ini=%~dp0..\\settings\winpython.ini
-(
- echo [debug]
- echo state = disabled
- echo [environment]
- echo ## > Uncomment lines to override environment variables
- echo #HOME = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%\settings
- echo USERPROFILE = %%HOME%%
- echo #JUPYTER_DATA_DIR = %%HOME%%
- echo #JUPYTERLAB_SETTINGS_DIR = %%HOME%%\.jupyter\lab
- echo #JUPYTERLAB_WORKSPACES_DIR = %%HOME%%\.jupyter\lab\workspaces
- echo #WINPYWORKDIR = %%HOMEDRIVE%%%%HOMEPATH%%\Documents\WinPython%%WINPYVER%%\Notebooks
-) > "%winpython_ini%"
-""",
- )
-
- self.create_batch_script(
- "cmd.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-if not "%WINPYWORKDIR%"=="%WINPYWORKDIR1%" cd %WINPYWORKDIR1%
-cmd.exe /k""",
- )
-
- self.create_batch_script(
- "WinPython_Terminal.bat",
- r"""@echo off
-rem call "%~dp0env_for_icons.bat"
-rem if not "%WINPYWORKDIR%"=="%WINPYWORKDIR1%" cd %WINPYWORKDIR1%
-rem "%USERPROFILE%\AppData\Local\Microsoft\WindowsApps\wt.exe"
-Powershell.exe -Command "& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -noexit -File ""%~dp0WinPython_PS_Prompt.ps1""'}"
-exit
-""",
- )
-
- self.create_batch_script(
- "python.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-rem backward compatibility for python command-line users
-if not "%WINPYWORKDIR%"=="%WINPYWORKDIR1%" cd %WINPYWORKDIR1%
-"%WINPYDIR%\python.exe" %*
-""",
- do_changes=changes,
- )
-
- self.create_batch_script(
- "winpython.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-cd/D "%WINPYWORKDIR1%"
-rem backward compatibility for non-ptpython users
-if exist "%WINPYDIR%\scripts\ptpython.exe" (
- "%WINPYDIR%\scripts\ptpython.exe" %*
-) else (
- "%WINPYDIR%\python.exe" %*
-)
-""",
- do_changes=changes,
- )
-
- self.create_batch_script(
- "winidle.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-cd/D "%WINPYWORKDIR1%"
-"%WINPYDIR%\python.exe" "%WINPYDIR%\Lib\idlelib\idle.pyw" %*
-""",
- do_changes=changes,
- )
-
- self.create_batch_script(
- "winspyder.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-rem cd/D "%WINPYWORKDIR%"
-if exist "%WINPYDIR%\scripts\spyder3.exe" (
- "%WINPYDIR%\scripts\spyder3.exe" %* -w "%WINPYWORKDIR1%"
-) else (
- "%WINPYDIR%\scripts\spyder.exe" %* -w "%WINPYWORKDIR1%"
-)
-""",
- )
-
- self.create_batch_script(
- "spyder_reset.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-cd/D "%WINPYWORKDIR1%"
-if exist "%WINPYDIR%\scripts\spyder3.exe" (
- "%WINPYDIR%\scripts\spyder3.exe" --reset %*
-) else (
- "%WINPYDIR%\scripts\spyder.exe" --reset %*
-)
-""",
- )
-
- self.create_batch_script(
- "winipython_notebook.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-cd/D "%WINPYWORKDIR1%"
-"%WINPYDIR%\scripts\jupyter-notebook.exe" %*
-""",
- )
-
- self.create_batch_script(
- "winjupyter_lab.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-cd/D "%WINPYWORKDIR1%"
-"%WINPYDIR%\scripts\jupyter-lab.exe" %*
-""",
- )
-
- self.create_batch_script(
- "winqtconsole.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-cd/D "%WINPYWORKDIR1%"
-"%WINPYDIR%\scripts\jupyter-qtconsole.exe" %*
-""",
- )
-
- self.create_python_batch(
- "register_python.bat",
- r'"%WINPYDIR%\Lib\site-packages\winpython\register_python.py"',
- workdir=r'"%WINPYDIR%\Scripts"',
- )
-
- self.create_python_batch(
- "unregister_python.bat",
- r'"%WINPYDIR%\Lib\site-packages\winpython\unregister_python.py"',
- workdir=r'"%WINPYDIR%\Scripts"',
- )
-
- self.create_batch_script(
- "register_python_for_all.bat",
- r"""@echo off
-call "%~dp0env.bat"
-call "%~dp0register_python.bat" --all""",
- )
-
- self.create_batch_script(
- "unregister_python_for_all.bat",
- r"""@echo off
-call "%~dp0env.bat"
-call "%~dp0unregister_python.bat" --all""",
- )
-
- self.create_batch_script(
- "wpcp.bat",
- r"""@echo off
-call "%~dp0env_for_icons.bat"
-rem cd/D "%WINPYWORKDIR1%"
-rem "%WINPYDIR%\python.exe" -m winpython.controlpanel %*
-if not "%WINPYWORKDIR%"=="%WINPYWORKDIR1%" cd/d %WINPYWORKDIR1%
-cmd.exe /k "echo wppm & wppm"
-""",
- do_changes=changes,
- )
-
- self.create_batch_script(
- "upgrade_pip.bat",
- r"""@echo off
-call "%~dp0env.bat"
-echo this will upgrade pip with latest version, then patch it for WinPython portability ok ?
-pause
-"%WINPYDIR%\python.exe" -m pip install --upgrade pip
-"%WINPYDIR%\python.exe" -c "from winpython import wppm;dist=wppm.Distribution(r'%WINPYDIR%');dist.patch_standard_packages('pip', to_movable=True)
-pause
-""",
- do_changes=changes,
- )
-
-
- self.create_batch_script( # virtual environment mimicking
- "activate.bat",
- r"""@echo off
-call "%~dp0env.bat" %*
-""",
- )
-
- self.create_batch_script(
- "winvscode.bat",
- r"""@echo off
-rem launcher for VScode
-call "%~dp0env_for_icons.bat"
-rem cd/D "%WINPYWORKDIR1%"
-if exist "%WINPYDIR%\..\t\vscode\code.exe" (
- "%WINPYDIR%\..\t\vscode\code.exe" %*
-) else (
-if exist "%LOCALAPPDATA%\Programs\Microsoft VS Code\code.exe" (
- "%LOCALAPPDATA%\Programs\Microsoft VS Code\code.exe" %*
-) else (
- "code.exe" %*
-))
-
-""",
- )
-
-
-
- def _run_complement_batch_scripts(self, this_batch="run_complement.bat"):
- """tools\..\run_complement.bat for final complements"""
- print(f"now {this_batch} in tooldirs\..")
- for post_complement in list(
- set([str(Path(s).parent) for s in self._toolsdirs])
- ):
- filepath = str(Path(post_complement) / this_batch)
- if Path(filepath).is_file():
- print(f'launch "{filepath}" for "{self.winpydir}"')
- self._print(f'launch "{filepath}" for "{self.winpydir}" !')
- try:
- retcode = subprocess.call(
- f'"{filepath}" "{self.winpydir}"',
- shell=True,
- stdout=sys.stderr,
- )
- if retcode < 0:
- print(
- "Child was terminated by signal",
- -retcode,
- file=sys.stderr,
- )
- self._print(
- "Child was terminated by signal ! ",
- -retcode,
- file=sys.stderr,
- )
- except OSError as e:
- print(
- "Execution failed:",
- e,
- file=sys.stderr,
- )
- self._print(
- "Execution failed !:",
- e,
- file=sys.stderr,
- )
- self._print_done()
-
- def make(
- self,
- remove_existing=True,
- requirements=None,
- my_winpydir=None,
- ): # , find_links=None):
- """Make WinPython distribution in target directory from the installers
- located in wheeldir
-
- remove_existing=True: (default) install all from scratch
- remove_existing=False: only for test purpose (launchers/scripts)
- requirements=file(s) of requirements (separated by space if several)"""
- if self.simulation:
- print(
- "WARNING: this is just a simulation!",
- file=sys.stderr,
- )
- print(
- self.python_fname,
- self.python_name,
- self.distname,
- self.python_fullversion, # PyPy to delete or move
- )
- if my_winpydir is None:
- self.winpydir = str(Path(self.target) / self.distname) # PyPy to delete
- else:
- self.winpydir = str(
- Path(self.target) / my_winpydir
- ) # Create/re-create the WinPython base directory
- self._print(f"Creating WinPython {my_winpydir} base directory")
- if Path(self.winpydir).is_dir() and remove_existing and not self.simulation:
- shutil.rmtree(self.winpydir, onexc=utils.onerror)
- if not Path(self.winpydir).is_dir():
- os.mkdir(self.winpydir)
- if remove_existing and not self.simulation:
- # Create settings directory
- # (only necessary if user is starting an application with a batch
- # scripts before using an executable launcher, because the latter
- # is creating the directory automatically)
- os.mkdir(str(Path(self.winpydir) / "settings"))
- os.mkdir(str(Path(self.winpydir) / "settings" / "AppData"))
- os.mkdir(str(Path(self.winpydir) / "settings" / "AppData" / "Roaming"))
- self._print_done()
-
- if remove_existing and not self.simulation:
- self._extract_python() # unzip Python interpreter
- self.distribution = wppm.Distribution(
- self.python_dir,
- verbose=self.verbose,
- indent=True,
- )
-
- # PyPy: get Fullversion from the executable
- self.python_fullversion = utils.get_python_long_version(
- self.distribution.target
- )
-
- # PyPY: Assert that WinPython version and real python version do match
- self._print(
- f"Python version{self.python_fullversion.replace('.','')}"
- + f"\nDistro Name {self.distribution.target}"
- )
- assert self.python_fullversion.replace(".", "") in self.distribution.target, (
- "Distro Directory doesn't match the Python version it ships"
- + f"\nPython version: {self.python_fullversion.replace('.','')}"
- + f"\nDistro Name: {self.distribution.target}"
- )
-
- if remove_existing:
- if not self.simulation:
- # self._add_msvc_files() # replaced per msvc_runtime package
- self._create_batch_scripts_initial()
- self._create_batch_scripts()
- # always create all launchers (as long as it is NSIS-based)
- self._create_launchers()
- # pre-patch current pip (until default python has pip 8.0.3)
-
- # PyPY must ensure pip
- # "pypy3.exe -m ensurepip"
- utils.python_execmodule("ensurepip", self.distribution.target)
-
- self.distribution.patch_standard_packages("pip")
- # not forced update of pip (FIRST) and setuptools here
- for req in ("pip", "setuptools", "wheel", "winpython"):
- actions = ["install", "--upgrade", "--pre", req]
- if self.install_options is not None:
- actions += self.install_options
- print(f"piping {' '.join(actions)}")
- self._print(f"piping {' '.join(actions)}")
- self.distribution.do_pip_action(actions)
- self.distribution.patch_standard_packages(req)
- # no more directory base package install: use requirements.txt
- # 2019-05-03 removed self._install_all_other_packages()
- print("self.simulation zz", self.simulation)
- if not self.simulation:
- self._copy_dev_tools()
- self._copy_dev_docs()
- if not self.simulation:
-
- if requirements:
- if not list(requirements) == requirements:
- requirements = requirements.split()
- for req in requirements:
- actions = ["install", "-r", req]
- if self.install_options is not None:
- actions += self.install_options
- print(f"piping {' '.join(actions)}")
- self._print(f"piping {' '.join(actions)}")
- self.distribution.do_pip_action(actions)
- # actions=["install","-r", req, "--no-index",
- # "--trusted-host=None"]+ links,
- # install_options=None)
- self._run_complement_batch_scripts()
- self.distribution.patch_standard_packages()
- if remove_existing and not self.simulation:
- self._print("Cleaning up distribution")
- self.distribution.clean_up()
- self._print_done()
- # Writing package index
- self._print("Writing package index")
- # winpyver2 = need the version without build part
- # but with self.distribution.architecture
- self.winpyver2 = f"{self.python_fullversion}.{self.build_number}"
- fname = str(
- Path(self.winpydir).parent
- / (
- f"WinPython{self.flavor}-"
- + f"{self.distribution.architecture}bit-"
- + f"{self.winpyver2}.md"
- )
- )
- open(fname, "w", encoding='utf-8').write(self.package_index_wiki)
- # Copy to winpython/changelogs
- shutil.copyfile(
- fname,
- str(Path(CHANGELOGS_DIR) / Path(fname).name),
- )
- self._print_done()
-
- # Writing changelog
- self._print("Writing changelog")
- diff.write_changelog(
- self.winpyver2,
- basedir=self.basedir,
- flavor=self.flavor,
- release_level=self.release_level,
- architecture=self.distribution.architecture,
- )
- self._print_done()
-
-
-def rebuild_winpython(basedir, targetdir, architecture=64, verbose=False):
- """Rebuild winpython package from source"""
- basedir = basedir
- packdir = targetdir
- for name in os.listdir(packdir):
- if name.startswith("winpython-") and name.endswith((".exe", ".whl", ".gz")):
- os.remove(str(Path(packdir) / name))
- # utils.build_wininst is replaced per flit 2023-02-27
- utils.buildflit_wininst(
- str(Path(__file__).resolve().parent),
- copy_to=packdir,
- verbose=verbose,
- )
-
-
-def transform_in_list(list_in, list_type=None):
- """Transform a 'String or List' in List"""
- if list_in is None:
- list_in = ""
- if not list_in == list(list_in):
- list_in = list_in.split()
- if list_type:
- print(list_type, list_in)
- return list_in
-
-
-def make_all(
- build_number,
- release_level,
- pyver,
- architecture,
- basedir,
- verbose=False,
- remove_existing=True,
- create_installer=True,
- simulation=False,
- install_options=["--no-index"],
- flavor="",
- requirements=None,
- find_links=None,
- source_dirs=None,
- toolsdirs=None,
- docsdirs=None,
- python_target_release=None, # 37101 for 3.7.10
-):
- """Make WinPython distribution, for a given base directory and
- architecture:
- `build_number`: build number [int]
- `release_level`: release level (e.g. 'beta1', '') [str]
- `pyver`: python version ('3.4' or 3.5')
- `architecture`: [int] (32 or 64)
- `basedir`: where will be created tmp_wheel and Winpython build
- r'D:\Winpython\basedir34'.
- `requirements`: the package list for pip r'D:\requirements.txt',
- `install_options`: pip options r'--no-index --pre --trusted-host=None',
- `find_links`: package directories r'D:\Winpython\packages.srcreq',
- `source_dirs`: the python.zip + rebuilt winpython wheel package directory,
- `toolsdirs`: r'D:\WinPython\basedir34\t.Slim',
- `docsdirs`: r'D:\WinPython\basedir34\docs.Slim'"""
-
- assert basedir is not None, "The *basedir* directory must be specified"
- assert architecture in (32, 64)
- utils.print_box(
- f"Making WinPython {architecture}bits"
- + f" at {Path(basedir) / ('bu' + flavor)}"
- )
-
- # Create Build director, where Winpython will be constructed
- builddir = str(Path(basedir) / ("bu" + flavor))
- if not Path(builddir).is_dir():
- os.mkdir(builddir)
- # use source_dirs as the directory to re-build Winpython wheel
- wheeldir = source_dirs
-
- # Rebuild Winpython in this wheel dir
- rebuild_winpython(
- basedir=basedir,
- targetdir=wheeldir,
- architecture=architecture,
- )
-
- # Optional pre-defined toolsdirs
- toolsdirs = transform_in_list(toolsdirs, "toolsdirs=")
-
- # Optional pre-defined toolsdirs
- print("docsdirs input", docsdirs)
- docsdirs = transform_in_list(docsdirs, "docsdirs=")
- print("docsdirs output", docsdirs)
-
- # install_options = ['--no-index', '--pre', f'--find-links={wheeldir)']
- install_options = transform_in_list(install_options, "install_options")
-
- find_links = transform_in_list(find_links, "find_links")
-
- find_list = [f"--find-links={l}" for l in find_links + [wheeldir]]
- dist = WinPythonDistribution(
- build_number,
- release_level,
- builddir,
- wheeldir,
- toolsdirs,
- verbose=verbose,
- simulation=simulation,
- basedir=basedir,
- install_options=install_options + find_list,
- flavor=flavor,
- docsdirs=docsdirs,
- )
- # define a pre-defined winpydir, instead of having to guess
-
- # extract the python subversion to get WPy64-3671b1
- my_x = "".join(dist.python_fname.replace(".amd64", "").split(".")[-2:-1])
- while not my_x.isdigit() and len(my_x) > 0:
- my_x = my_x[:-1]
- # simplify for PyPy
- if not python_target_release == None:
- my_winpydir = (
- "WPy"
- + f"{architecture}"
- + "-"
- + python_target_release
- + ""
- + f"{build_number}"
- ) + release_level
- # + flavor
- else:
- my_winpydir = (
- "WPy"
- + f"{architecture}"
- + "-"
- + pyver.replace(".", "")
- + ""
- + my_x
- + ""
- + f"{build_number}"
- ) + release_level
- # + flavor
-
- dist.make(
- remove_existing=remove_existing,
- requirements=requirements,
- my_winpydir=my_winpydir,
- )
- # ,find_links=osp.join(basedir, 'packages.srcreq'))
- if str(create_installer).lower() != "false" and not simulation:
- if "7zip" in str(create_installer).lower():
- dist.create_installer_7zip(".exe") # 7-zip (no licence splash screen)
- if ".7z" in str(create_installer).lower():
- dist.create_installer_7zip(".7z") # 7-zip (no licence splash screen)
- if ".zip" in str(create_installer).lower():
- dist.create_installer_7zip(".zip") # 7-zip (no licence splash screen)
- return dist
-
-
-if __name__ == "__main__":
- # DO create only one version at a time
- # You may have to manually delete previous build\winpython-.. directory
-
- make_all(
- 1,
- release_level="build3",
- pyver="3.4",
- basedir=r"D:\Winpython\basedir34",
- verbose=True,
- architecture=64,
- flavor="Barebone",
- requirements=r"D:\Winpython\basedir34\barebone_requirements.txt",
- install_options=r"--no-index --pre --trusted-host=None",
- find_links=r"D:\Winpython\packages.srcreq",
- source_dirs=r"D:\WinPython\basedir34\packages.win-amd64",
- toolsdirs=r"D:\WinPython\basedir34\t.Slim",
- docsdirs=r"D:\WinPython\basedir34\docs.Slim",
- )
diff --git a/mandatory_requirements.txt b/mandatory_requirements.txt
new file mode 100644
index 00000000..6f152f17
--- /dev/null
+++ b/mandatory_requirements.txt
@@ -0,0 +1,5 @@
+# the mandatory
+pip
+setuptools
+#not Wheel
+wppm
diff --git a/mkshim400.py b/mkshim400.py
deleted file mode 100644
index bef89df4..00000000
--- a/mkshim400.py
+++ /dev/null
@@ -1,162 +0,0 @@
-import sys
-import base64
-import argparse
-import os
-from pathlib import Path
-
-max_limit_string = '400' #100 is classic, till 400 is new attempt
-max_limit = int(max_limit_string)
-#use keyword [doublequote] in the command_line if you need to get a doublequote, [simplequote] otherwise
-# example:
-# python mkshim240.py -f my_IDLE_ps.exe -c "Powershell.exe start-process -WindowStyle Hidden [simplequote]./scripts/winidle.bat[simplequote]"
-# python mkshim240.py -f "C:\WinP\bd312\bu\WPy64-31250b6\IDLEtest4.exe" -c "Powershell.exe start-process -FilePath (Join-Path (Get-Location).Path -ChildPath 'scripts\winidletest.bat')"
-
-# 2024-08-25 v01
-# - fork from initial https://github.com/pfmoore/shimmy commit
-# 2024-09-01 v03
-# the new ICONS :
-# - do create a WINPYDIRICONS environment variable with the location of the launcher,
-# - and do not play anymore with a workingdir to set it to .\scripts
-# - so we have a similar behavior by double-clicking the icon or Drag&Droping something on it
-# python mkshim400.py -f "IDLE_test_v02.exe" -c "Powershell.exe start-process -FilePath (Join-Path -Path $ENV:WINPYDIRICONS -ChildPath 'scripts\winidletest.bat')"
-# python mkshim400.py -f "IDLE_test_v02b.exe" -c "Powershell.exe start-process -WindowStyle Hidden -FilePath ([dollar]ENV:WINPYDIRICONS + '\scripts\winidle.bat')"
-#
-# 2024-09-03 v04: same stub can also optionnaly change the working-directory
-# python mkshim400.py -f "ControlPannel_test_v03.exe" -c ".\wpcp.bat" --subdir ".\scripts"
-#
-# 2024-09-05 v05: -i icon_filename to add the icon
-# python mkshim400.py -f "ControlPannel_test_v03.exe" -c ".\wpcp.bat" --subdir ".\scripts" -i "python.ico"
-
-
-def parse_args():
- parser = argparse.ArgumentParser(description="Create executable shims") # re-add wording change of 2014-08-01
- parser.add_argument("-f", "--filename", default="shim.exe",
- help="The filename of the generated shim")
- parser.add_argument("-c", "--command",
- help="The command to run (use %s for where the args should go)")
- parser.add_argument("--stub",
- help="The name of the stub executable")
- parser.add_argument("-d", "--subdir", default="",
- help="swith working directory to this subdirectory from there for the running executable")
- parser.add_argument("-i", "--icon", default="",
- help="the filename of the icon file '.ico' to add")
- args = parser.parse_args()
- if len(args.command) >= max_limit:
- raise ValueError("The command cannot be over {max_limit} characters long")
- if len(args.subdir)>1 and not args.subdir[:2] in [".\\" , "."]:
- raise ValueError(f"sub-directory '{args.subdir}' from icon position must start per '.\\' or '.', not '{args.subdir[:2]}' ")
- return args
-
-def checkPath(path, mode):
- """ from https://gist.github.com/flyx/2965682 """
- import os, os.path
- if not os.path.exists(path) or not os.path.isfile(path):
- raise ValueError("{0} does not exist or isn't a file.".format(path))
- if not os.access(path, mode):
- raise ValueError("Insufficient permissions: {0}".format(path))
-
-def updateExecutableIcon(executablePath, iconPath):
- """ from https://gist.github.com/flyx/2965682 """
- import win32api, win32con
- import struct
- import math
- """
- Updates the icon of a Windows executable file.
- """
-
- checkPath(executablePath, os.W_OK)
- checkPath(iconPath, os.R_OK)
-
- handle = win32api.BeginUpdateResource(executablePath, False)
-
- icon = open(iconPath, "rb")
-
- fileheader = icon.read(6)
-
- # Read icon data
- image_type, image_count = struct.unpack("xxHH", fileheader)
- print ("Icon file has type {0} and contains {1} images.".format(image_type, image_count))
-
- icon_group_desc = struct.pack("= 1:
- print("SHIMMY THIS:", cmd_pre, "subdirectory:", args.subdir)
- else:
- print("SHIMMY THIS:", cmd_pre)
-
- # v03-20240903: same stub can optionnaly change the working-directory
- if len(args.subdir) >= 1:
- marker = ('Y' * max_limit).encode('utf-16le')
- i = stub_bytes.index(marker)
- cmd = (args.subdir+('\0' * max_limit))[:max_limit]
- cmd_bytes = cmd.encode('utf-16le')
- stub_bytes= b"".join([ stub_bytes[:i] , cmd_bytes , stub_bytes[i+len(marker):] ])
-
- marker = ('X' * max_limit).encode('utf-16le')
- cmd = (cmd_pre + ('\0' * max_limit))[:max_limit]
- i = stub_bytes.index(marker)
- cmd_bytes = cmd.encode('utf-16le')
- with open(args.filename, "wb") as f:
- f.write(stub_bytes[:i])
- f.write(cmd_bytes)
- f.write(stub_bytes[i+len(marker):])
-
- # Embed the icon with pywin32, if provided
- if Path(args.icon).is_file():
- updateExecutableIcon(args.filename, args.icon)
-
-stub = """\
-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LS0AAC0AAAArAAAAJgAAAC0+KgAvAAAAJQAAADwAAAA8PQAAPgAAAD49AAAsAAAAKCkAAH4AAABeAAAAfAAAACYmAAB8fAAAKj0AACs9AAAtPQAALz0AACU9AAA+Pj0APDw9ACY9AAB8PQAAXj0AAGB2ZnRhYmxlJwAAAAAAAABgdmJ0YWJsZScAAAAAAAAAYHZjYWxsJwBgdHlwZW9mJwAAAAAAAAAAYGxvY2FsIHN0YXRpYyBndWFyZCcAAAAAYHN0cmluZycAAAAAAAAAAGB2YmFzZSBkZXN0cnVjdG9yJwAAAAAAAGB2ZWN0b3IgZGVsZXRpbmcgZGVzdHJ1Y3RvcicAAAAAYGRlZmF1bHQgY29uc3RydWN0b3IgY2xvc3VyZScAAABgc2NhbGFyIGRlbGV0aW5nIGRlc3RydWN0b3InAAAAAGB2ZWN0b3IgY29uc3RydWN0b3IgaXRlcmF0b3InAAAAYHZlY3RvciBkZXN0cnVjdG9yIGl0ZXJhdG9yJwAAAABgdmVjdG9yIHZiYXNlIGNvbnN0cnVjdG9yIGl0ZXJhdG9yJwAAAAAAYHZpcnR1YWwgZGlzcGxhY2VtZW50IG1hcCcAAAAAAABgZWggdmVjdG9yIGNvbnN0cnVjdG9yIGl0ZXJhdG9yJwAAAAAAAAAAYGVoIHZlY3RvciBkZXN0cnVjdG9yIGl0ZXJhdG9yJwBgZWggdmVjdG9yIHZiYXNlIGNvbnN0cnVjdG9yIGl0ZXJhdG9yJwAAYGNvcHkgY29uc3RydWN0b3IgY2xvc3VyZScAAAAAAABgdWR0IHJldHVybmluZycAYEVIAGBSVFRJAAAAAAAAAGBsb2NhbCB2ZnRhYmxlJwBgbG9jYWwgdmZ0YWJsZSBjb25zdHJ1Y3RvciBjbG9zdXJlJwAgbmV3W10AAAAAAAAgZGVsZXRlW10AAAAAAAAAYG9tbmkgY2FsbHNpZycAAGBwbGFjZW1lbnQgZGVsZXRlIGNsb3N1cmUnAAAAAAAAYHBsYWNlbWVudCBkZWxldGVbXSBjbG9zdXJlJwAAAABgbWFuYWdlZCB2ZWN0b3IgY29uc3RydWN0b3IgaXRlcmF0b3InAAAAYG1hbmFnZWQgdmVjdG9yIGRlc3RydWN0b3IgaXRlcmF0b3InAAAAAGBlaCB2ZWN0b3IgY29weSBjb25zdHJ1Y3RvciBpdGVyYXRvcicAAABgZWggdmVjdG9yIHZiYXNlIGNvcHkgY29uc3RydWN0b3IgaXRlcmF0b3InAAAAAABgZHluYW1pYyBpbml0aWFsaXplciBmb3IgJwAAAAAAAGBkeW5hbWljIGF0ZXhpdCBkZXN0cnVjdG9yIGZvciAnAAAAAAAAAABgdmVjdG9yIGNvcHkgY29uc3RydWN0b3IgaXRlcmF0b3InAAAAAAAAYHZlY3RvciB2YmFzZSBjb3B5IGNvbnN0cnVjdG9yIGl0ZXJhdG9yJwAAAAAAAAAAYG1hbmFnZWQgdmVjdG9yIGNvcHkgY29uc3RydWN0b3IgaXRlcmF0b3InAAAAAAAAYGxvY2FsIHN0YXRpYyB0aHJlYWQgZ3VhcmQnAAAAAABvcGVyYXRvciAiIiAAAAAAb3BlcmF0b3IgY29fYXdhaXQAAAAAAAAAb3BlcmF0b3I8PT4AAAAAACBUeXBlIERlc2NyaXB0b3InAAAAAAAAACBCYXNlIENsYXNzIERlc2NyaXB0b3IgYXQgKAAAAAAAIEJhc2UgQ2xhc3MgQXJyYXknAAAAAAAAIENsYXNzIEhpZXJhcmNoeSBEZXNjcmlwdG9yJwAAAAAgQ29tcGxldGUgT2JqZWN0IExvY2F0b3InAAAAAAAAAGBhbm9ueW1vdXMgbmFtZXNwYWNlJwAAAEBxAUABAAAAgHEBQAEAAADAcQFAAQAAAGEAcABpAC0AbQBzAC0AdwBpAG4ALQBjAG8AcgBlAC0AZgBpAGIAZQByAHMALQBsADEALQAxAC0AMQAAAAAAAABhAHAAaQAtAG0AcwAtAHcAaQBuAC0AYwBvAHIAZQAtAHMAeQBuAGMAaAAtAGwAMQAtADIALQAwAAAAAAAAAAAAawBlAHIAbgBlAGwAMwAyAAAAAAAAAAAAYQBwAGkALQBtAHMALQAAAAAAAAACAAAARmxzQWxsb2MAAAAAAAAAAAAAAAACAAAARmxzRnJlZQAAAAAAAgAAAEZsc0dldFZhbHVlAAAAAAAAAAAAAgAAAEZsc1NldFZhbHVlAAAAAAABAAAAAgAAAEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb25FeAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAIAAAABAAAAAAAAAAAAAAAEAAAABAAAAAUAAAAEAAAABQAAAAQAAAAFAAAAAAAAAAUAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAUAAAAAAAAABQAAAAMAAAAFAAAAAwAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAAAIAAAAAAAAAAwAAAAgAAAAFAAAAAAAAAAUAAAAIAAAAAAAAAAcAAAAAAAAACAAAAAAAAAAAAAAAAwAAAAcAAAADAAAAAAAAAAMAAAAAAAAABQAAAAcAAAAFAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAACAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAGAAAAAAAAAAYAAAAIAAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAgAAAAHAAAAAAAAAAcAAAAIAAAABwAAAAgAAAAHAAAACAAAAAcAAAAIAAAAAAAAAAgAAAAAAAAABwAAAAAAAAAIAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAABwAAAAAAAAAIAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAIAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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TgQCAAAAAABgBAIAAAAAAHIEAgAAAAAAhgQCAAAAAACcBAIAAAAAAK4EAgAAAAAAvgQCAAAAAADSBAIAAAAAAN4EAgAAAAAA7AQCAAAAAAAAAAAAAAAAAOABR2V0Q29tbWFuZExpbmVXACQFU2V0RW52aXJvbm1lbnRWYXJpYWJsZVcAiQBDbG9zZUhhbmRsZQBqAkdldExhc3RFcnJvcgAA6gVXYWl0Rm9yU2luZ2xlT2JqZWN0AEYCR2V0RXhpdENvZGVQcm9jZXNzAADoAENyZWF0ZVByb2Nlc3NXAAB9AkdldE1vZHVsZUZpbGVOYW1lVwAA1QRSdGxDYXB0dXJlQ29udGV4dADcBFJ0bExvb2t1cEZ1bmN0aW9uRW50cnkAAOMEUnRsVmlydHVhbFVud2luZAAAwAVVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIAAH8FU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyACACR2V0Q3VycmVudFByb2Nlc3MAngVUZXJtaW5hdGVQcm9jZXNzAACMA0lzUHJvY2Vzc29yRmVhdHVyZVByZXNlbnQAUgRRdWVyeVBlcmZvcm1hbmNlQ291bnRlcgAhAkdldEN1cnJlbnRQcm9jZXNzSWQAJQJHZXRDdXJyZW50VGhyZWFkSWQAAPMCR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUAbwNJbml0aWFsaXplU0xpc3RIZWFkAIUDSXNEZWJ1Z2dlclByZXNlbnQA2gJHZXRTdGFydHVwSW5mb1cAgQJHZXRNb2R1bGVIYW5kbGVXAABLRVJORUwzMi5kbGwAAOIEUnRsVW53aW5kRXgAQQVTZXRMYXN0RXJyb3IAADgBRW50ZXJDcml0aWNhbFNlY3Rpb24AAMQDTGVhdmVDcml0aWNhbFNlY3Rpb24AABQBRGVsZXRlQ3JpdGljYWxTZWN0aW9uAGsDSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbkFuZFNwaW5Db3VudACwBVRsc0FsbG9jAACyBVRsc0dldFZhbHVlALMFVGxzU2V0VmFsdWUAsQVUbHNGcmVlALQBRnJlZUxpYnJhcnkAuAJHZXRQcm9jQWRkcmVzcwAAygNMb2FkTGlicmFyeUV4VwAAaARSYWlzZUV4Y2VwdGlvbgAAGQVTZXRDdXJyZW50RGlyZWN0b3J5VwAAGgJHZXRDdXJyZW50RGlyZWN0b3J5VwAA3AJHZXRTdGRIYW5kbGUAACUGV3JpdGVGaWxlAGcBRXhpdFByb2Nlc3MAgAJHZXRNb2R1bGVIYW5kbGVFeFcAAN8BR2V0Q29tbWFuZExpbmVBAFEDSGVhcEFsbG9jAFUDSGVhcEZyZWUAAJ4AQ29tcGFyZVN0cmluZ1cAALgDTENNYXBTdHJpbmdXAABYAkdldEZpbGVUeXBlABEGV2lkZUNoYXJUb011bHRpQnl0ZQB+AUZpbmRDbG9zZQCEAUZpbmRGaXJzdEZpbGVFeFcAAJUBRmluZE5leHRGaWxlVwCSA0lzVmFsaWRDb2RlUGFnZQC7AUdldEFDUAAAoQJHZXRPRU1DUAAAygFHZXRDUEluZm8A9gNNdWx0aUJ5dGVUb1dpZGVDaGFyAEECR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAswFGcmVlRW52aXJvbm1lbnRTdHJpbmdzVwBbBVNldFN0ZEhhbmRsZQAA4QJHZXRTdHJpbmdUeXBlVwAAvgJHZXRQcm9jZXNzSGVhcAAAqAFGbHVzaEZpbGVCdWZmZXJzAAAJAkdldENvbnNvbGVPdXRwdXRDUAAABQJHZXRDb25zb2xlTW9kZQAAVgJHZXRGaWxlU2l6ZUV4ADMFU2V0RmlsZVBvaW50ZXJFeAAAWgNIZWFwU2l6ZQAAWANIZWFwUmVBbGxvYwDOAENyZWF0ZUZpbGVXACQGV3JpdGVDb25zb2xlVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAAAAAAAAAAAAAAAAAAAAAABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAAAAAAAAAAAAAAAAAAAAAABDAGEAbgBuAG8AdAAgAGEAbABsAG8AYwBhAHQAZQAgACUAegBkACAAYgB5AHQAZQBzACAAbwBmACAAbQBlAG0AbwByAHkAIABmAG8AcgAgAGMAbwBtAG0AYQBuAGQAIABsAGkAbgBlAAoAAAAlAHMAAAAAAAAAAAAlAC4AKgBzACUAcwAlAHMAAAAAAAAAAAAlAHMAIAAlAHMAAAAAAAAAVwBJAE4AUABZAEQASQBSAEkAQwBPAE4AUwAAAAAAAABGAGEAaQBsAGUAZAAgAHQAbwAgAHMAZQB0ACAAZQBuAHYAaQByAG8A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dPABAPRiAAD2YwAAAPEBAPhjAADeZAAAUPEBAOBkAACFZQAAFPEBAIhlAAB9ZgAACPABAIBmAACAZwAACPABAIBnAAALaAAA4O8BAAxoAACXaAAA4O8BAKBoAABGaQAA6O4BAORtAACpbgAAiPEBAKxuAAA2cAAADPIBADhwAACMcQAA7PEBAIxxAAAOcwAAiPEBAKBzAABfdQAACPABAGB1AAC9dQAANO4BAMB1AABGdwAAJPIBAEh3AAC0dwAA6O4BALR3AAC6eAAARPIBALx4AAD9eAAAOPIBAAB5AADReQAAXPIBANR5AADueQAAJO4BAPB5AAAKegAAJO4BAAx6AABHegAAJO4BAEh6AACAegAAJO4BAIB6AADOegAAJO4BANh6AAA8ewAAiPEBADx7AAB5ewAA6O4BAHx7AAC0ewAAmPIBALR7AAB1fAAAePIBAIR8AABAfQAAbPIBAEB9AACKfQAANO4BAIx9AADnfQAANO4BABx+AABYfgAAJO4BAGR+AAChfgAAJO4BAKR+AADJfgAAJO4BANx+AABKfwAAxPIBAFh/AACGfwAAvPIBAIh/AADxfwAANO4BAPx/AAAngAAAJO4BADCAAABrgAAALPMBAGyAAACngAAAUPMBAKiAAABYggAA/PIBAFiCAABugwAAFPMBAICDAAC6gwAA9PIBAOSDAAAshAAA7PIBAECEAABjhAAAJO4BAGSEAAB0hAAAJO4BAHSEAACxhAAANO4BALyEAAD8hAAANO4BAPyEAABXhQAAJO4BAGyFAAChhQAAJO4BAKSFAADEhQAAdPMBAMSFAAAjhgAANO4BACSGAAB6hgAAJO4BAISGAACGiQAAlPMBAIiJAAAtkAAAsPMBADCQAACmkAAAiPEBAMCQAAA9kQAAyPMBAGyRAADHkgAA1PMBANCSAAB+kwAA9PMBAICTAACekwAAzPMBAKCTAADnkwAAJO4BADCUAAB+lAAA6O4BAICUAACglAAAJO4BAKCUAADAlAAAJO4BAMCUAAA1lQAANO4BADiVAAB1lQAACPQBAHiVAABOlwAAmO8BAFCXAACelwAANO4BAKCXAADalwAAJO4BANyXAAC4mAAAGPQBALiYAAAAmQAANO4BAACZAABGmQAANO4BAEiZAACOmQAANO4BAJCZAADhmQAA6O4BAOSZAABFmgAAiO8BAEiaAAAkmwAAGPQBACSbAAB0mwAA6O4BAHSbAAClmwAAEPQBAKibAADpmwAANO4BAOybAACdnAAALPQBAKCcAAA6nQAAWPQBADydAAAcngAAfPQBAByeAAB5ngAAUPQBAHyeAAD2ngAAiO8BAPieAABDnwAANO4BAEyfAACMnwAANO4BAIyfAAB5oAAAxPQBAHygAACIoQAAyO8BAIihAADDoQAApPQBAMShAAAEogAA6O4BAASiAABiogAANO4BAGSiAACOogAAzPMBAJCiAAC6ogAAzPMBALyiAAA6pAAAGPQBAESkAADgpQAA4PQBAOClAAD0pQAAzPMBAPSlAAAzpgAAAPUBADSmAABxpgAAbPUBAHSmAAC5pgAAJPUBALymAAAbpwAASPUBABynAADppwAA8PQBAOynAAAMqAAACPQBAAyoAAABqQAA+PQBAASpAABrqQAA6O4BAGypAABAqgAAiO8BAECqAADnqgAANO4BAOiqAAC0qwAAiO8BALSrAADtqwAAJO4BAPCrAAASrAAAJO4BABSsAABFrAAANO4BAEisAAB5rAAANO4BAHysAAD8rwAAwPUBAPyvAADssAAAGPQBAOywAAC+sgAAqPUBAMCyAAAltAAADPIBACi0AABttQAA3PUBAHC1AACGtgAACPABAIi2AAC/uQAAkPUBAMC5AAA7uwAA8PUBADy7AABiuwAAJO4BAJS7AADauwAANO4BANy7AACkvAAA6O4BAKS8AADdvAAADPYBAOC8AADovQAAFPYBAOi9AAAivwAAMPYBACS/AABOvwAAJO4BAFC/AADGwAAAXPYBAMjAAABfwgAAQPYBAGDCAAANwwAAdPYBACTDAAAtxQAAgPYBADDFAAC3xgAAmPYBALjGAADGyQAAtPYBANDJAADhygAA9PYBAOTKAAACzAAA2PYBAATMAAC+zQAAhPcBAMDNAAA9zgAAKPcBAEDOAADQzgAAiPEBANDOAACx0AAAaPcBALTQAABy0gAAWPcBAHTSAAAs0wAAMPcBACzTAACM0wAAJO4BAIzTAACo0wAAJO4BAKjTAABh1gAACPcBAGTWAADZ1gAAXPIBAEzXAABN2AAADPIBAFDYAABw2wAAqPcBAHDbAABV3AAAwPcBAGDcAACo3AAANO4BAMTcAAD73AAANO4BABjdAABU3QAA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KKA4oEigWKBooHigiKCYoKiguKDIoNig6KD4oAihGKEooTihSKFYoWiheKGIoZihqKG4ocih2KHoofihCKIYoiiiOKJIoliiaKJ4ooiimKKooriiyKLYouii+KIIoxijKKM4o0ijWKNoo3ijiKOYo6ijuKPIo9ij6KP4owikGKQopDikSKRYpGikeKSIpJikqKS4pMik2KTopPikCKUYpSilOKVIpVilaKV4pYilmKWopbilyKXYpeil+KUIphimKKY4pkimWKZopnimiKaYpqimuKbIptim6Kb4pginGKcopzinSKdYp2ineKeIp5inqKe4p8in2Kfop/inCKgYqCioOKhIqFioaKh4qIiomKioqLioyKjYqOio+KgIqRipKKk4qUipWKloqXipiKmYqaipuKnIqdip6Kn4qQiqGKooqjiqSKpYqmiqeKqIqpiqqKq4qsiq2KroqviqCKsYqyirOKtIq1iraKt4q4irmKuoq7iryKvYq+ir+KsIrBisKKw4rEisWKxorHisiKyYrKisuKzIrNis6Kz4rAitGK0orTitSK1YrWiteK2IrZitqK24rcitAAAAoAEAzAAAAPCpAKoQqiCqMKpAqlCqYKpwqoCqkKqgqrCqwKrQquCq8KoAqxCrIKswq0CrUKtgq3CrgKuQq6CrsKvAq9Cr4KvwqwCsEKwgrDCsQKxQrGCscKyArJCsoKywrMCs0KzgrPCsAK0QrSCtMK1ArVCtYK1wrYCtkK2grbCtwK3QreCt8K0ArhCuIK4wrkCuUK5grnCugK6QrqCusK7ArtCu4K7wrgCvEK8grzCvQK9Qr2CvcK+Ar5CvoK+wr8Cv0K/gr/CvAAAAsAEAEAEAAACgEKAgoDCgQKBQoGCgcKCAoJCgoKCwoMCg0KDgoPCgAKEQoSChMKFAoVChYKFwoYChkKGgobChwKHQoeCh8KEAohCiIKIwokCiUKJgonCigKKQoqCisKLAotCi4KLwogCjEKMgozCjQKNQo2CjcKOAo5CjoKOwo8Cj0KPgo/CjAKQQpCCkMKRApFCkYKRwpICkkKSgpLCkwKTQpOCk8KQApRClIKUwpUClUKVgpXClgKWQpaClsKXApdCl4KXwpQCmEKYgpjCmQKZQpmCmcKaAppCmoKawpsCm0KbgpvCmAKcQpyCnMKdAp1CnYKdwp4CnkKegp7CnwKfQp+Cn8KcAqBCoIKgAAADgAQAcAAAAmKewp7inQKhYqGCoaKhwqHioAAAAEAIAIAAAALCq+KoYqzirWKt4q6irwKvIq9CrCKwQrAAgAgAwAAAAYKFwoXihgKGIoZChmKGgoaihsKG4ocih0KHYoeCh6KHwofihAKIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-"""
-
-if __name__ == '__main__':
- main()
diff --git a/portable/config.txt b/portable/config.txt
deleted file mode 100644
index aa4a72a7..00000000
--- a/portable/config.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-;!@Install@!UTF-8!
-Title="WinPython"
-BeginPrompt="Do you want to install WinPython?"
-InstallPath="."
-;!@InstallEnd@!
\ No newline at end of file
diff --git a/portable/icons/powershell.ico b/portable/icons/powershell.ico
deleted file mode 100644
index 2878c965..00000000
Binary files a/portable/icons/powershell.ico and /dev/null differ
diff --git a/portable/icons/qt.ico b/portable/icons/qt.ico
deleted file mode 100644
index 170f9df6..00000000
Binary files a/portable/icons/qt.ico and /dev/null differ
diff --git a/portable/icons/qtassistant.ico b/portable/icons/qtassistant.ico
deleted file mode 100644
index a945814d..00000000
Binary files a/portable/icons/qtassistant.ico and /dev/null differ
diff --git a/portable/icons/qtdesigner.ico b/portable/icons/qtdesigner.ico
deleted file mode 100644
index 45f8a264..00000000
Binary files a/portable/icons/qtdesigner.ico and /dev/null differ
diff --git a/portable/icons/qtlinguist.ico b/portable/icons/qtlinguist.ico
deleted file mode 100644
index 091b9abc..00000000
Binary files a/portable/icons/qtlinguist.ico and /dev/null differ
diff --git a/portable/icons/r.ico b/portable/icons/r.ico
deleted file mode 100644
index 5ae70e63..00000000
Binary files a/portable/icons/r.ico and /dev/null differ
diff --git a/portable/icons/spyder.ico b/portable/icons/spyder.ico
deleted file mode 100644
index 4aafb087..00000000
Binary files a/portable/icons/spyder.ico and /dev/null differ
diff --git a/portable/icons/spyder_reset.ico b/portable/icons/spyder_reset.ico
deleted file mode 100644
index 02978206..00000000
Binary files a/portable/icons/spyder_reset.ico and /dev/null differ
diff --git a/portable/icons/winpython.ico b/portable/icons/winpython.ico
deleted file mode 100644
index c8147ae6..00000000
Binary files a/portable/icons/winpython.ico and /dev/null differ
diff --git a/portable/installer_7zip.bat b/portable/installer_7zip.bat
deleted file mode 100644
index c19e7ab7..00000000
--- a/portable/installer_7zip.bat
+++ /dev/null
@@ -1,77 +0,0 @@
-ï»żrem Copyright @ 2018 WinPython team
-rem Licensed under the terms of the MIT License
-rem (see winpython/__init__.py for details)
-
-rem This is to do a 7-zip installer
-
-rem ================================================================
-rem These lines are automatically replaced when creating installer:
-rem (see winpython/make.py)
-set SEVENZIP_EXE=C:\Program Files (x86)\7-Zip\7z
-set DISTDIR=C:\WinP\bd36\buPs2\winp64-3.6.x.0
-set ARCH=64
-set VERSION=3.6.7.0Ps2
-
-rem 2018-04-04 need to minimize path length of installation further: remove flavor in install path
-
-set VERSION_INSTALL=3670
-
-set RELEASELEVEL=beta3
-set PORTABLE_DIR=C:\WinPython-64bit-3.4.3.7Qt5\winpython_github20181029\portable
-set INSTALLER_OPTION=.exe
-
-rem ================================================================
-rem these lines are static definitions
-set ID=Winpython
-set ID_INSTALL=WPy
-set FILE_DESCRIPTION=%ID% Installer
-set COMPANY=%ID%
-set BRANDING=%ID%, the portable Python Distribution for Scientists
-set COPYRIGHT=Copyright © 2018+ WinPython Team
-set MyAppPublisher=WinPython team
-set MyAppURL=https://winpython.github.io/
-
-rem OutputBaseFilename "{#ID}{#ARCH}-{#VERSION}{#RELEASELEVEL}"
-
-rem ================================================================ [Setup]
-rem OutFile "${DISTDIR}\..\${ID}${ARCH}-${VERSION}${RELEASELEVEL}.exe"
-set MyBinaryOutputDir=%DISTDIR%\..
-set OutputBaseFilename=%ID%%ARCH%-%VERSION%%RELEASELEVEL%
-
-rem 7-zip uncompress the directory compressed %DISTDIR% (no option to change it in gui)
-
-rem ================================================================
-rem 2019-03-16 copy license at source (due to 7zip limitations)
-
-copy/Y %PORTABLE_DIR%\license.txt %DISTDIR%\license.txt
-
-rem ================================================================
-
-echo %time%
-
-rem compression + include auto_extract in GUI mode
-if "%INSTALLER_OPTION%"==".exe" (
- "%SEVENZIP_EXE%" -mx5 a "%MyBinaryOutputDir%\%OutputBaseFilename%.exe" %DISTDIR% -sfx7z.sfx
- echo autoextract using command line options
- echo "%MyBinaryOutputDir%\%OutputBaseFilename%.exe" -y -o%MyBinaryOutputDir%\zz > NUL
- )
-
-if "%INSTALLER_OPTION%"==".7z" (
- "%SEVENZIP_EXE%" -mx5 a "%MyBinaryOutputDir%\%OutputBaseFilename%.7z" %DISTDIR%
- echo no autoextract
- )
-if "%INSTALLER_OPTION%"==".zip" (
- "%SEVENZIP_EXE%" -tzip -mx5 a "%MyBinaryOutputDir%\%OutputBaseFilename%.zip" %DISTDIR%
- echo no autoextract
- )
-
-
-
-rem -mx1 = speed fastest
-rem -mx3 = speed fast
-rem -mx5 = speed normal
-rem -mx7 = compress maximum
-rem -mx9 = compress ultra
-
-rem -t7z = [by default] 7 zip compression , the only choice with auto-extract
-rem -tzip = Zip compatible compression.
diff --git a/portable/launcher_basic.nsi b/portable/launcher_basic.nsi
deleted file mode 100644
index cb1670b3..00000000
--- a/portable/launcher_basic.nsi
+++ /dev/null
@@ -1,44 +0,0 @@
-/* WinPython launcher template script
-Copyright © 2012 Pierre Raybaut
-Licensed under the terms of the MIT License
-(see winpython/__init__.py for details)
-*/
-;================================================================
-; These lines are automatically filled when winpython/make.py creates launchers:
-!addincludedir ""
-!define COMMAND ""
-!define PARAMETERS ""
-!define WORKDIR ""
-Icon ""
-OutFile ""
-;================================================================
-# Standard NSIS plugins
-!include "WordFunc.nsh"
-!include "FileFunc.nsh"
-
-SilentInstall silent
-AutoCloseWindow true
-ShowInstDetails nevershow
-RequestExecutionLevel user
-
-Section ""
-Call Execute
-SectionEnd
-
-Function Execute
-;Set working Directory ===========================
-StrCmp ${WORKDIR} "" 0 workdir
-System::Call "kernel32::GetCurrentDirectory(i ${NSIS_MAX_STRLEN}, t .r0)"
-SetOutPath $0
-Goto end_workdir
-workdir:
-SetOutPath "${WORKDIR}"
-end_workdir:
-;Get Command line parameters =====================
-${GetParameters} $R1
-StrCmp "${PARAMETERS}" "" end_param 0
-StrCpy $R1 "${PARAMETERS} $R1"
-end_param:
-;===== Execution =================================
-Exec '"${COMMAND}" $R1'
-FunctionEnd
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 2e96abec..cfae051f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,13 +3,15 @@ requires = ["flit_core"]
build-backend = "flit_core.buildapi"
[project]
-name = "winpython"
+name = "wppm"
authors = [
{name = "Pierre Raybaut"},
{name = "stonebig"},
]
-dependencies = []
-requires-python = ">=3.8"
+dependencies = [
+ "packaging",
+]
+requires-python = ">=3.10"
readme = "README.rst"
license = {file = "LICENSE"}
classifiers=[
@@ -25,7 +27,7 @@ classifiers=[
'Topic :: Software Development :: Widget Sets',
]
dynamic = ["version",]
-description="WinPython distribution tools, including WPPM"
+description="WinPython Package Management"
keywords = ["Portable","Windows"]
[project.urls]
@@ -33,4 +35,4 @@ Documentation = "https://winpython.github.io/"
Source = "https://github.com/winpython/winpython"
[project.scripts]
-wppm = "winpython.wppm:main"
+wppm = "wppm.wppm:main"
diff --git a/requirements64_slim.txt b/requirements64_slim.txt
new file mode 100644
index 00000000..9c0872cd
--- /dev/null
+++ b/requirements64_slim.txt
@@ -0,0 +1,510 @@
+# 313
+# ortool 290MO UNCOMPRESSED
+# re-add pandoc ⊠618Mo?
+# 698 Mo after remoal of moviepy/imageio-ffmpeg
+# 714 Mo after removal of maturin and WASM Klein
+# 725Mo before removal of: maturin 7 Mo, WASM KLEIN example
+#2024-09-22: swifter removed
+
+#2024-12-28 add pydantic_ai
+
+# the essential
+wheel
+pywin32
+build
+
+
+# compilers
+cython
+pycparser
+cffi
+
+# numeric stones
+numpy
+
+scipy
+sympy
+Pillow
+matplotlib
+
+pandas
+
+# sql - data
+
+pyodbc
+
+
+SQLAlchemy
+sqlparse
+sqlite_bro
+baresql
+mysql_connector_python
+pg8000
+ipython_sql
+
+XlsxWriter
+
+pymongo
+redis
+
+# high numeric
+#numexpr 2024-12-25: not worth it
+
+#h5py 2024-12-25: not worth it
+
+cytoolz
+#netCDF4 2024-12-25: not worth it
+xarray
+
+#Pulp 2024-12-25: not worth it
+
+scikit_learn
+scikit_image
+
+
+
+# gui
+jupyter
+ipython
+
+spyder
+
+# seaborn wants patsy and statsmodels for linear modeling
+seaborn
+patsy
+statsmodels
+
+holoviews
+mpld3
+
+# web
+beautifulsoup4
+
+lxml
+html5lib
+requests
+
+
+simplejson
+
+flask
+
+# dev complements
+
+pytest
+jedi
+pep8
+pyflakes
+
+pylint
+
+numpydoc
+
+twine
+
+# other
+networkx
+nltk
+
+# PyAudio 2024-12-25: not worth it, no visibility of source
+sounddevice
+
+pyserial
+
+#pdf
+
+reportlab
+
+
+# Pierre Raybaut Stack (PyQt5 only for now)
+plotpy
+PythonQwt
+guidata
+
+# for dask
+
+lmfit
+
+# Qt
+
+pyqtgraph
+
+
+# yet other
+julia
+
+# remember me why
+certifi
+click
+
+
+
+sphinx_rtd_theme
+Sphinx
+greenlet
+rx
+
+# wheelhouse-uploader apache-libcloud (is heavy)
+
+Markdown
+
+prompt-toolkit
+ptpython
+
+geopy
+
+wordcloud
+
+
+
+pycodestyle
+
+altair
+nbconvert
+pypandoc
+
+
+
+
+fuzzywuzzy
+#scikit_fuzzy
+imageio
+
+#xlwings 2024-12-25 not worth it
+
+# parallelize (and replace celery)
+joblib
+#dask[complete] contains irrelevant pyarrow-hotfix
+dask[array,dataframe,distributed,diagnostics]
+
+# dask 'bag' and 'delayed'
+cloudpickle
+toolz
+partd
+
+brotli
+
+
+pybind11
+
+#SLIM_2024 pygame
+plotnine
+
+mpl_scatter_density
+
+
+
+
+#SLIM_2024 moviepy
+
+
+streamz
+
+
+# Tensorflow_world
+###edward
+###Keras
+###keras_vis
+###Tensorflow_cpu
+###tensorflow_probability
+
+##keras-tuner
+
+# pytorch eco-system
+#Torch
+#torchvision
+#torchaudio
+#botorch
+#lightning
+#kornia
+#transformers[torch]
+#accelerate
+#fidle (tensorboard-2.15.1 wants still protobuf<4.24 , problem with ortools)
+## waiting for torch:
+##fastai
+##spacy
+
+# if we drop torch: jaxlib ml-dtypes numpy scipy jax opt-einsum
+#jax[cpu]
+
+terminado
+
+# pywinpty added due link removed from terminado for PyPy3
+pywinpty
+
+Send2Trash
+
+vega_datasets
+
+regex
+
+#loky
+
+hvplot
+
+#clrmagic 2024-12-25 not Worth it
+#pythonnet 2024-12-25 not Worth it
+
+cvxopt
+
+numba
+##pyarrow
+
+
+cvxpy
+mypy
+
+datashader
+
+mlxtend
+
+##jupyterlab_rise
+
+simpy
+
+
+trio
+
+imbalanced-learn
+
+tzlocal
+astropy
+
+panel
+
+hypothesis
+geopandas
+
+mercantile
+
+#rasterio 2024-12-25 not jangmin and maxsecure
+
+quantecon
+
+kiwisolver
+
+# automate notebooks 2019-04-26
+papermill
+
+autopep8
+black
+
+## winrt not yet
+
+
+# python_language_server no more
+python_lsp_server
+pexpect
+
+
+#swagger flask (still no asyncio choice)
+#flask_accepts
+#flaskerize
+# flask_RESTplus ... shall be now flask-restx
+quart
+datasette
+hypercorn
+
+#complementing asgi stack
+#2023-03-19 no more with sqlalchemy2.0
+##databases[sqlite]
+
+## ibis-framework no big life
+
+folium
+plotly
+
+
+umap-learn
+#SLIM_2024 virtualenv
+pympler
+## pipdeptree replaced par wppm
+
+##nlopt
+
+#2025-02-15 flask-sqlalchemy
+#2025-02-15 flask-session
+#2025-02-15 flask-Mail
+python-dotenv
+httpie
+asgiref
+
+#SLIM_2024 importlib_metadata
+
+
+##jupyterlab things
+jupyterlab
+widgetsnbextension
+
+##jupyterlab_launcher
+jupyter_bokeh
+#2023-05-21 too fragile: dask_labextension
+#SLIM_2024 pydeck
+
+## jupyterlab3 only
+jupyterlab-widgets
+
+## 2020-09-27 jupyterlab2 only
+ipympl
+ipyleaflet
+
+ipycanvas
+
+#SLIM_2024 wasmer
+#SLIM_2024 wasmer_compiler_cranelift
+#SLIM_2024 wasmer_compiler_singlepass
+
+fastapi
+
+
+datasette_graphql
+sqlite_utils
+aiosqlite
+
+
+## onnxruntime
+
+##sklearn-contrib-lightning
+openpyxl
+zstandard
+
+
+pynndescent
+
+
+flit
+## 2023-10-15 (too constraining) poetry
+## so moves to hatch
+## buth hatch wants now uv.. a bit too much
+hatchling
+
+#ecos 2024-12-25
+
+##csvs_to_sqlite
+datasette_graphql
+sqlite_utils
+
+maturin
+
+orjson
+
+
+#2023-08-22 fuzz replacements
+rapidfuzz
+
+## waiting pyarrow on 3.11 oct 23th
+streamlit
+
+## 2024-09-08 until plotly at least updates its lumnio thing https://github.com/plotly/plotly.py/pull/4685
+# dash
+alembic
+
+
+#webapps example needs
+Django
+#channels
+
+
+## badly formed uvicorn[standard]
+uvicorn
+python-multipart
+deap
+
+polars
+
+##timseries bis
+
+
+# for SSRS
+requests_ntlm
+missingno
+
+##xgboost
+# lightgbm ?
+duckdb
+
+
+# for flask
+waitress
+
+#2023-10-08 soon:jupyterlab-lsp
+
+array-api-compat
+
+
+mpmath
+
+openai
+
+
+#azure
+azure-identity
+azure-cosmos
+azure-core
+
+## build
+
+# write & read QRcode
+python-barcode
+qrcode
+opencv-python
+
+#llm follow-up
+# llm
+#risk llm_gpt4all
+# llm_llama_cpp
+# llm_markov
+# llm-python
+huggingface_hub
+
+
+#course of langchain https://learn.deeplearning.ai/langchain-chat-with-your-data
+pypdf
+yt_dlp
+pydub
+
+
+# new friends of panel (load psygnal, a qt-like signaling)
+anywidget
+
+keras
+
+
+
+# pyomo becomes a frequent wrapper nowodays
+
+langchain
+pyomo
+#NUMPY2_WAIT highspy
+#pymoo 2024-12-25 not well maintained
+
+clarabel
+#SLIM_2024 ortools
+
+#waiting cvxpy
+scs
+optuna
+
+
+#pyarrow complement
+adbc_driver_manager
+#adbc_driver_sqlite
+#backport optional importlib_resources
+
+#cartopy 2024-12-26 use geopandas more popular (that include gdal via pyogrio)
+
+#2024-12-26 agent ai things
+pydantic_ai
+#skrub replaces dirty_cat, seems needing torch
+termcolor
+tiktoken
+
+# from Microsoft own distro
+thefuzz
+tabulate
+squarify
+PyWavelets
+prince
+faker
+
+pyusb
diff --git a/requirements_mkl.txt b/requirements_mkl.txt
deleted file mode 100644
index a2a94317..00000000
--- a/requirements_mkl.txt
+++ /dev/null
@@ -1,370 +0,0 @@
-# the essential
-wheel
-pywin32
-
-# compilers
-cython
-pycparser
-cffi
-numba
-maturin
-
-# done in pre-step
-## numpy
-## scipy
-## numexpr
-## mkl_service
-
-# pytorch eco-system
-#Torch
-#torchvision
-#torchaudio
-#botorch
-#fastai
-#dask_ml
-
-#LLM huggingface
-#openai
-#transformers[torch]
-#accelerate
-
-
-# complementary tools
-mypy
-black
-pep8
-twine
-pytest
-coverage
-hypothesis
-pybind11
-flit
-poetry
-virtualenv
-pympler
-
-sqlite_bro
-baresql
-idlex
-
-# scientific
-matplotlib
-sympy
-
-scikit_learn
-scikit_image
-
-SQLAlchemy
-alembic
-
-#statistic
-statsmodels
-pmdarima
-pymc
-
-# to become skrub
-dirty_cat
-
-pandas
-# pandas-datareader
-xarray
-
-#pdf
-pdfrw
-reportlab
-
-#git
-gitdb
-gitpython
-
-# Jupyter
-jupyter
-# jupyterlab, ipython
-papermill
-ipython_sql
-ipympl
-ipyleaflet
-ipycanvas
-#not popular jupyterlab_rise
-
-jedi
-
-# gui
-seaborn
-altair
-plotnine
-plotly
-bokeh
-datashader
-holoviews
-mpld3
-networkx
-bqplot
-imageio
-imageio_ffmpeg
-hvplot
-wordcloud
-panel
-
-
-# gui geographic
-geopandas
-geopy
-pydeck
-# geoviews has no success
-gdal
-
-#solvers
-pycosat
-ecos
-qpsolvers
-cvxpy
-pulp
-
-# Qt5
-
-# QT
-spyder
-pyzo
-pyqtgraph
-qtconsole
-guiqwt
-PythonQwt
-guidata
-formlayout
-folium
-
-# web
-Flask
-Django
-python_dotenv
-uvicorn
-beautifulsoup4
-regex
-lxml
-html5lib
-requests
-datasette
-yarl
-xmltodict
-pystache
-pysocks
-pyjwt
-mako
-
-# parallelize (and replace celery)
-joblib
-dask[complete]
-dask_image
-cloudpickle
-fastparquet
-
-# write & read QRcode
-python-barcode
-qrcode
-opencv-python
-
-# ports
-pyodbc
-pyserial
-# pywinusb to replace per puysb+libusb-package ?
-pywinusb
-
-#rust packages
-duckdb
-polars
-
-# excel
-xlsxwriter
-openpyxl
-
-# connect to other langages
-julia
-pythonnet
-clrmagic
-
-ptpython
-
-# async
-trio
-trio-asyncio
-
-# large lange models
-llm
-llm_gpt4all
-llm_llama_cpp
-llm_markov
-huggingface_hub
-
-imbalanced-learn
-
-
-fastapi
-
-
-# needs recent wheel for altai5
-#great_expectations
-
-datasette_graphql
-sqlite_utils
-db.py
-aiosqlite
-
-
-# compression
-zstandard
-
-#2023-08-22 fuzz replacements
-rapidfuzz
-
-# dashboards
-streamlit
-dash
-
-#popular 2023-08-23
-greenlet
-Markdown
-docopt
-PyOpenGL
-Sphinx
-sphinx_rtd_theme
-rx
-bottleneck
-pystache
-pypandoc
-scikit-optimize
-fuzzywuzzy
-loky
-astropy
-snuggs
-rasterio
-flask-session
-python-multipart
-filterpy
-requests_ntlm
-
-swifter
-emcee
-zarr
-pyflux
-snakeviz
-nbdime
-simplegeneric
-ipydatagrid
-
-simpy
-supersmoother
-mpl_scatter_density
-ppci
-nltk
-simplejson
-sounddevice
-pygame
-moviepy
-altair-transform
-altair_data_server
-pygad
-xgboost
-xlwings
-cvxopt
-mpmath
-#azure
-azure-identity
-azure-cosmos
-azure-core
-sspyrs
-
-# sql - data
-adodbapi
-
-
-sqlparse
-
-mysql_connector_python
-pg8000
-
-pymongo
-redis
-
-#hdf files
-h5py
-tables
-netCDF4
-# not_popular python-hdf4
-
-cytoolz
-
-blosc
-
-brewer2mpl
-
-PyAudio
-
-lmfit
-
-# less popular cartographic
-mercantile
-pyepsg
-
-#preparing parquet
-python_snappy
-brotli
-
-feather_format
-
-jupyter_sphinx
-
-streamz
-
-vega_datasets
-
-
-gmpy2
-
-mlxtend
-
-quantecon
-
-quart
-
-hypercorn
-
-umap-learn
-flask-sqlalchemy
-
-nlopt
-
-httpie
-flask-Mail
-
-lz4
-
-jupyter_bokeh
-
-pydeck
-
-wasmer
-wasmer_compiler_cranelift
-wasmer_compiler_singlepass
-
-nbval
-
-## onnxruntime
-
-pynndescent
-
-quadprog
-
-orjson
-
-jupyter_packaging
-
-deap
-
-tbats
-
-missingno
-
-# for flask
-waitress
-
diff --git a/run_complement_newbuild.bat b/run_complement_newbuild.bat
deleted file mode 100644
index dd079a8c..00000000
--- a/run_complement_newbuild.bat
+++ /dev/null
@@ -1,131 +0,0 @@
-rem first line check
-echo keep me in ansi =utf-8 without BOM (notepad plus plus or win10 screwing up for compatibility)
-
-rem 2021-05-23: use "%PYTHON%" for the executable instead of "%WINPYDIR%\python.exe"
-rem 2022-10-19 patch cpython bug https://github.com/winpython/winpython/issues/1121
-
-rem if build error, launch "WinPython Command Prompt.exe" dos ico, then try manual install of requirements.txt
-rem that is: pip install --pre --no-index --trusted-host=None --find-links=C:\WinP\packages.srcreq -c C:\WinP\constraints.txt -r C:\WinP\bd39\requirements_test.txt Qt5_requirements64.txt Cod_requirements64.txt
-rem python -m pip freeze>C:\WinP\bd39\req_test150.txt between intermediate steps
-rem
-rem ( drag & drop "requirements.txt" file in the dos window a the end of the line, to get full path)
-rem then drag & drop "run_complement_newbuild.bat" file in the dos window and launch it
-
-@echo off
-rem %1 is WINPYDIRBASE being prepared, (names winpydir of python build batch) (like "...bd37\buPyPy\WPy64-37100b2")
-rem this .bat is placed at root (buildir34, buildir34\FlavorJulia, ...)
-set origin=%~dp0
-set new_winpydir=%1
-
-echo new_winpydir= ********%new_winpydir%***********************************************************
-cd /d %new_winpydir%
-
-call scripts\env.bat
-@echo off
-
-rem * ==========================
-echo * When Python has no mingwpy
-rem * ==========================
-if not exist "%WINPYDIR%\Lib\site-packages\mingwpy" set pydistutils_cfg=%WINPYDIR%\..\settings\pydistutils.cfg
-if not exist "%WINPYDIR%\Lib\site-packages\mingwpy" echo [config]>%pydistutils_cfg%
-
-
-
-rem * =================
-echo finish install seaborn iris example
-rem * =================
-if exist "%WINPYDIR%\Lib\site-packages\seaborn" "%PYTHON%" -c "import seaborn as sns;sns.set();sns.load_dataset('iris')"
-
-
-rem ** Active patchs*************************************************************************************************
-
-
-
-rem * ===========================
-rem 2022-10-19 patch cpython bug https://github.com/winpython/winpython/issues/1121
-rem * ===========================
-set qt56p=%WINPYDIR%\Lib\idlelib\macosx.py
-if exist "%qt56p%" (
- "%PYTHON%" -c "from winpython.utils import patch_sourcefile;patch_sourcefile(r'%WINPYDIR%\Lib\idlelib\macosx.py', 'from test.support ', '#stonebig patch cpython/pull/98313/files: from test.support' )"
- echo "DID I patch numba%??"
-) else (
- echo "I DIDN'T patch of numba !"
-)
-
-
-rem ** Example of live file replacement (not active)***********************************************************************************************
-
-rem * ===========================
-echo 2021-04-17 patch jupyter_lsp-1.1.4
-rem see https://github.com/krassowski/jupyterlab-lsp/pull/580/files
-rem * ===========================
-
-rem in DOS, the variable must be set befor the parenthesis block....
-set this_source='%WINPYDIR%\Lib\site-packages\jupyter_lsp\virtual_documents_shadow.py'
-if exist "%WINPYDIR%\Lib\site-packages\jupyter_lsp-1.1.4.dist-info" (
- echo "**%this_source%**"
- "%PYTHON%" -c "from winpython.utils import patch_sourcefile;patch_sourcefile(r%this_source%, 'read_text()', 'read_text(encoding='+chr(39)+'utf-8'+chr(39)+')' )"
- "%PYTHON%" -c "from winpython.utils import patch_sourcefile;patch_sourcefile(r%this_source%, 'join(self.lines))', 'join(self.lines), encoding='+chr(39)+'utf-8'+chr(39)+')' )"
-)
-
-rem * ===========================
-rem 2020-05-15 patch jedi-0.17.0
-rem * ===========================
-
-if exist "%WINPYDIR%\Lib\site-packages\jedi-0.17.0.dist-info" copy/Y "C:\WinP\tempo_fixes\Jedi-0.17.0\api\__init__.py" "%WINPYDIR%\Lib\site-packages\Jedi-0.17.0\api\__init__.py"
-
-rem * =================
-
-
-echo JUPYTERLAB_DIR=%JUPYTERLAB_DIR% default is ~/.jupyter/lab
-echo JUPYTERLAB_SETTINGS_DIR=%JUPYTERLAB_SETTINGS_DIR% , default is ~/.jupyter/lab/user-settings/
-echo JUPYTERLAB_WORKSPACES_DIR=%JUPYTERLAB_WORKSPACES_DIR% , default is ~/.jupyter/lab/workspaces/
-
-"%WINPYDIR%\Scripts\jupyter.exe" lab path
-
-
-rem jupyter labextension update --all (will rebuild if needed)
-rem 2020-12-31 tweaks
-rem see https://jupyter.readthedocs.io/en/latest/use/jupyter-directories.html
-if exist "%WINPYDIR%\Lib\site-packages\jupyterlab" (
-"%WINPYDIR%\Scripts\jupyter.exe" labextension list
-"%WINPYDIR%\Scripts\jupyter.exe" --paths
-)
-
-REM 2023-10-15: 'nbextension' was Jupyter3 days
-rem if exist "%WINPYDIR%\Lib\site-packages\notebook" "%WINPYDIR%\Scripts\jupyter.exe" nbextension list
-
-
-rem * ===================
-echo clear jupyterlab staging (2018-03-09)
-rem * ===================
-if exist "%WINPYDIR%\share\jupyter\lab\staging" rmdir /S /Q "%WINPYDIR%\share\jupyter\lab\staging"
-rem if exist "%WINPYDIR%\Lib\site-packages\jupyterlab" "%WINPYDIR%\Scripts\jupyter.exe" lab clean
-
-
-echo 2019-10-22 Spyder tweaks moved at the end as suspicion of problem creating (on Python-3.8)
-rem * ============================
-echo .spyder3\temp.py suspected of creating issue east of Italia
-echo see https://groups.google.com/forum/#!topic/spyderlib/dH5VXlTc30s
-rem * ============================
-if exist "%WINPYDIR%\..\settings\.spyder-py3\temp.py" del "%WINPYDIR%\..\settings\.spyder-py3\temp.py"
-
-rem * ============================
-rem 2023-02-12: paching pip-23.0.0 pip\_vend_r\rich patch cpython bug https://github.com/pypa/pip/issues/11798
-rem * ============================
-if exist "%WINPYDIR%\Lib\site-packages\pip-23.0.dist-info" (
- echo "coucou Pip-23.0 crashing _vendor/rich"
- copy/Y "C:\WinP\tempo_fixes\pip\_vendor\rich\_win32_console.py" "%WINPYDIR%\site-packages\pip\_vendor\rich\_win32_console.py"
-)
-
-rem * ====================
-echo summary 20202-04-11
-rem * ====================
-pip check
-
-
-@echo on
-goto the_end
-
-
-:the_end
\ No newline at end of file
diff --git a/winpython/__init__.py b/winpython/__init__.py
index 8d20d091..e69de29b 100644
--- a/winpython/__init__.py
+++ b/winpython/__init__.py
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-WinPython License Agreement (MIT License)
------------------------------------------
-
-Copyright (c) 2012-2013 Pierre Raybaut
-Copyright (c) 2014-2024+ The Winpython development team https://github.com/winpython/
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-"""
-
-__version__ = '10.7.20240908'
-__license__ = __doc__
-__project_url__ = 'http://winpython.github.io/'
diff --git a/winpython/__main__.py b/winpython/__main__.py
new file mode 100644
index 00000000..0dd8efd8
--- /dev/null
+++ b/winpython/__main__.py
@@ -0,0 +1,6 @@
+import os
+import sys
+if __name__ == "__main__":
+ from winpython import make
+
+ sys.exit(make.main())
\ No newline at end of file
diff --git a/winpython/associate.py b/winpython/associate.py
deleted file mode 100644
index 8868ea7a..00000000
--- a/winpython/associate.py
+++ /dev/null
@@ -1,430 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright © 2012 Pierre Raybaut
-# Licensed under the terms of the MIT License
-# (see winpython/__init__.py for details)
-
-"""
-Register a Python distribution
-
-Created on Tue Aug 21 21:46:30 2012
-"""
-
-import sys
-import os
-from pathlib import Path
-import platform
-import importlib
-
-# import subprocess
-
-
-# Local imports
-import winreg
-from winpython import utils
-
-KEY_C = r"Software\Classes\%s"
-KEY_C0 = KEY_C % r"Python.%sFile\shell"
-KEY_C1 = KEY_C % r"Python.%sFile\shell\%s"
-KEY_C2 = KEY_C1 + r"\command"
-KEY_DROP0 = KEY_C % r"Python.%sFile\shellex"
-KEY_DROP1 = KEY_C % r"Python.%sFile\shellex\DropHandler"
-KEY_I = KEY_C % r"Python.%sFile\DefaultIcon"
-KEY_D = KEY_C % r"Python.%sFile"
-EWI = "Edit with IDLE"
-EWS = "Edit with Spyder"
-
-KEY_S = r"Software\Python"
-KEY_S0 = KEY_S + r"\WinPython" # was PythonCore before PEP-0514
-KEY_S1 = KEY_S0 + r"\%s"
-
-def _remove_start_menu_folder(target, current=True):
- "remove menu Folder for target WinPython"
- import importlib.util
- win32com_exists = importlib.util.find_spec('win32com') is not None
-
- # we return nothing if no win32com package
- if win32com_exists:
- utils.remove_winpython_start_menu_folder(current=current)
-
-def _get_shortcut_data(target, current=True):
- "get windows menu access, if win32com exists otherwise nothing"
- import importlib.util
- win32com_exists = importlib.util.find_spec('win32com') is not None
-
- # we return nothing if no win32com package
- if not win32com_exists:
- return []
- wpgroup = utils.create_winpython_start_menu_folder(current=current)
- wpdir = str(Path(target).parent)
- data = []
- for name in os.listdir(wpdir):
- bname, ext = Path(name).stem, Path(name).suffix
- if ext == ".exe":
- data.append(
- (
- str(Path(wpdir) / name),
- bname,
- str(Path(wpgroup) / bname),
- )
- )
- return data
-
-
-def register(target, current=True, verbose=True):
- """Register a Python distribution in Windows registry"""
- root = winreg.HKEY_CURRENT_USER if current else winreg.HKEY_LOCAL_MACHINE
-
- # Creating Registry entries
- if verbose:
- print(f'Creating WinPython registry entries for {target}')
- # Extensions
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C % ".py"),
- "",
- 0,
- winreg.REG_SZ,
- "Python.File",
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C % ".pyw"),
- "",
- 0,
- winreg.REG_SZ,
- "Python.NoConFile",
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C % ".pyc"),
- "",
- 0,
- winreg.REG_SZ,
- "Python.CompiledFile",
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C % ".pyo"),
- "",
- 0,
- winreg.REG_SZ,
- "Python.CompiledFile",
- )
-
- # MIME types
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C % ".py"),
- "Content Type",
- 0,
- winreg.REG_SZ,
- "text/plain",
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C % ".pyw"),
- "Content Type",
- 0,
- winreg.REG_SZ,
- "text/plain",
- )
-
- # Verbs
- python = str((Path(target) / "python.exe").resolve())
- pythonw = str((Path(target) / "pythonw.exe").resolve())
- spyder = str((Path(target).parent / "Spyder.exe").resolve())
-
- if not Path(spyder).is_file():
- spyder = f'{pythonw}" "{target}\Scripts\spyder'
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C2 % ("", "open")),
- "",
- 0,
- winreg.REG_SZ,
- '"%s" "%%1" %%*' % python,
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C2 % ("NoCon", "open")),
- "",
- 0,
- winreg.REG_SZ,
- '"%s" "%%1" %%*' % pythonw,
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C2 % ("Compiled", "open")),
- "",
- 0,
- winreg.REG_SZ,
- '"%s" "%%1" %%*' % python,
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C2 % ("", EWI)),
- "",
- 0,
- winreg.REG_SZ,
- '"%s" "%s\Lib\idlelib\idle.pyw" -n -e "%%1"' % (pythonw, target),
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C2 % ("NoCon", EWI)),
- "",
- 0,
- winreg.REG_SZ,
- '"%s" "%s\Lib\idlelib\idle.pyw" -n -e "%%1"' % (pythonw, target),
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C2 % ("", EWS)),
- "",
- 0,
- winreg.REG_SZ,
- '"%s" "%%1"' % spyder,
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_C2 % ("NoCon", EWS)),
- "",
- 0,
- winreg.REG_SZ,
- '"%s" "%%1"' % spyder,
- )
-
- # Drop support
- handler = "{60254CA5-953B-11CF-8C96-00AA00B8708C}"
- for ftype in ("", "NoCon", "Compiled"):
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_DROP1 % ftype),
- "",
- 0,
- winreg.REG_SZ,
- handler,
- )
- # Icons
- dlls = str(Path(target) / "DLLs")
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_I % ""),
- "",
- 0,
- winreg.REG_SZ,
- r"%s\py.ico" % dlls,
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_I % "NoCon"),
- "",
- 0,
- winreg.REG_SZ,
- r"%s\py.ico" % dlls,
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_I % "Compiled"),
- "",
- 0,
- winreg.REG_SZ,
- r"%s\pyc.ico" % dlls,
- )
-
- # Descriptions
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_D % ""),
- "",
- 0,
- winreg.REG_SZ,
- "Python File",
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_D % "NoCon"),
- "",
- 0,
- winreg.REG_SZ,
- "Python File (no console)",
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, KEY_D % "Compiled"),
- "",
- 0,
- winreg.REG_SZ,
- "Compiled Python File",
- )
-
- # PythonCore entries
- python_infos = utils.get_python_infos(target) # ('3.11', 64)
- short_version = python_infos[0] # 3.11 from ('3.11', 64)
- long_version = utils.get_python_long_version(target) # 3.11.5
- key_core = (KEY_S1 % short_version) + r"\%s" # Winpython\3.11
-
- # PEP-0514 additions, with standard Python practice
- SupportUrl="https://winpython.github.io"
- SysArchitecture = platform.architecture()[0] # '64bit'
- SysVersion = '.'.join(platform.python_version_tuple()[:2]) # '3.11'
- Version = platform.python_version() # '3.11.5'
-
- # But keep consistent with past possibilities until more alignement
- SysArchitecture = f'{python_infos[1]}bit' # '64bit'
- SysVersion = short_version
- Version = long_version
-
- DisplayName = f'Python {Version} ({SysArchitecture})'
- key_short = (KEY_S1 % short_version) # WinPython\3.11
- key_keys={'DisplayName':DisplayName,
- 'SupportUrl':SupportUrl,
- 'SysVersion':SysVersion,
- 'SysArchitecture':SysArchitecture,
- 'Version':Version}
-
- regkey = winreg.CreateKey(root, key_short)
- # see https://www.programcreek.com/python/example/106949/winreg.CreateKey
- # winreg.SetValueEx(key, '', reg.REG_SZ, '')
- for k, v in key_keys.items():
- winreg.SetValueEx(
- regkey,
- k,
- 0,
- winreg.REG_SZ,
- v,
- )
- winreg.CloseKey(regkey)
-
- # pep-0514 additions at InstallPathLevel
- ExecutablePath = python
- WindowedExecutablePath = pythonw
-
- key_short = key_core % "InstallPath" # WinPython\3.11\InstallPath
- key_keys={'ExecutablePath':ExecutablePath,
- 'WindowedExecutablePath':WindowedExecutablePath}
-
- regkey = winreg.CreateKey(root, key_core % "InstallPath")
- winreg.SetValueEx(
- regkey,
- "",
- 0,
- winreg.REG_SZ,
- target + '\\',
- )
- for k, v in key_keys.items():
- winreg.SetValueEx(
- regkey,
- k,
- 0,
- winreg.REG_SZ,
- v,
- )
- winreg.CloseKey(regkey)
-
-
-
- winreg.SetValueEx(
- winreg.CreateKey(root, key_core % r"InstallPath\InstallGroup"),
- "",
- 0,
- winreg.REG_SZ,
- "Python %s" % short_version,
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, key_core % "Modules"),
- "",
- 0,
- winreg.REG_SZ,
- "",
- )
- winreg.SetValueEx(
- winreg.CreateKey(root, key_core % "PythonPath"),
- "",
- 0,
- winreg.REG_SZ,
- r"%s\Lib;%s\DLLs" % (target, target),
- )
- winreg.SetValueEx(
- winreg.CreateKey(
- root,
- key_core % r"Help\Main Python Documentation",
- ),
- "",
- 0,
- winreg.REG_SZ,
- r"%s\Doc\python%s.chm" % (target, long_version),
- )
-
- # Create start menu entries for all WinPython launchers
- spec = importlib.util.find_spec('pythoncom')
- if verbose and spec is None:
- print(f"Can't create WinPython menu as pywin32 package is not installed")
- if verbose and spec is not None:
- print(f'Creating WinPython menu for all icons in {target}')
- for path, desc, fname in _get_shortcut_data(target, current=current):
- utils.create_shortcut(path, desc, fname, verbose=verbose)
-
-
-def unregister(target, current=True, verbose=True):
- """Unregister a Python distribution in Windows registry"""
- # Removing Registry entries
- if verbose:
- print(f'Removing WinPython registry entries for {target}')
- root = winreg.HKEY_CURRENT_USER if current else winreg.HKEY_LOCAL_MACHINE
- short_version = utils.get_python_infos(target)[0]
- key_core = (KEY_S1 % short_version) + r"\%s"
- for key in (
- # Drop support
- KEY_DROP1 % "",
- KEY_DROP1 % "NoCon",
- KEY_DROP1 % "Compiled",
- KEY_DROP0 % "",
- KEY_DROP0 % "NoCon",
- KEY_DROP0 % "Compiled",
- # Icons
- KEY_I % "NoCon",
- KEY_I % "Compiled",
- KEY_I % "",
- # Edit with IDLE
- KEY_C2 % ("", EWI),
- KEY_C2 % ("NoCon", EWI),
- KEY_C1 % ("", EWI),
- KEY_C1 % ("NoCon", EWI),
- # Edit with Spyder
- KEY_C2 % ("", EWS),
- KEY_C2 % ("NoCon", EWS),
- KEY_C1 % ("", EWS),
- KEY_C1 % ("NoCon", EWS),
- # Verbs
- KEY_C2 % ("", "open"),
- KEY_C2 % ("NoCon", "open"),
- KEY_C2 % ("Compiled", "open"),
- KEY_C1 % ("", "open"),
- KEY_C1 % ("NoCon", "open"),
- KEY_C1 % ("Compiled", "open"),
- KEY_C0 % "",
- KEY_C0 % "NoCon",
- KEY_C0 % "Compiled",
- # Descriptions
- KEY_D % "NoCon",
- KEY_D % "Compiled",
- KEY_D % "",
- # PythonCore
- key_core % r"InstallPath\InstallGroup",
- key_core % "InstallPath",
- key_core % "Modules",
- key_core % "PythonPath",
- key_core % r"Help\Main Python Documentation",
- key_core % "Help",
- KEY_S1 % short_version,
- KEY_S0,
- KEY_S,
- ):
- try:
- if verbose:
- print(key)
- winreg.DeleteKey(root, key)
- except WindowsError:
- rootkey = "HKEY_CURRENT_USER" if current else "HKEY_LOCAL_MACHINE"
- if verbose:
- print(
- r"Unable to remove %s\%s" % (rootkey, key),
- file=sys.stderr,
- )
- # remove menu shortcuts
- spec = importlib.util.find_spec('pythoncom')
- if verbose and spec is None:
- print(f"Can't remove WinPython menu as pywin32 package is not installed")
- if verbose and spec is not None:
- print(f'Removing WinPython menu for all icons in {target}')
- _remove_start_menu_folder(target, current=current)
-
- #for path, desc, fname in _get_shortcut_data(target, current=current):
- # if Path(fname).exists():
- # os.remove(fname)
-
-
-if __name__ == "__main__":
- register(sys.prefix)
- unregister(sys.prefix)
\ No newline at end of file
diff --git a/winpython/build_winpython.py b/winpython/build_winpython.py
new file mode 100644
index 00000000..940b285a
--- /dev/null
+++ b/winpython/build_winpython.py
@@ -0,0 +1,256 @@
+# build_winpython.py
+import os, sys, argparse, datetime, subprocess, shutil
+import logging
+
+from pathlib import Path
+from filecmp import cmp
+
+LOG_FORMAT = "%(asctime)s %(levelname)s: %(message)s"
+
+def setup_logging(log_file: Path):
+ """Initialize logging to both file and stdout."""
+ logging.basicConfig(
+ level=logging.INFO,
+ format=LOG_FORMAT,
+ handlers=[
+ logging.StreamHandler(sys.stdout),
+ logging.FileHandler(str(log_file), encoding="utf-8", mode='a')
+ ]
+ )
+
+def log_section(message: str):
+ logging.info("\n" + "-"*40)
+ logging.info(message)
+ logging.info("-"*40)
+
+def delete_folder_if_exists(folder: Path, check_flavor: str = ""):
+ check_last = folder.parent.name if not folder.is_dir() else folder.name
+ expected_name = "bu" + check_flavor
+ if folder.exists() and folder.is_dir() and check_last == expected_name:
+ logging.info(f"Removing old backup: {folder}")
+ folder_old = folder.with_suffix('.old')
+ if folder_old.exists():
+ shutil.rmtree(folder_old)
+ folder.rename(folder_old)
+ shutil.rmtree(folder_old)
+
+def run_command(cmd, shell=False, check=True):
+ logging.info(f"[RUNNING] {' '.join(cmd) if isinstance(cmd, list) else cmd}")
+ with subprocess.Popen(
+ cmd, shell=shell, stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT, universal_newlines=True
+ ) as proc:
+ for line in proc.stdout:
+ logging.info(line.rstrip())
+ if check and proc.wait() != 0:
+ raise subprocess.CalledProcessError(proc.returncode, cmd)
+
+def pip_install(python_exe: Path, req_file: str, constraints: str, find_links: str, label: str):
+ if req_file and Path(req_file).exists():
+ cmd = [
+ str(python_exe), "-m", "pip", "install",
+ "-r", req_file, "-c", constraints,
+ "--pre", "--no-index", f"--find-links={find_links}"
+ ]
+ log_section(f"Pip-install {label}")
+ run_command(cmd)
+ else:
+ log_section(f"No {label} specified/skipped")
+
+def patch_winpython(python_exe):
+ cmd = [
+ str(python_exe), "-c",
+ "from wppm import wppm; wppm.Distribution().patch_standard_packages('', to_movable=True)"
+ ]
+ run_command(cmd)
+
+def check_env_bat(winpydirbase: Path):
+ envbat = winpydirbase / "scripts" / "env.bat"
+ if not envbat.exists():
+ raise FileNotFoundError(f"Missing env.bat at {envbat}")
+
+def generate_lockfiles(target_python: Path, winpydirbase: Path, constraints: str, find_links: str, file_postfix: str):
+ pip_req = winpydirbase.parent / "requirement_temp.txt"
+ with subprocess.Popen([str(target_python), "-m", "pip", "freeze"], stdout=subprocess.PIPE) as proc:
+ packages = [l for l in proc.stdout if b"winpython" not in l]
+ pip_req.write_bytes(b"".join(packages))
+ # Lock to web and local (scaffolding)
+ for kind in ("", "local"):
+ out = winpydirbase.parent / f"pylock.{file_postfix}_{kind}.toml"
+ outreq = winpydirbase.parent / f"requir.{file_postfix}_{kind}.txt"
+ cmd = [str(target_python), "-m", "pip", "lock", "--no-deps", "-c", constraints]
+ if kind == "local":
+ cmd += ["--find-links", find_links]
+ cmd += ["-r", str(pip_req), "-o", str(out)]
+ run_command(cmd)
+ # Convert both locks to requirement.txt with hash256
+ cmd = [str(target_python), "-X", "utf8", "-c", f"from wppm import wheelhouse as wh; wh.pylock_to_req(r'{out}', r'{outreq}')"]
+ run_command(cmd)
+ # check equality
+ web, local = "", "local"
+ if not cmp(winpydirbase.parent / f"requir.{file_postfix}_{web}.txt", winpydirbase.parent / f"requir.{file_postfix}_{local}.txt"):
+ print("â ïžâ ïžâ ïžâ ïžâ ïžâ ïž ALARM â ïžâ ïžâ ïžâ ïžâ ïžâ ïždifferences in ", winpydirbase.parent / f"requir.{file_postfix}_{web}.txt", winpydirbase.parent / f"requir.{file_postfix}_{local}.txt")
+ raise os.error
+ else:
+ print ("đđđ match đđđ ok ",winpydirbase.parent / f"requir.{file_postfix}_{web}.txt", winpydirbase.parent / f"requir.{file_postfix}_{local}.txt")
+
+# --- Main Logic ---
+def run_make_py(build_python, winpydirbase, args):
+ from . import make
+ make.make_all(
+ args.release, args.release_level, basedir_wpy=winpydirbase,
+ verbose=True, flavor=args.flavor,
+ source_dirs=args.source_dirs, toolsdirs=args.tools_dirs
+ )
+
+def process_wheelhouse_requirements(target_python: Path, winpydirbase: Path,args: argparse.Namespace,file_postfix: str):
+ """
+ Handle installation and conversion of wheelhouse requirements.
+ """
+ wheelhousereq = Path(args.wheelhousereq)
+ kind = "local"
+ out = winpydirbase.parent / f"pylock.{file_postfix}_wheels{kind}.toml"
+ outreq = winpydirbase.parent / f"requir.{file_postfix}_wheels{kind}.txt"
+ if wheelhousereq.is_file():
+ # Generate pylock from wheelhousereq
+ cmd = [
+ str(target_python), "-m", "pip", "lock", "--no-index", "--trusted-host=None",
+ "--find-links", args.find_links, "-c", args.constraints, "-r", str(wheelhousereq),
+ "-o", str(out)
+ ]
+ run_command(cmd)
+ # Convert pylock to requirements with hash
+ pylock_to_req_cmd = [
+ str(target_python), "-X", "utf8", "-c",
+ f"from wppm import wheelhouse as wh; wh.pylock_to_req(r'{out}', r'{outreq}')"
+ ]
+ run_command(pylock_to_req_cmd, check=False)
+
+ kind = ""
+ outw = winpydirbase.parent / f"pylock.{file_postfix}_wheels{kind}.toml"
+ outreqw = winpydirbase.parent / f"requir.{file_postfix}_wheels{kind}.txt"
+ # Generate web pylock from local frozen hashes
+ web_lock_cmd = [
+ str(target_python), "-m", "pip", "lock", "--no-deps", "--require-hashes",
+ "-r", str(outreq), "-o", str(outw)
+ ]
+ run_command(web_lock_cmd)
+ pylock_to_req_cmd2 = [
+ str(target_python), "-X", "utf8", "-c",
+ f"from wppm import wheelhouse as wh; wh.pylock_to_req(r'{outw}', r'{outreqw}')"
+ ]
+ run_command(pylock_to_req_cmd2, check=False)
+
+ # Use wppm to download local from req made with web hashes
+ wheelhouse = winpydirbase / "wheelhouse" / "included.wheels"
+ wppm_cmd = [
+ str(target_python), "-X", "utf8", "-m", "wppm", str(out), "-ws", args.find_links,
+ "-wd", str(wheelhouse)
+ ]
+ run_command(wppm_cmd, check=False)
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--python-target', required=True, help='Target Python version, e.g. 311')
+ parser.add_argument('--release', default='', help='Release')
+ parser.add_argument('--flavor', default='', help='Build flavor')
+ parser.add_argument('--arch', default='64', help='Architecture')
+ parser.add_argument('--release-level', default='b1', help='Release level (e.g., b1, rc)')
+ parser.add_argument('--winpydirbase', required=True, help='Path to put environment')
+ parser.add_argument('--source_dirs', required=True, help='Path to directory with python zip')
+ parser.add_argument('--tools_dirs', required=True, help='Path to directory with python zip')
+ parser.add_argument('--buildenv', required=True, help='Path to build environment')
+ parser.add_argument('--constraints', default='constraints.txt', help='Constraints file')
+ parser.add_argument('--requirements', help='Main requirements.txt file')
+ parser.add_argument('--find-links', default='wheelhouse', help='Path to local wheelhouse')
+ parser.add_argument('--log-dir', default='WinPython_build_logs', help='Directory for logs')
+ parser.add_argument('--mandatory-req', help='Mandatory requirements file')
+ parser.add_argument('--pre-req', help='Pre requirements file')
+ parser.add_argument('--wheelhousereq', help='Wheelhouse requirements file')
+ parser.add_argument('--create-installer', default='', help='default installer to create')
+ args = parser.parse_args()
+
+ # compute paths (same as Step2)...
+ build_python = Path(args.buildenv) / "python.exe"
+ winpydirbase = Path(args.winpydirbase)
+ target_python = winpydirbase / "python" / "python.exe"
+
+ # Setup paths and logs
+ now = datetime.datetime.now()
+ log_dir = Path(args.log_dir)
+ log_dir.mkdir(exist_ok=True)
+ time_str = now.strftime("%Y-%m-%d_at_%H%M")
+ log_file = log_dir / f"build_{args.python_target}_{args.flavor}_{args.release_level}_{time_str}.txt"
+ setup_logging(log_file)
+
+ # Logs termination and version naming
+ z = Path(winpydirbase).name[(4+len(args.arch)):-len(args.release_level)]
+ tada = f"{z[:1]}_{z[1:3]}_{z[3]}_{args.release}"
+ winpyver2 = tada.replace('_', '.')
+ file_postfix = f"{args.arch}-{tada}{args.flavor}{args.release_level}"
+
+ log_section(f"Preparing build for Python {args.python_target} ({args.arch}-bit)")
+
+ log_section(f"đ Step 1: displace old {Path(winpydirbase)}")
+ delete_folder_if_exists(winpydirbase.parent, check_flavor=args.flavor) #bu{flavor]}
+
+ log_section(f"đ Step 2: make.py Python with {str(build_python)} at ({winpydirbase}")
+ run_make_py(str(build_python), winpydirbase, args)
+
+ check_env_bat(winpydirbase)
+
+ log_section("đ Step 3: install requirements")
+
+ for label, req in [
+ ("Mandatory", args.mandatory_req),
+ ("Pre", args.pre_req),
+ ("Main", args.requirements),
+ ]:
+ pip_install(target_python, req, args.constraints, args.find_links, label)
+
+ log_section("đ Step 4: Patch Winpython")
+ patch_winpython(target_python)
+
+ log_section(f"đ Step 5: install wheelhouse requirements {args.wheelhousereq}")
+ if args.wheelhousereq:
+ process_wheelhouse_requirements(target_python, winpydirbase, args, file_postfix)
+
+ log_section("đ Step 6: install lockfiles")
+ print(target_python, winpydirbase, args.constraints, args.find_links, file_postfix)
+ generate_lockfiles(target_python, winpydirbase, args.constraints, args.find_links, file_postfix)
+
+
+ log_section(f"đ Step 7: generate changelog")
+ mdn = f"WinPython{args.flavor}-{args.arch}bit-{winpyver2}.md"
+ out = f"WinPython{args.flavor}-{args.arch}bit-{winpyver2}_History.md"
+ changelog_dir = log_dir.parent/ "changelogs"
+
+ cmd = ["set", f"WINPYVER2={winpyver2}&", "set", f"WINPYFLAVOR={args.flavor}&",
+ "set", f"WINPYVER={winpyver2}{args.flavor}{args.release_level}&",
+ str(target_python), "-X", "utf8", "-c" ,
+ (
+ "from wppm import wppm;"
+ "result = wppm.Distribution().generate_package_index_markdown();"
+ f"open(r'{winpydirbase.parent / mdn}', 'w', encoding='utf-8').write(result)"
+ )]
+ run_command(cmd, shell=True)
+ shutil.copyfile (winpydirbase.parent / mdn, changelog_dir / mdn)
+
+ cmd = [str(target_python), "-X", "utf8", "-c",
+ (
+ "from wppm import diff;"
+ f"result = diff.compare_package_indexes('{winpyver2}', searchdir=r'{changelog_dir}', flavor=r'{args.flavor}', architecture={args.arch});"
+ f"open(r'{winpydirbase.parent / out}', 'w', encoding='utf-8').write(result)"
+ )]
+ run_command(cmd, check=False)
+ shutil.copyfile (winpydirbase.parent / out, changelog_dir / out)
+
+ if args.create_installer != "":
+ log_section("đ Step 8: Create Installer")
+ stem = f"WinPython{args.arch}-{winpyver2}{args.flavor}{args.release_level}"
+ cmd = [str(target_python), "-c",
+ f"from wppm import utils; utils.command_installer_7zip(r'{winpydirbase}', r'{winpydirbase.parent}', r'{stem}', r'{args.create_installer}')" ]
+ run_command(cmd, check=False)
+
+if __name__ == '__main__':
+ main()
diff --git a/winpython/data/tools.ini b/winpython/data/tools.ini
deleted file mode 100644
index 0f27fc8f..00000000
--- a/winpython/data/tools.ini
+++ /dev/null
@@ -1,47 +0,0 @@
-[gettext]
-description=GNU gettext Win32 porting - the GNU translation tool (useful tools for pygettext, a standard library module)
-url=https://sourceforge.net/projects/gettext
-
-[julia]
-description=The Julia Langage
-url=https://julialang.org/
-
-[mingw32]
-description=C/C++ and Fortran compilers (Mingwpy static toolchain version)
-url=https://github.com/numpy/numpy/wiki/Mingw-static-toolchain
-
-[pandoc]
-description=a universal document converter
-url=https://pandoc.org/
-
-[r]
-description=The R Project for Statistical Computing
-url=https://www.r-project.org
-
-[scite]
-description=SCIntilla based Text Editor - Multilanguage, powerful and light-weight text editor
-url=http://www.scintilla.org/SciTE.html
-
-[tortoisehg]
-description=Set of graphical tools and a shell extension for the Mercurial distributed revision control system
-url=https://tortoisehg.bitbucket.io/
-
-[winmerge]
-description=Open Source differencing and merging tool for Windows
-url=http://winmerge.org
-
-[nodejs]
-description=a JavaScript runtime built on Chrome's V8 JavaScript engine
-url=https://nodejs.org
-
-[npmjs]
-description=a package manager for JavaScript
-url=https://www.npmjs.com/
-
-[yarnpkg]
-description=a package manager for JavaScriptFast, reliable, and secure dependency management
-url=https://yarnpkg.com/lang/en/
-
-[ffmpeg]
-description=a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata
-url=https://ffmpeg.org
diff --git a/winpython/make.py b/winpython/make.py
new file mode 100644
index 00000000..437a8042
--- /dev/null
+++ b/winpython/make.py
@@ -0,0 +1,174 @@
+# -*- coding: utf-8 -*-
+#
+# WinPython build script
+# Copyright © 2012 Pierre Raybaut
+# Copyright © 2014-2025+ The Winpython development team https://github.com/winpython/
+# Licensed under the terms of the MIT License
+# (see wppm/__init__.py for details)
+
+import os
+import re
+import shutil
+from pathlib import Path
+from wppm import wppm, utils
+
+PORTABLE_DIRECTORY = Path(__file__).parent / "portable"
+assert PORTABLE_DIRECTORY.is_dir(), f"Portable directory not found: {PORTABLE_DIRECTORY}"
+
+def copy_items(source_directories: list[Path], target_directory: Path, verbose: bool = False):
+ """Copies items from source directories to the target directory."""
+ target_directory.mkdir(parents=True, exist_ok=True)
+ for source_dir in source_directories:
+ if not source_dir.is_dir():
+ print(f"Warning: Source directory not found: {source_dir}")
+ continue
+ for source_item in source_dir.iterdir():
+ target_item = target_directory / source_item.name
+ copy_function = shutil.copytree if source_item.is_dir() else shutil.copy2
+ try:
+ copy_function(source_item, target_item)
+ if verbose:
+ print(f"Copied: {source_item} -> {target_item}")
+ except Exception as e:
+ print(f"Error copying {source_item} to {target_item}: {e}")
+
+def parse_list_argument(argument_value: str | list[str], separator=" ") -> list[str]:
+ """Parse a separated list argument into a list of strings."""
+ if not argument_value: return []
+ return argument_value.split(separator) if isinstance(argument_value, str) else list(argument_value)
+
+class WinPythonDistributionBuilder:
+ """Builds a WinPython distribution."""
+
+ def __init__(self, build_number: int, release_level: str, basedir_wpy: Path,
+ source_dirs: Path, tools_directories: list[Path] = None,
+ verbose: bool = False, flavor: str = ""):
+ """
+ Initializes the WinPythonDistributionBuilder.
+ Args:
+ build_number: The build number (integer).
+ release_level: The release level (e.g., "beta", "").
+ basedir_wpy: top directory of the build (c:\...\Wpy...)
+ source_dirs: Directory containing wheel files for packages.
+ tools_directories: List of directories containing development tools to include.
+ verbose: Enable verbose output.
+ flavor: WinPython flavor (e.g., "Barebone").
+ """
+ self.build_number = build_number
+ self.release_level = release_level
+ self.winpython_directory = Path(basedir_wpy)
+ self.target_directory = self.winpython_directory.parent
+ self.source_dirs = Path(source_dirs)
+ self.tools_directories = tools_directories or []
+ self.verbose = verbose
+ self.distribution: wppm.Distribution | None = None
+ self.flavor = flavor
+ self.python_zip_file: Path = self._get_python_zip_file()
+ self.python_name = self.python_zip_file.stem
+ self.python_directory_name = "python"
+
+ def _get_python_zip_file(self) -> Path:
+ """Finds the Python .zip file in the wheels directory."""
+ for source_item in self.source_dirs.iterdir():
+ if re.match(r"(pypy3|python-).*\.zip", source_item.name):
+ return source_item
+ raise RuntimeError(f"Could not find Python zip package in {self.source_dirs}")
+
+ @property
+ def winpython_version_name(self) -> str:
+ """Returns the full WinPython version string."""
+ return f"{self.python_full_version}.{self.build_number}{self.flavor}{self.release_level}"
+
+ @property
+ def python_full_version(self) -> str:
+ """Retrieves the Python full version string from the distribution."""
+ return utils.get_python_long_version(self.distribution.target) if self.distribution else "0.0.0"
+
+ def _print_action(self, text: str):
+ """Prints an action message with progress indicator."""
+ utils.print_box(text) if self.verbose else print(f"{text}...", end="", flush=True)
+
+ def _extract_python_archive(self):
+ """Extracts the Python zip archive to create the base Python environment."""
+ self._print_action("Extracting Python archive")
+ utils.extract_archive(self.python_zip_file, self.winpython_directory)
+ # Relocate to /python subfolder if needed (for newer structure) #2024-12-22 to /python
+ expected_python_directory = self.winpython_directory / self.python_directory_name
+ if self.python_directory_name != self.python_name and not expected_python_directory.is_dir():
+ os.rename(self.winpython_directory / self.python_name, expected_python_directory)
+
+ def _copy_essential_files(self):
+ """Copies pre-made objects"""
+ self._print_action("Copying launchers")
+ copy_items([PORTABLE_DIRECTORY / "launchers_final"], self.winpython_directory, self.verbose)
+
+ tools_target_directory = self.winpython_directory / "t"
+ self._print_action(f"Copying tools to {tools_target_directory}")
+ copy_items(self.tools_directories, tools_target_directory, self.verbose)
+
+ def _create_env_config(self):
+ """Creates environment setup"""
+ executable_name = self.distribution.short_exe if self.distribution else "python.exe"
+ config = {
+ "WINPYthon_exe": executable_name,
+ "WINPYthon_subdirectory_name": self.python_directory_name,
+ "WINPYVER": self.winpython_version_name,
+ "WINPYVER2": f"{self.python_full_version}.{self.build_number}",
+ "WINPYFLAVOR": self.flavor,
+ "WINPYARCH": self.distribution.architecture if self.distribution else 64,
+ }
+ env_path = self.winpython_directory / "scripts" / "env.ini"
+ env_path.parent.mkdir(parents=True, exist_ok=True)
+ self._print_action(f"Creating env.ini environment {env_path}")
+ env_path.write_text("\n".join(f"{k}={v}" for k, v in config.items()))
+
+ def build(self):
+ """Make or finalise WinPython distribution in the target directory"""
+ print(f"Building WinPython with Python archive: {self.python_zip_file.name}")
+ self._print_action(f"Creating WinPython {self.winpython_directory} base directory")
+ if self.winpython_directory.is_dir() and len(self.winpython_directory.parts)>=4:
+ shutil.rmtree(self.winpython_directory)
+ # preventive re-Creation of settings directory
+ (self.winpython_directory / "settings" / "AppData" / "Roaming").mkdir(parents=True, exist_ok=True)
+
+ self._extract_python_archive()
+ self.distribution = wppm.Distribution(self.winpython_directory / self.python_directory_name, verbose=self.verbose)
+ self._copy_essential_files()
+ self._create_env_config()
+
+def make_all(build_number: int, release_level: str, basedir_wpy: Path = None,
+ source_dirs: Path = None, toolsdirs: str | list[Path] = None,
+ verbose: bool = False, flavor: str = ""):
+ """
+ Make a WinPython distribution for a given set of parameters:
+ Args:
+ build_number: build number [int]
+ release_level: release level (e.g. 'beta1', '') [str]
+ basedir_wpy: top directory of the build (c:\...\Wpy...)
+ verbose: Enable verbose output (bool).
+ flavor: WinPython flavor (str).
+ source_dirs: the python.zip
+ toolsdirs: Directory with development tools r'D:\WinPython\basedir34\t.Slim'
+ """
+ assert basedir_wpy is not None, "The *winpython_dirname* directory must be specified"
+
+ tools_directories = [Path(d) for d in parse_list_argument(toolsdirs, ",")]
+ utils.print_box(f"Making WinPython at {basedir_wpy}")
+ os.makedirs(basedir_wpy, exist_ok=True)
+
+ builder = WinPythonDistributionBuilder(
+ build_number, release_level, Path(basedir_wpy),
+ verbose=verbose, flavor=flavor,
+ source_dirs=source_dirs, tools_directories=tools_directories)
+ builder.build()
+
+if __name__ == "__main__":
+ make_all(
+ build_number=1,
+ release_level="b3",
+ basedir_wpy=r"D:\WinPython\bd314\budot\WPy64-31401b3",
+ verbose=True,
+ flavor="dot",
+ source_dirs=r"D:\WinPython\bd314\packages.win-amd64",
+ toolsdirs=r"D:\WinPython\bd314\t.Slim",
+ )
diff --git a/winpython/piptree.py b/winpython/piptree.py
deleted file mode 100644
index 20f8340f..00000000
--- a/winpython/piptree.py
+++ /dev/null
@@ -1,297 +0,0 @@
-# -*- coding: utf-8 -*-
-# require python 3.8+ because of importlib.metadata
-import json, sys, re, platform, os, sysconfig
-import re
-from collections import OrderedDict
-from pip._vendor.packaging.markers import Marker
-from importlib.metadata import Distribution , distributions
-from pathlib import Path
-
-import configparser as cp
-
-def normalize(this):
- """apply https://peps.python.org/pep-0503/#normalized-names"""
- return re.sub(r"[-_.]+", "-", this).lower()
-
-def sum_up(this, max_length=144, stop_at=". "):
- """Keep only 1 line of max_length characters at most"""
- sumup = (this + os.linesep).splitlines()[0]
- if len(sumup) > max_length and len(stop_at)>1:
- sumup = (sumup + stop_at ).split(stop_at)[0]
- if len(sumup) > max_length:
- sumup = sumup[:max_length]
- return sumup
-
-
-class pipdata:
- """Wrapper around Distribution.discover() or Distribution.distributions()"""
-
- def __init__(self, Target=None):
-
- # create a distro{} dict of Packages
- # key = normalised package name
- # string_elements = 'name', 'version', 'summary'
- # requires = list of dict with 1 level need downward
- # req_key = package_key requires
- # req_extra = extra branch needed of the package_key ('all' or '')
- # req_version = version needed
- # req_marker = marker of the requirement (if any)
- # on current Python, use from importlib.metadata + Distribution.Discover() for 2x speed-up
- # on other Python, use importlib.metadata + distributions(path=[str(Path(Target).parent /'lib'/'site-packages'),])
- self.distro = {}
- self.raw = {}
- replacements = str.maketrans({" ": "", "[": "", "]": "", "'": "", '"': ""})
- self.environment = {
- "implementation_name": sys.implementation.name,
- "implementation_version": "{0.major}.{0.minor}.{0.micro}".format(
- sys.implementation.version
- ),
- "os_name": os.name,
- "platform_machine": platform.machine(),
- "platform_release": platform.release(),
- "platform_system": platform.system(),
- "platform_version": platform.version(),
- "python_full_version": platform.python_version(),
- "platform_python_implementation": platform.python_implementation(),
- "python_version": ".".join(platform.python_version_tuple()[:2]),
- "sys_platform": sys.platform,
- }
-
- if Target == None:
- Target = sys.executable
-
- if sys.executable==Target:
- # self-Distro inspection case (use all packages reachable per sys.path I presume )
- pip_json_installed=Distribution.discover()
- else:
- # not self-Distro inspection case , look at site-packages only)
- pip_json_installed=distributions(path=[str(Path(Target).parent /'lib'/'site-packages'),])
- for p in pip_json_installed:
- meta = p.metadata
- name = p.metadata['Name'] # p.name is not ok in 3.8
- version = p.version
- key = normalize(name)
- requires = []
- provides = {'':None}
- provided = {'':None}
- self.raw[key] = meta
- if p.requires:
- for i in p.requires:
- det = (i + ";").split(";")
-
- # req_nameextra is "python-jose[cryptography]"
- # from fastapi "python-jose[cryptography]<4.0.0,>=3.3.0
- # req_nameextra is "google-cloud-storage"
- # from "google-cloud-storage (<2.0.0,>=1.26.0)
- req_nameextra = re.split(" |;|==|!|>|<", det[0] + ";")[0]
- req_nameextra = normalize(req_nameextra)
- req_key = normalize((req_nameextra + "[").split("[")[0])
- req_key_extra = req_nameextra[len(req_key) + 1 :].split("]")[0]
- req_version = det[0][len(req_nameextra) :].translate(replacements)
- req_marker = det[1]
- if 'extra == ' in req_marker:
- remove_list = {ord("'"):None, ord('"'):None}
- provides[req_marker.split('extra == ')[1].translate(remove_list)] = None
- req_add = {
- "req_key": req_key,
- "req_version": req_version,
- "req_extra": req_key_extra,
- }
- # add the marker of the requirement, if not nothing:
- if not req_marker == "":
- req_add["req_marker"] = req_marker
- requires += [req_add]
- self.distro[key] = {
- "name": name,
- "version": p.version,
- "summary": meta["Summary"] if "Summary" in meta else "",
- "requires_dist": requires,
- "wanted_per": [],
- "description": meta["Description"] if "Description" in meta else "",
- "provides": provides, # extras of the package: 'array' for dask because dask['array'] defines some extra
- "provided": provided, # extras from other package: 'test' for pytest because dask['test'] wants pytest
- }
-
- # On a second pass, complement distro in reverse mode with 'wanted-per':
- # - get all downward links in 'requires_dist' of each package
- # - feed the required packages 'wanted_per' as a reverse dict of dict
- # contains =
- # req_key = upstream package_key
- # req_version = downstream package version wanted
- # req_marker = marker of the downstream package requirement (if any)
-
- for p in self.distro:
- for r in self.distro[p]["requires_dist"]:
- if r["req_key"] in self.distro:
- want_add = {
- "req_key": p, # p is a string
- "req_version": r["req_version"],
- "req_extra": r["req_extra"],
- } # req_key_extra
-
- # provided = extras in upper packages that triggers the need for this package,
- # like 'pandas[test]->Pytest', so 'test' in distro['pytest']['provided']['test']
- # corner-cases: 'dask[dataframe]' -> dask[array]'
- # 'dask-image ->dask[array]
-
- if "req_marker" in r:
- want_add["req_marker"] = r["req_marker"] # req_key_extra
- if 'extra == ' in r["req_marker"]:
- remove_list = {ord("'"):None, ord('"'):None}
- self.distro[r["req_key"]]["provided"][r["req_marker"].split('extra == ')[1].translate(remove_list)] = None
- self.distro[r["req_key"]]["wanted_per"] += [want_add]
-
- def _downraw(self, pp, extra="", version_req="", depth=20, path=[], verbose=False):
- """build a nested list of needed packages with given extra and depth"""
- envi = {"extra": extra, **self.environment}
- p = normalize(pp)
-
- # several extras request management: example dask[array,diagnostics]
- extras = extra.split(",")
-
- ret_all = []
- if p+"["+extra+"]" in path: # for dask[complete]->dask[array,test,..]
- print("cycle!", "->".join(path + [p+"["+extra+"]"]))
- elif p in self.distro and len(path) <= depth:
- for extra in extras: # several extras request management
- envi = {"extra": extra, **self.environment}
- summary = f' {self.distro[p]["summary"]}' if verbose else ''
- if extra == "":
- ret = [f'{p}=={self.distro[p]["version"]} {version_req}{summary}']
- else:
- ret = [f'{p}[{extra}]=={self.distro[p]["version"]} {version_req}{summary}']
- for r in self.distro[p]["requires_dist"]:
- if r["req_key"] in self.distro:
- if "req_marker" not in r or Marker(r["req_marker"]).evaluate(
- environment=envi
- ):
- ret += self._downraw(
- r["req_key"],
- r["req_extra"],
- r["req_version"],
- depth,
- path + [p+"["+extra+"]"],
- verbose=verbose,
- )
- ret_all += [ret]
- return ret_all
-
- def _upraw(self, pp, extra="", version_req="", depth=20, path=[], verbose=False):
- """build a nested list of user packages with given extra and depth
- from direct dependancies like dask-image <--dask['array']
- or indirect like Pytest['test'] <-- pandas['test']"""
-
- remove_list = {ord("'"):None, ord('"'):None} # to clean-up req_extra
- envi = {"extra": extra, **self.environment}
- p = normalize(pp)
- pe = normalize(f'{pp}[{extra}]')
- ret_all = []
- if pe in path:
- print("cycle!", "->".join(path + [pe]))
- elif p in self.distro and len(path) <= depth:
- summary = f' {self.distro[p]["summary"]}' if verbose else ''
- if extra == "":
- ret_all = [f'{p}=={self.distro[p]["version"]} {version_req}{summary}']
- elif extra in set(self.distro[p]["provided"]).union(set(self.distro[p]["provides"])): # so that -r pytest[test] gives
- ret_all = [f'{p}[{extra}]=={self.distro[p]["version"]} {version_req}{summary}']
- else:
- return []
- ret = []
- for r in self.distro[p]["wanted_per"]:
- up_req = (r["req_marker"].split('extra == ')+[""])[1].translate(remove_list) if "req_marker" in r else ""
- if r["req_key"] in self.distro and r["req_key"]+"["+up_req+"]" not in path: # avoids circular links on dask[array]
- # 2024-06-30 example of langchain <- numpy. pip.distro['numpy']['wanted_per'] has:
- # {'req_key': 'langchain', 'req_version': '(>=1,<2)', 'req_extra': '', 'req_marker': ' python_version < "3.12"'},
- # {'req_key': 'langchain', 'req_version': '(>=1.26.0,<2.0.0)', 'req_extra': '', 'req_marker': ' python_version >= "3.12"'}
- # must be no extra dependancy, optionnal extra in the package, or provided extra per upper packages
- if ("req_marker" not in r and extra =="") or (extra !="" and extra==up_req and r["req_key"]!=p) or (extra !="" and "req_marker" in r and extra+',' in r["req_extra"]+',' #bingo1346 contourpy[test-no-images]
- or "req_marker" in r and extra+',' in r["req_extra"]+',' and Marker(r["req_marker"]).evaluate(environment=envi)
- ):
- ret += self._upraw(
- r["req_key"],
- up_req, # pydask[array] going upwards will look for pydask[dataframe]
- f"[requires: {p}"
- + (
- "[" + r["req_extra"] + "]"
- if r["req_extra"] != ""
- else ""
- )
- + f'{r["req_version"]}]',
- depth,
- path + [pe],
- verbose=verbose,
- )
- if not ret == []:
- ret_all += [ret]
- return ret_all
-
- def down(self, pp="", extra="", depth=99, indent=5, version_req="", verbose=False):
- """print the downward requirements for the package or all packages"""
- if not pp == ".":
- if not extra == ".":
- if pp in self.distro:
- extras = [s for s in extra.split(',') if s in sorted(self.distro[pp]["provides"])]
- if extras == []: return ''
- rawtext = json.dumps(
- self._downraw(pp, extra, version_req, depth, verbose=verbose), indent=indent
- )
- lines = [l for l in rawtext.split("\n") if len(l.strip()) > 2]
- return ("\n".join(lines).replace('"', ""))
- else:
- if pp in self.distro:
- r = []
- for one_extra in sorted(self.distro[pp]["provides"]):
- s = self.down(pp, one_extra, depth, indent, version_req, verbose=verbose)
- if s != '': r += [s]
- #print(r)
- return '\n'.join([i for i in r if i!= ''])
- else:
- r = []
- for one_pp in sorted(self.distro):
- s = self.down(one_pp, extra, depth, indent, version_req, verbose=verbose)
- if s != '': r += [s]
- return '\n'.join([i for i in r if i!= ''])
-
- def up(self, pp, extra="", depth=99, indent=5, version_req="", verbose=False):
- """print the upward needs for the package"""
- r = []
- if not pp == ".":
- if not extra == ".":
- s = self._upraw(pp, extra, version_req, depth, verbose=verbose)
- if s == []: return ''
- rawtext = json.dumps(self._upraw(pp, extra, version_req, depth, verbose=verbose), indent=indent)
- lines = [l for l in rawtext.split("\n") if len(l.strip()) > 2]
- return ("\n".join(i for i in lines if i!= '').replace('"', "") )
- else:
- if pp in self.distro:
- r = []
- for one_extra in sorted(set(self.distro[pp]["provided"]).union(set(self.distro[pp]["provides"]))): #direct and from-upward tags
- s = self.up(pp, one_extra, depth, indent, version_req, verbose=verbose)
- if s != '': r += [s]
- return '\n'.join([i for i in r if i!= ''])
- else:
- for one_pp in sorted(self.distro):
- s = self.up(one_pp, extra, depth, indent, version_req, verbose=verbose)
- if s != []: r += [s]
- if r !=[]:
- return '\n'.join([i for i in r if i!= ''])
- else:
- return
-
- def description(self, pp):
- "return description of the package"
- if pp in self.distro:
- return print("\n".join(self.distro[pp]["description"].split(r"\n")))
-
- def summary(self, pp):
- "return summary of the package"
- if pp in self.distro:
- return self.distro[pp]["summary"]
-
- def pip_list(self, full=False, max_length=144):
- """do like pip list"""
- if full:
- return [(p, self.distro[p]["version"], sum_up(self.distro[p]["summary"]), max_length) for p in sorted(self.distro)]
- else:
- return [(p, sum_up(self.distro[p]["version"], max_length)) for p in sorted(self.distro)]
-
diff --git a/winpython/portable/launchers_building/build_my_launchers.bat b/winpython/portable/launchers_building/build_my_launchers.bat
new file mode 100644
index 00000000..2585eb5c
--- /dev/null
+++ b/winpython/portable/launchers_building/build_my_launchers.bat
@@ -0,0 +1,37 @@
+rem build launchers in WINDOWS and CONSOLE version
+rem tweaked from @datalab-winpython provided code in \launchers_src
+rem @datalab-winpython licence is in \launchers_src\LICENCE
+@echo off
+
+set VCVARS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
+
+rem pick the right ones and rename them in launchers_final
+set do_launcher=%~dp0launchers_src\build_one_launcher.bat
+set do_launcher_original=%~dp0launchers_src_original\build_one_launcher.bat
+
+
+echo displace this pause if you want to re-build more
+pause
+rem exit
+
+
+:: WINDOWS launchers with Drag & Drop
+call %do_launcher% "python.ico" "winidle.bat" "IDLE (Python GUI)" WINDOWS proposed
+call %do_launcher% "spyder.ico" "winspyder.bat" "Spyder" WINDOWS proposed
+
+:: CONSOLE launchers with Drag & Drop
+call %do_launcher% "jupyter.ico" "winipython_notebook.bat" "Jupyter Notebook" CONSOLE proposed
+call %do_launcher% "jupyter.ico" "winjupyter_lab.bat" "Jupyter Lab" CONSOLE proposed
+call %do_launcher% "winpython.ico" "wpcp.bat" "WinPython Control Panel" CONSOLE proposed
+
+:: WINDOWS launchers with no Drag & Drop
+call %do_launcher_original% "powershell.ico" "cmd_ps.bat" "WinPython Powershell Prompt" WINDOWS proposed
+call %do_launcher_original% "spyder_reset.ico" "spyder_reset.bat" "Spyder reset" WINDOWS proposed
+call %do_launcher_original% "code.ico" "winvscode.bat" "VS Code" WINDOWS proposed
+
+:: CONSOLE launchers with no Drag & Drop
+call %do_launcher_original% "cmd.ico" "cmd.bat" "WinPython Command Prompt" CONSOLE proposed
+call %do_launcher_original% "python.ico" "winpython.bat" "WinPython Interpreter" CONSOLE proposed
+
+pause
+
diff --git a/portable/icons/cmd.ico b/winpython/portable/launchers_building/icons/cmd.ico
similarity index 100%
rename from portable/icons/cmd.ico
rename to winpython/portable/launchers_building/icons/cmd.ico
diff --git a/portable/icons/code.ico b/winpython/portable/launchers_building/icons/code.ico
similarity index 100%
rename from portable/icons/code.ico
rename to winpython/portable/launchers_building/icons/code.ico
diff --git a/portable/icons/ijulia.ico b/winpython/portable/launchers_building/icons/ijulia.ico
similarity index 100%
rename from portable/icons/ijulia.ico
rename to winpython/portable/launchers_building/icons/ijulia.ico
diff --git a/portable/icons/install.ico b/winpython/portable/launchers_building/icons/install.ico
similarity index 100%
rename from portable/icons/install.ico
rename to winpython/portable/launchers_building/icons/install.ico
diff --git a/portable/icons/ipython.ico b/winpython/portable/launchers_building/icons/ipython.ico
similarity index 100%
rename from portable/icons/ipython.ico
rename to winpython/portable/launchers_building/icons/ipython.ico
diff --git a/portable/icons/julia.ico b/winpython/portable/launchers_building/icons/julia.ico
similarity index 100%
rename from portable/icons/julia.ico
rename to winpython/portable/launchers_building/icons/julia.ico
diff --git a/portable/icons/jupyter.ico b/winpython/portable/launchers_building/icons/jupyter.ico
similarity index 100%
rename from portable/icons/jupyter.ico
rename to winpython/portable/launchers_building/icons/jupyter.ico
diff --git a/winpython/portable/launchers_building/icons/powershell.ico b/winpython/portable/launchers_building/icons/powershell.ico
new file mode 100644
index 00000000..ad1e1489
Binary files /dev/null and b/winpython/portable/launchers_building/icons/powershell.ico differ
diff --git a/portable/icons/python.ico b/winpython/portable/launchers_building/icons/python.ico
similarity index 100%
rename from portable/icons/python.ico
rename to winpython/portable/launchers_building/icons/python.ico
diff --git a/winpython/portable/launchers_building/icons/spyder.ico b/winpython/portable/launchers_building/icons/spyder.ico
new file mode 100644
index 00000000..8b051eab
Binary files /dev/null and b/winpython/portable/launchers_building/icons/spyder.ico differ
diff --git a/winpython/portable/launchers_building/icons/spyder_reset.ico b/winpython/portable/launchers_building/icons/spyder_reset.ico
new file mode 100644
index 00000000..61edabdc
Binary files /dev/null and b/winpython/portable/launchers_building/icons/spyder_reset.ico differ
diff --git a/portable/icons/terminal.ico b/winpython/portable/launchers_building/icons/terminal.ico
similarity index 100%
rename from portable/icons/terminal.ico
rename to winpython/portable/launchers_building/icons/terminal.ico
diff --git a/portable/icons/uninstall.ico b/winpython/portable/launchers_building/icons/uninstall.ico
similarity index 100%
rename from portable/icons/uninstall.ico
rename to winpython/portable/launchers_building/icons/uninstall.ico
diff --git a/winpython/portable/launchers_building/icons/winpython.ico b/winpython/portable/launchers_building/icons/winpython.ico
new file mode 100644
index 00000000..3b8d6a69
Binary files /dev/null and b/winpython/portable/launchers_building/icons/winpython.ico differ
diff --git a/portable/images/banner.bmp b/winpython/portable/launchers_building/images/banner.bmp
similarity index 100%
rename from portable/images/banner.bmp
rename to winpython/portable/launchers_building/images/banner.bmp
diff --git a/portable/images/banner.pdn b/winpython/portable/launchers_building/images/banner.pdn
similarity index 100%
rename from portable/images/banner.pdn
rename to winpython/portable/launchers_building/images/banner.pdn
diff --git a/portable/images/installer_logo.bmp b/winpython/portable/launchers_building/images/installer_logo.bmp
similarity index 100%
rename from portable/images/installer_logo.bmp
rename to winpython/portable/launchers_building/images/installer_logo.bmp
diff --git a/portable/images/splash.bmp b/winpython/portable/launchers_building/images/splash.bmp
similarity index 100%
rename from portable/images/splash.bmp
rename to winpython/portable/launchers_building/images/splash.bmp
diff --git a/portable/images/splash.pdn b/winpython/portable/launchers_building/images/splash.pdn
similarity index 100%
rename from portable/images/splash.pdn
rename to winpython/portable/launchers_building/images/splash.pdn
diff --git a/portable/images/win.bmp b/winpython/portable/launchers_building/images/win.bmp
similarity index 100%
rename from portable/images/win.bmp
rename to winpython/portable/launchers_building/images/win.bmp
diff --git a/portable/images/win.pdn b/winpython/portable/launchers_building/images/win.pdn
similarity index 100%
rename from portable/images/win.pdn
rename to winpython/portable/launchers_building/images/win.pdn
diff --git a/portable/images/winpython_title.svg b/winpython/portable/launchers_building/images/winpython_title.svg
similarity index 100%
rename from portable/images/winpython_title.svg
rename to winpython/portable/launchers_building/images/winpython_title.svg
diff --git a/portable/images/winpython_title_portrait.svg b/winpython/portable/launchers_building/images/winpython_title_portrait.svg
similarity index 100%
rename from portable/images/winpython_title_portrait.svg
rename to winpython/portable/launchers_building/images/winpython_title_portrait.svg
diff --git a/winpython/portable/launchers_building/launchers_final_original/IDLE (Python GUI).exe b/winpython/portable/launchers_building/launchers_final_original/IDLE (Python GUI).exe
new file mode 100644
index 00000000..c1e0c9dc
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/IDLE (Python GUI).exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_original/Jupyter Lab.exe b/winpython/portable/launchers_building/launchers_final_original/Jupyter Lab.exe
new file mode 100644
index 00000000..98bb8bde
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/Jupyter Lab.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_original/Jupyter Notebook.exe b/winpython/portable/launchers_building/launchers_final_original/Jupyter Notebook.exe
new file mode 100644
index 00000000..5d59af59
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/Jupyter Notebook.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_original/Spyder reset.exe b/winpython/portable/launchers_building/launchers_final_original/Spyder reset.exe
new file mode 100644
index 00000000..21250f98
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/Spyder reset.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_original/Spyder.exe b/winpython/portable/launchers_building/launchers_final_original/Spyder.exe
new file mode 100644
index 00000000..43874aa7
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/Spyder.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_original/VS Code.exe b/winpython/portable/launchers_building/launchers_final_original/VS Code.exe
new file mode 100644
index 00000000..225decb4
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/VS Code.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_original/WinPython Command Prompt.exe b/winpython/portable/launchers_building/launchers_final_original/WinPython Command Prompt.exe
new file mode 100644
index 00000000..e4e824c5
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/WinPython Command Prompt.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_original/WinPython Control Panel.exe b/winpython/portable/launchers_building/launchers_final_original/WinPython Control Panel.exe
new file mode 100644
index 00000000..5795bf9c
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/WinPython Control Panel.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_original/WinPython Interpreter.exe b/winpython/portable/launchers_building/launchers_final_original/WinPython Interpreter.exe
new file mode 100644
index 00000000..dfa43135
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/WinPython Interpreter.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_original/WinPython Powershell Prompt.exe b/winpython/portable/launchers_building/launchers_final_original/WinPython Powershell Prompt.exe
new file mode 100644
index 00000000..d4512f32
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_original/WinPython Powershell Prompt.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/IDLE (Python GUI).exe b/winpython/portable/launchers_building/launchers_final_proposed/IDLE (Python GUI).exe
new file mode 100644
index 00000000..65523199
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/IDLE (Python GUI).exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/IDLE (Python GUI)_2025-05-09_not_ok.exe b/winpython/portable/launchers_building/launchers_final_proposed/IDLE (Python GUI)_2025-05-09_not_ok.exe
new file mode 100644
index 00000000..01eed2ce
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/IDLE (Python GUI)_2025-05-09_not_ok.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/IDLE (Python GUI)_20250401.exe b/winpython/portable/launchers_building/launchers_final_proposed/IDLE (Python GUI)_20250401.exe
new file mode 100644
index 00000000..c1e0c9dc
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/IDLE (Python GUI)_20250401.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/Jupyter Lab.exe b/winpython/portable/launchers_building/launchers_final_proposed/Jupyter Lab.exe
new file mode 100644
index 00000000..93003fcb
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/Jupyter Lab.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/Jupyter Notebook.exe b/winpython/portable/launchers_building/launchers_final_proposed/Jupyter Notebook.exe
new file mode 100644
index 00000000..28fdbea3
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/Jupyter Notebook.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/Spyder reset.exe b/winpython/portable/launchers_building/launchers_final_proposed/Spyder reset.exe
new file mode 100644
index 00000000..0baf4ab3
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/Spyder reset.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/Spyder.exe b/winpython/portable/launchers_building/launchers_final_proposed/Spyder.exe
new file mode 100644
index 00000000..93b1a050
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/Spyder.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/Spyder_2025-05-08_no_drag_and_drop.exe b/winpython/portable/launchers_building/launchers_final_proposed/Spyder_2025-05-08_no_drag_and_drop.exe
new file mode 100644
index 00000000..f3729201
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/Spyder_2025-05-08_no_drag_and_drop.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/VS Code.exe b/winpython/portable/launchers_building/launchers_final_proposed/VS Code.exe
new file mode 100644
index 00000000..731f5f52
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/VS Code.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/WinPython Command Prompt.exe b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Command Prompt.exe
new file mode 100644
index 00000000..6f1b6bd6
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Command Prompt.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/WinPython Control Panel.exe b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Control Panel.exe
new file mode 100644
index 00000000..72a57a67
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Control Panel.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/WinPython Control Panel_2025-05-09.exe b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Control Panel_2025-05-09.exe
new file mode 100644
index 00000000..664ff576
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Control Panel_2025-05-09.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/WinPython Interpreter.exe b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Interpreter.exe
new file mode 100644
index 00000000..e0cdbe77
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Interpreter.exe differ
diff --git a/winpython/portable/launchers_building/launchers_final_proposed/WinPython Powershell Prompt.exe b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Powershell Prompt.exe
new file mode 100644
index 00000000..c6bda2eb
Binary files /dev/null and b/winpython/portable/launchers_building/launchers_final_proposed/WinPython Powershell Prompt.exe differ
diff --git a/portable/license.txt b/winpython/portable/launchers_building/launchers_final_proposed/license.txt
similarity index 97%
rename from portable/license.txt
rename to winpython/portable/launchers_building/launchers_final_proposed/license.txt
index 75f3c134..da461f3b 100644
--- a/portable/license.txt
+++ b/winpython/portable/launchers_building/launchers_final_proposed/license.txt
@@ -1,37 +1,37 @@
-Note
-----
-
-WinPython components are distributed as they were received from
-their copyright holder, under their own copyright and/or license,
-and without any linking with each other.
-
-WinPython software collection (i.e. the collection of software,
-libraries and documents) is licensed under the terms of the
-following license agreement.
-
-
-WinPython License Agreement (MIT License)
------------------------------------------
-
-Copyright (c) 2012 Pierre Raybaut, 2016+ WinPython team
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+Note
+----
+
+WinPython components are distributed as they were received from
+their copyright holder, under their own copyright and/or license,
+and without any linking with each other.
+
+WinPython software collection (i.e. the collection of software,
+libraries and documents) is licensed under the terms of the
+following license agreement.
+
+
+WinPython License Agreement (MIT License)
+-----------------------------------------
+
+Copyright (c) 2012 Pierre Raybaut, 2016+ WinPython team
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/winpython/portable/launchers_building/launchers_src/LICENSE b/winpython/portable/launchers_building/launchers_src/LICENSE
new file mode 100644
index 00000000..b3fb976c
--- /dev/null
+++ b/winpython/portable/launchers_building/launchers_src/LICENSE
@@ -0,0 +1,63 @@
+DataLab-WinPython license terms
+===============================
+
+DataLab-WinPython is a Python distribution for Windows:
+- Based on WinPython, a portable distribution of Python for Windows (see section I. below).
+- Including DataLab, an open-source platform for signal and image processing (see section II. below).
+
+I. - WinPython License Agreement (MIT License)
+----------------------------------------------
+
+Copyright (c) 2012 Pierre Raybaut, 2016+ WinPython team
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+II. - DataLab License Agreement (BSD 3-Clause License)
+------------------------------------------------------
+
+Copyright (c) 2023, DataLab Platform Developers.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/winpython/portable/launchers_building/launchers_src/build_one_launcher.bat b/winpython/portable/launchers_building/launchers_src/build_one_launcher.bat
new file mode 100644
index 00000000..c48374c4
--- /dev/null
+++ b/winpython/portable/launchers_building/launchers_src/build_one_launcher.bat
@@ -0,0 +1,108 @@
+@echo on
+set icon_name=%1
+set LAUNCH_TARGET=%2
+set launcher_name=%3
+set subsystem=%4
+set destination=%5
+
+set icon_name=%icon_name:"=%
+set LAUNCH_TARGET=%LAUNCH_TARGET:"=%
+set launcher_name=%launcher_name:"=%
+set subsystem=%subsystem:"=%
+
+set ROOT_PATH=%~dp0..\
+set SCRIPT_PATH=%~dp0
+set TEMPO_PATH=%ROOT_PATH%launchers_temp
+set OUTPUT_DIR=%ROOT_PATH%launchers_%destination%
+
+set "ICON_FILE=%ROOT_PATH%icons\%icon_name%"
+set LAUNCHER_EXE=%OUTPUT_DIR%\%launcher_name%.exe
+
+
+:: Paths to template WINDOWS or CONSOLE
+set SOURCE_FILE=%SCRIPT_PATH%launcher_template_%subsystem%.cpp
+echo SOURCE_FILE=%SOURCE_FILE%
+
+set "RESOURCE_FILE=%TEMPO_PATH%\%icon_name%.rc"
+set "RESOURCE_OBJ=%TEMPO_PATH%\%icon_name%.res"
+
+
+:: create pDirectory if needed
+if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
+if not exist "%TEMPO_PATH%" mkdir "%TEMPO_PATH%"
+
+cd/d %TEMPO_PATH%
+
+:: Check if MSVC environment is already initialized
+if not defined VSINSTALLDIR (
+ echo Initializing MSVC environment...
+ call %VCVARS_PATH%
+ if errorlevel 1 (
+ echo [ERROR] Failed to initialize MSVC environment.
+ exit /b 1
+ )
+)
+
+@echo on
+
+:: Walk through .bat files in the current directory
+ echo Processing %icon_name%..
+ :: Stonebig: Remove previous .exe file
+ echo launcher_exe_action del /q "%LAUNCHER_EXE%"
+ if exist "%LAUNCHER_EXE%" (
+ move "%LAUNCHER_EXE%" "%LAUNCHER_EXE%.old.exe"
+ del /q "%LAUNCHER_EXE%.old.exe"
+ )
+ :: Stonebig: Remove intermediate .res and.rc file
+ if exist "%RESOURCE_OBJ%" (
+ move "%RESOURCE_OBJ%" "%RESOURCE_OBJ%.old.exe"
+ del /q "%RESOURCE_OBJ%.old.exe"
+ )
+ if exist "%RESOURCE_FILE%" (
+ move "%RESOURCE_FILE%" "%RESOURCE_FILE%.old.exe"
+ del /q "%RESOURCE_FILE%.old.exe"
+ )
+ :: Remove intermediate .obj file
+ del /q "launcher_template_%subsystem%.obj"
+
+ :: Check if the icon exists
+ if exist "%ICON_FILE%" (
+ echo Icon found: "%ICON_FILE%"
+ ) else (
+ echo No icon found for "%ICON_FILE%" stoping
+ pause
+ exit
+ )
+
+
+ :: Create resource file
+ echo Creating resource file...
+ > "%RESOURCE_FILE%" echo IDI_ICON1 ICON "%ICON_FILE%"
+ :: Compile resource
+ echo Compiling resource...
+ rc /fo "%RESOURCE_OBJ%" "%RESOURCE_FILE%"
+
+ :: Compile the launcher executable
+ echo Compiling launcher executable...
+ cl /EHsc /O2 /DUNICODE /W4 "%SOURCE_FILE%" "%RESOURCE_OBJ%" ^
+ /Fe"%LAUNCHER_EXE%%" ^
+ /DLAUNCH_TARGET=\"%LAUNCH_TARGET%\" ^
+ User32.lib ^
+ /link /SUBSYSTEM:%subsystem%
+
+
+ if errorlevel 1 (
+ echo [ERROR] Failed to build launcher for %LAUNCH_TARGET%
+ exit /b 1
+ )
+
+ if exist "%LAUNCHER_EXE%" (
+ echo [SUCCESS] Launcher created: "%LAUNCHER_EXE%""
+ ) else (
+ echo [ERROR] Failed to build launcher "%LAUNCHER_EXE%" from "%icon_name%" to call "%LAUNCH_TARGET%"
+ exit /b 1
+ )
+
+echo All launchers processed.
+rem exit /b 0
+
diff --git a/winpython/portable/launchers_building/launchers_src/launcher_template_CONSOLE.cpp b/winpython/portable/launchers_building/launchers_src/launcher_template_CONSOLE.cpp
new file mode 100644
index 00000000..1008d7f0
--- /dev/null
+++ b/winpython/portable/launchers_building/launchers_src/launcher_template_CONSOLE.cpp
@@ -0,0 +1,100 @@
+/*
+DataLab-WinPython launcher script
+---------------------------------
+
+Licensed under the terms of the BSD 3-Clause
+(see ./LICENSE for details)
+
+*/
+
+#include
+#include
+
+int main() {
+ // Get the path to the current executable
+ wchar_t exePath[MAX_PATH];
+ GetModuleFileNameW(NULL, exePath, MAX_PATH);
+
+ // Determine the directory of the executable
+ std::wstring exeDir = exePath;
+ exeDir = exeDir.substr(0, exeDir.find_last_of(L"\\/"));
+
+ // Get command line string and extract arguments
+ LPWSTR commandLine = GetCommandLineW();
+ std::wstring args;
+ // If executable path is double quoted, skip the entire quoted section
+ if (commandLine[0] == L'"') {
+ LPWSTR closingQuote = wcschr(commandLine + 1, L'"');
+ if (closingQuote) {
+ args = closingQuote + 1;
+ }
+ // For non-quoted path, skip to character after first space if it exists
+ } else {
+ LPWSTR spacePos = wcschr(commandLine, L' ');
+ if (spacePos) {
+ args = spacePos + 1;
+ }
+ }
+ // Strip leading whitespace
+ size_t args_start = args.find_first_not_of(L' ');
+ args = (args_start != std::wstring::npos) ? args.substr(args_start) : L"";
+
+ // Define the path to the "scripts" directory
+ std::wstring scriptsDir = exeDir + L"\\scripts";
+
+ // Check if the "scripts" directory exists
+ DWORD attributes = GetFileAttributesW(scriptsDir.c_str());
+ if (attributes == INVALID_FILE_ATTRIBUTES || !(attributes & FILE_ATTRIBUTE_DIRECTORY)) {
+ MessageBoxW(NULL, L"The 'scripts' directory does not exist. Please ensure it is in the same folder as the launcher.",
+ L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Set the working directory to the "scripts" folder
+ if (!SetCurrentDirectoryW(scriptsDir.c_str())) {
+ MessageBoxW(NULL, L"Failed to set the working directory to 'scripts'.",
+ L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Define the command to run and append arguments if present
+ std::wstring target;
+ if (!args.empty()) {
+ target = L"cmd.exe /c \"\"" LAUNCH_TARGET L"\" " + args + L"\"";
+ } else {
+ target = L"cmd.exe /c \"" LAUNCH_TARGET L"\"";
+ }
+
+ // Configure the process startup info
+ STARTUPINFO si = { sizeof(si) };
+ si.dwFlags = STARTF_USESHOWWINDOW; // Prevent the window from appearing
+ si.wShowWindow = SW_HIDE; // Hide the command window
+
+ PROCESS_INFORMATION pi = {};
+
+ // Start the process without CREATE_NO_WINDOW flag to show the command window
+ if (!CreateProcessW(
+ NULL, // Application name (NULL because we pass the command in the command line)
+ &target[0], // Command line
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+ 0, // No special flags
+ NULL, // Environment block (NULL to inherit parent)
+ NULL, // Current directory (NULL to use the parent process's current directory)
+ &si, // Startup info
+ &pi // Process information
+ )) {
+ MessageBoxW(NULL, L"Failed to launch the script.", L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Wait for the script to finish
+ WaitForSingleObject(pi.hProcess, INFINITE);
+
+ // Cleanup
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+
+ return 0;
+}
diff --git a/winpython/portable/launchers_building/launchers_src/launcher_template_WINDOWS.cpp b/winpython/portable/launchers_building/launchers_src/launcher_template_WINDOWS.cpp
new file mode 100644
index 00000000..6b10a89a
--- /dev/null
+++ b/winpython/portable/launchers_building/launchers_src/launcher_template_WINDOWS.cpp
@@ -0,0 +1,100 @@
+/*
+DataLab-WinPython launcher script
+---------------------------------
+
+Licensed under the terms of the BSD 3-Clause
+(see ./LICENSE for details)
+
+*/
+
+#include
+#include
+
+int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int /*nShowCmd*/) {
+ // Get the path to the current executable
+ wchar_t exePath[MAX_PATH];
+ GetModuleFileNameW(NULL, exePath, MAX_PATH);
+
+ // Determine the directory of the executable
+ std::wstring exeDir = exePath;
+ exeDir = exeDir.substr(0, exeDir.find_last_of(L"\\/"));
+
+ // Get command line string and extract arguments
+ LPWSTR commandLine = GetCommandLineW();
+ std::wstring args;
+ // If executable path is double quoted, skip the entire quoted section
+ if (commandLine[0] == L'"') {
+ LPWSTR closingQuote = wcschr(commandLine + 1, L'"');
+ if (closingQuote) {
+ args = closingQuote + 1;
+ }
+ // For non-quoted path, skip to character after first space if it exists
+ } else {
+ LPWSTR spacePos = wcschr(commandLine, L' ');
+ if (spacePos) {
+ args = spacePos + 1;
+ }
+ }
+ // Strip leading whitespace
+ size_t args_start = args.find_first_not_of(L" ");
+ args = (args_start != std::wstring::npos) ? args.substr(args_start) : L"";
+
+ // Define the path to the "scripts" directory
+ std::wstring scriptsDir = exeDir + L"\\scripts";
+
+ // Check if the "scripts" directory exists
+ DWORD attributes = GetFileAttributesW(scriptsDir.c_str());
+ if (attributes == INVALID_FILE_ATTRIBUTES || !(attributes & FILE_ATTRIBUTE_DIRECTORY)) {
+ MessageBoxW(NULL, L"The 'scripts' directory does not exist. Please ensure it is in the same folder as the launcher.",
+ L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Set the working directory to the "scripts" folder
+ if (!SetCurrentDirectoryW(scriptsDir.c_str())) {
+ MessageBoxW(NULL, L"Failed to set the working directory to 'scripts'.",
+ L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Define the command to run and append arguments if present
+ std::wstring target;
+ if (!args.empty()) {
+ target = L"cmd.exe /c \"\"" LAUNCH_TARGET L"\" " + args + L"\"";
+ } else {
+ target = L"cmd.exe /c \"" LAUNCH_TARGET L"\"";
+ }
+
+ // Configure the process startup info
+ STARTUPINFO si = { sizeof(si) };
+ si.dwFlags = STARTF_USESHOWWINDOW; // Prevent the window from appearing
+ si.wShowWindow = SW_HIDE; // Hide the command window
+
+ PROCESS_INFORMATION pi = {};
+
+ // Start the process with CREATE_NO_WINDOW flag
+ if (!CreateProcessW(
+ NULL, // Application name (NULL because we pass the command in the command line)
+ &target[0], // Command line
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+ CREATE_NO_WINDOW, // Flags to prevent creating a window
+ NULL, // Environment block (NULL to inherit parent)
+ NULL, // Current directory (NULL to use the parent process's current directory)
+ &si, // Startup info
+ &pi // Process information
+ )) {
+ MessageBoxW(NULL, L"Failed to launch the script.", L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Wait for the script to finish
+ WaitForSingleObject(pi.hProcess, INFINITE);
+
+ // Cleanup
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+
+ return 0;
+}
diff --git a/winpython/portable/launchers_building/launchers_src_original/LICENSE b/winpython/portable/launchers_building/launchers_src_original/LICENSE
new file mode 100644
index 00000000..b3fb976c
--- /dev/null
+++ b/winpython/portable/launchers_building/launchers_src_original/LICENSE
@@ -0,0 +1,63 @@
+DataLab-WinPython license terms
+===============================
+
+DataLab-WinPython is a Python distribution for Windows:
+- Based on WinPython, a portable distribution of Python for Windows (see section I. below).
+- Including DataLab, an open-source platform for signal and image processing (see section II. below).
+
+I. - WinPython License Agreement (MIT License)
+----------------------------------------------
+
+Copyright (c) 2012 Pierre Raybaut, 2016+ WinPython team
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+II. - DataLab License Agreement (BSD 3-Clause License)
+------------------------------------------------------
+
+Copyright (c) 2023, DataLab Platform Developers.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/winpython/portable/launchers_building/launchers_src_original/build_one_launcher.bat b/winpython/portable/launchers_building/launchers_src_original/build_one_launcher.bat
new file mode 100644
index 00000000..c48374c4
--- /dev/null
+++ b/winpython/portable/launchers_building/launchers_src_original/build_one_launcher.bat
@@ -0,0 +1,108 @@
+@echo on
+set icon_name=%1
+set LAUNCH_TARGET=%2
+set launcher_name=%3
+set subsystem=%4
+set destination=%5
+
+set icon_name=%icon_name:"=%
+set LAUNCH_TARGET=%LAUNCH_TARGET:"=%
+set launcher_name=%launcher_name:"=%
+set subsystem=%subsystem:"=%
+
+set ROOT_PATH=%~dp0..\
+set SCRIPT_PATH=%~dp0
+set TEMPO_PATH=%ROOT_PATH%launchers_temp
+set OUTPUT_DIR=%ROOT_PATH%launchers_%destination%
+
+set "ICON_FILE=%ROOT_PATH%icons\%icon_name%"
+set LAUNCHER_EXE=%OUTPUT_DIR%\%launcher_name%.exe
+
+
+:: Paths to template WINDOWS or CONSOLE
+set SOURCE_FILE=%SCRIPT_PATH%launcher_template_%subsystem%.cpp
+echo SOURCE_FILE=%SOURCE_FILE%
+
+set "RESOURCE_FILE=%TEMPO_PATH%\%icon_name%.rc"
+set "RESOURCE_OBJ=%TEMPO_PATH%\%icon_name%.res"
+
+
+:: create pDirectory if needed
+if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
+if not exist "%TEMPO_PATH%" mkdir "%TEMPO_PATH%"
+
+cd/d %TEMPO_PATH%
+
+:: Check if MSVC environment is already initialized
+if not defined VSINSTALLDIR (
+ echo Initializing MSVC environment...
+ call %VCVARS_PATH%
+ if errorlevel 1 (
+ echo [ERROR] Failed to initialize MSVC environment.
+ exit /b 1
+ )
+)
+
+@echo on
+
+:: Walk through .bat files in the current directory
+ echo Processing %icon_name%..
+ :: Stonebig: Remove previous .exe file
+ echo launcher_exe_action del /q "%LAUNCHER_EXE%"
+ if exist "%LAUNCHER_EXE%" (
+ move "%LAUNCHER_EXE%" "%LAUNCHER_EXE%.old.exe"
+ del /q "%LAUNCHER_EXE%.old.exe"
+ )
+ :: Stonebig: Remove intermediate .res and.rc file
+ if exist "%RESOURCE_OBJ%" (
+ move "%RESOURCE_OBJ%" "%RESOURCE_OBJ%.old.exe"
+ del /q "%RESOURCE_OBJ%.old.exe"
+ )
+ if exist "%RESOURCE_FILE%" (
+ move "%RESOURCE_FILE%" "%RESOURCE_FILE%.old.exe"
+ del /q "%RESOURCE_FILE%.old.exe"
+ )
+ :: Remove intermediate .obj file
+ del /q "launcher_template_%subsystem%.obj"
+
+ :: Check if the icon exists
+ if exist "%ICON_FILE%" (
+ echo Icon found: "%ICON_FILE%"
+ ) else (
+ echo No icon found for "%ICON_FILE%" stoping
+ pause
+ exit
+ )
+
+
+ :: Create resource file
+ echo Creating resource file...
+ > "%RESOURCE_FILE%" echo IDI_ICON1 ICON "%ICON_FILE%"
+ :: Compile resource
+ echo Compiling resource...
+ rc /fo "%RESOURCE_OBJ%" "%RESOURCE_FILE%"
+
+ :: Compile the launcher executable
+ echo Compiling launcher executable...
+ cl /EHsc /O2 /DUNICODE /W4 "%SOURCE_FILE%" "%RESOURCE_OBJ%" ^
+ /Fe"%LAUNCHER_EXE%%" ^
+ /DLAUNCH_TARGET=\"%LAUNCH_TARGET%\" ^
+ User32.lib ^
+ /link /SUBSYSTEM:%subsystem%
+
+
+ if errorlevel 1 (
+ echo [ERROR] Failed to build launcher for %LAUNCH_TARGET%
+ exit /b 1
+ )
+
+ if exist "%LAUNCHER_EXE%" (
+ echo [SUCCESS] Launcher created: "%LAUNCHER_EXE%""
+ ) else (
+ echo [ERROR] Failed to build launcher "%LAUNCHER_EXE%" from "%icon_name%" to call "%LAUNCH_TARGET%"
+ exit /b 1
+ )
+
+echo All launchers processed.
+rem exit /b 0
+
diff --git a/winpython/portable/launchers_building/launchers_src_original/launcher_template_CONSOLE.cpp b/winpython/portable/launchers_building/launchers_src_original/launcher_template_CONSOLE.cpp
new file mode 100644
index 00000000..93614b9e
--- /dev/null
+++ b/winpython/portable/launchers_building/launchers_src_original/launcher_template_CONSOLE.cpp
@@ -0,0 +1,75 @@
+/*
+DataLab-WinPython launcher script
+---------------------------------
+
+Licensed under the terms of the BSD 3-Clause
+(see ./LICENSE for details)
+
+*/
+
+#include
+#include
+
+int main() {
+ // Get the path to the current executable
+ wchar_t exePath[MAX_PATH];
+ GetModuleFileNameW(NULL, exePath, MAX_PATH);
+
+ // Determine the directory of the executable
+ std::wstring exeDir = exePath;
+ exeDir = exeDir.substr(0, exeDir.find_last_of(L"\\/"));
+
+ // Define the path to the "scripts" directory
+ std::wstring scriptsDir = exeDir + L"\\scripts";
+
+ // Check if the "scripts" directory exists
+ DWORD attributes = GetFileAttributesW(scriptsDir.c_str());
+ if (attributes == INVALID_FILE_ATTRIBUTES || !(attributes & FILE_ATTRIBUTE_DIRECTORY)) {
+ MessageBoxW(NULL, L"The 'scripts' directory does not exist. Please ensure it is in the same folder as the launcher.",
+ L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Set the working directory to the "scripts" folder
+ if (!SetCurrentDirectoryW(scriptsDir.c_str())) {
+ MessageBoxW(NULL, L"Failed to set the working directory to 'scripts'.",
+ L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Define the command to run
+ std::wstring target = L"cmd.exe /c \"" LAUNCH_TARGET L"\"";
+
+ // Configure the process startup info
+ STARTUPINFO si = { sizeof(si) };
+ si.dwFlags = STARTF_USESHOWWINDOW; // Prevent the window from appearing
+ si.wShowWindow = SW_HIDE; // Hide the command window
+
+ PROCESS_INFORMATION pi = {};
+
+ // Start the process without CREATE_NO_WINDOW flag to show the command window
+ if (!CreateProcessW(
+ NULL, // Application name (NULL because we pass the command in the command line)
+ &target[0], // Command line
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+ 0, // No special flags
+ NULL, // Environment block (NULL to inherit parent)
+ NULL, // Current directory (NULL to use the parent process's current directory)
+ &si, // Startup info
+ &pi // Process information
+ )) {
+ MessageBoxW(NULL, L"Failed to launch the script.", L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Wait for the script to finish
+ WaitForSingleObject(pi.hProcess, INFINITE);
+
+ // Cleanup
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+
+ return 0;
+}
diff --git a/winpython/portable/launchers_building/launchers_src_original/launcher_template_WINDOWS.cpp b/winpython/portable/launchers_building/launchers_src_original/launcher_template_WINDOWS.cpp
new file mode 100644
index 00000000..9c878be6
--- /dev/null
+++ b/winpython/portable/launchers_building/launchers_src_original/launcher_template_WINDOWS.cpp
@@ -0,0 +1,75 @@
+/*
+DataLab-WinPython launcher script
+---------------------------------
+
+Licensed under the terms of the BSD 3-Clause
+(see ./LICENSE for details)
+
+*/
+
+#include
+#include
+
+int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int /*nShowCmd*/) {
+ // Get the path to the current executable
+ wchar_t exePath[MAX_PATH];
+ GetModuleFileNameW(NULL, exePath, MAX_PATH);
+
+ // Determine the directory of the executable
+ std::wstring exeDir = exePath;
+ exeDir = exeDir.substr(0, exeDir.find_last_of(L"\\/"));
+
+ // Define the path to the "scripts" directory
+ std::wstring scriptsDir = exeDir + L"\\scripts";
+
+ // Check if the "scripts" directory exists
+ DWORD attributes = GetFileAttributesW(scriptsDir.c_str());
+ if (attributes == INVALID_FILE_ATTRIBUTES || !(attributes & FILE_ATTRIBUTE_DIRECTORY)) {
+ MessageBoxW(NULL, L"The 'scripts' directory does not exist. Please ensure it is in the same folder as the launcher.",
+ L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Set the working directory to the "scripts" folder
+ if (!SetCurrentDirectoryW(scriptsDir.c_str())) {
+ MessageBoxW(NULL, L"Failed to set the working directory to 'scripts'.",
+ L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Define the command to run
+ std::wstring target = L"cmd.exe /c \"" LAUNCH_TARGET L"\"";
+
+ // Configure the process startup info
+ STARTUPINFO si = { sizeof(si) };
+ si.dwFlags = STARTF_USESHOWWINDOW; // Prevent the window from appearing
+ si.wShowWindow = SW_HIDE; // Hide the command window
+
+ PROCESS_INFORMATION pi = {};
+
+ // Start the process with CREATE_NO_WINDOW flag
+ if (!CreateProcessW(
+ NULL, // Application name (NULL because we pass the command in the command line)
+ &target[0], // Command line
+ NULL, // Process security attributes
+ NULL, // Thread security attributes
+ FALSE, // Inherit handles
+ CREATE_NO_WINDOW, // Flags to prevent creating a window
+ NULL, // Environment block (NULL to inherit parent)
+ NULL, // Current directory (NULL to use the parent process's current directory)
+ &si, // Startup info
+ &pi // Process information
+ )) {
+ MessageBoxW(NULL, L"Failed to launch the script.", L"Launcher Error", MB_ICONERROR);
+ return 1;
+ }
+
+ // Wait for the script to finish
+ WaitForSingleObject(pi.hProcess, INFINITE);
+
+ // Cleanup
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+
+ return 0;
+}
diff --git a/winpython/portable/launchers_final/IDLE (Python GUI).exe b/winpython/portable/launchers_final/IDLE (Python GUI).exe
new file mode 100644
index 00000000..65523199
Binary files /dev/null and b/winpython/portable/launchers_final/IDLE (Python GUI).exe differ
diff --git a/winpython/portable/launchers_final/Jupyter Lab.exe b/winpython/portable/launchers_final/Jupyter Lab.exe
new file mode 100644
index 00000000..93003fcb
Binary files /dev/null and b/winpython/portable/launchers_final/Jupyter Lab.exe differ
diff --git a/winpython/portable/launchers_final/Jupyter Notebook.exe b/winpython/portable/launchers_final/Jupyter Notebook.exe
new file mode 100644
index 00000000..28fdbea3
Binary files /dev/null and b/winpython/portable/launchers_final/Jupyter Notebook.exe differ
diff --git a/winpython/portable/launchers_final/Spyder reset.exe b/winpython/portable/launchers_final/Spyder reset.exe
new file mode 100644
index 00000000..21250f98
Binary files /dev/null and b/winpython/portable/launchers_final/Spyder reset.exe differ
diff --git a/winpython/portable/launchers_final/Spyder.exe b/winpython/portable/launchers_final/Spyder.exe
new file mode 100644
index 00000000..93b1a050
Binary files /dev/null and b/winpython/portable/launchers_final/Spyder.exe differ
diff --git a/winpython/portable/launchers_final/VS Code.exe b/winpython/portable/launchers_final/VS Code.exe
new file mode 100644
index 00000000..225decb4
Binary files /dev/null and b/winpython/portable/launchers_final/VS Code.exe differ
diff --git a/winpython/portable/launchers_final/WinPython Command Prompt.exe b/winpython/portable/launchers_final/WinPython Command Prompt.exe
new file mode 100644
index 00000000..e4e824c5
Binary files /dev/null and b/winpython/portable/launchers_final/WinPython Command Prompt.exe differ
diff --git a/winpython/portable/launchers_final/WinPython Control Panel.exe b/winpython/portable/launchers_final/WinPython Control Panel.exe
new file mode 100644
index 00000000..72a57a67
Binary files /dev/null and b/winpython/portable/launchers_final/WinPython Control Panel.exe differ
diff --git a/winpython/portable/launchers_final/WinPython Interpreter.exe b/winpython/portable/launchers_final/WinPython Interpreter.exe
new file mode 100644
index 00000000..dfa43135
Binary files /dev/null and b/winpython/portable/launchers_final/WinPython Interpreter.exe differ
diff --git a/winpython/portable/launchers_final/WinPython Powershell Prompt.exe b/winpython/portable/launchers_final/WinPython Powershell Prompt.exe
new file mode 100644
index 00000000..d4512f32
Binary files /dev/null and b/winpython/portable/launchers_final/WinPython Powershell Prompt.exe differ
diff --git a/winpython/portable/launchers_final/license.txt b/winpython/portable/launchers_final/license.txt
new file mode 100644
index 00000000..da461f3b
--- /dev/null
+++ b/winpython/portable/launchers_final/license.txt
@@ -0,0 +1,37 @@
+Note
+----
+
+WinPython components are distributed as they were received from
+their copyright holder, under their own copyright and/or license,
+and without any linking with each other.
+
+WinPython software collection (i.e. the collection of software,
+libraries and documents) is licensed under the terms of the
+following license agreement.
+
+
+WinPython License Agreement (MIT License)
+-----------------------------------------
+
+Copyright (c) 2012 Pierre Raybaut, 2016+ WinPython team
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/notebooks/docs/README.txt b/winpython/portable/launchers_final/notebooks/docs/README.txt
new file mode 100644
index 00000000..a0aab429
--- /dev/null
+++ b/winpython/portable/launchers_final/notebooks/docs/README.txt
@@ -0,0 +1 @@
+Examples are now to be found at github.com/winpython/winpython_afterdoc
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/WinPythonIni.py b/winpython/portable/launchers_final/scripts/WinPythonIni.py
new file mode 100644
index 00000000..ddc0c2e7
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/WinPythonIni.py
@@ -0,0 +1,106 @@
+
+# Prepares a dynamic list of variables settings from a .ini file
+import os
+import subprocess
+from pathlib import Path
+
+winpython_inidefault=r'''
+[debug]
+state = disabled
+[inactive_environment_per_user]
+## > changing this segment to [active_environment_per_user] makes this segment of lines active or not
+HOME = %HOMEDRIVE%%HOMEPATH%\Documents\WinPython%WINPYVER%\settings
+USERPROFILE = %HOME%
+JUPYTER_DATA_DIR = %HOME%
+WINPYWORKDIR = %HOMEDRIVE%%HOMEPATH%\Documents\WinPython%WINPYVER%\Notebooks
+[inactive_environment_common]
+USERPROFILE = %HOME%
+[environment]
+## > Uncomment lines to override environment variables
+#SPYDER_CONFDIR = %HOME%\settings\.spyder-py3
+#JUPYTERLAB_SETTINGS_DIR = %HOME%\.jupyter\lab
+#JUPYTERLAB_WORKSPACES_DIR = %HOME%\.jupyter\lab\workspaces
+#R_HOME=%WINPYDIRBASE%\t\R
+#R_HOMEbin=%R_HOME%\bin\x64
+#JULIA_HOME=%WINPYDIRBASE%\t\Julia\bin\
+#JULIA_EXE=julia.exe
+#JULIA=%JULIA_HOME%%JULIA_EXE%
+#JULIA_PKGDIR=%WINPYDIRBASE%\settings\.julia
+#QT_PLUGIN_PATH=%WINPYDIR%\Lib\site-packages\pyqt5_tools\Qt\plugins
+
+'''
+
+def get_file(file_name):
+ if file_name.startswith("..\\"):
+ file_name = os.path.join(os.path.dirname(os.path.dirname(__file__)), file_name[3:])
+ elif file_name.startswith(".\\"):
+ file_name = os.path.join(os.path.dirname(__file__), file_name[2:])
+ try:
+ with open(file_name, 'r') as file:
+ return file.read()
+ except FileNotFoundError:
+ if file_name[-3:] == 'ini':
+ os.makedirs(Path(file_name).parent, exist_ok=True)
+ with open(file_name, 'w') as file:
+ file.write(winpython_inidefault)
+ return winpython_inidefault
+
+def translate(line, env):
+ parts = line.split('%')
+ for i in range(1, len(parts), 2):
+ if parts[i] in env:
+ parts[i] = env[parts[i]]
+ return ''.join(parts)
+
+def main():
+ import sys
+ args = sys.argv[1:]
+ file_name = args[0] if args else "..\\settings\\winpython.ini"
+
+ my_lines = get_file(file_name).splitlines()
+ segment = "environment"
+ txt = ""
+ env = os.environ.copy() # later_version: env = os.environ
+
+ # default directories (from .bat)
+ os.makedirs(Path(env['WINPYDIRBASE']) / 'settings' / 'Appdata' / 'Roaming', exist_ok=True)
+
+ # default qt.conf for Qt directories
+ qt_conf='''echo [Paths]
+ echo Prefix = .
+ echo Binaries = .
+ '''
+
+ pathlist = [Path(env['WINPYDIR']) / 'Lib' / 'site-packages' / i for i in ('PyQt5', 'PyQt6', 'Pyside6')]
+ for p in pathlist:
+ if p.is_dir():
+ if not (p / 'qt.conf').is_file():
+ with open(p / 'qt.conf', 'w') as file:
+ file.write(qt_conf)
+
+ for l in my_lines:
+ if l.startswith("["):
+ segment = l[1:].split("]")[0]
+ elif not l.startswith("#") and "=" in l:
+ data = l.split("=", 1)
+ if segment == "debug" and data[0].strip() == "state":
+ data[0] = "WINPYDEBUG"
+ if segment in ["environment", "debug", "active_environment_per_user", "active_environment_common"]:
+ txt += f"set {data[0].strip()}={translate(data[1].strip(), env)}&& "
+ env[data[0].strip()] = translate(data[1].strip(), env)
+ if segment == "debug" and data[0].strip() == "state":
+ txt += f"set WINPYDEBUG={data[1].strip()}&&"
+
+ print(txt)
+
+ # set potential directory
+ for i in ('HOME', 'WINPYWORKDIR'):
+ if i in env:
+ os.makedirs(Path(env[i]), exist_ok=True)
+ # later_version:
+ # p = subprocess.Popen(["start", "cmd", "/k", "set"], shell = True)
+ # p.wait() # I can wait until finished (although it too finishes after start finishes)
+
+if __name__ == "__main__":
+ main()
+
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/WinPython_PS_Prompt.ps1 b/winpython/portable/launchers_final/scripts/WinPython_PS_Prompt.ps1
new file mode 100644
index 00000000..fc730090
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/WinPython_PS_Prompt.ps1
@@ -0,0 +1,66 @@
+### WinPython_PS_Prompt.ps1 ###
+$0 = $myInvocation.MyCommand.Definition
+$dp0 = [System.IO.Path]::GetDirectoryName($0)
+
+# default if env.cfg fails
+$env:WINPYthon_subdirectory_name = "python"
+$env:WINPYthon_exe = "python.exe"
+# Define the path to the config file
+Get-Content (${PSScriptRoot} +"\env.ini") | ForEach-Object {
+ $parts = $_ -split '=', 2
+ if ($parts.Count -eq 2) {
+ Set-Variable -Name ($parts[0]).Trim() -Value $parts[1].Trim() -Scope Global
+ }
+}
+
+# $env:PYTHONUTF8 = 1 would create issues in "movable" patching
+$env:WINPYDIRBASE = "$dp0\.."
+# get a normalize path
+# http://stackoverflow.com/questions/1645843/resolve-absolute-path-from-relative-path-and-or-file-name
+$env:WINPYDIRBASE = [System.IO.Path]::GetFullPath( $env:WINPYDIRBASE )
+
+# avoid double_init (will only resize screen)
+if (-not ($env:WINPYDIR -eq [System.IO.Path]::GetFullPath( $env:WINPYDIRBASE+"\{self.python_dir_name}")) ) {
+$env:WINPYDIR = $env:WINPYDIRBASE+ "\" +$env:WINPYthon_subdirectory_name
+# 2019-08-25 pyjulia needs absolutely a variable PYTHON=%WINPYDIR%python.exe
+$env:PYTHON = $env:WINPYthon_exe
+$env:PYTHONPATHz = "%WINPYDIR%;%WINPYDIR%\Lib;%WINPYDIR%\DLLs"
+
+$env:WINPYVER = $env:WINPYVER
+# rem 2023-02-12 try utf-8 on console
+# rem see https://github.com/pypa/pip/issues/11798#issuecomment-1427069681
+$env:PYTHONIOENCODING = "utf-8"
+
+$env:HOME = "$env:WINPYDIRBASE\settings"
+
+# rem read https://github.com/winpython/winpython/issues/839
+# $env:USERPROFILE = "$env:HOME"
+
+$env:WINPYDIRBASE = ""
+$env:JUPYTER_DATA_DIR = "$env:HOME"
+
+if (-not $env:PATH.ToLower().Contains(";"+ $env:WINPYDIR.ToLower()+ ";")) {
+ $env:PATH = "$env:WINPYDIR\\Lib\site-packages\PyQt5;$env:WINPYDIR\\;$env:WINPYDIR\\DLLs;$env:WINPYDIR\\Scripts;$env:WINPYDIR\\..\t;$env:WINPYDIR\\..\n;$env:path" }
+
+
+#rem force default pyqt5 kit for Spyder if PyQt5 module is there
+if (Test-Path "$env:WINPYDIR\Lib\site-packages\PyQt5\__init__.py") { $env:QT_API = "pyqt5" }
+
+# PyQt5 qt.conf creation and winpython.ini creation done via Winpythonini.py (called per env_for_icons.bat for now)
+# Start-Process -FilePath $env:PYTHON -ArgumentList ($env:WINPYDIRBASE + '\scripts\WinPythonIni.py')
+
+
+### Set-WindowSize
+
+Function Set-WindowSize {
+Param([int]$x=$host.ui.rawui.windowsize.width,
+ [int]$y=$host.ui.rawui.windowsize.heigth,
+ [int]$buffer=$host.UI.RawUI.BufferSize.heigth)
+ $buffersize = new-object System.Management.Automation.Host.Size($x,$buffer)
+ $host.UI.RawUI.BufferSize = $buffersize
+ $size = New-Object System.Management.Automation.Host.Size($x,$y)
+ $host.ui.rawui.WindowSize = $size
+}
+# Windows10 yelling at us with 150 40 6000
+# Set-WindowSize 195 40 6000
+}
diff --git a/winpython/portable/launchers_final/scripts/activate.bat b/winpython/portable/launchers_final/scripts/activate.bat
new file mode 100644
index 00000000..e52886af
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/activate.bat
@@ -0,0 +1,2 @@
+@echo off
+call "%~dp0env.bat" %*
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/cmd.bat b/winpython/portable/launchers_final/scripts/cmd.bat
new file mode 100644
index 00000000..fc76541f
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/cmd.bat
@@ -0,0 +1,3 @@
+@echo off
+call "%~dp0env_for_icons.bat" %*
+cmd.exe /k
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/cmd_ps.bat b/winpython/portable/launchers_final/scripts/cmd_ps.bat
new file mode 100644
index 00000000..c6fa79a4
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/cmd_ps.bat
@@ -0,0 +1,3 @@
+@echo off
+call "%~dp0env_for_icons.bat"
+Powershell.exe -Command "& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -noexit -File ""%~dp0WinPython_PS_Prompt.ps1""'}"
diff --git a/winpython/portable/launchers_final/scripts/env.bat b/winpython/portable/launchers_final/scripts/env.bat
new file mode 100644
index 00000000..952df8e4
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/env.bat
@@ -0,0 +1,53 @@
+@echo off
+
+rem default if init fails
+set WINPYthon_subdirectory_name=python
+set WINPYthon_exe=python.exe
+rem read init variables
+FOR /F "usebackq tokens=1,2 delims==" %%G IN ("%~dp0env.ini") DO (set %%G=%%H)
+
+set WINPYDIRBASE=%~dp0..
+
+rem get a normalized path
+set WINPYDIRBASETMP=%~dp0..
+pushd %WINPYDIRBASETMP%
+set WINPYDIRBASE=%__CD__%
+if "%WINPYDIRBASE:~-1%"=="\" set WINPYDIRBASE=%WINPYDIRBASE:~0,-1%
+set WINPYDIRBASETMP=
+popd
+
+set WINPYDIR=%WINPYDIRBASE%\%WINpython_subdirectory_name%
+rem 2019-08-25 pyjulia needs absolutely a variable PYTHON=%WINPYDIR%\python.exe
+set PYTHON=%WINPYDIR%\%WINpython_exe%
+set PYTHONPATHz=%WINPYDIR%;%WINPYDIR%\Lib;%WINPYDIR%\DLLs
+set WINPYVER=%WINPYVER%
+
+rem 2023-02-12 utf-8 on console to avoid pip crash
+rem see https://github.com/pypa/pip/issues/11798#issuecomment-1427069681
+set PYTHONIOENCODING=utf-8
+rem set PYTHONUTF8=1 creates issues in "movable" patching
+
+set HOME=%WINPYDIRBASE%\settings
+rem see https://github.com/winpython/winpython/issues/839
+rem set USERPROFILE=%HOME%
+set SPYDER_CONFDIR=%HOME%\settings\.spyder-py3
+set JUPYTER_DATA_DIR=%HOME%
+set JUPYTER_CONFIG_DIR=%WINPYDIR%\etc\jupyter
+set JUPYTER_CONFIG_PATH=%WINPYDIR%\etc\jupyter
+set FINDDIR=%WINDIR%\system32
+
+rem Remove all double quotes
+set PATH_CLEANED=%PATH:"=%
+echo ";%PATH_CLEANED%;" | %FINDDIR%\find.exe /C /I ";%WINPYDIR%\;" >nul
+if %ERRORLEVEL% NEQ 0 (
+ set "PATH=%WINPYDIR%\Lib\site-packages\PyQt5;%WINPYDIR%\;%WINPYDIR%\DLLs;%WINPYDIR%\Scripts;%WINPYDIR%\..\t;%WINPYDIR%\..\n;%PATH%"
+ cd .
+)
+set PATH_CLEANED=
+
+rem force default pyqt5 kit for Spyder if PyQt5 module is there
+if exist "%WINPYDIR%\Lib\site-packages\PyQt5\__init__.py" set QT_API=pyqt5
+
+rem modern Pandoc wheel need this
+if exist "%WINPYDIRBASE%\t\pandoc.exe" set PYPANDOC_PANDOC=%WINPYDIRBASE%\t\pandoc.exe
+
diff --git a/winpython/portable/launchers_final/scripts/env_for_icons.bat b/winpython/portable/launchers_final/scripts/env_for_icons.bat
new file mode 100644
index 00000000..a6ac886f
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/env_for_icons.bat
@@ -0,0 +1,42 @@
+@echo off
+call "%~dp0env.bat"
+
+rem default is as before: Winpython ..\Notebooks
+set WINPYWORKDIR=%WINPYDIRBASE%\Notebooks
+set WINPYWORKDIR1=%WINPYWORKDIR%
+
+rem if we have a file or directory in %1 parameter, we use that directory to define WINPYWORKDIR1
+if not "%~1"=="" (
+ if exist "%~1" (
+ if exist "%~1\" (
+ rem echo it is a directory %~1
+ set WINPYWORKDIR1=%~1
+ ) else (
+ rem echo it is a file %~1, so we take the directory %~dp1
+ set WINPYWORKDIR1=%~dp1
+ )
+ )
+) else (
+rem if it is launched from another directory than icon origin , we keep it that one echo %__CD__%
+if not "%__CD__%"=="%~dp0" if not "%__CD__%scripts\"=="%~dp0" set WINPYWORKDIR1="%__CD__%"
+)
+rem remove potential doublequote
+set WINPYWORKDIR1=%WINPYWORKDIR1:"=%
+rem remove some potential last \
+if "%WINPYWORKDIR1:~-1%"=="\" set WINPYWORKDIR1=%WINPYWORKDIR1:~0,-1%
+
+rem you can use winpython.ini to change defaults
+FOR /F "delims=" %%i IN ('""%WINPYDIR%\python.exe" "%~dp0WinpythonIni.py""') DO set winpythontoexec=%%i
+%winpythontoexec%set winpythontoexec=
+
+
+rem Preventive Working Directories creation if needed
+if not "%WINPYWORKDIR%"=="" if not exist "%WINPYWORKDIR%" mkdir "%WINPYWORKDIR%"
+if not "%WINPYWORKDIR1%"=="" if not exist "%WINPYWORKDIR1%" mkdir "%WINPYWORKDIR1%"
+
+rem Change of directory only if we are in a launcher directory
+if "%__CD__%scripts\"=="%~dp0" cd/D %WINPYWORKDIR1%
+if "%__CD__%"=="%~dp0" cd/D %WINPYWORKDIR1%
+
+if not exist "%HOME%\.spyder-py%WINPYVER:~0,1%" mkdir "%HOME%\.spyder-py%WINPYVER:~0,1%"
+if not exist "%HOME%\.spyder-py%WINPYVER:~0,1%\workingdir" echo %HOME%\Notebooks>"%HOME%\.spyder-py%WINPYVER:~0,1%\workingdir"
diff --git a/winpython/portable/launchers_final/scripts/make_working_directory_and_userprofile_be_winpython.bat b/winpython/portable/launchers_final/scripts/make_working_directory_and_userprofile_be_winpython.bat
new file mode 100644
index 00000000..489aef0b
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/make_working_directory_and_userprofile_be_winpython.bat
@@ -0,0 +1,3 @@
+call "%~dp0env_for_icons.bat"
+"%PYTHON%" -c "from wppm.utils import patch_sourcefile;patch_sourcefile(r'%~dp0..\settings\winpython.ini', '[active_environment', '[inactive_environment' )"
+"%PYTHON%" -c "from wppm.utils import patch_sourcefile;patch_sourcefile(r'%~dp0..\settings\winpython.ini', '[inactive_environment_common]', '[active_environment_common]' )"
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/make_working_directory_be_not_winpython.bat b/winpython/portable/launchers_final/scripts/make_working_directory_be_not_winpython.bat
new file mode 100644
index 00000000..7a726169
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/make_working_directory_be_not_winpython.bat
@@ -0,0 +1,3 @@
+call "%~dp0env_for_icons.bat"
+"%PYTHON%" -c "from wppm.utils import patch_sourcefile;patch_sourcefile(r'%~dp0..\settings\winpython.ini', '[active_environment', '[inactive_environment' )"
+"%PYTHON%" -c "from wppm.utils import patch_sourcefile;patch_sourcefile(r'%~dp0..\settings\winpython.ini', '[inactive_environment_per_user]', '[active_environment_per_user]' )"
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/make_working_directory_be_winpython.bat b/winpython/portable/launchers_final/scripts/make_working_directory_be_winpython.bat
new file mode 100644
index 00000000..0f422a4e
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/make_working_directory_be_winpython.bat
@@ -0,0 +1,2 @@
+call "%~dp0env_for_icons.bat"
+"%PYTHON%" -c "from wppm.utils import patch_sourcefile;patch_sourcefile(r'%~dp0..\settings\winpython.ini', '[active_environment', '[inactive_environment' )"
diff --git a/winpython/portable/launchers_final/scripts/python.bat b/winpython/portable/launchers_final/scripts/python.bat
new file mode 100644
index 00000000..1e8fea0b
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/python.bat
@@ -0,0 +1,3 @@
+@echo off
+call "%~dp0env_for_icons.bat" %*
+"%WINPYDIR%\python.exe" %*
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/readme.txt b/winpython/portable/launchers_final/scripts/readme.txt
new file mode 100644
index 00000000..11592357
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/readme.txt
@@ -0,0 +1,3 @@
+These batch files are required to run WinPython icons.
+These files should help the user writing his/her own
+The environment variables are set-up in 'env.bat' and 'env_for_icons.bat'.
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/spyder_reset.bat b/winpython/portable/launchers_final/scripts/spyder_reset.bat
new file mode 100644
index 00000000..89cb78c8
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/spyder_reset.bat
@@ -0,0 +1,3 @@
+@echo off
+call "%~dp0env_for_icons.bat"
+"%WINPYDIR%\scripts\spyder.exe" --reset %*
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/upgrade_pip.bat b/winpython/portable/launchers_final/scripts/upgrade_pip.bat
new file mode 100644
index 00000000..4443ed16
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/upgrade_pip.bat
@@ -0,0 +1,7 @@
+@echo off
+call "%~dp0env.bat"
+echo this will upgrade pip with latest version, then patch it for WinPython portability ok ?
+pause
+"%WINPYDIR%\python.exe" -m pip install --upgrade pip
+"%WINPYDIR%\python.exe" -c "from wppm import wppm;dist=wppm.Distribution(r'%WINPYDIR%');dist.patch_standard_packages('pip', to_movable=True)
+pause
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/winidle.bat b/winpython/portable/launchers_final/scripts/winidle.bat
new file mode 100644
index 00000000..797549ab
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/winidle.bat
@@ -0,0 +1,4 @@
+@echo off
+call "%~dp0env_for_icons.bat" %*
+rem "%WINPYDIR%\python.exe" "%WINPYDIR%\Lib\idlelib\idle.pyw" %*
+"%WINPYDIR%\python.exe" -m idlelib %*
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/winipython_notebook.bat b/winpython/portable/launchers_final/scripts/winipython_notebook.bat
new file mode 100644
index 00000000..f5681520
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/winipython_notebook.bat
@@ -0,0 +1,4 @@
+@echo off
+call "%~dp0env_for_icons.bat" %*
+rem "%WINPYDIR%\scripts\jupyter-notebook.exe" %*
+"%WINPYDIR%\python.exe" -m jupyter notebook %*
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/winjupyter_lab.bat b/winpython/portable/launchers_final/scripts/winjupyter_lab.bat
new file mode 100644
index 00000000..ffdf2fce
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/winjupyter_lab.bat
@@ -0,0 +1,4 @@
+@echo off
+call "%~dp0env_for_icons.bat" %*
+rem "%WINPYDIR%\scripts\jupyter-lab.exe" %*
+"%WINPYDIR%\python.exe" -m jupyter lab %*
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/winpython.bat b/winpython/portable/launchers_final/scripts/winpython.bat
new file mode 100644
index 00000000..2a0706ec
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/winpython.bat
@@ -0,0 +1,8 @@
+@echo off
+call "%~dp0env_for_icons.bat" %*
+rem backward compatibility for non-ptpython users
+if exist "%WINPYDIR%\Lib\site-packages\ptpython" (
+ "%WINPYDIR%\python.exe" -m ptpython %*
+) else (
+ "%WINPYDIR%\python.exe" %*
+)
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/winspyder.bat b/winpython/portable/launchers_final/scripts/winspyder.bat
new file mode 100644
index 00000000..1a843ca0
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/winspyder.bat
@@ -0,0 +1,5 @@
+@echo off
+call "%~dp0env_for_icons.bat" %*
+rem "%WINPYDIR%\scripts\spyder.exe" %* -w "%WINPYWORKDIR1%"
+"%WINPYDIR%\scripts\spyder.exe" %*
+
diff --git a/winpython/portable/launchers_final/scripts/winvscode.bat b/winpython/portable/launchers_final/scripts/winvscode.bat
new file mode 100644
index 00000000..d9697b89
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/winvscode.bat
@@ -0,0 +1,10 @@
+@echo off
+call "%~dp0env_for_icons.bat"
+if exist "%WINPYDIR%\..\t\vscode\code.exe" (
+ "%WINPYDIR%\..\t\vscode\code.exe" %*
+) else (
+if exist "%LOCALAPPDATA%\Programs\Microsoft VS Code\code.exe" (
+ "%LOCALAPPDATA%\Programs\Microsoft VS Code\code.exe" %*
+) else (
+ code %*
+))
\ No newline at end of file
diff --git a/winpython/portable/launchers_final/scripts/wpcp.bat b/winpython/portable/launchers_final/scripts/wpcp.bat
new file mode 100644
index 00000000..251a8348
--- /dev/null
+++ b/winpython/portable/launchers_final/scripts/wpcp.bat
@@ -0,0 +1,4 @@
+@echo off
+call "%~dp0env_for_icons.bat" %*
+rem cmd.exe /k "echo wppm & wppm" %*
+cmd.exe /k "echo wppm & "%WINPYDIR%\python.exe" -m wppm" %*
\ No newline at end of file
diff --git a/winpython/register_python.py b/winpython/register_python.py
deleted file mode 100644
index fc24c96b..00000000
--- a/winpython/register_python.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-import sys
-from winpython import associate, utils
-from argparse import ArgumentParser
-
-parser = ArgumentParser(description="Register Python file extensions, icons "\
- "and Windows explorer context menu to a target "\
- "Python distribution.")
-try:
- str_type = unicode
-except NameError:
- str_type = str
-parser.add_argument('--target', metavar='path', type=str,
- default=sys.prefix,
- help='path to the target Python distribution')
-parser.add_argument('--all', dest='all', action='store_const',
- const=True, default=False,
- help='register to all users, requiring administrative '\
- 'privileges (default: register to current user only)')
-args = parser.parse_args()
-
-print(args.target)
-if utils.is_python_distribution(args.target):
- associate.register(args.target, current=not args.all)
-else:
- raise WindowsError(f"Invalid Python distribution {args.target}")
diff --git a/winpython/unregister_python.py b/winpython/unregister_python.py
deleted file mode 100644
index f0bcefda..00000000
--- a/winpython/unregister_python.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-import sys
-from winpython import associate, utils
-from argparse import ArgumentParser
-
-parser = ArgumentParser(description="unRegister Python file extensions, icons "\
- "and Windows explorer context menu to a target "\
- "Python distribution.")
-try:
- str_type = unicode
-except NameError:
- str_type = str
-parser.add_argument('--target', metavar='path', type=str,
- default=sys.prefix,
- help='path to the target Python distribution')
-parser.add_argument('--all', dest='all', action='store_const',
- const=True, default=False,
- help='unregister to all users, requiring administrative '\
- 'privileges (default: register to current user only)')
-args = parser.parse_args()
-
-print(args.target)
-if utils.is_python_distribution(args.target):
- associate.unregister(args.target, current=not args.all)
-else:
- raise WindowsError(f"Invalid Python distribution {args.target}")
diff --git a/winpython/utils.py b/winpython/utils.py
deleted file mode 100644
index 3adbed60..00000000
--- a/winpython/utils.py
+++ /dev/null
@@ -1,877 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright © 2012 Pierre Raybaut
-# Licensed under the terms of the MIT License
-# (see winpython/__init__.py for details)
-
-"""
-WinPython utilities
-
-Created on Tue Aug 14 14:08:40 2012
-"""
-
-import os
-from pathlib import Path
-import subprocess
-import re
-import tarfile
-import zipfile
-import tempfile
-import shutil
-import atexit
-import sys
-import stat
-import locale
-import io
-import configparser as cp
-
-# Local imports
-import winreg
-
-def get_python_executable(path = None):
- """return the python executable"""
- my_path = sys.executable if path == None else path # default = current one
- my_path = my_path if Path(my_path).is_dir() else str(Path(my_path).parent)
- exec_py = str(Path(my_path) / 'python.exe')
- exec_pypy = str(Path(my_path) / 'pypy3.exe') # PyPy !
- # PyPy >=7.3.6 3.8 aligns to python.exe and Lib\site-packages
- python_executable = exec_py if Path(exec_py).is_file() else exec_pypy
- return python_executable
-
-def get_site_packages_path(path = None):
- """return the python site-packages"""
- my_path = sys.executable if path == None else path # default = current one
- my_path = my_path if Path(my_path).is_dir() else str(Path(my_path).parent)
- site_py = str(Path(my_path) / 'Lib' / 'site-packages')
- site_pypy = str(Path(my_path) / 'site-packages') # PyPy !!
- site_packages_path = site_pypy if Path(site_pypy).is_dir() else site_py
- return site_packages_path
-
-def onerror(function, path, excinfo):
- """Error handler for `shutil.rmtree`.
-
- If the error is due to an access error (read-only file), it
- attempts to add write permission and then retries.
- If the error is for another reason, it re-raises the error.
-
- Usage: `shutil.rmtree(path, onexc=onerror)"""
- if not os.access(path, os.W_OK):
- # Is the error an access error?
- os.chmod(path, stat.S_IWUSR)
- function(path)
- else:
- raise
-
-
-#==============================================================================
-# https://stackoverflow.com/questions/580924/how-to-access-a-files-properties-on-windows
-def getFileProperties(fname):
-#==============================================================================
- """
- Read all properties of the given file return them as a dictionary.
- """
- import win32api
- propNames = ('Comments', 'InternalName', 'ProductName',
- 'CompanyName', 'LegalCopyright', 'ProductVersion',
- 'FileDescription', 'LegalTrademarks', 'PrivateBuild',
- 'FileVersion', 'OriginalFilename', 'SpecialBuild')
-
- props = {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None}
-
- try:
- # backslash as parm returns dictionary of numeric info corresponding to VS_FIXEDFILEINFO struc
- fixedInfo = win32api.GetFileVersionInfo(fname, '\\')
- props['FixedFileInfo'] = fixedInfo
- props['FileVersion'] = "%d.%d.%d.%d" % (fixedInfo['FileVersionMS'] / 65536,
- fixedInfo['FileVersionMS'] % 65536, fixedInfo['FileVersionLS'] / 65536,
- fixedInfo['FileVersionLS'] % 65536)
-
- # \VarFileInfo\Translation returns list of available (language, codepage)
- # pairs that can be used to retreive string info. We are using only the first pair.
- lang, codepage = win32api.GetFileVersionInfo(fname, '\\VarFileInfo\\Translation')[0]
-
- # any other must be of the form \StringfileInfo\%04X%04X\parm_name, middle
- # two are language/codepage pair returned from above
-
- strInfo = {}
- for propName in propNames:
- strInfoPath = u'\\StringFileInfo\\%04X%04X\\%s' % (lang, codepage, propName)
- ## print str_info
- strInfo[propName] = win32api.GetFileVersionInfo(fname, strInfoPath)
-
- props['StringFileInfo'] = strInfo
- except:
- pass
-
- return props
-# =============================================================================
-# Shortcuts, start menu
-# =============================================================================
-
-
-def get_special_folder_path(path_name):
- """Return special folder path"""
- from win32com.shell import shell, shellcon
-
- for maybe in """
- CSIDL_COMMON_STARTMENU CSIDL_STARTMENU CSIDL_COMMON_APPDATA
- CSIDL_LOCAL_APPDATA CSIDL_APPDATA CSIDL_COMMON_DESKTOPDIRECTORY
- CSIDL_DESKTOPDIRECTORY CSIDL_COMMON_STARTUP CSIDL_STARTUP
- CSIDL_COMMON_PROGRAMS CSIDL_PROGRAMS CSIDL_PROGRAM_FILES_COMMON
- CSIDL_PROGRAM_FILES CSIDL_FONTS""".split():
- if maybe == path_name:
- csidl = getattr(shellcon, maybe)
- return shell.SHGetSpecialFolderPath(
- 0, csidl, False
- )
- raise ValueError(
- f"{path_name} is an unknown path ID"
- )
-
-
-def get_winpython_start_menu_folder(current=True):
- """Return WinPython Start menu shortcuts folder"""
- if current:
- # non-admin install - always goes in this user's start menu.
- folder = get_special_folder_path("CSIDL_PROGRAMS")
- else:
- try:
- folder = get_special_folder_path(
- "CSIDL_COMMON_PROGRAMS"
- )
- except OSError:
- # No CSIDL_COMMON_PROGRAMS on this platform
- folder = get_special_folder_path(
- "CSIDL_PROGRAMS"
- )
- return str(Path(folder) / 'WinPython')
-
-def remove_winpython_start_menu_folder(current=True):
- """Remove WinPython Start menu folder -- remove it if it already exists"""
- path = get_winpython_start_menu_folder(current=current)
- if Path(path).is_dir():
- try:
- shutil.rmtree(path, onexc=onerror)
- except WindowsError:
- print(
- f"Directory {path} could not be removed",
- file=sys.stderr,
- )
-
-def create_winpython_start_menu_folder(current=True):
- """Create WinPython Start menu folder -- remove it if it already exists"""
- path = get_winpython_start_menu_folder(current=current)
- if Path(path).is_dir():
- try:
- shutil.rmtree(path, onexc=onerror)
- except WindowsError:
- print(
- f"Directory {path} could not be removed",
- file=sys.stderr,
- )
- # create, or re-create !
- os.mkdir(path)
- return path
-
-
-def create_shortcut(
- path,
- description,
- filename,
- arguments="",
- workdir="",
- iconpath="",
- iconindex=0,
- verbose=True,
-):
- """Create Windows shortcut (.lnk file)"""
- import pythoncom
- from win32com.shell import shell
-
- ilink = pythoncom.CoCreateInstance(
- shell.CLSID_ShellLink,
- None,
- pythoncom.CLSCTX_INPROC_SERVER,
- shell.IID_IShellLink,
- )
- ilink.SetPath(path)
- ilink.SetDescription(description)
- if arguments:
- ilink.SetArguments(arguments)
- if workdir:
- ilink.SetWorkingDirectory(workdir)
- if iconpath or iconindex:
- ilink.SetIconLocation(iconpath, iconindex)
- # now save it.
- ipf = ilink.QueryInterface(pythoncom.IID_IPersistFile)
- if not filename.endswith('.lnk'):
- filename += '.lnk'
- if verbose:
- print(f'create menu *{filename}*')
- try:
- ipf.Save(filename, 0)
- except:
- print ("a fail !")
- pass
-
-
-# =============================================================================
-# Misc.
-# =============================================================================
-
-
-def print_box(text):
- """Print text in a box"""
- line0 = "+" + ("-" * (len(text) + 2)) + "+"
- line1 = "| " + text + " |"
- print(
- ("\n\n" + "\n".join([line0, line1, line0]) + "\n")
- )
-
-
-def is_python_distribution(path):
- """Return True if path is a Python distribution"""
- # XXX: This test could be improved but it seems to be sufficient
- has_exec = Path(get_python_executable(path)).is_file()
- has_site = Path(get_site_packages_path(path)).is_dir()
- return has_exec and has_site
-
-
-# =============================================================================
-# Shell, Python queries
-# =============================================================================
-
-
-def decode_fs_string(string):
- """Convert string from file system charset to unicode"""
- charset = sys.getfilesystemencoding()
- if charset is None:
- charset = locale.getpreferredencoding()
- return string.decode(charset)
-
-
-def exec_shell_cmd(args, path):
- """Execute shell command (*args* is a list of arguments) in *path*"""
- # print " ".join(args)
- process = subprocess.Popen(
- args,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- cwd=path,
- shell=True
- )
- return decode_fs_string(process.stdout.read())
-
-def exec_run_cmd(args, path=None):
- """run a single command (*args* is a list of arguments) in optional *path*"""
- # only applicable to Python-3.5+
- # python-3.7+ allows to replace "stdout and stderr ", per "capture_output=True"
- if path:
- process = subprocess.run(args,
- capture_output=True,
- cwd=path, text=True)
- #return decode_fs_string(process.stdout)
- return process.stdout
- else:
- process = subprocess.run(args,
- capture_output=True,
- cwd=path, text=True)
- #return decode_fs_string(process.stdout)
- return process.stdout
-
-
-def get_r_version(path):
- """Return version of the R installed in *path*"""
- return (
- exec_shell_cmd('dir ..\README.R*', path)
- .splitlines()[-3]
- .split("-")[-1]
- )
-
-
-def get_julia_version(path):
- """Return version of the Julia installed in *path*"""
- return (
- exec_shell_cmd('julia.exe -v', path)
- .splitlines()[0]
- .split(" ")[-1]
- )
-
-
-def get_nodejs_version(path):
- """Return version of the Nodejs installed in *path*"""
- return exec_shell_cmd('node -v', path).splitlines()[0]
-
-
-def get_npmjs_version(path):
- """Return version of the Nodejs installed in *path*"""
- return exec_shell_cmd('npm -v', path).splitlines()[0]
-
-
-def get_pandoc_version(path):
- """Return version of the Pandoc executable in *path*"""
- return (
- exec_shell_cmd('pandoc -v', path)
- .splitlines()[0]
- .split(" ")[-1]
- )
-
-
-def python_query(cmd, path):
- """Execute Python command using the Python interpreter located in *path*"""
- the_exe = get_python_executable(path)
- # debug2021-09-12
- # print(f'"{the_exe}" -c "{cmd}"', ' * ', path)
- return exec_shell_cmd(f'"{the_exe}" -c "{cmd}"', path).splitlines()[0]
-
-def python_execmodule(cmd, path):
- """Execute Python command using the Python interpreter located in *path*"""
- the_exe = get_python_executable(path)
- exec_shell_cmd(f'{the_exe} -m {cmd}', path)
-
-
-def get_python_infos(path):
- """Return (version, architecture) for the Python distribution located in
- *path*. The version number is limited to MAJOR.MINOR, the architecture is
- an integer: 32 or 64"""
- is_64 = python_query(
- 'import sys; print(sys.maxsize > 2**32)', path
- )
- arch = {'True': 64, 'False': 32}.get(is_64, None)
- ver = python_query(
- "import sys;print(f'{sys.version_info.major}.{sys.version_info.minor}')"
- ,
- path,
- )
- if re.match(r'([0-9]*)\.([0-9]*)', ver) is None:
- ver = None
-
- return ver, arch
-
-
-def get_python_long_version(path):
- """Return long version (X.Y.Z) for the Python distribution located in
- *path*"""
- ver = python_query(
- "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}')"
- ,
- path,
- )
- if (
- re.match(r'([0-9]*)\.([0-9]*)\.([0-9]*)', ver)
- is None
- ):
- ver = None
- return ver
-
-
-# =============================================================================
-# Patch chebang line (courtesy of Christoph Gohlke)
-# =============================================================================
-def patch_shebang_line(
- fname, pad=b' ', to_movable=True, targetdir=""
-):
- """Remove absolute path to python.exe in shebang lines, or re-add it"""
-
- import re
- import sys
- import os
-
- target_dir = targetdir # movable option
- if to_movable == False:
- target_dir = os.path.abspath(os.path.dirname(fname))
- target_dir = (
- os.path.abspath(os.path.join(target_dir, r'..'))
- + '\\'
- )
- executable = sys.executable
- if sys.version_info[0] == 2:
- shebang_line = re.compile(
- r"(#!.*pythonw?\.exe)"
- ) # Python2.7
- else:
- shebang_line = re.compile(
- b"(#!.*pythonw?\.exe)"
- ) # Python3+
- if 'pypy3' in sys.executable:
- shebang_line = re.compile(
- b"(#!.*pypy3w?\.exe)"
- ) # Pypy3+
-
- target_dir = target_dir.encode('utf-8')
- with open(fname, 'rb') as fh:
- initial_content = fh.read()
- fh.close
- fh = None
- content = shebang_line.split(
- initial_content, maxsplit=1
- )
- if len(content) != 3:
- return
- exe = os.path.basename(content[1][2:])
- content[1] = (
- b'#!' + target_dir + exe
- ) # + (pad * (len(content[1]) - len(exe) - 2))
- final_content = b''.join(content)
- if initial_content == final_content:
- return
- try:
- with open(fname, 'wb') as fo:
- fo.write(final_content)
- fo.close
- fo = None
- print("patched", fname)
- except Exception:
- print("failed to patch", fname)
-
-
-# =============================================================================
-# Patch shebang line in .py files
-# =============================================================================
-def patch_shebang_line_py(
- fname, to_movable=True, targetdir=""
-):
- """Changes shebang line in '.py' file to relative or absolue path"""
- import fileinput
- import re
- import sys
-
- if sys.version_info[0] == 2:
- # Python 2.x doesn't create .py files for .exe files. So, Moving
- # WinPython doesn't break running executable files.
- return
- if to_movable:
- exec_path = '#!.\python.exe'
- if 'pypy3' in sys.executable: # PyPy !
- exec_path = '#!.\pypy3.exe'
- else:
- exec_path = '#!' + sys.executable
- for line in fileinput.input(fname, inplace=True):
- if re.match('^#\!.*python\.exe$', line) is not None:
- print(exec_path)
- elif re.match('^#\!.*pypy3\.exe$', line) is not None:# PyPy !
- print(exec_path)
- else:
- print(line, end='')
-
-
-# =============================================================================
-# Guess encoding (shall rather be utf-8 per default)
-# =============================================================================
-def guess_encoding(csv_file):
- """guess the encoding of the given file"""
- # UTF_8_BOM = "\xEF\xBB\xBF"
- # Python behavior on UTF-16 not great on write, so we drop it
- with io.open(csv_file, "rb") as f:
- data = f.read(5)
- if data.startswith(b"\xEF\xBB\xBF"): # UTF-8 with a "BOM" (normally no BOM in utf-8)
- return ["utf-8-sig"]
- else: # in Windows, guessing utf-8 doesn't work, so we have to try
- try:
- with io.open(csv_file, encoding="utf-8") as f:
- preview = f.read(222222)
- return ["utf-8"]
- except:
- return [locale.getdefaultlocale()[1], "utf-8"]
-
-# =============================================================================
-# Patch sourcefile (instead of forking packages)
-# =============================================================================
-def patch_sourcefile(
- fname, in_text, out_text, silent_mode=False
-):
- """Replace a string in a source file"""
- import io
-
- if Path(fname).is_file() and not in_text == out_text:
- the_encoding = guess_encoding(fname)[0]
- with io.open(fname, 'r', encoding=the_encoding) as fh:
- content = fh.read()
- new_content = content.replace(in_text, out_text)
- if not new_content == content:
- if not silent_mode:
- print(
- "patching ",
- fname,
- "from",
- in_text,
- "to",
- out_text,
- )
- with io.open(fname, 'wt', encoding=the_encoding) as fh:
- fh.write(new_content)
-
-
-# =============================================================================
-# Patch sourcelines (instead of forking packages)
-# =============================================================================
-def patch_sourcelines(
- fname,
- in_line_start,
- out_line,
- endline='\n',
- silent_mode=False,
-):
- """Replace the middle of lines between in_line_start and endline """
- import io
-
- if Path(fname).is_file():
- the_encoding = guess_encoding(fname)[0]
- with io.open(fname, 'r', encoding=the_encoding) as fh:
- contents = fh.readlines()
- content = "".join(contents)
- for l in range(len(contents)):
- if contents[l].startswith(in_line_start):
- begining, middle = (
- in_line_start,
- contents[l][len(in_line_start) :],
- )
- ending = ""
- if middle.find(endline) > 0:
- ending = endline + endline.join(
- middle.split(endline)[1:]
- )
- middle = middle.split(endline)[0]
- middle = out_line
- new_line = begining + middle + ending
- if not new_line == contents[l]:
- if not silent_mode:
- print(
- "patching ",
- fname,
- " from\n",
- contents[l],
- "\nto\n",
- new_line,
- )
- contents[l] = new_line
- new_content = "".join(contents)
- if not new_content == content:
- # if not silent_mode:
- # print("patching ", fname, "from", content, "to", new_content)
- with io.open(fname, 'wt', encoding=the_encoding) as fh:
- try:
- fh.write(new_content)
- except:
- print(
- "impossible to patch",
- fname,
- "from",
- content,
- "to",
- new_content,
- )
-
-
-# =============================================================================
-# Extract functions
-# =============================================================================
-def _create_temp_dir():
- """Create a temporary directory and remove it at exit"""
- tmpdir = tempfile.mkdtemp(prefix='wppm_')
- atexit.register(
- lambda path: shutil.rmtree(path, onexc=onerror),
- tmpdir,
- )
- return tmpdir
-
-
-def extract_archive(fname, targetdir=None, verbose=False):
- """Extract .zip, .exe (considered to be a zip archive) or .tar.gz archive
- to a temporary directory (if targetdir is None).
- Return the temporary directory path"""
- if targetdir is None:
- targetdir = _create_temp_dir()
- else:
- try:
- os.mkdir(targetdir)
- except:
- pass
- if Path(fname).suffix in ('.zip', '.exe'):
- obj = zipfile.ZipFile(fname, mode="r")
- elif fname.endswith('.tar.gz'):
- obj = tarfile.open(fname, mode='r:gz')
- else:
- raise RuntimeError(
- f"Unsupported archive filename {fname}"
- )
- obj.extractall(path=targetdir)
- return targetdir
-
-# SOURCE_PATTERN defines what an acceptable source package name is
-# As of 2014-09-08 :
-# - the wheel package format is accepte in source directory
-# - the tricky regexp is tuned also to support the odd jolib naming :
-# . joblib-0.8.3_r1-py2.py3-none-any.whl,
-# . joblib-0.8.3-r1.tar.gz
-
-SOURCE_PATTERN = r'([a-zA-Z0-9\-\_\.]*)-([0-9\.\_]*[a-z]*[\-]?[0-9]*)(\.zip|\.tar\.gz|\-(py[2-7]*|py[2-7]*\.py[2-7]*)\-none\-any\.whl)'
-
-# WHEELBIN_PATTERN defines what an acceptable binary wheel package is
-# "cp([0-9]*)" to replace per cp(34) for python3.4
-# "win32|win\_amd64" to replace per "win\_amd64" for 64bit
-WHEELBIN_PATTERN = r'([a-zA-Z0-9\-\_\.]*)-([0-9\.\_]*[a-z0-9\+]*[0-9]?)-cp([0-9]*)\-[0-9|c|o|n|e|p|m]*\-(win32|win\_amd64)\.whl'
-
-
-def get_source_package_infos(fname):
- """Return a tuple (name, version) of the Python source package"""
- if fname[-4:] == '.whl':
- return Path(fname).name.split("-")[:2]
- match = re.match(SOURCE_PATTERN, Path(fname).name)
- if match is not None:
- return match.groups()[:2]
-
-
-def buildflit_wininst(
- root,
- python_exe=None,
- copy_to=None,
- verbose=False,
-):
- """Build Wheel from Python package located in *root*
- with flit"""
- if python_exe is None:
- python_exe = sys.executable
- assert Path(python_exe).is_file()
- cmd = [python_exe, '-m' ,'flit', 'build']
-
- # root = a tmp dir in windows\tmp,
- if verbose:
- subprocess.call(cmd, cwd=root)
- else:
- p = subprocess.Popen(
- cmd,
- cwd=root,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
- p.communicate()
- p.stdout.close()
- p.stderr.close()
- distdir = str(Path(root) / 'dist')
- if not Path(distdir).is_dir():
- raise RuntimeError(
- "Build failed: see package README file for further"
- " details regarding installation requirements.\n\n"
- "For more concrete debugging infos, please try to build "
- "the package from the command line:\n"
- "1. Open a WinPython command prompt\n"
- "2. Change working directory to the appropriate folder\n"
- "3. Type `python -m filt build`"
- )
-
- for distname in os.listdir(distdir):
- # for wheels (winpython here)
- match = re.match(SOURCE_PATTERN, distname)
- if match is not None:
- break
- match = re.match(WHEELBIN_PATTERN, distname)
- if match is not None:
- break
- else:
- raise RuntimeError(
- f"Build failed: not a pure Python package? {distdir}"
- )
- src_fname = str(Path(distdir) / distname)
- if copy_to is None:
- return src_fname
- else:
- dst_fname = str(Path(copy_to) / distname)
- shutil.move(src_fname, dst_fname)
- if verbose:
- print(
- (
- f"Move: {src_fname} --> {dst_fname}"
- )
- )
- # remove tempo dir 'root' no more needed
- shutil.rmtree(root, onexc=onerror)
- return dst_fname
-
-
-def direct_pip_install(
- fname,
- python_exe=None,
- verbose=False,
- install_options=None,
-):
- """Direct install via python -m pip !"""
- copy_to = str(Path(fname).parent)
-
- if python_exe is None:
- python_exe = sys.executable
- assert Path(python_exe).is_file()
- myroot = str(Path(python_exe).parent)
-
- cmd = [python_exe, '-m', 'pip', 'install']
- if install_options:
- cmd += install_options # typically ['--no-deps']
- print('python -m pip install_options', install_options)
- cmd += [fname]
-
- if verbose:
- subprocess.call(cmd, cwd=myroot)
- else:
- p = subprocess.Popen(
- cmd,
- cwd=myroot,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
- stdout, stderr = p.communicate()
- the_log = f"{stdout}" + f"\n {stderr}"
-
- if (
- ' not find ' in the_log
- or ' not found ' in the_log
- ):
- print(f"Failed to Install: \n {fname} \n")
- print(f"msg: {the_log}")
- raise RuntimeError
- p.stdout.close()
- p.stderr.close()
- src_fname = fname
- if copy_to is None:
- return src_fname
- else:
- if verbose:
- print(f"Installed {src_fname}")
- return src_fname
-
-
-def do_script(
- this_script,
- python_exe=None,
- copy_to=None,
- verbose=False,
- install_options=None,
-):
- """Execute a script (get-pip typically)"""
- if python_exe is None:
- python_exe = sys.executable
- myroot = os.path.dirname(python_exe)
-
- # cmd = [python_exe, myroot + r'\Scripts\pip-script.py', 'install']
- cmd = [python_exe]
- if install_options:
- cmd += install_options # typically ['--no-deps']
- print('script install_options', install_options)
- if this_script:
- cmd += [this_script]
- # print('build_wheel', myroot, cmd)
- print("Executing ", cmd)
-
- if verbose:
- subprocess.call(cmd, cwd=myroot)
- else:
- p = subprocess.Popen(
- cmd,
- cwd=myroot,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
- p.communicate()
- p.stdout.close()
- p.stderr.close()
- if verbose:
- print("Executed " , cmd)
- return 'ok'
-
-def columns_width(list_of_lists):
- """return the maximum string length of each column of a list of list"""
- if not isinstance(list_of_lists, list):
- return [0]
-
- # Transpose the list of lists using zip
- transposed_lists = list(zip(*list_of_lists))
- # Calculate the maximum width for each column
- column_widths = [max(len(str(item)) for item in sublist) for sublist in transposed_lists]
- return column_widths
-
-def formatted_list(list_of_list, full=False, max_width=70):
- """format a list_of_list to fix length columns"""
- columns_size = columns_width(list_of_list)
- nb_columns = len(columns_size)
-
- # normalize each columns to columns_size[col] width, in the limit of max_width
-
- zz = [
- list(
- line[col].ljust(columns_size[col])[:max_width] for col in range(nb_columns)
- )
- for line in list_of_list
- ]
- return zz
-
-def normalize(this):
- """apply https://peps.python.org/pep-0503/#normalized-names"""
- return re.sub(r"[-_.]+", "-", this).lower()
-
-def get_package_metadata(database, name, update=False, suggested_summary=None):
- """Extract infos (description, url) from the local database"""
- # for package.ini safety belt
- # Note: we could use the PyPI database but this has been written on
- # machine which is not connected to the internet
- # we store only normalized names now (PEP 503)
- DATA_PATH = str(Path(sys.modules['winpython'].__file__).parent /'data')
- db = cp.ConfigParser()
- filepath = Path(database) if Path(database).is_absolute() else Path(DATA_PATH) / database
- try:
- db.read_file(open(str(filepath), encoding = 'utf-8'))
- except:
- db.read_file(open(str(filepath)))
- my_metadata = dict(
- description="",
- url="https://pypi.org/project/" + name,
- )
- for key in my_metadata:
- # wheel replace '-' per '_' in key
- for name2 in (name, normalize(name)):
- try:
- my_metadata[key] = db.get(name2, key)
- break
- except (cp.NoSectionError, cp.NoOptionError):
- pass
- db_desc = my_metadata.get("description")
-
- if my_metadata.get("description") == "" and suggested_summary:
- # nothing in package.ini, we look in our installed packages
- try:
- my_metadata["description"] = (
- suggested_summary + "\n"
- ).splitlines()[0]
- except:
- pass
-
- if update == True and db_desc == "" and my_metadata["description"] != "":
- # we add new findings in our packgages.ini list, if it's required
- try:
- db[normalize(name)] = {}
- db[normalize(name)]["description"] = my_metadata["description"]
- with open(str(Path(DATA_PATH) / database), "w", encoding='UTF-8') as configfile:
- db.write(configfile)
- except:
- pass
- return my_metadata
-
-
-if __name__ == '__main__':
-
- print_box("Test")
- dname = sys.prefix
- print((dname + ':', '\n', get_python_infos(dname)))
- # dname = r'E:\winpython\sandbox\python-2.7.3'
- # print dname+':', '\n', get_python_infos(dname)
-
- tmpdir = r'D:\Tests\winpython_tests'
- if not Path(tmpdir).is_dir():
- os.mkdir(tmpdir)
- print(
- (
- extract_archive(
- str(Path(r'D:\WinP\bd37') / 'packages.win-amd64' /
- 'python-3.7.3.amd64.zip'),
- tmpdir,
- )
- )
- )
diff --git a/winpython/wppm.py b/winpython/wppm.py
deleted file mode 100644
index 27feb107..00000000
--- a/winpython/wppm.py
+++ /dev/null
@@ -1,731 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright © 2012 Pierre Raybaut
-# Licensed under the terms of the MIT License
-# (see winpython/__init__.py for details)
-
-"""
-WinPython Package Manager
-
-Created on Fri Aug 03 14:32:26 2012
-"""
-
-import os
-from pathlib import Path
-import shutil
-import re
-import sys
-import subprocess
-import json
-
-# Local imports
-from winpython import utils
-
-# from former wppm separate script launcher
-import textwrap
-from argparse import ArgumentParser, HelpFormatter, RawTextHelpFormatter
-
-from winpython import piptree
-
-# import information reader
-# importlib_metadata before Python 3.8
-try:
- from importlib import metadata as metadata # Python-3.8
-
- metadata = metadata.metadata
-except:
- try:
- from importlib_metadata import metadata # 2]
- if key.lower() != 'description' or args.verbose==True:
- print(f"{key}: ", "\n".join(lines).replace('"', ""))
- sys.exit()
- if args.registerWinPython:
- print(registerWinPythonHelp)
- if utils.is_python_distribution(args.target):
- dist = Distribution(args.target)
- else:
- raise WindowsError(f"Invalid Python distribution {args.target}")
- print(f"registering {args.target}")
- print("continue ? Y/N")
- theAnswer = input()
- if theAnswer == "Y":
- from winpython import associate
-
- associate.register(dist.target, verbose=args.verbose)
- sys.exit()
- if args.unregisterWinPython:
- print(unregisterWinPythonHelp)
- if utils.is_python_distribution(args.target):
- dist = Distribution(args.target)
- else:
- raise WindowsError(f"Invalid Python distribution {args.target}")
- print(f"unregistering {args.target}")
- print("continue ? Y/N")
- theAnswer = input()
- if theAnswer == "Y":
- from winpython import associate
-
- associate.unregister(dist.target, verbose=args.verbose)
- sys.exit()
- elif not args.install and not args.uninstall:
- args.install = True
- if not Path(args.fname).is_file() and args.install:
- if args.fname == "":
- parser.print_help()
- sys.exit()
- else:
- raise IOError(f"File not found: {args.fname}")
- if utils.is_python_distribution(args.target):
- dist = Distribution(args.target, verbose=True)
- try:
- if args.uninstall:
- package = dist.find_package(args.fname)
- dist.uninstall(package)
- else:
- package = Package(args.fname)
- if args.install:
- dist.install(package)
- except NotImplementedError:
- raise RuntimeError("Package is not (yet) supported by WPPM")
- else:
- raise WindowsError(f"Invalid Python distribution {args.target}")
-
-
-if __name__ == "__main__":
- main()
\ No newline at end of file
diff --git a/winpython_builds_bd13.toml b/winpython_builds_bd13.toml
new file mode 100644
index 00000000..284b4056
--- /dev/null
+++ b/winpython_builds_bd13.toml
@@ -0,0 +1,54 @@
+[pythons]
+"311" = { python_target_release = "3119", release = "2", my_release_level = "b3" }
+"312" = { python_target_release = "31210", release = "2", my_release_level = "b3" }
+"313" = { python_target_release = "3135", release = "1", my_release_level = "b3" }
+"314" = { python_target_release = "3140", release = "1", my_release_level = "rc1" }
+
+
+[[builds]]
+name = "dot"
+root_dir_for_builds = "C:\\Winp"
+python_target = "313"
+pyver = "3.13"
+flavor = "test"
+arch = "64"
+create_installer = "7zip.zip"
+preclear_build_directory = "Yes"
+requirements = "C:\\Winp\\bd313\\dot_requirements.txt"
+source_dirs = "C:\\Winp\\bd313\\packages.win-amd64"
+find_links = "C:\\Winp\\packages.srcreq"
+toolsdirs = "C:\\Winp\\bdTools\\Tools.dot"
+install_options = "--no-index --pre --trusted-host=None"
+
+
+[[builds]]
+name = "slim"
+root_dir_for_builds = "C:\\Winp"
+python_target = "313"
+pyver = "3.13"
+flavor = "slim"
+arch = "64"
+create_installer = "7zip.7z"
+preclear_build_directory = "Yes"
+requirements = "C:\\Winp\\bd313\\requirements64_slim.txt"
+source_dirs = "C:\\Winp\\bd313\\packages.win-amd64"
+find_links = "C:\\Winp\\packages.srcreq"
+toolsdirs = "C:\\Winp\\bdTools\\tools64_pandoc_alone"
+install_options = "--no-index --pre --trusted-host=None"
+
+
+[[builds]]
+name = "whl"
+root_dir_for_builds = "C:\\Winp"
+python_target = "313"
+pyver = "3.13"
+flavor = "whl"
+arch = "64"
+create_installer = ".7z-mx9"
+preclear_build_directory = "Yes"
+requirements = "C:\\Winp\\bd313\\dot_requirements.txt"
+source_dirs = "C:\\Winp\\bd313\\packages.win-amd64"
+find_links = "C:\\Winp\\packages.srcreq"
+toolsdirs = "C:\\Winp\\bdTools\\Tools.dot"
+install_options = "--no-index --pre --trusted-host=None"
+wheelhousereq = "C:\\Winp\\bd313\\requirements64_whl.txt"
diff --git a/wppm/__init__.py b/wppm/__init__.py
new file mode 100644
index 00000000..02ec4fa3
--- /dev/null
+++ b/wppm/__init__.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+"""
+WinPython License Agreement (MIT License)
+-----------------------------------------
+
+Copyright (c) 2012-2013 Pierre Raybaut
+Copyright (c) 2014-2025+ The Winpython development team https://github.com/winpython/
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+"""
+
+__version__ = '17.2.20250802b2'
+__license__ = __doc__
+__project_url__ = 'http://winpython.github.io/'
diff --git a/wppm/__main__.py b/wppm/__main__.py
new file mode 100644
index 00000000..f34bb5e4
--- /dev/null
+++ b/wppm/__main__.py
@@ -0,0 +1,6 @@
+import os
+import sys
+if __name__ == "__main__":
+ from wppm import wppm
+
+ sys.exit(wppm.main())
\ No newline at end of file
diff --git a/wppm/associate.py b/wppm/associate.py
new file mode 100644
index 00000000..49da0ca0
--- /dev/null
+++ b/wppm/associate.py
@@ -0,0 +1,301 @@
+# -*- coding: utf-8 -*-
+#
+# associate.py = Register a Python distribution
+# Copyright © 2012 Pierre Raybaut
+# Licensed under the terms of the MIT License
+# (see winpython/__init__.py for details)
+
+import sys
+import os
+from pathlib import Path
+import importlib.util
+import winreg
+from . import utils
+from argparse import ArgumentParser
+import shutil
+
+def get_special_folder_path(path_name):
+ """Return special folder path."""
+ from win32com.shell import shell, shellcon
+ try:
+ csidl = getattr(shellcon, path_name)
+ return shell.SHGetSpecialFolderPath(0, csidl, False)
+ except OSError:
+ print(f"{path_name} is an unknown path ID")
+
+def get_winpython_start_menu_folder(current=True):
+ """Return WinPython Start menu shortcuts folder."""
+ folder = get_special_folder_path("CSIDL_PROGRAMS")
+ if not current:
+ try:
+ folder = get_special_folder_path("CSIDL_COMMON_PROGRAMS")
+ except OSError:
+ pass
+ return str(Path(folder) / 'WinPython')
+
+def remove_winpython_start_menu_folder(current=True):
+ """Remove WinPython Start menu folder -- remove it if it already exists"""
+ path = get_winpython_start_menu_folder(current=current)
+ if Path(path).is_dir():
+ try:
+ shutil.rmtree(path)
+ except WindowsError:
+ print(f"Directory {path} could not be removed", file=sys.stderr)
+
+def create_winpython_start_menu_folder(current=True):
+ """Create WinPython Start menu folder."""
+ path = get_winpython_start_menu_folder(current=current)
+ if Path(path).is_dir():
+ try:
+ shutil.rmtree(path)
+ except WindowsError:
+ print(f"Directory {path} could not be removed", file=sys.stderr)
+ Path(path).mkdir(parents=True, exist_ok=True)
+ return path
+
+def create_shortcut(path, description, filename, arguments="", workdir="", iconpath="", iconindex=0, verbose=True):
+ """Create Windows shortcut (.lnk file)."""
+ import pythoncom
+ from win32com.shell import shell
+ ilink = pythoncom.CoCreateInstance(shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink)
+ ilink.SetPath(path)
+ ilink.SetDescription(description)
+ if arguments:
+ ilink.SetArguments(arguments)
+ if workdir:
+ ilink.SetWorkingDirectory(workdir)
+ if iconpath or iconindex:
+ ilink.SetIconLocation(iconpath, iconindex)
+ # now save it.
+ ipf = ilink.QueryInterface(pythoncom.IID_IPersistFile)
+ if not filename.endswith('.lnk'):
+ filename += '.lnk'
+ if verbose:
+ print(f'create menu *{filename}*')
+ try:
+ ipf.Save(filename, 0)
+ except:
+ print("a fail !")
+
+# --- Helper functions for Registry ---
+
+def _set_reg_value(root, key_path, name, value, reg_type=winreg.REG_SZ, verbose=False):
+ """Helper to create key and set a registry value using CreateKeyEx."""
+ rootkey_name = "HKEY_CURRENT_USER" if root == winreg.HKEY_CURRENT_USER else "HKEY_LOCAL_MACHINE"
+ if verbose:
+ print(f"{rootkey_name}\\{key_path}\\{name if name else ''}:{value}")
+ try:
+ # Use CreateKeyEx with context manager for automatic closing
+ with winreg.CreateKeyEx(root, key_path, 0, winreg.KEY_WRITE) as key:
+ winreg.SetValueEx(key, name, 0, reg_type, value)
+ except OSError as e:
+ print(f"Error creating/setting registry value {rootkey_name}\\{key_path}\\{name}: {e}", file=sys.stderr)
+
+def _delete_reg_key(root, key_path, verbose=False):
+ """Helper to delete a registry key, ignoring if not found."""
+ rootkey_name = "HKEY_CURRENT_USER" if root == winreg.HKEY_CURRENT_USER else "HKEY_LOCAL_MACHINE"
+ if verbose:
+ print(f"{rootkey_name}\\{key_path}")
+ try:
+ # DeleteKey can only delete keys with no subkeys.
+ # For keys with (still) subkeys, use DeleteKeyEx on the parent key if available
+ winreg.DeleteKey(root, key_path)
+ except FileNotFoundError:
+ if verbose:
+ print(f"Registry key not found (skipping deletion): {rootkey_name}\\{key_path}")
+ except OSError as e: # Catch other potential errors like key not empty
+ print(f"Error deleting registry key {rootkey_name}\\{key_path}: {e}", file=sys.stderr)
+
+
+# --- Helper functions for Start Menu Shortcuts ---
+
+def _has_pywin32():
+ """Check if pywin32 (pythoncom) is installed."""
+ return importlib.util.find_spec('pythoncom') is not None
+
+def _remove_start_menu_folder(target, current=True, has_pywin32=False):
+ "remove menu Folder for target WinPython if pywin32 exists"
+ if has_pywin32:
+ remove_winpython_start_menu_folder(current=current)
+ else:
+ print("Skipping start menu removal as pywin32 package is not installed.")
+
+def _get_shortcut_data(target, current=True, has_pywin32=False):
+ "get windows menu access data if pywin32 exists, otherwise empty list"
+ if not has_pywin32:
+ return []
+
+ wpdir = str(Path(target).parent)
+ data = []
+ for name in os.listdir(wpdir):
+ bname, ext = Path(name).stem, Path(name).suffix
+ if ext.lower() == ".exe":
+ # Path for the shortcut file in the start menu folder
+ shortcut_name = str(Path(create_winpython_start_menu_folder(current=current)) / bname) + '.lnk'
+ data.append(
+ (
+ str(Path(wpdir) / name), # Target executable path
+ bname, # Description/Name
+ shortcut_name, # Shortcut file path
+ )
+ )
+ return data
+
+# --- PythonCore entries (PEP-0514 and WinPython specific) ---
+
+
+def register_in_registery(target, current=True, reg_type=winreg.REG_SZ, verbose=True) -> tuple[list[any], ...]:
+ """Register in Windows (like regedit)"""
+
+ # --- Constants ---
+ DROP_HANDLER_CLSID = "{60254CA5-953B-11CF-8C96-00AA00B8708C}"
+
+ # --- CONFIG ---
+ target_path = Path(target).resolve()
+ python_exe = str(target_path / "python.exe")
+ pythonw_exe = str(target_path / "pythonw.exe")
+ spyder_exe = str(target_path.parent / "Spyder.exe")
+ icon_py = str(target_path / "DLLs" / "py.ico")
+ icon_pyc = str(target_path / "DLLs" / "pyc.ico")
+ idle_path = str(target_path / "Lib" / "idlelib" / "idle.pyw")
+ doc_path = str(target_path / "Doc" / "html" / "index.html")
+ python_infos = utils.get_python_infos(target) # ('3.11', 64)
+ short_version = python_infos[0] # e.g., '3.11'
+ version = utils.get_python_long_version(target) # e.g., '3.11.5'
+ arch = f'{python_infos[1]}bit' # e.g., '64bit'
+ display = f"Python {version} ({arch})"
+
+ permanent_entries = [] # key_path, name, value
+ dynamic_entries = [] # key_path, name, value
+ core_entries = [] # key_path, name, value
+ lost_entries = [] # intermediate keys to remove later
+ # --- File associations ---
+ ext_map = {".py": "Python.File", ".pyw": "Python.NoConFile", ".pyc": "Python.CompiledFile"}
+ ext_label = {".py": "Python File", ".pyw": "Python File (no console)", ".pyc": "Compiled Python File"}
+ for ext, ftype in ext_map.items():
+ permanent_entries.append((f"Software\\Classes\\{ext}", None, ftype))
+ if ext in (".py", ".pyw"):
+ permanent_entries.append((f"Software\\Classes\\{ext}", "Content Type", "text/plain"))
+
+ # --- Descriptions, Icons, DropHandlers ---
+ for ext, ftype in ext_map.items():
+ dynamic_entries.append((f"Software\\Classes\\{ftype}", None, ext_label[ext]))
+ dynamic_entries.append((f"Software\\Classes\\{ftype}\\DefaultIcon", None, icon_py if "Compiled" not in ftype else icon_pyc))
+ dynamic_entries.append((f"Software\\Classes\\{ftype}\\shellex\\DropHandler", None, DROP_HANDLER_CLSID))
+ lost_entries.append((f"Software\\Classes\\{ftype}\\shellex", None, None))
+
+ # --- Shell commands ---
+ for ext, ftype in ext_map.items():
+ dynamic_entries.append((f"Software\\Classes\\{ftype}\\shell\\open\\command", None, f'''"{pythonw_exe if ftype=='Python.NoConFile' else python_exe}" "%1" %*'''))
+ lost_entries.append((f"Software\\Classes\\{ftype}\\shell\\open", None, None))
+ lost_entries.append((f"Software\\Classes\\{ftype}\\shell", None, None))
+
+ dynamic_entries.append((rf"Software\Classes\Python.File\shell\Edit with IDLE\command", None, f'"{pythonw_exe}" "{idle_path}" -n -e "%1"'))
+ dynamic_entries.append((rf"Software\Classes\Python.NoConFile\shell\Edit with IDLE\command", None, f'"{pythonw_exe}" "{idle_path}" -n -e "%1"'))
+ lost_entries.append((rf"Software\Classes\Python.File\shell\Edit with IDLE", None, None))
+ lost_entries.append((rf"Software\Classes\Python.NoConFile\shell\Edit with IDLE", None, None))
+
+ if Path(spyder_exe).exists():
+ dynamic_entries.append((rf"Software\Classes\Python.File\shell\Edit with Spyder\command", None, f'"{spyder_exe}" "%1" -w "%w"'))
+ dynamic_entries.append((rf"Software\Classes\Python.NoConFile\shell\Edit with Spyder\command", None, f'"{spyder_exe}" "%1" -w "%w"'))
+ lost_entries.append((rf"Software\Classes\Python.File\shell\Edit with Spyder", None, None))
+ lost_entries.append((rf"Software\Classes\Python.NoConFile\shell\Edit with Spyder", None, None))
+
+ # --- WinPython Core registry entries (PEP 514 style) ---
+ base = f"Software\\Python\\WinPython\\{short_version}"
+ core_entries.append((base, "DisplayName", display))
+ core_entries.append((base, "SupportUrl", "https://winpython.github.io"))
+ core_entries.append((base, "SysVersion", short_version))
+ core_entries.append((base, "SysArchitecture", arch))
+ core_entries.append((base, "Version", version))
+
+ core_entries.append((f"{base}\\InstallPath", None, str(target)))
+ core_entries.append((f"{base}\\InstallPath", "ExecutablePath", python_exe))
+ core_entries.append((f"{base}\\InstallPath", "WindowedExecutablePath", pythonw_exe))
+ core_entries.append((f"{base}\\InstallPath\\InstallGroup", None, f"Python {short_version}"))
+
+ core_entries.append((f"{base}\\Modules", None, ""))
+ core_entries.append((f"{base}\\PythonPath", None, f"{target}\\Lib;{target}\\DLLs"))
+ core_entries.append((f"{base}\\Help\\Main Python Documentation", None, doc_path))
+ lost_entries.append((f"{base}\\Help", None, None))
+ lost_entries.append((f"Software\\Python\\WinPython", None, None))
+
+ return permanent_entries, dynamic_entries, core_entries, lost_entries
+
+# --- Main Register/Unregister Functions ---
+
+def register(target, current=True, reg_type=winreg.REG_SZ, verbose=True):
+ """Register a Python distribution in Windows registry and create Start Menu shortcuts"""
+ root = winreg.HKEY_CURRENT_USER if current else winreg.HKEY_LOCAL_MACHINE
+ has_pywin32 = _has_pywin32()
+
+ if verbose:
+ print(f'Creating WinPython registry entries for {target}')
+
+ permanent_entries, dynamic_entries, core_entries, lost_entries = register_in_registery(target)
+ # Set registry entries for given target
+ for key_path, name, value in permanent_entries + dynamic_entries + core_entries:
+ _set_reg_value(root, key_path, name, value, verbose=verbose)
+
+ # Create start menu entries
+ if has_pywin32:
+ if verbose:
+ print(f'Creating WinPython menu for all icons in {Path(target).parent}')
+ for path, desc, fname in _get_shortcut_data(target, current=current, has_pywin32=True):
+ try:
+ create_shortcut(path, desc, fname, verbose=verbose)
+ except Exception as e:
+ print(f"Error creating shortcut for {desc} at {fname}: {e}", file=sys.stderr)
+ else:
+ print("Skipping start menu shortcut creation as pywin32 package is needed.")
+
+def unregister(target, current=True, verbose=True):
+ """Unregister a Python distribution from Windows registry and remove Start Menu shortcuts"""
+ root = winreg.HKEY_CURRENT_USER if current else winreg.HKEY_LOCAL_MACHINE
+ has_pywin32 = _has_pywin32()
+
+ if verbose:
+ print(f'Removing WinPython registry entries for {target}')
+
+ permanent_entries, dynamic_entries, core_entries , lost_entries = register_in_registery(target)
+
+ # List of keys to attempt to delete, ordered from most specific to general
+ keys_to_delete = sorted(list(set(key_path for key_path , name, value in (dynamic_entries + core_entries + lost_entries))), key=len, reverse=True)
+
+ rootkey_name = "HKEY_CURRENT_USER" if root == winreg.HKEY_CURRENT_USER else "HKEY_LOCAL_MACHINE"
+ for key_path in keys_to_delete:
+ _delete_reg_key(root, key_path, verbose=verbose)
+
+ # Remove start menu shortcuts
+ if has_pywin32:
+ if verbose:
+ print(f'Removing WinPython menu for all icons in {Path(target).parent}')
+ _remove_start_menu_folder(target, current=current, has_pywin32=True)
+ # The original code had commented out code to delete .lnk files individually.
+ else:
+ print("Skipping start menu removal as pywin32 package is needed.")
+
+
+if __name__ == "__main__":
+ # Ensure we are running from the target WinPython environment
+ parser = ArgumentParser(description="Register or Un-register Python file extensions, icons "\
+ "and Windows explorer context menu to this "\
+ "Python distribution.")
+ parser.add_argument('--unregister', action="store_true",
+ help='register to all users, requiring administrative '\
+ 'privileges (default: register to current user only)')
+ parser.add_argument('--all', action="store_true",
+ help='action is to all users, requiring administrative '\
+ 'privileges (default: to current user only)')
+ args = parser.parse_args()
+ expected_target = Path(sys.prefix)
+ command = "unregister" if args.unregister else "register"
+ users = "all" if args.all else "user"
+ print(f"Attempting to {command} the Python environment for {users} at: {expected_target}")
+
+ target_dir = sys.prefix # Or get from arguments
+ is_current_user = True # Or get from arguments
+ if command == "register":
+ register(expected_target, current=not args.all)
+ else:
+ unregister(expected_target, current=not args.all)
diff --git a/wppm/diff.py b/wppm/diff.py
new file mode 100644
index 00000000..12671faf
--- /dev/null
+++ b/wppm/diff.py
@@ -0,0 +1,211 @@
+# -*- coding: utf-8 -*-
+#
+# WinPython diff.py script (streamlined, with historical and flexible modes)
+# Copyright © 2013 Pierre Raybaut
+# Copyright © 2014-2025+ The Winpython development team https://github.com/winpython/
+# Licensed under the terms of the MIT License
+
+import os
+import re
+import sys
+import shutil
+from pathlib import Path
+from packaging import version
+from . import utils
+
+CHANGELOGS_DIR = Path(__file__).parent.parent / "changelogs"
+
+class Package:
+ PATTERNS = [
+ r"\[([\w\-\:\/\.\_]+)\]\(([^)]+)\) \| ([^\|]*) \| ([^\|]*)", # SourceForge
+ r"\[([\w\-\:\/\.\_]+) ([^\]\ ]+)\] \| ([^\|]*) \| ([^\|]*)" # Google Code
+ ]
+ def __init__(self, text=None):
+ self.name = self.url = self.version = self.description = None
+ if text:
+ self.from_text(text)
+ def from_text(self, text):
+ for pattern in self.PATTERNS:
+ match = re.match(pattern, text)
+ if match:
+ self.name, self.url, self.version, self.description = match.groups()
+ return
+ raise ValueError(f"Unrecognized package line format: {text}")
+
+class PackageIndex:
+ HEADERS = {"tools": "### Tools", "python": "### Python packages", "wheelhouse": "### WheelHouse packages"}
+ BLANKS = ["Name | Version | Description", "-----|---------|------------", "", "", " "]
+
+ def __init__(self, content):
+ self.packages = {k: {} for k in self.HEADERS}
+ self._parse_index(content)
+
+ def _parse_index(self, text):
+ current = None
+ for line in text.splitlines():
+ if line in self.HEADERS.values():
+ current = [k for k, v in self.HEADERS.items() if v == line][0]
+ continue
+ if line.strip() in self.BLANKS:
+ continue
+ if current:
+ try:
+ pkg = Package(line)
+ self.packages[current][pkg.name] = pkg
+ except Exception:
+ continue
+
+def compare_packages(old, new):
+ def normalize(d): return {k.replace("-", "_").lower(): v for k, v in d.items()}
+ old, new = normalize(old), normalize(new)
+ added = [new[k] for k in new if k not in old]
+ upgraded = [new[k] for k in new if k in old and new[k].version != old[k].version]
+ removed = [old[k] for k in old if k not in new]
+ output = ""
+ if added:
+ output += "\nNew packages:\n" + "".join(f" * {p.name} {p.version} ({p.description})\n" for p in added)
+ if upgraded:
+ output += "\nUpgraded packages:\n" + "".join(f" * {p.name} {old[p.name].version} â {p.version} ({p.description})\n" for p in upgraded if p.name in old)
+ if removed:
+ output += "\nRemoved packages:\n" + "".join(f" * {p.name} {p.version} ({p.description})\n" for p in removed)
+ return output or "\nNo differences found.\n"
+
+def compare_markdown_sections(md1, md2, header1="python", header2="python", label1="Input1", label2="Input2"):
+ pkgs1 = PackageIndex(md1).packages
+ pkgs2 = PackageIndex(md2).packages
+ diff = compare_packages(pkgs1[header1], pkgs2[header2])
+ # If comparing the same section, use the historical header
+ if header1 == header2 and header1 in PackageIndex.HEADERS:
+ title = PackageIndex.HEADERS[header1]
+ else:
+ title = f"## {label1} [{header1}] vs {label2} [{header2}]"
+ return f"{title}\n\n{diff}"
+
+def compare_markdown_section_pairs(md1, md2, header_pairs, label1="Input1", label2="Input2"):
+ pkgs1 = PackageIndex(md1).packages
+ pkgs2 = PackageIndex(md2).packages
+ text = f"# {label1} vs {label2} section-pairs comparison\n"
+ for h1, h2 in header_pairs:
+ diff = compare_packages(pkgs1[h1], pkgs2[h2])
+ if diff.strip() and diff != "No differences found.\n":
+ text += f"\n## {label1} [{h1}] vs {label2} [{h2}]\n\n{diff}\n"
+ return text
+
+def compare_files(file1, file2, mode="full", header1=None, header2=None, header_pairs=None):
+ with open(file1, encoding=utils.guess_encoding(file1)[0]) as f1, \
+ open(file2, encoding=utils.guess_encoding(file2)[0]) as f2:
+ md1, md2 = f1.read(), f2.read()
+ if mode == "full":
+ result = ""
+ for k in PackageIndex.HEADERS:
+ result += compare_markdown_sections(md1, md2, k, k, file1, file2) + "\n"
+ return result
+ elif mode == "section":
+ return compare_markdown_sections(md1, md2, header1, header2, file1, file2)
+ elif mode == "pairs":
+ return compare_markdown_section_pairs(md1, md2, header_pairs, file1, file2)
+ else:
+ raise ValueError("Unknown mode.")
+
+# --- ORIGINAL/HISTORICAL VERSION-TO-VERSION COMPARISON ---
+
+def find_previous_version(target_version, searchdir=None, flavor="", architecture=64):
+ search_dir = Path(searchdir) if searchdir else CHANGELOGS_DIR
+ pattern = re.compile(rf"WinPython{flavor}-{architecture}bit-([0-9\.]+)\.(txt|md)")
+ versions = [pattern.match(f).group(1) for f in os.listdir(search_dir) if pattern.match(f)]
+ versions = [v for v in versions if version.parse(v) < version.parse(target_version)]
+ return max(versions, key=version.parse, default=target_version)
+
+def load_version_markdown(version, searchdir, flavor="", architecture=64):
+ filename = Path(searchdir) / f"WinPython{flavor}-{architecture}bit-{version}.md"
+ if not filename.exists():
+ raise FileNotFoundError(f"Changelog not found: {filename}")
+ with open(filename, "r", encoding=utils.guess_encoding(filename)[0]) as f:
+ return f.read()
+
+def compare_package_indexes(version2, version1=None, searchdir=None, flavor="", flavor1=None, architecture=64):
+ searchdir = Path(searchdir) if searchdir else CHANGELOGS_DIR
+ version1 = version1 or find_previous_version(version2, searchdir, flavor, architecture)
+ flavor1 = flavor1 or flavor
+ md1 = load_version_markdown(version1, searchdir, flavor1, architecture)
+ md2 = load_version_markdown(version2, searchdir, flavor, architecture)
+ result = f"# WinPython {architecture}bit {version2}{flavor} vs {version1}{flavor1}\n"
+ result = (
+ f"## History of changes for WinPython-{architecture}bit {version2 + flavor}\r\n\r\n"
+ f"The following changes were made to WinPython-{architecture}bit distribution since version {version1 + flavor1}.\n\n\n"
+ "\n\n"
+ )
+ for k in PackageIndex.HEADERS:
+ result += compare_markdown_sections(md1, md2, k, k, version1, version2) + "\n"
+ return result+ "\n \n\n* * *\n"
+
+def copy_changelogs(version, searchdir, flavor="", architecture=64, basedir=None):
+ """Copy all changelogs for a major.minor version into basedir."""
+ basever = ".".join(str(version).split(".")[:2])
+ pattern = re.compile(rf"WinPython{flavor}-{architecture}bit-{basever}[0-9\.]*\.(txt|md)")
+ dest = Path(basedir)
+ for fname in os.listdir(searchdir):
+ if pattern.match(fname):
+ shutil.copyfile(Path(searchdir) / fname, dest / fname)
+
+def write_changelog(version2, version1=None, searchdir=None, flavor="", architecture=64, basedir=None):
+ """Write changelog between version1 and version2 of WinPython."""
+ searchdir = Path(searchdir) if searchdir else CHANGELOGS_DIR
+ if basedir:
+ copy_changelogs(version2, searchdir, flavor, architecture, basedir)
+ changelog = compare_package_indexes(version2, version1, searchdir, flavor, architecture=architecture)
+ output_file = searchdir / f"WinPython{flavor}-{architecture}bit-{version2}_History.md"
+ with open(output_file, "w", encoding="utf-8") as f:
+ f.write(changelog)
+ if basedir:
+ shutil.copyfile(output_file, Path(basedir) / output_file.name)
+
+def print_usage():
+ print("Usage:")
+ print(" python diff.py file1.md file2.md")
+ print(" - Compare all sections of two markdown files.")
+ print(" python diff.py file1.md file2.md --section header1 header2")
+ print(" - Compare section 'header1' of file1 with section 'header2' of file2.")
+ print(" python diff.py file1.md file2.md --pairs header1a header2a [header1b header2b ...]")
+ print(" - Compare pairs of sections. Example: python diff.py f1.md f2.md --pairs python wheelhouse tools tools")
+ print(" python diff.py [searchdir] [flavor] [architecture]")
+ print(" - Compare WinPython markdown changelogs by version (historical mode).")
+ print(" python diff.py --write-changelog [searchdir] [flavor] [architecture] [basedir]")
+ print(" - Write changelog between version1 and version2 to file (and optionally copy to basedir).")
+
+if __name__ == "__main__":
+ args = sys.argv
+ if len(args) >= 3 and all(arg.lower().endswith('.md') for arg in args[1:3]):
+ file1, file2 = args[1], args[2]
+ if len(args) == 3:
+ print(compare_files(file1, file2))
+ elif args[3] == "--section" and len(args) >= 6:
+ h1, h2 = args[4], args[5]
+ print(compare_files(file1, file2, mode="section", header1=h1, header2=h2))
+ elif args[3] == "--pairs" and len(args) > 4 and len(args[4:]) % 2 == 0:
+ pairs = list(zip(args[4::2], args[5::2]))
+ print(compare_files(file1, file2, mode="pairs", header_pairs=pairs))
+ else:
+ print_usage()
+ elif len(args) >= 2 and args[1] == "--write-changelog":
+ # Usage: --write-changelog [searchdir] [flavor] [architecture] [basedir]
+ if len(args) < 4:
+ print_usage()
+ sys.exit(1)
+ version2 = args[2]
+ version1 = args[3]
+ searchdir = args[4] if len(args) > 4 else CHANGELOGS_DIR
+ flavor = args[5] if len(args) > 5 else ""
+ architecture = int(args[6]) if len(args) > 6 else 64
+ basedir = args[7] if len(args) > 7 else None
+ write_changelog(version2, version1, searchdir, flavor, architecture, basedir)
+ print(f"Changelog written for {version2} vs {version1}.")
+ elif len(args) >= 3:
+ version2 = args[1]
+ version1 = args[2] if len(args) > 2 and not args[2].endswith('.md') else None
+ searchdir = args[3] if len(args) > 3 else CHANGELOGS_DIR
+ flavor = args[4] if len(args) > 4 else ""
+ architecture = int(args[5]) if len(args) > 5 else 64
+ print(compare_package_indexes(version2, version1, searchdir, flavor, architecture=architecture))
+ else:
+ print_usage()
\ No newline at end of file
diff --git a/wppm/hash.py b/wppm/hash.py
new file mode 100644
index 00000000..e0bdd46a
--- /dev/null
+++ b/wppm/hash.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+"""
+hash.py: compute hash of given files into a markdown output
+"""
+# Copyright © 2014-2025+ The Winpython development team https://github.com/winpython/
+# Licensed under the terms of the MIT License
+# (see winpython/__init__.py for details)
+
+from pathlib import Path
+import sys
+import hashlib
+
+def compute_hash(file_path, hash_function, digest_size=None):
+ """Compute the hash of a file using the specified hash function."""
+ try:
+ with open(file_path, 'rb') as file:
+ if digest_size:
+ return hash_function(file.read(), digest_size=digest_size).hexdigest()
+ return hash_function(file.read()).hexdigest()
+ except IOError as e:
+ print(f"Error reading file {file_path}: {e}")
+ return None
+
+def print_hashes(files):
+ """Print the hashes of the given files."""
+ header = f"{'MD5':<32} | {'SHA-1':<40} | {'SHA-256':<64} | {'Binary':<33} | {'Size':<20} | {'blake2b-256':<64}"
+ line = "|".join(["-" * len(part) for part in header.split("|")])
+
+ print(header)
+ print(line)
+
+ for file in sorted(files):
+ md5 = compute_hash(file, hashlib.md5)
+ sha1 = compute_hash(file, hashlib.sha1)
+ sha256 = compute_hash(file, hashlib.sha256)
+ name = Path(file).name.ljust(33)
+ size = f"{Path(file).stat().st_size:,} Bytes".replace(",", " ").rjust(20)
+ blake2b = compute_hash(file, hashlib.blake2b, digest_size=32)
+ print(f"{md5} | {sha1} | {sha256} | {name} | {size} | {blake2b}")
+
+if __name__ == '__main__':
+ if len(sys.argv) < 2:
+ print("Usage: hash.py files_to_compute_hash")
+ sys.exit(1)
+ files = [file for file in sys.argv[1:] if file[-3:].lower() != ".py"]
+ print_hashes(files)
diff --git a/wppm/packagemetadata.py b/wppm/packagemetadata.py
new file mode 100644
index 00000000..a51e8331
--- /dev/null
+++ b/wppm/packagemetadata.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+"""
+packagemetadata.py - get metadata from designated place
+"""
+import os
+import re
+import tarfile
+import zipfile
+import sys
+from pathlib import Path
+from typing import Dict, List, Optional, Tuple
+from . import utils
+import importlib.metadata
+import email
+from packaging.utils import canonicalize_name
+# --- Abstract metadata accessor ---
+
+class PackageMetadata:
+ """A minimal abstraction for package metadata."""
+ def __init__(self, name, version, requires, summary, description, metadata):
+ self.name = name
+ self.version = version
+ self.requires = requires # List[str] of dependencies
+ self.summary = summary
+ self.description = description
+ self.metadata = metadata
+
+def get_installed_metadata(path = None) -> List[PackageMetadata]:
+ # Use importlib.metadata or pkg_resources
+ pkgs = []
+ distro = importlib.metadata.distributions(path = path) if path else importlib.metadata.distributions()
+ for dist in distro:
+ name = canonicalize_name(dist.metadata['Name'])
+ version = dist.version
+ summary = dist.metadata.get("Summary", ""),
+ description = dist.metadata.get("Description", ""),
+ requires = dist.requires or []
+ metadata = dist.metadata
+ pkgs.append(PackageMetadata(name, version, requires, summary, description, metadata))
+ return pkgs
+
+def get_directory_metadata(directory: str) -> List[PackageMetadata]:
+ # For each .whl/.tar.gz file in directory, extract metadata
+ pkgs = []
+ for fname in os.listdir(directory):
+ if fname.endswith('.whl'):
+ # Extract METADATA from wheel
+ meta = extract_metadata_from_wheel(os.path.join(directory, fname))
+ pkgs.append(meta)
+ elif fname.endswith('.tar.gz'):
+ # Extract PKG-INFO from sdist
+ meta = extract_metadata_from_sdist(os.path.join(directory, fname))
+ pkgs.append(meta)
+ return pkgs
+
+def extract_metadata_from_wheel(path: str) -> PackageMetadata:
+ with zipfile.ZipFile(path) as zf:
+ for name in zf.namelist():
+ if name.endswith(r'.dist-info/METADATA') and name.split("/")[1] == "METADATA":
+ with zf.open(name) as f:
+ # Parse metadata (simple parsing for Name, Version, Requires-Dist)
+ return parse_metadata_file(f.read().decode())
+ raise ValueError(f"No METADATA found in {path}")
+
+def extract_metadata_from_sdist(path: str) -> PackageMetadata:
+ with tarfile.open(path, "r:gz") as tf:
+ for member in tf.getmembers():
+ if member.name.endswith('PKG-INFO'):
+ f = tf.extractfile(member)
+ return parse_metadata_file(f.read().decode())
+ raise ValueError(f"No PKG-INFO found in {path}")
+
+def parse_metadata_file(txt: str) -> PackageMetadata:
+ meta = email.message_from_string(txt)
+ name = canonicalize_name(meta.get('Name', ''))
+ version = meta.get('Version', '')
+ summary = meta.get('Summary', '')
+ description = meta.get('Description', '')
+ requires = meta.get_all('Requires-Dist') or []
+ return PackageMetadata(name, version, requires, summary, description, dict(meta.items()))
+
+def main():
+ if len(sys.argv) > 1:
+ # Directory mode
+ directory = sys.argv[1]
+ pkgs = get_directory_metadata(directory)
+ else:
+ # Installed packages mode
+ pkgs = get_installed_metadata()
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/wppm/piptree.py b/wppm/piptree.py
new file mode 100644
index 00000000..d6569b4d
--- /dev/null
+++ b/wppm/piptree.py
@@ -0,0 +1,290 @@
+# -*- coding: utf-8 -*-
+"""
+piptree.py: inspect and display Python package dependencies,
+supporting both downward and upward dependency trees.
+Requires Python 3.8+ due to importlib.metadata.
+"""
+
+import json
+import sys
+import re
+import platform
+import os
+import logging
+from functools import lru_cache
+from collections import OrderedDict
+from typing import Dict, List, Optional, Tuple, Union
+from pip._vendor.packaging.markers import Marker
+from importlib.metadata import Distribution, distributions
+from pathlib import Path
+from . import utils
+from . import packagemetadata as pm
+
+logging.basicConfig(level=logging.INFO)
+logger = logging.getLogger(__name__)
+
+class PipDataError(Exception):
+ """Custom exception for PipData related errors."""
+ pass
+
+class PipData:
+ """Manages package metadata and dependency relationships in a Python environment."""
+
+ def __init__(self, target: Optional[str] = None, wheelhouse = None):
+ """
+ Initialize the PipData instance.
+
+ :param target: Optional target path to search for packages
+ """
+ self.distro: Dict[str, Dict] = {}
+ self.raw: Dict[str, Dict] = {}
+ self.environment = self._get_environment()
+ try:
+ packages = self._get_packages(target or sys.executable, wheelhouse)
+ self._process_packages(packages)
+ self._populate_reverse_dependencies()
+ except Exception as e:
+ raise PipDataError(f"Failed to initialize package data: {str(e)}") from e
+
+ @staticmethod
+ @lru_cache(maxsize=None)
+ def normalize(name: str) -> str:
+ """Normalize package name per PEP 503."""
+ return re.sub(r"[-_.]+", "-", name).lower()
+
+ def _get_environment(self) -> Dict[str, str]:
+ """Collect system and Python environment details."""
+ return {
+ "implementation_name": sys.implementation.name,
+ "implementation_version": f"{sys.implementation.version.major}.{sys.implementation.version.minor}.{sys.implementation.version.micro}",
+ "os_name": os.name,
+ "platform_machine": platform.machine(),
+ "platform_release": platform.release(),
+ "platform_system": platform.system(),
+ "platform_version": platform.version(),
+ "python_full_version": platform.python_version(),
+ "platform_python_implementation": platform.python_implementation(),
+ "python_version": ".".join(platform.python_version_tuple()[:2]),
+ "sys_platform": sys.platform,
+ }
+
+ def _get_packages(self, search_path: str, wheelhouse) -> List[Distribution]:
+ """Retrieve installed packages from the specified path."""
+ if wheelhouse:
+ return pm.get_directory_metadata(wheelhouse)
+ if sys.executable == search_path:
+ return pm.get_installed_metadata() #Distribution.discover()
+ else:
+ return pm.get_installed_metadata(path=[str(Path(search_path).parent / 'lib' / 'site-packages')]) #distributions(path=[str(Path(search_path).parent / 'lib' / 'site-packages')])
+
+ def _process_packages(self, packages: List[Distribution]) -> None:
+ """Process packages metadata and store them in the distro dictionary."""
+ for package in packages:
+ try:
+ meta = package.metadata
+ name = meta.get('Name')
+ if not name:
+ continue
+ key = self.normalize(name)
+ self.raw[key] = meta
+ self.distro[key] = {
+ "name": name,
+ "version": package.version,
+ "summary": meta.get("Summary", ""),
+ "requires_dist": self._get_requires(package),
+ "reverse_dependencies": [],
+ "description": meta.get("Description", ""),
+ "provides": self._get_provides(package),
+ "provided": {'': None} # Placeholder for extras provided by this package
+ }
+ except Exception as e:
+ logger.warning(f"Failed to process package {name}: {str(e)}", exc_info=True)
+
+ def _get_requires(self, package: Distribution) -> List[Dict[str, str]]:
+ """Extract and normalize requirements for a package."""
+ requires = []
+ replacements = str.maketrans({" ": " ", "[": "", "]": "", "'": "", '"': ""})
+ further_replacements = [
+ (' == ', '=='), ('= ', '='), (' !=', '!='), (' ~=', '~='),
+ (' <', '<'), ('< ', '<'), (' >', '>'), ('> ', '>'),
+ ('; ', ';'), (' ;', ';'), ('( ', '('),
+ (' and (', ' andZZZZZ('), (' (', '('), (' andZZZZZ(', ' and (')
+ ]
+
+ if package.requires:
+ for req in package.requires:
+ req_nameextra, req_marker = (req + ";").split(";")[:2]
+ req_nameextra = self.normalize(re.split(r" |;|==|!|>|<|~=", req_nameextra + ";")[0])
+ req_key = self.normalize((req_nameextra + "[").split("[")[0])
+ req_key_extra = req_nameextra[len(req_key) + 1:].split("]")[0]
+ req_version = req[len(req_nameextra):].translate(replacements)
+
+ for old, new in further_replacements:
+ req_version = req_version.replace(old, new)
+
+ req_add = {
+ "req_key": req_key,
+ "req_version": req_version,
+ "req_extra": req_key_extra,
+ }
+ if req_marker != "":
+ req_add["req_marker"] = req_marker
+ requires.append(req_add)
+ return requires
+
+ def _get_provides(self, package: Distribution) -> Dict[str, None]:
+ """Extract provided extras from package requirements."""
+ provides = {'': None}
+ if package.requires:
+ for req in package.requires:
+ req_marker = (req + ";").split(";")[1]
+ if 'extra == ' in req_marker:
+ remove_list = {ord("'"): None, ord('"'): None}
+ provides[req_marker.split('extra == ')[1].translate(remove_list)] = None
+ return provides
+
+ def _populate_reverse_dependencies(self) -> None:
+ """Populate reverse dependencies."""
+ for pkg_key, pkg_data in self.distro.items():
+ for req in pkg_data["requires_dist"]:
+ target_key = req["req_key"]
+ if target_key in self.distro:
+ rev_dep = {"req_key": pkg_key, "req_version": req["req_version"], "req_extra": req["req_extra"]}
+ if "req_marker" in req:
+ rev_dep["req_marker"] = req["req_marker"]
+ if 'extra == ' in req["req_marker"]:
+ remove_list = {ord("'"): None, ord('"'): None}
+ self.distro[target_key]["provided"][req["req_marker"].split('extra == ')[1].translate(remove_list)] = None
+ self.distro[target_key]["reverse_dependencies"].append(rev_dep)
+
+ def _get_dependency_tree(self, package_name: str, extra: str = "", version_req: str = "", depth: int = 20, path: Optional[List[str]] = None, verbose: bool = False, upward: bool = False) -> List[List[str]]:
+ """Recursive function to build dependency tree."""
+ path = path or []
+ extras = extra.split(",")
+ pkg_key = self.normalize(package_name)
+ ret_all = []
+
+ full_name = f"{package_name}[{extra}]" if extra else package_name
+ if full_name in path:
+ logger.warning(f"Cycle detected: {' -> '.join(path + [full_name])}")
+ return []
+
+ pkg_data = self.distro[pkg_key]
+ if pkg_data and len(path) <= depth:
+ for extra in extras:
+ environment = {"extra": extra, **self.environment}
+ summary = f' {pkg_data["summary"]}' if verbose else ''
+ base_name = f'{package_name}[{extra}]' if extra else package_name
+ ret = [f'{base_name}=={pkg_data["version"]} {version_req}{summary}']
+
+ dependencies = pkg_data["requires_dist"] if not upward else pkg_data["reverse_dependencies"]
+
+ for dependency in dependencies:
+ if dependency["req_key"] in self.distro:
+ next_path = path + [base_name]
+ if upward:
+ up_req = (dependency.get("req_marker", "").split('extra == ')+[""])[1].strip("'\"")
+ if dependency["req_key"] in self.distro and dependency["req_key"]+"["+up_req+"]" not in path:
+ # upward dependancy taken if:
+ # - if extra "" demanded, and no marker from upward package: like pandas[] ==> numpy
+ # - or the extra is in the upward package, like pandas[test] ==> pytest, for 'test' extra
+ # - or an extra "array" is demanded, and indeed in the req_extra list: array,dataframe,diagnostics,distributer
+ if (not dependency.get("req_marker") and extra == "") or \
+ ("req_marker" in dependency and extra == up_req and \
+ dependency["req_key"] != pkg_key and \
+ Marker(dependency["req_marker"]).evaluate(environment=environment)) or \
+ ("req_marker" in dependency and extra != "" and \
+ extra + ',' in dependency["req_extra"] + ',' and \
+ Marker(dependency["req_marker"]).evaluate(environment=environment | {"extra": up_req})):
+ # IA risk error: # dask[array] go upwards as dask[dataframe], so {"extra": up_req} , not {"extra": extra}
+ #tag downward limiting dependancies
+ wall = " " if dependency["req_version"][:1] == "~" or dependency["req_version"].startswith("==") or "<" in dependency["req_version"] else ""
+ ret += self._get_dependency_tree(
+ dependency["req_key"],
+ up_req,
+ f"[requires{wall}: {package_name}"
+ + (f"[{dependency['req_extra']}]" if dependency["req_extra"] != "" else "")
+ + f'{dependency["req_version"]}]',
+ depth,
+ next_path,
+ verbose=verbose,
+ upward=upward,
+ )
+ elif not dependency.get("req_marker") or Marker(dependency["req_marker"]).evaluate(environment=environment):
+ ret += self._get_dependency_tree(
+ dependency["req_key"],
+ dependency["req_extra"],
+ dependency["req_version"],
+ depth,
+ next_path,
+ verbose=verbose,
+ upward=upward,
+ )
+
+ ret_all.append(ret)
+ return ret_all
+
+ def down(self, pp: str = "", extra: str = "", depth: int = 20, indent: int = 5, version_req: str = "", verbose: bool = False) -> str:
+ """Generate downward dependency tree as formatted string."""
+ if pp == ".":
+ results = [self.down(p, extra, depth, indent, version_req, verbose=verbose) for p in sorted(self.distro)]
+ return '\n'.join(filter(None, results))
+
+ if extra == ".":
+ if pp in self.distro:
+ results = [self.down(pp, one_extra, depth, indent, version_req, verbose=verbose)
+ for one_extra in sorted(self.distro[pp]["provides"])]
+ return '\n'.join(filter(None, results))
+ return ""
+
+ if pp not in self.distro:
+ return ""
+
+ rawtext = json.dumps(self._get_dependency_tree(pp, extra, version_req, depth, verbose=verbose), indent=indent)
+ lines = [l for l in rawtext.split("\n") if len(l.strip()) > 2]
+ return "\n".join(lines).replace('"', "")
+
+ def up(self, ppw: str, extra: str = "", depth: int = 20, indent: int = 5, version_req: str = "", verbose: bool = False) -> str:
+ """Generate upward dependency tree as formatted string."""
+ pp = ppw[:-1] if ppw.endswith('!') else ppw
+ ppend = "!" if ppw.endswith('!') else "" #show only downward limiting dependancies
+ if pp == ".":
+ results = [aa for p in sorted(self.distro) if '[requires' in (aa:=self.up(p + ppend, extra, depth, indent, version_req, verbose))]
+ return '\n'.join(filter(None, results))
+
+ if extra == ".":
+ if pp in self.distro:
+ extras = set(self.distro[pp]["provided"]).union(set(self.distro[pp]["provides"]))
+ results = [self.up(pp + ppend, e, depth, indent, version_req, verbose=verbose) for e in sorted(extras)]
+ return '\n'.join(filter(None, results))
+ return ""
+
+ if pp not in self.distro:
+ return ""
+
+ rawtext = json.dumps(self._get_dependency_tree(pp, extra, version_req, depth, verbose=verbose, upward=True), indent=indent)
+ lines = [l for l in rawtext.split("\n") if len(l.strip()) > 2 and ( ppend=="" or not "[requires:" in l)]
+ return "\n".join(filter(None, lines)).replace('"', "").replace('[requires :', '[requires:')
+
+ def description(self, pp: str) -> None:
+ """Return package description or None if not found."""
+ if pp in self.distro:
+ return print("\n".join(self.distro[pp]["description"].split(r"\n")))
+
+ def summary(self, pp: str) -> str:
+ """Return package summary or empty string if not found."""
+ if pp in self.distro:
+ return self.distro[pp]["summary"]
+ return ""
+
+ def pip_list(self, full: bool = False, max_length: int = 144) -> List[Tuple[str, Union[str, Tuple[str, str]]]]:
+ """List installed packages with optional details.
+
+ :param full: Whether to include the package version and summary
+ :param max_length: The maximum length for the summary
+ :return: List of tuples containing package information
+ """
+ pkgs = sorted(self.distro.items())
+ if full:
+ return [(p, d["version"], utils.sum_up(d["summary"], max_length)) for p, d in pkgs]
+ return [(p, d["version"]) for p, d in pkgs]
diff --git a/wppm/utils.py b/wppm/utils.py
new file mode 100644
index 00000000..20f154e7
--- /dev/null
+++ b/wppm/utils.py
@@ -0,0 +1,351 @@
+# -*- coding: utf-8 -*-
+#
+# WinPython utilities
+# Copyright © 2012 Pierre Raybaut
+# Copyright © 2014-2025+ The Winpython development team https://github.com/winpython/
+# Licensed under the terms of the MIT License
+# (see winpython/__init__.py for details)
+
+import os
+import sys
+import stat
+import shutil
+import locale
+import subprocess
+from pathlib import Path
+import re
+import tarfile
+import zipfile
+
+# SOURCE_PATTERN defines what an acceptable source package name is
+SOURCE_PATTERN = r'([a-zA-Z0-9\-\_\.]*)-([0-9\.\_]*[a-z]*[\-]?[0-9]*)(\.zip|\.tar\.gz|\-(py[2-7]*|py[2-7]*\.py[2-7]*)\-none\-any\.whl)'
+
+# WHEELBIN_PATTERN defines what an acceptable binary wheel package is
+WHEELBIN_PATTERN = r'([a-zA-Z0-9\-\_\.]*)-([0-9\.\_]*[a-z0-9\+]*[0-9]?)-cp([0-9]*)\-[0-9|c|o|n|e|p|m]*\-(win32|win\_amd64)\.whl'
+
+def get_python_executable(path=None):
+ """Return the path to the Python executable."""
+ python_path = Path(path) if path else Path(sys.executable)
+ base_dir = python_path if python_path.is_dir() else python_path.parent
+ python_exe = base_dir / 'python.exe'
+ pypy_exe = base_dir / 'pypy3.exe' # For PyPy
+ return str(python_exe if python_exe.is_file() else pypy_exe)
+
+def get_site_packages_path(path=None):
+ """Return the path to the Python site-packages directory."""
+ python_path = Path(path) if path else Path(sys.executable)
+ base_dir = python_path if python_path.is_dir() else python_path.parent
+ site_packages = base_dir / 'Lib' / 'site-packages'
+ pypy_site_packages = base_dir / 'site-packages' # For PyPy
+ return str(pypy_site_packages if pypy_site_packages.is_dir() else site_packages)
+
+def get_installed_tools(path=None)-> str:
+ """Generates Markdown for installed tools section in package index."""
+ tool_lines = []
+ python_exe = Path(get_python_executable(path))
+ version = exec_shell_cmd(f'powershell (Get-Item {python_exe}).VersionInfo.FileVersion', python_exe.parent).splitlines()[0]
+ tool_lines.append(("Python" ,f"http://www.python.org/", version, "Python programming language with standard library"))
+ if (node_exe := python_exe.parent.parent / "n" / "node.exe").exists():
+ version = exec_shell_cmd(f'powershell (Get-Item {node_exe}).VersionInfo.FileVersion', node_exe.parent).splitlines()[0]
+ tool_lines.append(("Nodejs", "https://nodejs.org", version, "a JavaScript runtime built on Chrome's V8 JavaScript engine"))
+
+ if (pandoc_exe := python_exe.parent.parent / "t" / "pandoc.exe").exists():
+ version = exec_shell_cmd("pandoc -v", pandoc_exe.parent).splitlines()[0].split(" ")[-1]
+ tool_lines.append(("Pandoc", "https://pandoc.org", version, "an universal document converter"))
+
+ if (vscode_exe := python_exe.parent.parent / "t" / "VSCode" / "Code.exe").exists():
+ version = exec_shell_cmd(f'powershell (Get-Item {vscode_exe}).VersionInfo.FileVersion', vscode_exe.parent).splitlines()[0]
+ tool_lines.append(("VSCode","https://code.visualstudio.com", version, "a source-code editor developed by Microsoft"))
+ return tool_lines
+
+def onerror(function, path, excinfo):
+ """Error handler for `shutil.rmtree`."""
+ if not os.access(path, os.W_OK):
+ os.chmod(path, stat.S_IWUSR)
+ function(path)
+ else:
+ raise
+
+def sum_up(text: str, max_length: int = 144, stop_at: str = ". ") -> str:
+ """Summarize text to fit within max_length, ending at last complete sentence."""
+ summary = (text + os.linesep).splitlines()[0].strip()
+ if len(summary) <= max_length:
+ return summary
+ if stop_at and stop_at in summary[:max_length]:
+ return summary[:summary.rfind(stop_at, 0, max_length)] + stop_at.strip()
+ return summary[:max_length].strip()
+
+def print_box(text):
+ """Print text in a box"""
+ line0 = "+" + ("-" * (len(text) + 2)) + "+"
+ line1 = "| " + text + " |"
+ print("\n\n" + "\n".join([line0, line1, line0]) + "\n")
+
+def is_python_distribution(path):
+ """Return True if path is a Python distribution."""
+ has_exec = Path(get_python_executable(path)).is_file()
+ has_site = Path(get_site_packages_path(path)).is_dir()
+ return has_exec and has_site
+
+def decode_fs_string(string):
+ """Convert string from file system charset to unicode."""
+ charset = sys.getfilesystemencoding() or locale.getpreferredencoding()
+ return string.decode(charset)
+
+def exec_shell_cmd(args, path):
+ """Execute shell command (*args* is a list of arguments) in *path*."""
+ process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=path, shell=True)
+ return decode_fs_string(process.stdout.read())
+
+def exec_run_cmd(args, path=None):
+ """Run a single command (*args* is a list of arguments) in optional *path*."""
+ process = subprocess.run(args, capture_output=True, cwd=path, text=True)
+ return process.stdout
+
+def python_query(cmd, path):
+ """Execute Python command using the Python interpreter located in *path*."""
+ the_exe = get_python_executable(path)
+ return exec_shell_cmd(f'"{the_exe}" -c "{cmd}"', path).splitlines()[0]
+
+def python_execmodule(cmd, path):
+ """Execute Python command using the Python interpreter located in *path*."""
+ the_exe = get_python_executable(path)
+ exec_shell_cmd(f'{the_exe} -m {cmd}', path)
+
+def get_python_infos(path):
+ """Return (version, architecture) for the Python distribution located in *path*."""
+ is_64 = python_query("import sys; print(sys.maxsize > 2**32)", path)
+ arch = {"True": 64, "False": 32}.get(is_64, None)
+ ver = python_query("import sys;print(f'{sys.version_info.major}.{sys.version_info.minor}')", path)
+ return ver, arch
+
+def get_python_long_version(path):
+ """Return long version (X.Y.Z) for the Python distribution located in *path*."""
+ ver = python_query("import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}')", path)
+ return ver if re.match(r"([0-9]*)\.([0-9]*)\.([0-9]*)", ver) else None
+
+def patch_shebang_line(fname, pad=b" ", to_movable=True, targetdir=""):
+ """Remove absolute path to python.exe in shebang lines in binary files, or re-add it."""
+ target_dir = targetdir if to_movable else os.path.abspath(os.path.join(os.path.dirname(fname), r"..")) + "\\"
+ executable = sys.executable
+ shebang_line = re.compile(rb"""(#!.*pythonw?\.exe)"?""") # Python3+
+ if "pypy3" in sys.executable:
+ shebang_line = re.compile(rb"""(#!.*pypy3w?\.exe)"?""") # Pypy3+
+ target_dir = target_dir.encode("utf-8")
+
+ with open(fname, "rb") as fh:
+ initial_content = fh.read()
+ content = shebang_line.split(initial_content, maxsplit=1)
+ if len(content) != 3:
+ return
+ exe = os.path.basename(content[1][2:])
+ content[1] = b"#!" + target_dir + exe # + (pad * (len(content[1]) - len(exe) - 2))
+ final_content = b"".join(content)
+ if initial_content == final_content:
+ return
+ try:
+ with open(fname, "wb") as fo:
+ fo.write(final_content)
+ print("patched", fname)
+ except Exception:
+ print("failed to patch", fname)
+
+def patch_shebang_line_py(fname, to_movable=True, targetdir=""):
+ """Changes shebang line in '.py' file to relative or absolue path"""
+ import fileinput
+ exec_path = r'#!.\python.exe' if to_movable else '#!' + sys.executable
+ if 'pypy3' in sys.executable:
+ exec_path = r'#!.\pypy3.exe' if to_movable else exec_path
+ for line in fileinput.input(fname, inplace=True):
+ if re.match(r'^#\!.*python\.exe$', line) or re.match(r'^#\!.*pypy3\.exe$', line):
+ print(exec_path)
+ else:
+ print(line, end='')
+
+def guess_encoding(csv_file):
+ """guess the encoding of the given file"""
+ with open(csv_file, "rb") as f:
+ data = f.read(5)
+ if data.startswith(b"\xEF\xBB\xBF"): # UTF-8 with a "BOM" (normally no BOM in utf-8)
+ return ["utf-8-sig"]
+ try:
+ with open(csv_file, encoding="utf-8") as f:
+ preview = f.read(222222)
+ return ["utf-8"]
+ except:
+ return [locale.getdefaultlocale()[1], "utf-8"]
+
+def replace_in_file(filepath: Path, replacements: list[tuple[str, str]], filedest: Path = None, verbose=False):
+ """
+ Replaces strings in a file
+ Args:
+ filepath: Path to the file to modify.
+ replacements: A list of tuples of ('old string 'new string')
+ filedest: optional output file, otherwise will be filepath
+ """
+ the_encoding = guess_encoding(filepath)[0]
+ with open(filepath, "r", encoding=the_encoding) as f:
+ content = f.read()
+ new_content = content
+ for old_text, new_text in replacements:
+ new_content = new_content.replace(old_text, new_text)
+ outfile = filedest if filedest else filepath
+ if new_content != content or str(outfile) != str(filepath):
+ with open(outfile, "w", encoding=the_encoding) as f:
+ f.write(new_content)
+ if verbose:
+ print(f"patched from {Path(filepath).name} into {outfile} !")
+
+def patch_sourcefile(fname, in_text, out_text, silent_mode=False):
+ """Replace a string in a source file."""
+ if not silent_mode:
+ print(f"patching {fname} from {in_text} to {out_text}")
+ if Path(fname).is_file() and in_text != out_text:
+ replace_in_file(Path(fname), [(in_text, out_text)])
+
+def extract_archive(fname, targetdir=None, verbose=False):
+ """Extract .zip, .exe or .tar.gz archive to a temporary directory.
+ Return the temporary directory path"""
+ targetdir = targetdir or create_temp_dir()
+ Path(targetdir).mkdir(parents=True, exist_ok=True)
+ if Path(fname).suffix in ('.zip', '.exe'):
+ obj = zipfile.ZipFile(fname, mode="r")
+ elif fname.endswith('.tar.gz'):
+ obj = tarfile.open(fname, mode='r:gz')
+ else:
+ raise RuntimeError(f"Unsupported archive filename {fname}")
+ obj.extractall(path=targetdir)
+ return targetdir
+
+def get_source_package_infos(fname):
+ """Return a tuple (name, version) of the Python source package."""
+ if fname.endswith('.whl'):
+ return Path(fname).name.split("-")[:2]
+ match = re.match(SOURCE_PATTERN, Path(fname).name)
+ return match.groups()[:2] if match else None
+
+def buildflit_wininst(root, python_exe=None, copy_to=None, verbose=False):
+ """Build Wheel from Python package located in *root* with flit."""
+ python_exe = python_exe or sys.executable
+ cmd = [python_exe, '-m', 'flit', 'build']
+ if verbose:
+ subprocess.call(cmd, cwd=root)
+ else:
+ subprocess.Popen(cmd, cwd=root, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
+ distdir = Path(root) / 'dist'
+ if not distdir.is_dir():
+ raise RuntimeError(
+ "Build failed: see package README file for further details regarding installation requirements.\n\n"
+ "For more concrete debugging infos, please try to build the package from the command line:\n"
+ "1. Open a WinPython command prompt\n"
+ "2. Change working directory to the appropriate folder\n"
+ "3. Type `python -m flit build`"
+ )
+ for distname in os.listdir(distdir):
+ if re.match(SOURCE_PATTERN, distname) or re.match(WHEELBIN_PATTERN, distname):
+ break
+ else:
+ raise RuntimeError(f"Build failed: not a pure Python package? {distdir}")
+
+ src_fname = distdir / distname
+ if copy_to:
+ dst_fname = Path(copy_to) / distname
+ shutil.move(src_fname, dst_fname)
+ if verbose:
+ print(f"Move: {src_fname} --> {dst_fname}")
+
+def direct_pip_install(fname, python_exe=None, verbose=False, install_options=None):
+ """Direct install via python -m pip !"""
+ python_exe = python_exe or sys.executable
+ myroot = Path(python_exe).parent
+ cmd = [python_exe, "-m", "pip", "install"] + (install_options or []) + [fname]
+ if not verbose:
+ process = subprocess.Popen(cmd, cwd=myroot, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ stdout, stderr = process.communicate()
+ the_log = f"{stdout}\n {stderr}"
+ if " not find " in the_log or " not found " in the_log:
+ print(f"Failed to Install: \n {fname} \n msg: {the_log}")
+ raise RuntimeError
+ process.stdout.close()
+ process.stderr.close()
+ else:
+ subprocess.call(cmd, cwd=myroot)
+ print(f"Installed {fname} via {' '.join(cmd)}")
+ return fname
+
+def do_script(this_script, python_exe=None, copy_to=None, verbose=False, install_options=None):
+ """Execute a script (get-pip typically)."""
+ python_exe = python_exe or sys.executable
+ myroot = Path(python_exe).parent
+ # cmd = [python_exe, myroot + r'\Scripts\pip-script.py', 'install']
+ cmd = [python_exe] + (install_options or []) + ([this_script] if this_script else [])
+ print("Executing ", cmd)
+ if not verbose:
+ subprocess.Popen(cmd, cwd=myroot, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
+ else:
+ subprocess.call(cmd, cwd=myroot)
+ print("Executed ", cmd)
+ return 'ok'
+
+def columns_width(list_of_lists):
+ """Return the maximum string length of each column of a list of lists."""
+ if not isinstance(list_of_lists, list):
+ return [0]
+ return [max(len(str(item)) for item in sublist) for sublist in zip(*list_of_lists)]
+
+def formatted_list(list_of_list, full=False, max_width=70):
+ """Format a list_of_list to fixed length columns."""
+ columns_size = columns_width(list_of_list)
+ columns = range(len(columns_size))
+ return [list(line[col].ljust(columns_size[col])[:max_width] for col in columns) for line in list_of_list]
+
+def normalize(this):
+ """Apply PEP 503 normalization to the string."""
+ return re.sub(r"[-_.]+", "-", this).lower()
+
+def zip_directory(folder_path, output_zip_path):
+ folder_path = Path(folder_path)
+ output_zip_path = Path(output_zip_path)
+
+ with zipfile.ZipFile(output_zip_path, 'w', compression=zipfile.ZIP_DEFLATED) as zipf:
+ for file in folder_path.rglob('*'):
+ if file.is_file():
+ arcname = file.relative_to(folder_path)
+ zipf.write(file, arcname)
+
+def find_7zip_executable() -> str:
+ """Locates the 7-Zip executable (7z.exe)."""
+ possible_program_files = [r"C:\Program Files", r"C:\Program Files (x86)", Path(sys.prefix).parent / "t"]
+ for base_dir in possible_program_files:
+ if (executable_path := Path(base_dir) / "7-Zip" / "7z.exe").is_file():
+ return str(executable_path)
+ raise RuntimeError("7ZIP is not installed on this computer.")
+
+def create_installer_7zip(origin, destination, filename_stem, installer_type: str = "exe", compression= "mx5"):
+ """Creates a WinPython installer using 7-Zip: "exe", "7z", "zip")"""
+ fullfilename = destination / (filename_stem + "." + installer_type)
+ if installer_type not in ["exe", "7z", "zip"]:
+ return
+ sfx_option = "-sfx7z.sfx" if installer_type == "exe" else ""
+ zip_option = "-tzip" if installer_type == "zip" else ""
+ compress_level = "mx5" if compression == "" else compression
+ command = f'"{find_7zip_executable()}" {zip_option} -{compress_level} a "{fullfilename}" "{origin}" {sfx_option}'
+ print(f'Executing 7-Zip script: "{command}"')
+ try:
+ subprocess.run(command, shell=True, check=True, stderr=sys.stderr, stdout=sys.stderr)
+ except subprocess.CalledProcessError as e:
+ print(f"Error executing 7-Zip script: {e}", file=sys.stderr)
+
+def command_installer_7zip(origin, destination, filename_stem, create_installer: str = "exe"):
+ for commmand in create_installer.lower().replace("7zip",".exe").split('.'):
+ installer_type, compression = (commmand + "-").split("-")[:2]
+ create_installer_7zip(Path(origin), Path(destination), filename_stem, installer_type, compression)
+
+if __name__ == '__main__':
+ print_box("Test")
+ dname = sys.prefix
+ print((dname + ':', '\n', get_python_infos(dname)))
+
+ tmpdir = r'D:\Tests\winpython_tests'
+ Path(tmpdir).mkdir(parents=True, exist_ok=True)
+ print(extract_archive(str(Path(r'D:\WinP\bd37') / 'packages.win-amd64' / 'python-3.7.3.amd64.zip'), tmpdir))
diff --git a/wppm/wheelhouse.py b/wppm/wheelhouse.py
new file mode 100644
index 00000000..7ed9e54f
--- /dev/null
+++ b/wppm/wheelhouse.py
@@ -0,0 +1,207 @@
+#!/usr/bin/env python3
+"""
+WheelHouse.py - manage WinPython local WheelHouse.
+"""
+import sys
+from pathlib import Path
+from collections import defaultdict
+import shutil
+import subprocess
+from typing import Dict, List, Optional, Tuple
+from . import packagemetadata as pm
+
+# Use tomllib if available (Python 3.11+), otherwise fall back to tomli
+try:
+ import tomllib # Python 3.11+
+except ImportError:
+ try:
+ import tomli as tomllib # For older Python versions
+ except ImportError:
+ print("Please install tomli for Python < 3.11: pip install tomli")
+ sys.exit(1)
+
+def parse_pylock_toml(path: Path) -> Dict[str, Dict[str, str | List[str]]]:
+ """Parse a pylock.toml file and extract package information."""
+ with open(path, "rb") as f:
+ data = tomllib.load(f)
+
+ # This dictionary maps package names to (version, [hashes])
+ package_hashes = defaultdict(lambda: {"version": "", "hashes": []})
+
+ for entry in data.get("packages", []):
+ name = entry["name"]
+ version = entry["version"]
+ all_hashes = []
+
+ # Handle wheels
+ for wheel in entry.get("wheels", []):
+ sha256 = wheel.get("hashes", {}).get("sha256")
+ if sha256:
+ all_hashes.append(sha256)
+
+ # Handle sdist (if present)
+ sdist = entry.get("sdist")
+ if sdist and "hashes" in sdist:
+ sha256 = sdist["hashes"].get("sha256")
+ if sha256:
+ all_hashes.append(sha256)
+
+ package_hashes[name]["version"] = version
+ package_hashes[name]["hashes"].extend(all_hashes)
+
+ return package_hashes
+
+def write_requirements_txt(package_hashes: Dict[str, Dict[str, str | List[str]]], output_path: Path) -> None:
+ """Write package requirements to a requirements.txt file."""
+ with open(output_path, "w") as f:
+ for name, data in sorted(package_hashes.items()):
+ version = data["version"]
+ hashes = data["hashes"]
+
+ if hashes:
+ f.write(f"{name}=={version} \\\n")
+ for i, h in enumerate(hashes):
+ end = " \\\n" if i < len(hashes) - 1 else "\n"
+ f.write(f" --hash=sha256:{h}{end}")
+ else:
+ f.write(f"{name}=={version}\n")
+
+ print(f"â
requirements.txt written to {output_path}")
+
+def pylock_to_req(path: Path, output_path: Optional[Path] = None) -> None:
+ """Convert a pylock.toml file to requirements.txt."""
+ pkgs = parse_pylock_toml(path)
+ if not output_path:
+ output_path = path.parent / (path.stem.replace('pylock', 'requirement_with_hash') + '.txt')
+ write_requirements_txt(pkgs, output_path)
+
+def run_pip_command(command: List[str], check: bool = True, capture_output=True) -> Tuple[bool, Optional[str]]:
+ """Run a pip command and return the result."""
+ print('\n', ' '.join(command),'\n')
+ try:
+ result = subprocess.run(
+ command,
+ capture_output=capture_output,
+ text=True,
+ check=check
+ )
+ return (result.returncode == 0), (result.stderr or result.stdout)
+ except subprocess.CalledProcessError as e:
+ return False, e.stderr
+ except FileNotFoundError:
+ return False, "pip or Python not found."
+ except Exception as e:
+ return False, f"Unexpected error: {e}"
+
+def get_wheels(requirements: Path, wheeldrain: Path, wheelorigin: Optional[Path] = None
+ , only_check: bool = True,post_install: bool = False) -> bool:
+ """Download or check Python wheels based on requirements."""
+ added = []
+ if wheelorigin:
+ added = ['--no-index', '--trusted-host=None', f'--find-links={wheelorigin}']
+ pre_checks = [sys.executable, "-m", "pip", "install", "--dry-run", "--no-deps", "--require-hashes", "-r", str(requirements)] + added
+ instruction = [sys.executable, "-m", "pip", "download", "--no-deps", "--require-hashes", "-r", str(requirements), "--dest", str(wheeldrain)] + added
+ if wheeldrain:
+ added = ['--no-index', '--trusted-host=None', f'--find-links={wheeldrain}']
+ post_install_cmd = [sys.executable, "-m", "pip", "install", "--no-deps", "--require-hashes", "-r", str(requirements)] + added
+
+ # Run pip dry-run, only if a move of wheels
+ if wheelorigin and wheelorigin != wheeldrain:
+ success, output = run_pip_command(pre_checks, check=False)
+ if not success:
+ print("â Dry-run failed. Here's the output:\n")
+ print(output or "")
+ return False
+
+ print("â
Requirements can be installed successfully (dry-run passed).\n")
+
+ # All ok
+ if only_check and not post_install:
+ return True
+
+ # Want to install
+ if not only_check and post_install:
+ success, output = run_pip_command(post_install_cmd, check=False, capture_output=False)
+ if not success:
+ print("â Installation failed. Here's the output:\n")
+ print(output or "")
+ return False
+ return True
+
+ # Otherwise download also, but not install direct
+ success, output = run_pip_command(instruction)
+ if not success:
+ print("â Download failed. Here's the output:\n")
+ print(output or "")
+ return False
+
+ return True
+
+def get_pylock_wheels(wheelhouse: Path, lockfile: Path, wheelorigin: Optional[Path] = None, wheeldrain: Optional[Path] = None) -> None:
+ """Get wheels asked pylock file."""
+ filename = Path(lockfile).name
+ wheelhouse.mkdir(parents=True, exist_ok=True)
+ trusted_wheelhouse = wheelhouse / "included.wheels"
+ trusted_wheelhouse.mkdir(parents=True, exist_ok=True)
+
+ filename_lock = wheelhouse / filename
+ filename_req = wheelhouse / (Path(lockfile).stem.replace('pylock', 'requirement') + '.txt')
+
+ pylock_to_req(Path(lockfile), filename_req)
+
+ if not str(Path(lockfile)) == str(filename_lock):
+ shutil.copy2(lockfile, filename_lock)
+
+ # We create a destination for wheels that is specific, so we can check all is there
+ destination_wheelhouse = Path(wheeldrain) if wheeldrain else wheelhouse / Path(lockfile).name.replace('.toml', '.wheels')
+ destination_wheelhouse.mkdir(parents=True, exist_ok=True)
+ # there can be an override
+
+ in_trusted = False
+
+ if wheelorigin is None:
+ # Try from trusted WheelHouse
+ print(f"\n\n*** Checking if we can install from our Local WheelHouse: ***\n {trusted_wheelhouse}\n\n")
+ in_trusted = get_wheels(filename_req, destination_wheelhouse, wheelorigin=trusted_wheelhouse, only_check=True)
+ if in_trusted:
+ print(f"\n\n*** We can install from Local WheelHouse: ***\n {trusted_wheelhouse}\n\n")
+ in_installed = get_wheels(filename_req, trusted_wheelhouse, wheelorigin=trusted_wheelhouse, only_check=False, post_install=True)
+
+ if not in_trusted:
+ post_install = True if wheelorigin and Path(wheelorigin).is_dir and Path(wheelorigin).samefile(destination_wheelhouse) else False
+ if post_install:
+ print(f"\n\n*** Installing from Local WheelHouse: ***\n {destination_wheelhouse}\n\n")
+ else:
+ print(f"\n\n*** Re-Checking if we can install from: {'pypi.org' if not wheelorigin or wheelorigin == '' else wheelorigin}\n\n")
+
+ in_pylock = get_wheels(filename_req, destination_wheelhouse, wheelorigin=wheelorigin, only_check=False, post_install=post_install)
+ if in_pylock:
+ if not post_install:
+ print(f"\n\n*** You can now install from this dedicated WheelHouse: ***\n {destination_wheelhouse}")
+ print(f"\n via:\n wppm {filename_lock} -wh {destination_wheelhouse}\n")
+ else:
+ print(f"\n\n*** We can't install {filename} ! ***\n\n")
+
+def list_packages_with_metadata(directory: str) -> List[Tuple[str, str, str]]:
+ "get metadata from a Wheelhouse directory"
+ packages = pm.get_directory_metadata(directory)
+ results = [ (p.name, p.version, p.summary) for p in packages]
+ return results
+
+def main() -> None:
+ """Main entry point for the script."""
+ if len(sys.argv) != 2:
+ print("Usage: python pylock_to_requirements.py pylock.toml")
+ sys.exit(1)
+
+ path = Path(sys.argv[1])
+ if not path.exists():
+ print(f"â File not found: {path}")
+ sys.exit(1)
+
+ pkgs = parse_pylock_toml(path)
+ dest = path.parent / (path.stem.replace('pylock', 'requirement_with_hash') + '.txt')
+ write_requirements_txt(pkgs, dest)
+
+if __name__ == "__main__":
+ main()
diff --git a/wppm/wppm.py b/wppm/wppm.py
new file mode 100644
index 00000000..a80d3961
--- /dev/null
+++ b/wppm/wppm.py
@@ -0,0 +1,406 @@
+# -*- coding: utf-8 -*-
+#
+# WinPython Package Manager
+# Copyright © 2012 Pierre Raybaut
+# Copyright © 2014-2025+ The Winpython development team https://github.com/winpython/
+# Licensed under the terms of the MIT License
+# (see wppm/__init__.py for details)
+
+import os
+import re
+import sys
+import shutil
+import subprocess
+import json
+from pathlib import Path
+from argparse import ArgumentParser, RawTextHelpFormatter
+from . import utils, piptree, associate, diff, __version__
+from . import wheelhouse as wh
+from operator import itemgetter
+# Workaround for installing PyVISA on Windows from source:
+os.environ["HOME"] = os.environ["USERPROFILE"]
+
+class Package:
+ """Standardize a Package from filename or pip list."""
+ def __init__(self, fname: str, suggested_summary: str = None):
+ self.fname = fname
+ self.description = (utils.sum_up(suggested_summary) if suggested_summary else "").strip()
+ self.name, self.version = fname, '?.?.?'
+ if fname.lower().endswith((".zip", ".tar.gz", ".whl")):
+ bname = Path(self.fname).name # e.g., "sqlite_bro-1.0.0..."
+ infos = utils.get_source_package_infos(bname) # get name, version
+ if infos:
+ self.name, self.version = utils.normalize(infos[0]), infos[1]
+ self.url = f"https://pypi.org/project/{self.name}"
+ self.files = []
+
+ def __str__(self):
+ return f"{self.name} {self.version}\r\n{self.description}\r\nWebsite: {self.url}"
+
+
+class Distribution:
+ """Handles operations on a WinPython distribution."""
+ def __init__(self, target: str = None, verbose: bool = False):
+ self.target = target or str(Path(sys.executable).parent) # Default target more explicit
+ self.verbose = verbose
+ self.pip = None
+ self.to_be_removed = []
+ self.version, self.architecture = utils.get_python_infos(self.target)
+ self.python_exe = utils.get_python_executable(self.target)
+ self.short_exe = Path(self.python_exe).name
+ self.wheelhouse = Path(self.target).parent / "wheelhouse"
+
+ def create_file(self, package, name, dstdir, contents):
+ """Generate data file -- path is relative to distribution root dir"""
+ dst = Path(dstdir) / name
+ if self.verbose:
+ print(f"create: {dst}")
+ full_dst = Path(self.target) / dst
+ with open(full_dst, "w") as fd:
+ fd.write(contents)
+ package.files.append(str(dst))
+
+ def get_installed_packages(self, update: bool = False) -> list[Package]:
+ """Return installed packages."""
+ if str(Path(sys.executable).parent) == self.target:
+ self.pip = piptree.PipData()
+ else:
+ self.pip = piptree.PipData(utils.get_python_executable(self.target))
+ pip_list = self.pip.pip_list(full=True)
+ return [Package(f"{i[0].replace('-', '_').lower()}-{i[1]}-py3-none-any.whl", suggested_summary=i[2]) for i in pip_list]
+
+ def render_markdown_for_list(self, title, items):
+ """Generates a Markdown section; name, url, version, summary"""
+ md = f"### {title}\n\n"
+ md += "Name | Version | Description\n"
+ md += "-----|---------|------------\n"
+ for name, url, version, summary in sorted(items, key=lambda p: (p[0].lower(), p[2])):
+ md += f"[{name}]({url}) | {version} | {summary}\n"
+ md += "\n"
+ return md
+
+ def generate_package_index_markdown(self, python_executable_directory: str|None = None, winpyver2: str|None = None,
+ flavor: str|None = None, architecture_bits: int|None = None
+ , release_level: str|None = None, wheeldir: str|None = None) -> str:
+ """Generates a Markdown formatted package index page."""
+ my_ver , my_arch = utils.get_python_infos(python_executable_directory or self.target)
+ my_winpyver2 = winpyver2 or os.getenv("WINPYVER2","")
+ my_winpyver2 = my_winpyver2 if my_winpyver2 != "" else my_ver
+ my_flavor = flavor or os.getenv("WINPYFLAVOR", "")
+ my_release_level = release_level or os.getenv("WINPYVER", "").replace(my_winpyver2+my_flavor, "")
+
+ tools_list = utils.get_installed_tools(utils.get_python_executable(python_executable_directory))
+ package_list = [(pkg.name, pkg.url, pkg.version, pkg.description) for pkg in self.get_installed_packages()]
+ wheelhouse_list = []
+ my_wheeldir = Path(wheeldir) if wheeldir else self.wheelhouse / 'included.wheels'
+ if my_wheeldir.is_dir():
+ wheelhouse_list = [(name, f"https://pypi.org/project/{name}", version, utils.sum_up(summary))
+ for name, version, summary in wh.list_packages_with_metadata(str(my_wheeldir)) ]
+
+ return f"""## WinPython {my_winpyver2 + my_flavor}
+
+The following packages are included in WinPython-{my_arch}bit v{my_winpyver2 + my_flavor} {my_release_level}.
+
+
+
+{self.render_markdown_for_list("Tools", tools_list)}
+{self.render_markdown_for_list("Python packages", package_list)}
+{self.render_markdown_for_list("WheelHouse packages", wheelhouse_list)}
+
+"""
+
+ def find_package(self, name: str) -> Package | None:
+ """Find installed package by name."""
+ for pack in self.get_installed_packages():
+ if utils.normalize(pack.name) == utils.normalize(name):
+ return pack
+
+ def patch_all_shebang(self, to_movable: bool = True, max_exe_size: int = 999999, targetdir: str = ""):
+ """Make all python launchers relative."""
+ for ffname in Path(self.target).glob("Scripts/*.exe"):
+ if ffname.stat().st_size <= max_exe_size:
+ utils.patch_shebang_line(ffname, to_movable=to_movable, targetdir=targetdir)
+ for ffname in Path(self.target).glob("Scripts/*.py"):
+ utils.patch_shebang_line_py(ffname, to_movable=to_movable, targetdir=targetdir)
+
+ def install(self, package: Package, install_options: list[str] = None):
+ """Install package in distribution."""
+ if package.fname.endswith((".whl", ".tar.gz", ".zip")) or (
+ ' ' not in package.fname and ';' not in package.fname and len(package.fname) >1): # Check extension with tuple
+ self.install_bdist_direct(package, install_options=install_options)
+ self.handle_specific_packages(package)
+ # minimal post-install actions
+ self.patch_standard_packages(package.name)
+
+ def do_pip_action(self, actions: list[str] = None, install_options: list[str] = None):
+ """Execute pip action in the distribution."""
+ my_list = install_options or []
+ my_actions = actions or []
+ executing = str(Path(self.target).parent / "scripts" / "env.bat")
+ if Path(executing).is_file():
+ complement = [r"&&", "cd", "/D", self.target, r"&&", utils.get_python_executable(self.target), "-m", "pip"]
+ else:
+ executing = utils.get_python_executable(self.target)
+ complement = ["-m", "pip"]
+ try:
+ fname = utils.do_script(this_script=None, python_exe=executing, verbose=self.verbose, install_options=complement + my_actions + my_list)
+ except RuntimeError as e:
+ if not self.verbose:
+ print("Failed!")
+ raise
+ else:
+ print(f"Pip action failed with error: {e}") # Print error if verbose
+
+ def patch_standard_packages(self, package_name="", to_movable=True):
+ """patch Winpython packages in need"""
+ import filecmp
+
+ # 'pywin32' minimal post-install (pywin32_postinstall.py do too much)
+ if package_name.lower() in ("", "pywin32"):
+ origin = Path(self.target) / "site-packages" / "pywin32_system32"
+ destin = Path(self.target)
+ if origin.is_dir():
+ for name in os.listdir(origin):
+ here, there = origin / name, destin / name
+ if not there.exists() or not filecmp.cmp(here, there):
+ shutil.copyfile(here, there)
+ # 'pip' to do movable launchers (around line 100) !!!!
+ # rational: https://github.com/pypa/pip/issues/2328
+ if package_name.lower() == "pip" or package_name == "":
+ # ensure pip will create movable launchers
+ # sheb_mov1 = classic way up to WinPython 2016-01
+ # sheb_mov2 = tried way, but doesn't work for pip (at least)
+ the_place = Path(self.target) / "lib" / "site-packages" / "pip" / "_vendor" / "distlib" / "scripts.py"
+ sheb_fix = " executable = get_executable()"
+ sheb_mov1 = " executable = os.path.join(os.path.basename(get_executable()))"
+ sheb_mov2 = " executable = os.path.join('..',os.path.basename(get_executable()))"
+ if to_movable:
+ utils.patch_sourcefile(the_place, sheb_fix, sheb_mov1)
+ utils.patch_sourcefile(the_place, sheb_mov2, sheb_mov1)
+ else:
+ utils.patch_sourcefile(the_place, sheb_mov1, sheb_fix)
+ utils.patch_sourcefile(the_place, sheb_mov2, sheb_fix)
+
+ # create movable launchers for previous package installations
+ self.patch_all_shebang(to_movable=to_movable)
+ if package_name.lower() in ("", "spyder"):
+ # spyder don't goes on internet without you ask
+ utils.patch_sourcefile(
+ Path(self.target) / "lib" / "site-packages" / "spyder" / "config" / "main.py",
+ "'check_updates_on_startup': True,",
+ "'check_updates_on_startup': False,",
+ )
+
+
+ def handle_specific_packages(self, package):
+ """Packages requiring additional configuration"""
+ if package.name.lower() in ("pyqt4", "pyqt5", "pyside2"):
+ # Qt configuration file (where to find Qt)
+ name = "qt.conf"
+ contents = """[Paths]\nPrefix = .\nBinaries = ."""
+ self.create_file(package, name, str(Path("Lib") / "site-packages" / package.name), contents)
+ self.create_file(package, name, ".", contents.replace(".", f"./Lib/site-packages/{package.name}"))
+ # pyuic script
+ if package.name.lower() == "pyqt5":
+ # see http://code.activestate.com/lists/python-list/666469/
+ tmp_string = r"""@echo off
+if "%WINPYDIR%"=="" call "%~dp0..\..\scripts\env.bat"
+"%WINPYDIR%\python.exe" -m PyQt5.uic.pyuic %1 %2 %3 %4 %5 %6 %7 %8 %9"""
+ else:
+ tmp_string = r"""@echo off
+if "%WINPYDIR%"=="" call "%~dp0..\..\scripts\env.bat"
+"%WINPYDIR%\python.exe" "%WINPYDIR%\Lib\site-packages\package.name\uic\pyuic.py" %1 %2 %3 %4 %5 %6 %7 %8 %9"""
+ # PyPy adaption: python.exe or pypy3.exe
+ my_exec = Path(utils.get_python_executable(self.target)).name
+ tmp_string = tmp_string.replace("python.exe", my_exec).replace("package.name", package.name)
+ self.create_file(package, f"pyuic{package.name[-1]}.bat", "Scripts", tmp_string)
+ # Adding missing __init__.py files (fixes Issue 8)
+ uic_path = str(Path("Lib") / "site-packages" / package.name / "uic")
+ for dirname in ("Loader", "port_v2", "port_v3"):
+ self.create_file(package, "__init__.py", str(Path(uic_path) / dirname), "")
+
+ def _print(self, package: Package, action: str):
+ """Print package-related action text."""
+ text = f"{action} {package.name} {package.version}"
+ if self.verbose:
+ utils.print_box(text)
+ else:
+ print(f" {text}...", end=" ")
+
+ def _print_done(self):
+ """Print OK at the end of a process"""
+ if not self.verbose:
+ print("OK")
+
+ def uninstall(self, package):
+ """Uninstall package from distribution"""
+ self._print(package, "Uninstalling")
+ if package.name != "pip":
+ # trick to get true target (if not current)
+ this_exec = utils.get_python_executable(self.target) # PyPy !
+ subprocess.call([this_exec, "-m", "pip", "uninstall", package.name, "-y"], cwd=self.target)
+ self._print_done()
+
+ def install_bdist_direct(self, package, install_options=None):
+ """Install a package directly !"""
+ self._print(package,f"Installing {package.fname.split('.')[-1]}")
+ try:
+ fname = utils.direct_pip_install(
+ package.fname,
+ python_exe=utils.get_python_executable(self.target), # PyPy !
+ verbose=self.verbose,
+ install_options=install_options,
+ )
+ except RuntimeError:
+ if not self.verbose:
+ print("Failed!")
+ raise
+ package = Package(fname)
+ self._print_done()
+
+def main(test=False):
+
+ registerWinPythonHelp = f"Register WinPython: associate file extensions, icons and context menu with this WinPython"
+ unregisterWinPythonHelp = f"Unregister WinPython: de-associate file extensions, icons and context menu from this WinPython"
+ parser = ArgumentParser(prog="wppm",
+ description=f"WinPython Package Manager: handle a WinPython Distribution and its packages ({__version__})",
+ formatter_class=RawTextHelpFormatter,
+ )
+ parser.add_argument("fname", metavar="package(s) or lockfile", nargs="*", default=[""], type=str, help="optional package names, wheels, or lockfile")
+ parser.add_argument("-v", "--verbose", action="store_true", help="show more details on packages and actions")
+ parser.add_argument( "--register", dest="registerWinPython", action="store_true", help=registerWinPythonHelp)
+ parser.add_argument("--unregister", dest="unregisterWinPython", action="store_true", help=unregisterWinPythonHelp)
+ parser.add_argument("--fix", action="store_true", help="make WinPython fix")
+ parser.add_argument("--movable", action="store_true", help="make WinPython movable")
+ parser.add_argument("-ws", dest="wheelsource", default=None, type=str, help="wheels location, '.' = WheelHouse): wppm pylock.toml -ws source_of_wheels, wppm -ls -ws .")
+ parser.add_argument("-wd", dest="wheeldrain" , default=None, type=str, help="wheels destination: wppm pylock.toml -wd destination_of_wheels")
+ parser.add_argument("-ls", "--list", action="store_true", help="list installed packages matching [optional] expression: wppm -ls, wppm -ls pand")
+ parser.add_argument("-lsa", dest="all", action="store_true",help=f"list details of packages matching [optional] expression: wppm -lsa pandas -l1")
+ parser.add_argument("-md", dest="markdown", action="store_true",help=f"markdown summary of the installation")
+ parser.add_argument("-p",dest="pipdown",action="store_true",help="show Package dependencies of the given package[option], [.]=all: wppm -p pandas[.]")
+ parser.add_argument("-r", dest="pipup", action="store_true", help=f"show Reverse (!= constraining) dependancies of the given package[option]: wppm -r pytest![test]")
+ parser.add_argument("-l", dest="levels", type=int, default=-1, help="show 'LEVELS' levels of dependencies (with -p, -r): wppm -p pandas -l1")
+ parser.add_argument("-t", dest="target", default=sys.prefix, help=f'path to target Python distribution (default: "{sys.prefix}")')
+ parser.add_argument("-i", "--install", action="store_true", help="install a given package wheel or pylock file (use pip for more features)")
+ parser.add_argument("-u", "--uninstall", action="store_true", help="uninstall package (use pip for more features)")
+
+ args = parser.parse_args()
+ targetpython = None
+ if args.target and args.target != sys.prefix:
+ targetpython = args.target if args.target.lower().endswith('.exe') else str(Path(args.target) / 'python.exe')
+ if args.wheelsource == ".": # play in default WheelHouse
+ if utils.is_python_distribution(args.target):
+ dist = Distribution(args.target)
+ args.wheelsource = dist.wheelhouse / 'included.wheels'
+ if args.install and args.uninstall:
+ raise RuntimeError("Incompatible arguments: --install and --uninstall")
+ if args.registerWinPython and args.unregisterWinPython:
+ raise RuntimeError("Incompatible arguments: --install and --uninstall")
+ if args.pipdown:
+ pip = piptree.PipData(targetpython, args.wheelsource)
+ for args_fname in args.fname:
+ pack, extra, *other = (args_fname + "[").replace("]", "[").split("[")
+ print(pip.down(pack, extra, args.levels if args.levels>0 else 2, verbose=args.verbose))
+ sys.exit()
+ elif args.pipup:
+ pip = piptree.PipData(targetpython, args.wheelsource)
+ for args_fname in args.fname:
+ pack, extra, *other = (args_fname + "[").replace("]", "[").split("[")
+ print(pip.up(pack, extra, args.levels if args.levels>=0 else 1, verbose=args.verbose))
+ sys.exit()
+ elif args.list:
+ pip = piptree.PipData(targetpython, args.wheelsource)
+ todo= []
+ for args_fname in args.fname:
+ todo += [l for l in pip.pip_list(full=True) if bool(re.search(args_fname, l[0]))]
+ todo = sorted(set(todo)) #, key=lambda p: (p[0].lower(), p[2])
+ titles = [['Package', 'Version', 'Summary'], ['_' * max(x, 6) for x in utils.columns_width(todo)]]
+ listed = utils.formatted_list(titles + todo, max_width=70)
+ for p in listed:
+ print(*p)
+ sys.exit()
+ elif args.all:
+ pip = piptree.PipData(targetpython, args.wheelsource)
+ for args_fname in args.fname:
+ todo = [l for l in pip.pip_list(full=True) if bool(re.search(args_fname, l[0]))]
+ for l in sorted(set(todo)):
+ title = f"** Package: {l[0]} **"
+ print("\n" + "*" * len(title), f"\n{title}", "\n" + "*" * len(title))
+ for key, value in pip.raw[l[0]].items():
+ rawtext = json.dumps(value, indent=2, ensure_ascii=False)
+ lines = [l for l in rawtext.split(r"\n") if len(l.strip()) > 2]
+ if key.lower() != 'description' or args.verbose:
+ print(f"{key}: ", "\n".join(lines).replace('"', ""))
+ sys.exit()
+ if args.registerWinPython:
+ print(registerWinPythonHelp)
+ if utils.is_python_distribution(args.target):
+ dist = Distribution(args.target)
+ else:
+ raise OSError(f"Invalid Python distribution {args.target}")
+ print(f"registering {args.target}")
+ print("continue ? Y/N")
+ theAnswer = input()
+ if theAnswer == "Y":
+ associate.register(dist.target, verbose=args.verbose)
+ sys.exit()
+ if args.unregisterWinPython:
+ print(unregisterWinPythonHelp)
+ if utils.is_python_distribution(args.target):
+ dist = Distribution(args.target)
+ else:
+ raise OSError(f"Invalid Python distribution {args.target}")
+ print(f"unregistering {args.target}")
+ print("continue ? Y/N")
+ theAnswer = input()
+ if theAnswer == "Y":
+ associate.unregister(dist.target, verbose=args.verbose)
+ sys.exit()
+ if utils.is_python_distribution(args.target):
+ dist = Distribution(args.target, verbose=True)
+ cmd_fix = rf"from wppm import wppm;dist=wppm.Distribution(r'{dist.target}');dist.patch_standard_packages('pip', to_movable=False)"
+ cmd_mov = rf"from wppm import wppm;dist=wppm.Distribution(r'{dist.target}');dist.patch_standard_packages('pip', to_movable=True)"
+ if args.fix:
+ # dist.patch_standard_packages('pip', to_movable=False) # would fail on wppm.exe
+ p = subprocess.Popen(["start", "cmd", "/k",dist.python_exe, "-c" , cmd_fix], shell = True, cwd=dist.target)
+ sys.exit()
+ if args.movable:
+ p = subprocess.Popen(["start", "cmd", "/k",dist.python_exe, "-c" , cmd_mov], shell = True, cwd=dist.target)
+ sys.exit()
+ if args.markdown:
+ default = dist.generate_package_index_markdown()
+ if args.wheelsource:
+ compare = dist.generate_package_index_markdown(wheeldir = args.wheelsource)
+ print(diff.compare_markdown_sections(default, compare,'python', 'wheelhouse', 'installed', 'wheelhouse'))
+ else:
+ print(default)
+ sys.exit()
+ if not args.install and not args.uninstall and args.fname[0].endswith(".toml"):
+ args.install = True # for Drag & Drop of .toml (and not wheel)
+ if args.fname[0] == "" or (not args.install and not args.uninstall):
+ parser.print_help()
+ sys.exit()
+ else:
+ try:
+ for args_fname in args.fname:
+ filename = Path(args_fname).name
+ install_from_wheelhouse = ["--no-index", "--trusted-host=None", f"--find-links={dist.wheelhouse / 'included.wheels'}"]
+ if filename.split('.')[0] == "pylock" and filename.split('.')[-1] == 'toml':
+ print(' a lock file !', args_fname, dist.target)
+ wh.get_pylock_wheels(dist.wheelhouse, Path(args_fname), args.wheelsource, args.wheeldrain)
+ sys.exit()
+ if args.uninstall:
+ package = dist.find_package(args_fname)
+ dist.uninstall(package)
+ elif args.install:
+ package = Package(args_fname)
+ if args.install:
+ dist.install(package, install_options=install_from_wheelhouse)
+ except NotImplementedError:
+ raise RuntimeError("Package is not (yet) supported by WPPM")
+ else:
+ raise OSError(f"Invalid Python distribution {args.target}")
+
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file