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..02132f2f --- /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_buildsNOT.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_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_dot.bat b/generate_winpython_distros311_dot.bat deleted file mode 100644 index 1fdd2ff8..00000000 --- a/generate_winpython_distros311_dot.bat +++ /dev/null @@ -1,46 +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=dot - -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\dot_requirements.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\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 - - -pause \ No newline at end of file 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_distros312_dot.bat b/generate_winpython_distros312_dot.bat deleted file mode 100644 index b69e3090..00000000 --- a/generate_winpython_distros312_dot.bat +++ /dev/null @@ -1,50 +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=312 -set my_pyver=3.12 - -set my_flavor=dot - -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 -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_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 - - -set my_arch=32 -set my_preclear_build_directory=No - -set my_source_dirs=C:\Winp\bd312\packages.win32 - -rem call %~dp0\generate_a_winpython_distro.bat - - -pause \ No newline at end of file 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..8717cdab --- /dev/null +++ b/winpython/portable/launchers_final/scripts/WinPythonIni.py @@ -0,0 +1,158 @@ + +# 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 +[env.bat] +#PYTHONPATHz = %WINPYDIR%;%WINPYDIR%\Lib;%WINPYDIR%\DLLs +#see https://github.com/winpython/winpython/issues/839 +#USERPROFILE = %HOME% +#PYTHONUTF8=1 creates issues in "movable" patching +SPYDER_CONFDIR = %HOME%\settings\.spyder-py3 +JUPYTER_DATA_DIR = %HOME% +JUPYTER_CONFIG_DIR = %WINPYDIR%\etc\jupyter +JUPYTER_CONFIG_PATH = %WINPYDIR%\etc\jupyter +[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.endswith("winpython.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[:] + env = os.environ.copy() # later_version: env = os.environ + my_lines = [] + # before env.ini + # env.bat things transfered to WinpythonIni.py + env["WINPYDIRBASE"] = WINPYDIRBASE = Path(env.get('WINPYDIRBASE', Path(__file__).parent.parent)) + my_lines += [f"WINPYDIRBASE={WINPYDIRBASE}"] + env["WINPYDIR"] = WINPYDIR = Path(env.get('WINPYDIR', WINPYDIRBASE / env.get('WINPYthon_subdirectory_name', 'python'))) + my_lines += [f"WINPYDIR={WINPYDIR}"] + if (WINPYDIR / "Lib" / "site-package" / "PyQt5" / "__init__.py").is_file(): + my_lines += ["QT_API=pyqt5"] + if (PYPANDOC_PANDOC := WINPYDIRBASE / "t" / "pandoc.exe").is_file(): + my_lines += [f"PYPANDOC_PANDOC={PYPANDOC_PANDOC}"] + + # theorical option: a "winpython.ini" file as an initial parameter + if len(args) >=2 and args[1].endswith("winpython.ini"): + file_name = args[1] + args = args[1:] + else: + file_name = "..\\settings\\winpython.ini" + + # env_for_icons.bat default directory logic transfered to WinpythonIni.py + + env['WINPYWORKDIR'] = WINPYWORKDIR = WINPYDIRBASE / "Notebooks" + my_lines += [f"WINPYWORKDIR={WINPYWORKDIR}"] + + # supposing winpython.ini is given the %* parameters to apply in python the [tricky] change of directory logic + # if a file or directory is in %1 parameter, and current directory is not the icon nor scripts, we use that directory to define WINPYWORKDIR1 + WINPYWORKDIR1 = WINPYWORKDIR + if len(args) >=2: + if Path(args[1:1]).isfile(): + WINPYWORKDIR1 = Path(args[1:1]).parent + if Path(args[1:1]).isdir(): + WINPYWORKDIR1 = Path(args[1:1]) + + # if WinPython launched from another directory than icon origin, it's not a Drag&Drop so keep current directory + CD_directory = Path(os.getcwd()) + dp0_directory = Path(__file__).parent + if CD_directory != dp0_directory and CD_directory / "scripts" != dp0_directory: + WINPYWORKDIR1 = CD_directory + env['WINPYWORKDIR'] = WINPYWORKDIR1 + my_lines += [f"WINPYWORKDIR1={WINPYWORKDIR1}"] + + # classic WinpythonIni.py actions: digesting winpython.ini file + my_lines += get_file(file_name).splitlines() + + segment = "environment" + txt = "" + + # 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) + prefix , postfix = "set ", "&& " + #prefix , postfix = "set ", "\n" + 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 ["env.bat", "environment", "debug", "active_environment_per_user", "active_environment_common"]: + txt += f"{prefix}{data[0].strip()}={translate(data[1].strip(), env)}{postfix}" + env[data[0].strip()] = translate(data[1].strip(), env) + if segment == "debug" and data[0].strip() == "state": + txt += f"{prefix}WINPYDEBUG={data[1].strip()}{postfix}" + + # create potential directory + for i in ('HOME', 'WINPYWORKDIR', 'WINPYWORKDIR1'): + if i in env: + os.makedirs(Path(env[i]), exist_ok=True) + # output to push change upward + print(txt) + + # 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..1bec9140 --- /dev/null +++ b/winpython/portable/launchers_final/scripts/env.bat @@ -0,0 +1,36 @@ +@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% + +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 + +set HOME=%WINPYDIRBASE%\settings + +rem Remove all double quotes +set PATH_CLEANED=%PATH:"=% +echo ";%PATH_CLEANED%;" | %WINDIR%\system32\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= 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..4f3a4bc0 --- /dev/null +++ b/winpython/portable/launchers_final/scripts/env_for_icons.bat @@ -0,0 +1,13 @@ +@echo off +call "%~dp0env.bat" + +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 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/winpython_builds_bd14.toml b/winpython_builds_bd14.toml new file mode 100644 index 00000000..ce0726ad --- /dev/null +++ b/winpython_builds_bd14.toml @@ -0,0 +1,38 @@ +[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 = "rc1b" } + + +[[builds]] +name = "dot" +root_dir_for_builds = "C:\\Winp" +python_target = "314" +pyver = "3.14" +flavor = "dot" +arch = "64" +create_installer = "7zip.zip" +preclear_build_directory = "Yes" +requirements = "C:\\Winp\\bd314\\dot_requirements.txt" +source_dirs = "C:\\Winp\\bd314\\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 = "free" +root_dir_for_builds = "C:\\Winp" +python_target = "314" +pyver = "3.14" +flavor = "free" +arch = "64" +create_installer = "7zip.zip" +preclear_build_directory = "Yes" +requirements = "C:\\Winp\\bd314\\dot_requirements.txt" +source_dirs = "C:\\Winp\\bd314\\packages.win-amd64t" +find_links = "C:\\Winp\\packages.srcreq" +toolsdirs = "C:\\Winp\\bdTools\\Tools.dot" +install_options = "--no-index --pre --trusted-host=None" + 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 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy