diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index d309c5492..b77d2a08a 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -219,7 +219,7 @@ jobs: $env:LLVM_SYS_140_PREFIX = $env:LLVM_SYS_140_PREFIX # Build and test - make build + make build-debug make pytest-all - name: Build and test PECOS (non-Windows) @@ -266,7 +266,7 @@ jobs: fi # Build the project - make build + make build-debug # After build, verify the extension module on macOS if [[ "${{ runner.os }}" == "macOS" ]]; then diff --git a/Cargo.lock b/Cargo.lock index 0d5d5324b..5a6817eb9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -258,7 +258,6 @@ dependencies = [ "rand 0.9.2", "rand_chacha", "rand_xoshiro", - "romu", "wide 1.0.2", "wyrand", ] @@ -1937,9 +1936,9 @@ checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -1951,9 +1950,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" @@ -2702,6 +2701,7 @@ dependencies = [ "log", "pecos-core", "pecos-cppsparsesim", + "pecos-decoders", "pecos-engines", "pecos-hugr-qis", "pecos-llvm", @@ -2711,7 +2711,6 @@ dependencies = [ "pecos-programs", "pecos-qasm", "pecos-qis-core", - "pecos-qis-ffi-types", "pecos-qis-selene", "pecos-qsim", "pecos-quest", @@ -2855,11 +2854,8 @@ name = "pecos-llvm" version = "0.1.1" dependencies = [ "inkwell 0.7.1", - "log", "pecos-core", "pecos-llvm-utils", - "regex", - "thiserror 2.0.17", ] [[package]] @@ -2868,7 +2864,6 @@ version = "0.1.1" dependencies = [ "clap", "dirs", - "flate2", "reqwest", "sevenz-rust", "sha2", @@ -3029,7 +3024,6 @@ name = "pecos-quest" version = "0.1.1" dependencies = [ "approx 0.5.1", - "cc", "cxx", "cxx-build", "env_logger", @@ -3803,9 +3797,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a" dependencies = [ "base64", "bytes", @@ -3855,15 +3849,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "romu" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd731b0b5899480a0d7cf3b9ce744a92793c98c092f9d6f0a8133ef9fe8024b1" -dependencies = [ - "getrandom 0.3.4", -] - [[package]] name = "ron" version = "0.12.0" diff --git a/Cargo.toml b/Cargo.toml index ffa387a38..9c9e31439 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,35 +8,6 @@ members = [ "crates/benchmarks", ] -# By default, exclude decoder crates from workspace operations to avoid heavy C++ dependencies -default-members = [ - "crates/pecos-core", - "crates/pecos-num", - "crates/pecos-engines", - "crates/pecos-qsim", - "crates/pecos-qasm", - "crates/pecos-phir", - "crates/pecos-qec", - "crates/pecos-rng", - "crates/pecos", - "crates/pecos-cli", - "crates/pecos-quest", - "python/pecos-rslib", - "crates/benchmarks", -] - -# The decoder crates are external and have heavy C++ dependencies. -# To work with decoders: -# -# Build specific decoders: -# cargo build --package pecos-decoders --features "ldpc" -# -# Build all decoders: -# cargo build --package pecos-decoders --all-features -# -# Build everything including decoders: -# cargo build --workspace - [workspace.package] version = "0.1.1" edition = "2024" @@ -183,6 +154,12 @@ opt-level = 3 # Maximum optimization lto = true # Link-time optimization (same as "fat") codegen-units = 1 # Single codegen unit for better optimization +# Native profile: release + CPU-specific optimizations +# Use with: cargo build --profile native +# Build scripts detect this via PROFILE=native env var and add -march=native for C++ code +[profile.native] +inherits = "release" + [workspace.lints.clippy] # For more details see: https://doc.rust-lang.org/clippy/lints.html suspicious = { level = "warn", priority = -1 } diff --git a/Makefile b/Makefile index 92a685195..f37c41c42 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,13 @@ PYTHON := $(shell which python 2>/dev/null || which python3 2>/dev/null) SHELL=bash +# FFI crates that should be excluded from workspace-wide cargo commands +# These are built separately by maturin (Python), Julia, and Go tooling +FFI_CRATES := pecos-rslib pecos-julia-ffi pecos-go-ffi + +# Generate --exclude flags for cargo commands +CARGO_EXCLUDE_FFI := $(foreach crate,$(FFI_CRATES),--exclude $(crate)) + # LLVM Configuration # LLVM is automatically detected by build.rs files using pecos-llvm-utils # No manual configuration needed! @@ -66,73 +73,101 @@ else endif endif -.PHONY: build -build: installreqs ## Compile and install for development - @$(SETUP_LLVM); $(UNSET_CONDA) cd python/pecos-rslib/ && uv run maturin develop --uv - @$(UNSET_CONDA) uv pip install -e "./python/quantum-pecos[all]" - @if command -v julia >/dev/null 2>&1; then \ - echo "Julia detected, building Julia FFI library..."; \ - $(SETUP_LLVM); cd julia/pecos-julia-ffi && cargo build; \ - echo "Julia FFI library built successfully"; \ - else \ - echo "Julia not detected, skipping Julia build"; \ - fi - @if command -v go >/dev/null 2>&1; then \ - echo "Go detected, building Go FFI library..."; \ - cd go/pecos-go-ffi && cargo build; \ - echo "Go FFI library built successfully"; \ - else \ - echo "Go not detected, skipping Go build"; \ - fi - -.PHONY: build-basic -build-basic: installreqs ## Compile and install for development but do not include install extras - @$(SETUP_LLVM); $(UNSET_CONDA) cd python/pecos-rslib/ && uv run maturin develop --uv - @$(UNSET_CONDA) uv pip install -e ./python/quantum-pecos +# Build profile configuration +# Usage: make build PROFILE=debug|release|native (default: debug) +# Build scripts detect the profile via Cargo's PROFILE env var. +PROFILE ?= debug + +# Profile-specific Cargo/Maturin settings +# - debug: uses default cargo (debug) profile - fast compile, no optimization +# - release: uses --release flag - full optimization +# - native: uses --profile native (custom profile inheriting from release) + CPU-specific opts +# +# For native profile, we also pass -C target-cpu=native to Rust via RUSTFLAGS. +# Build scripts detect PROFILE=native and add -march=native for C++ code. +ifeq ($(PROFILE),native) + MATURIN_RELEASE_FLAG := --release + CARGO_PROFILE_FLAG := --profile native + RUSTFLAGS_EXTRA := -C target-cpu=native + PROFILE_DESC := native (release + CPU optimizations) +else ifeq ($(PROFILE),release) + MATURIN_RELEASE_FLAG := --release + CARGO_PROFILE_FLAG := --release + RUSTFLAGS_EXTRA := + PROFILE_DESC := release (optimized) +else + # debug profile (default) + MATURIN_RELEASE_FLAG := + CARGO_PROFILE_FLAG := + RUSTFLAGS_EXTRA := + PROFILE_DESC := debug (fast compile, unoptimized) +endif -.PHONY: build-release -build-release: installreqs ## Build a faster version of binaries - @$(SETUP_LLVM); $(UNSET_CONDA) cd python/pecos-rslib/ && uv run maturin develop --uv --release - @$(UNSET_CONDA) uv pip install -e "./python/quantum-pecos[all]" +# Helper to build FFI crates with the correct profile +# Build scripts detect profile via Cargo's PROFILE env var +define BUILD_FFI_CRATES @if command -v julia >/dev/null 2>&1; then \ - echo "Julia detected, building Julia FFI library (release)..."; \ - cd julia/pecos-julia-ffi && cargo build --release; \ + echo "Julia detected, building Julia FFI library ($(PROFILE))..."; \ + cd julia/pecos-julia-ffi && \ + RUSTFLAGS="$$RUSTFLAGS $(RUSTFLAGS_EXTRA)" \ + cargo build $(CARGO_PROFILE_FLAG); \ echo "Julia FFI library built successfully"; \ else \ echo "Julia not detected, skipping Julia build"; \ fi @if command -v go >/dev/null 2>&1; then \ - echo "Go detected, building Go FFI library (release)..."; \ - cd go/pecos-go-ffi && cargo build --release; \ + echo "Go detected, building Go FFI library ($(PROFILE))..."; \ + cd go/pecos-go-ffi && \ + RUSTFLAGS="$$RUSTFLAGS $(RUSTFLAGS_EXTRA)" \ + cargo build $(CARGO_PROFILE_FLAG); \ echo "Go FFI library built successfully"; \ else \ echo "Go not detected, skipping Go build"; \ fi +endef -.PHONY: build-native -build-native: installreqs ## Build a faster version of binaries with native CPU optimization - @$(UNSET_CONDA) cd python/pecos-rslib/ && RUSTFLAGS='-C target-cpu=native' \ - uv run maturin develop --uv --release +.PHONY: build +build: installreqs ## Build PECOS (use PROFILE=debug|release|native, default: debug) + @echo "Building with profile: $(PROFILE_DESC)" + @$(SETUP_LLVM); $(UNSET_CONDA) cd python/pecos-rslib/ && \ + RUSTFLAGS="$$RUSTFLAGS $(RUSTFLAGS_EXTRA)" \ + uv run maturin develop --uv $(MATURIN_RELEASE_FLAG) @$(UNSET_CONDA) uv pip install -e "./python/quantum-pecos[all]" + $(BUILD_FFI_CRATES) .PHONY: build-cuda -build-cuda: installreqs ## Compile and install for development with CUDA support - @$(UNSET_CONDA) cd python/pecos-rslib/ && uv run maturin develop --uv +build-cuda: installreqs ## Build PECOS with CUDA support (use PROFILE=debug|release|native, default: debug) + @echo "Building with CUDA support, profile: $(PROFILE_DESC)" + @$(SETUP_LLVM); $(UNSET_CONDA) cd python/pecos-rslib/ && \ + RUSTFLAGS="$$RUSTFLAGS $(RUSTFLAGS_EXTRA)" \ + uv run maturin develop --uv $(MATURIN_RELEASE_FLAG) @$(UNSET_CONDA) uv pip install -e "./python/quantum-pecos[all,cuda]" - @if command -v julia >/dev/null 2>&1; then \ - echo "Julia detected, building Julia FFI library..."; \ - cd julia/pecos-julia-ffi && cargo build; \ - echo "Julia FFI library built successfully"; \ - else \ - echo "Julia not detected, skipping Julia build"; \ - fi - @if command -v go >/dev/null 2>&1; then \ - echo "Go detected, building Go FFI library..."; \ - cd go/pecos-go-ffi && cargo build; \ - echo "Go FFI library built successfully"; \ - else \ - echo "Go not detected, skipping Go build"; \ - fi + $(BUILD_FFI_CRATES) + +# Convenience aliases for common build profiles +.PHONY: build-debug +build-debug: ## Alias for: make build PROFILE=debug + @$(MAKE) build PROFILE=debug + +.PHONY: build-release +build-release: ## Alias for: make build PROFILE=release + @$(MAKE) build PROFILE=release + +.PHONY: build-native +build-native: ## Alias for: make build PROFILE=native + @$(MAKE) build PROFILE=native + +.PHONY: build-cuda-debug +build-cuda-debug: ## Alias for: make build-cuda PROFILE=debug + @$(MAKE) build-cuda PROFILE=debug + +.PHONY: build-cuda-release +build-cuda-release: ## Alias for: make build-cuda PROFILE=release + @$(MAKE) build-cuda PROFILE=release + +.PHONY: build-cuda-native +build-cuda-native: ## Alias for: make build-cuda PROFILE=native + @$(MAKE) build-cuda PROFILE=native # Documentation # ------------- @@ -170,34 +205,55 @@ PECOS_QUEST_FEATURES_NO_GPU = $(shell cargo metadata --no-deps --format-version # When CUDA is not available, we check all packages with all their features except GPU features # This is done by checking packages separately +# FFI crates are checked separately to avoid redundant compilation in workspace builds .PHONY: check check: ## Run cargo check (with GPU features only if CUDA available) @if [ "$(CUDA_AVAILABLE)" = "no" ]; then \ echo "CUDA not detected - checking all features except GPU"; \ - echo "Checking workspace packages (excluding those with GPU features)..."; \ - cargo check --workspace --exclude pecos --exclude pecos-quest --all-targets --all-features; \ + echo "Checking workspace packages (excluding FFI crates and those with GPU features)..."; \ + cargo check --workspace $(CARGO_EXCLUDE_FFI) --exclude pecos --exclude pecos-quest --all-targets --all-features; \ echo "Checking pecos with all features except gpu..."; \ cargo check -p pecos --all-targets --features "$(PECOS_FEATURES_NO_GPU)"; \ echo "Checking pecos-quest with all features except gpu/cuda..."; \ cargo check -p pecos-quest --all-targets --features "$(PECOS_QUEST_FEATURES_NO_GPU)"; \ else \ echo "CUDA detected - checking with all features"; \ - cargo check --workspace --all-targets --all-features; \ + cargo check --workspace $(CARGO_EXCLUDE_FFI) --all-targets --all-features; \ + fi + @echo "Checking pecos-rslib..." + @cargo check -p pecos-rslib --all-targets --all-features + @if command -v julia >/dev/null 2>&1; then \ + echo "Checking pecos-julia-ffi..."; \ + cargo check -p pecos-julia-ffi --all-targets --all-features; \ + fi + @if command -v go >/dev/null 2>&1; then \ + echo "Checking pecos-go-ffi..."; \ + cargo check -p pecos-go-ffi --all-targets --all-features; \ fi .PHONY: clippy clippy: ## Run cargo clippy (with GPU features only if CUDA available) @if [ "$(CUDA_AVAILABLE)" = "no" ]; then \ echo "CUDA not detected - running clippy on all features except GPU"; \ - echo "Running clippy on workspace packages (excluding those with GPU features)..."; \ - cargo clippy --workspace --exclude pecos --exclude pecos-quest --all-targets --all-features -- -D warnings; \ + echo "Running clippy on workspace packages (excluding FFI crates and those with GPU features)..."; \ + cargo clippy --workspace $(CARGO_EXCLUDE_FFI) --exclude pecos --exclude pecos-quest --all-targets --all-features -- -D warnings; \ echo "Running clippy on pecos with all features except gpu..."; \ cargo clippy -p pecos --all-targets --features "$(PECOS_FEATURES_NO_GPU)" -- -D warnings; \ echo "Running clippy on pecos-quest with all features except gpu/cuda..."; \ cargo clippy -p pecos-quest --all-targets --features "$(PECOS_QUEST_FEATURES_NO_GPU)" -- -D warnings; \ else \ echo "CUDA detected - running clippy with all features"; \ - cargo clippy --workspace --all-targets --all-features -- -D warnings; \ + cargo clippy --workspace $(CARGO_EXCLUDE_FFI) --all-targets --all-features -- -D warnings; \ + fi + @echo "Running clippy on pecos-rslib..." + @cargo clippy -p pecos-rslib --all-targets --all-features -- -D warnings + @if command -v julia >/dev/null 2>&1; then \ + echo "Running clippy on pecos-julia-ffi..."; \ + cargo clippy -p pecos-julia-ffi --all-targets --all-features -- -D warnings; \ + fi + @if command -v go >/dev/null 2>&1; then \ + echo "Running clippy on pecos-go-ffi..."; \ + cargo clippy -p pecos-go-ffi --all-targets --all-features -- -D warnings; \ fi .PHONY: fmt @@ -238,15 +294,25 @@ lint-fix: ## Fix all auto-fixable linting issues (Rust, Python, Julia) cargo fmt --all @if [ "$(CUDA_AVAILABLE)" = "no" ]; then \ echo "CUDA not detected - running clippy fix on all features except GPU"; \ - echo "Fixing workspace packages (excluding those with GPU features)..."; \ - cargo clippy --fix --workspace --exclude pecos --exclude pecos-quest --all-targets --all-features --allow-staged --allow-dirty; \ + echo "Fixing workspace packages (excluding FFI crates and those with GPU features)..."; \ + cargo clippy --fix --workspace $(CARGO_EXCLUDE_FFI) --exclude pecos --exclude pecos-quest --all-targets --all-features --allow-staged --allow-dirty; \ echo "Fixing pecos with all features except gpu..."; \ cargo clippy --fix -p pecos --all-targets --features "$(PECOS_FEATURES_NO_GPU)" --allow-staged --allow-dirty; \ echo "Fixing pecos-quest with all features except gpu/cuda..."; \ cargo clippy --fix -p pecos-quest --all-targets --features "$(PECOS_QUEST_FEATURES_NO_GPU)" --allow-staged --allow-dirty; \ else \ echo "CUDA detected - running clippy fix with all features"; \ - cargo clippy --fix --workspace --all-targets --all-features --allow-staged --allow-dirty; \ + cargo clippy --fix --workspace $(CARGO_EXCLUDE_FFI) --all-targets --all-features --allow-staged --allow-dirty; \ + fi + @echo "Fixing pecos-rslib..." + @cargo clippy --fix -p pecos-rslib --all-targets --all-features --allow-staged --allow-dirty + @if command -v julia >/dev/null 2>&1; then \ + echo "Fixing pecos-julia-ffi..."; \ + cargo clippy --fix -p pecos-julia-ffi --all-targets --all-features --allow-staged --allow-dirty; \ + fi + @if command -v go >/dev/null 2>&1; then \ + echo "Fixing pecos-go-ffi..."; \ + cargo clippy --fix -p pecos-go-ffi --all-targets --all-features --allow-staged --allow-dirty; \ fi @echo "" @echo "Running pre-commit fixes..." @@ -276,12 +342,12 @@ lint-fix: ## Fix all auto-fixable linting issues (Rust, Python, Julia) rstest: ## Run Rust tests (with GPU features only if CUDA available) @if [ "$(CUDA_AVAILABLE)" = "no" ]; then \ echo "CUDA not detected - testing all features except GPU"; \ - $(ADD_LLVM_TO_PATH) cargo test --workspace --release --exclude pecos-quest --exclude pecos-decoders --features llvm; \ + $(ADD_LLVM_TO_PATH) cargo test --workspace --release $(CARGO_EXCLUDE_FFI) --exclude pecos-quest --exclude pecos-decoders --features llvm; \ $(ADD_LLVM_TO_PATH) cargo test -p pecos-quest --release --features cpu; \ $(ADD_LLVM_TO_PATH) cargo test -p pecos-decoders --release --all-features; \ else \ echo "CUDA detected - testing with all features including GPU"; \ - $(ADD_LLVM_TO_PATH) cargo test --workspace --release --exclude pecos-quest --exclude pecos-decoders --features llvm; \ + $(ADD_LLVM_TO_PATH) cargo test --workspace --release $(CARGO_EXCLUDE_FFI) --exclude pecos-quest --exclude pecos-decoders --features llvm; \ $(ADD_LLVM_TO_PATH) cargo test -p pecos-quest --release --all-features; \ $(ADD_LLVM_TO_PATH) cargo test -p pecos-decoders --release --all-features; \ fi @@ -290,12 +356,12 @@ rstest: ## Run Rust tests (with GPU features only if CUDA available) rstest-all: ## Run Rust tests with all features (including GPU if CUDA available) @if [ "$(CUDA_AVAILABLE)" = "no" ]; then \ echo "CUDA not detected - testing all features except GPU"; \ - $(ADD_LLVM_TO_PATH) cargo test --workspace --exclude pecos-quest --exclude pecos-decoders --features llvm; \ + $(ADD_LLVM_TO_PATH) cargo test --workspace $(CARGO_EXCLUDE_FFI) --exclude pecos-quest --exclude pecos-decoders --features llvm; \ $(ADD_LLVM_TO_PATH) cargo test -p pecos-quest --features cpu; \ $(ADD_LLVM_TO_PATH) cargo test -p pecos-decoders --all-features; \ else \ echo "CUDA detected - testing with all features including GPU"; \ - $(ADD_LLVM_TO_PATH) cargo test --workspace --exclude pecos-quest --exclude pecos-decoders --features llvm; \ + $(ADD_LLVM_TO_PATH) cargo test --workspace $(CARGO_EXCLUDE_FFI) --exclude pecos-quest --exclude pecos-decoders --features llvm; \ $(ADD_LLVM_TO_PATH) cargo test -p pecos-quest --all-features; \ $(ADD_LLVM_TO_PATH) cargo test -p pecos-decoders --all-features; \ fi @@ -705,16 +771,16 @@ pip-install-uv: ## Install uv using pip and create a venv. (Recommended to inst uv sync .PHONY: dev -dev: clean build test ## Run the typical sequence of commands to check everything is running correctly +dev: clean build-debug test ## Run the typical sequence of commands to check everything is running correctly .PHONY: devl devl: dev lint ## Run the commands to make sure everything runs + lint .PHONY: devc -devc: clean build-cuda test ## Run dev sequence with CUDA support (requires CUDA Toolkit 13) +devc: clean build-cuda test ## Run dev sequence with CUDA support (requires CUDA Toolkit) .PHONY: devcl -devcl: devc lint ## Run dev sequence with CUDA support + lint (requires CUDA Toolkit 13) +devcl: devc lint ## Run dev sequence with CUDA support + lint (requires CUDA Toolkit) # Help # ---- @@ -726,7 +792,7 @@ help: ## Show the help menu @grep -E '^[a-z.A-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-22s\033[0m %s\n", $$1, $$2}' @echo "" @echo "Note: Julia and Go support is automatically detected." - @echo " - 'make build' will also build Julia/Go FFI if they are installed" + @echo " - 'make build-debug' will also build Julia/Go FFI if they are installed" @echo " - 'make test' will also run Julia/Go tests if they are installed" @echo " - 'make lint' checks code quality; 'make lint-fix' fixes issues" @echo " - Use 'make julia-info' or 'make go-info' for more information" diff --git a/crates/benchmarks/Cargo.toml b/crates/benchmarks/Cargo.toml index 342281560..7c8213a48 100644 --- a/crates/benchmarks/Cargo.toml +++ b/crates/benchmarks/Cargo.toml @@ -17,7 +17,6 @@ rand.workspace = true rand_chacha.workspace = true rand_xoshiro.workspace = true wyrand.workspace = true -romu.workspace = true wide.workspace = true [[bench]] diff --git a/crates/pecos-cppsparsesim/build.rs b/crates/pecos-cppsparsesim/build.rs index ee9f968bd..3214e1c06 100644 --- a/crates/pecos-cppsparsesim/build.rs +++ b/crates/pecos-cppsparsesim/build.rs @@ -1,16 +1,77 @@ +use std::env; + +/// Get the build profile from Cargo's environment +/// Returns "debug", "release", or "native" +/// +/// Cargo sets PROFILE env var during build script execution: +/// - "debug" -> no C++ optimization, fast compile +/// - "release" -> full optimization (-O3) +/// - "native" -> full optimization + CPU-specific (-O3 -march=native) +fn get_build_profile() -> String { + match env::var("PROFILE").as_deref() { + Ok("release") => "release".to_string(), + Ok("native") => "native".to_string(), + _ => "debug".to_string(), // debug or anything else + } +} + +/// Apply profile optimization flags to a `cc::Build` +fn apply_profile_flags(build: &mut cc::Build, target: &str) { + let profile = get_build_profile(); + + if target.contains("windows") { + // MSVC optimization flags + match profile.as_str() { + "native" => { + build.opt_level(2); // /O2 + build.flag_if_supported("/arch:AVX2"); // Common native optimization for modern CPUs + } + "release" => { + build.opt_level(2); // /O2 + } + _ => { + // Dev: use default (no optimization) + } + } + } else { + // GCC/Clang optimization flags + match profile.as_str() { + "native" => { + build.flag_if_supported("-O3"); + build.flag_if_supported("-march=native"); + } + "release" => { + build.flag_if_supported("-O3"); + } + _ => { + // Dev: no optimization for fastest compile + build.flag_if_supported("-O0"); + } + } + } +} + fn main() { // Build C++ source files let mut build = cc::Build::new(); + + // Use C++14 or newer to avoid issues with older cross-compilers + // that don't fully support C++11 type traits like is_trivially_move_constructible + let target = env::var("TARGET").unwrap_or_default(); + + // On macOS, explicitly use system clang to ensure SDK paths are correct. + // The PECOS LLVM clang may be in PATH but doesn't have SDK headers configured, + // causing "math.h file not found" errors during compilation. + if target.contains("darwin") && env::var("CXX").is_err() && env::var("CC").is_err() { + build.compiler("/usr/bin/clang++"); + } + build .cpp(true) .file("src/sparsesim.cpp") .file("src/cxx_shim.cpp") .include("src"); - // Use C++14 or newer to avoid issues with older cross-compilers - // that don't fully support C++11 type traits like is_trivially_move_constructible - let target = std::env::var("TARGET").unwrap_or_default(); - // For cross-compilation (especially aarch64), we need at least C++14 // to ensure type traits are available if target.contains("aarch64") || target.contains("arm") { @@ -29,12 +90,21 @@ fn main() { build.flag("/Z7"); } + // Apply PECOS profile optimization flags + apply_profile_flags(&mut build, &target); + build.compile("sparsesim"); // Generate cxx bridge code with same C++ standard let mut bridge = cxx_build::bridge("src/lib.rs"); bridge.file("src/cxx_shim.cpp"); + // On macOS, explicitly use system clang to ensure SDK paths are correct. + // The PECOS LLVM clang may be in PATH but doesn't have SDK headers configured. + if target.contains("darwin") && env::var("CXX").is_err() && env::var("CC").is_err() { + bridge.compiler("/usr/bin/clang++"); + } + // Match the same C++ standard for cxx bridge if target.contains("aarch64") || target.contains("arm") { if bridge.is_flag_supported("-std=c++17").unwrap_or(false) { @@ -57,6 +127,9 @@ fn main() { bridge.flag("/Z7"); } + // Apply PECOS profile optimization flags to bridge + apply_profile_flags(&mut bridge, &target); + bridge.compile("cppsparsesim-bridge"); // On macOS, link against the system C++ library from dyld shared cache diff --git a/crates/pecos-ldpc-decoders/build_ldpc.rs b/crates/pecos-ldpc-decoders/build_ldpc.rs index 2d76ff1c9..c82734e19 100644 --- a/crates/pecos-ldpc-decoders/build_ldpc.rs +++ b/crates/pecos-ldpc-decoders/build_ldpc.rs @@ -8,6 +8,21 @@ use std::env; use std::fs; use std::path::{Path, PathBuf}; +/// Get the build profile from Cargo's environment +/// Returns "debug", "release", or "native" +/// +/// Cargo sets PROFILE env var during build script execution: +/// - "debug" -> no C++ optimization, fast compile +/// - "release" -> full optimization (-O3) +/// - "native" -> full optimization + CPU-specific (-O3 -march=native) +fn get_build_profile() -> String { + match env::var("PROFILE").as_deref() { + Ok("release") => "release".to_string(), + Ok("native") => "native".to_string(), + _ => "debug".to_string(), // debug or anything else + } +} + /// Main build function for LDPC pub fn build() -> Result<()> { // Tell Cargo when to rerun this build script @@ -236,6 +251,16 @@ fn build_cxx_bridge(ldpc_dir: &Path) -> Result<()> { // Build the cxx bridge first to generate headers let mut build = cxx_build::bridge("src/bridge.rs"); + + let target = env::var("TARGET").unwrap_or_default(); + + // On macOS, explicitly use system clang to ensure SDK paths are correct. + // The PECOS LLVM clang may be in PATH but doesn't have SDK headers configured, + // causing "math.h file not found" errors during compilation. + if target.contains("darwin") && env::var("CXX").is_err() && env::var("CC").is_err() { + build.compiler("/usr/bin/clang++"); + } + build .file("src/bridge.cpp") .include(&src_cpp_dir) @@ -247,7 +272,6 @@ fn build_cxx_bridge(ldpc_dir: &Path) -> Result<()> { // Use C++17 when available, fall back to C++14 for older compilers // This helps with cross-compilation where older toolchains may not fully support C++17 - let target = env::var("TARGET").unwrap_or_default(); if target.contains("aarch64") || target.contains("arm") { // For ARM targets, check what's supported if build.is_flag_supported("-std=c++17").unwrap_or(false) { @@ -263,19 +287,26 @@ fn build_cxx_bridge(ldpc_dir: &Path) -> Result<()> { // Report ccache/sccache configuration report_cache_config(); - // Use different optimization levels for debug vs release builds - if cfg!(debug_assertions) { - build.flag_if_supported("-O0"); // No optimization for faster compilation - build.flag_if_supported("-g"); // Include debug symbols - } else { - build.flag_if_supported("-O3"); // Full optimization for release - } - - // Only use -march=native if not cross-compiling and not explicitly disabled - if env::var("CARGO_CFG_TARGET_ARCH").ok() == env::var("HOST_ARCH").ok() - && env::var("DECODER_DISABLE_NATIVE_ARCH").is_err() - { - build.flag_if_supported("-march=native"); + // Use build profile for optimization settings + let profile = get_build_profile(); + match profile.as_str() { + "native" => { + // Native profile: release optimizations + CPU-specific optimizations + build.flag_if_supported("-O3"); + // Only use -march=native if not cross-compiling + if env::var("CARGO_CFG_TARGET_ARCH").ok() == env::var("HOST_ARCH").ok() { + build.flag_if_supported("-march=native"); + } + } + "release" => { + // Release profile: full optimization + build.flag_if_supported("-O3"); + } + _ => { + // Dev profile: no optimization for faster compilation + build.flag_if_supported("-O0"); + build.flag_if_supported("-g"); // Include debug symbols + } } // Suppress warnings from external code diff --git a/crates/pecos-llvm-utils/Cargo.toml b/crates/pecos-llvm-utils/Cargo.toml index 689862146..488552a33 100644 --- a/crates/pecos-llvm-utils/Cargo.toml +++ b/crates/pecos-llvm-utils/Cargo.toml @@ -19,7 +19,6 @@ path = "src/bin/pecos-llvm.rs" clap.workspace = true reqwest.workspace = true tar.workspace = true -flate2.workspace = true dirs.workspace = true xz2.workspace = true sevenz-rust.workspace = true diff --git a/crates/pecos-llvm/Cargo.toml b/crates/pecos-llvm/Cargo.toml index a7cceae0a..239e3094d 100644 --- a/crates/pecos-llvm/Cargo.toml +++ b/crates/pecos-llvm/Cargo.toml @@ -13,9 +13,6 @@ categories.workspace = true [dependencies] pecos-core.workspace = true -thiserror.workspace = true -log.workspace = true -regex.workspace = true # Inkwell for LLVM IR generation [dependencies.inkwell] diff --git a/crates/pecos-quest/Cargo.toml b/crates/pecos-quest/Cargo.toml index 3ac9cb0b8..9d07c19b0 100644 --- a/crates/pecos-quest/Cargo.toml +++ b/crates/pecos-quest/Cargo.toml @@ -30,7 +30,6 @@ rand_chacha.workspace = true [build-dependencies] pecos-build-utils.workspace = true cxx-build.workspace = true -cc.workspace = true log.workspace = true env_logger.workspace = true diff --git a/crates/pecos-quest/build_quest.rs b/crates/pecos-quest/build_quest.rs index b94f4e7ba..6f272e0dd 100644 --- a/crates/pecos-quest/build_quest.rs +++ b/crates/pecos-quest/build_quest.rs @@ -291,6 +291,21 @@ fn generate_quest_header(quest_dir: &Path) -> Result<()> { Ok(()) } +/// Get the build profile from Cargo's environment +/// Returns "debug", "release", or "native" +/// +/// Cargo sets PROFILE env var during build script execution: +/// - "debug" -> no C++ optimization, fast compile +/// - "release" -> full optimization (-O3) +/// - "native" -> full optimization + CPU-specific (-O3 -march=native) +fn get_build_profile() -> String { + match env::var("PROFILE").as_deref() { + Ok("release") => "release".to_string(), + Ok("native") => "native".to_string(), + _ => "debug".to_string(), // debug or anything else + } +} + /// Main build function for `QuEST` pub fn build() -> Result<()> { // Tell Cargo when to rerun this build script @@ -379,6 +394,14 @@ fn build_cxx_bridge(quest_dir: &Path, out_dir: &Path) { // Build the cxx bridge first to generate headers let mut build = cxx_build::bridge("src/bridge.rs"); + // On macOS, explicitly use system clang to ensure SDK paths are correct. + // The PECOS LLVM clang may be in PATH but doesn't have SDK headers configured, + // causing "math.h file not found" errors during compilation. + let target = env::var("TARGET").unwrap_or_default(); + if target.contains("darwin") && env::var("CXX").is_err() && env::var("CC").is_err() { + build.compiler("/usr/bin/clang++"); + } + // Determine if we're building with GPU support // Check if the gpu feature is enabled via CARGO_FEATURE_GPU env var let gpu_feature_enabled = env::var("CARGO_FEATURE_GPU").is_ok(); @@ -546,12 +569,23 @@ fn build_cxx_bridge(quest_dir: &Path, out_dir: &Path) { // This properly handles warning flags without conflicts build.warnings(false); - // Use different optimization levels for debug vs release builds - if cfg!(debug_assertions) { - build.flag_if_supported("-O0"); // No optimization for faster compilation - build.flag_if_supported("-g"); // Include debug symbols - } else { - build.flag_if_supported("-O3"); // Full optimization for release + // Use build profile for optimization settings + let profile = get_build_profile(); + match profile.as_str() { + "native" => { + // Native profile: release optimizations + CPU-specific optimizations + build.flag_if_supported("-O3"); + build.flag_if_supported("-march=native"); + } + "release" => { + // Release profile: full optimization + build.flag_if_supported("-O3"); + } + _ => { + // Dev profile: no optimization for faster compilation + build.flag_if_supported("-O0"); + build.flag_if_supported("-g"); // Include debug symbols + } } // Platform-specific flags diff --git a/crates/pecos-qulacs/build.rs b/crates/pecos-qulacs/build.rs index 12f31139c..1d20e1905 100644 --- a/crates/pecos-qulacs/build.rs +++ b/crates/pecos-qulacs/build.rs @@ -63,6 +63,21 @@ fn setup_rerun_conditions() { println!("cargo:rerun-if-changed=src/qulacs_wrapper.h"); } +/// Get the build profile from Cargo's environment +/// Returns "debug", "release", or "native" +/// +/// Cargo sets PROFILE env var during build script execution: +/// - "debug" -> no C++ optimization, fast compile +/// - "release" -> full optimization (-O3) +/// - "native" -> full optimization + CPU-specific (-O3 -march=native) +fn get_build_profile() -> String { + match env::var("PROFILE").as_deref() { + Ok("release") => "release".to_string(), + Ok("native") => "native".to_string(), + _ => "debug".to_string(), // debug or anything else + } +} + fn download_and_extract_dependencies(out_dir: &Path) -> (PathBuf, PathBuf, PathBuf) { // Download all dependencies let qulacs_data = download_cached(&qulacs_download_info()).expect("Failed to download Qulacs"); @@ -183,9 +198,24 @@ fn configure_build( build.include("src"); build.include(out_dir); - // Set compiler flags + // Configure the C++ compiler based on platform. + // - macOS: MUST use system clang (/usr/bin/clang++) which has proper SDK paths. + // PECOS's bundled clang doesn't have macOS SDK headers configured (missing math.h, etc.) + // and the cc crate will find PECOS clang first if it's in PATH. + // - Windows: Use MSVC (default). PECOS's bundled clang-cl is LLVM 14, but MSVC 2022's STL + // requires Clang 19.0.0+ when using clang-cl, causing "STL1000: Unexpected compiler version". + // - Linux: Use system GCC (PECOS clang can't find system GCC headers for libstdc++) + // Only override if CXX/CC env vars are not already set (allow user override). + if env::var("CXX").is_err() && env::var("CC").is_err() && target.contains("darwin") { + // On macOS, explicitly use system clang to ensure SDK paths are correct. + // The PECOS LLVM clang may be in PATH but doesn't have SDK headers. + build.compiler("/usr/bin/clang++"); + } + // On Windows and Linux, use the default compiler (MSVC on Windows, GCC on Linux) + + // Set compiler flags based on platform and compiler if is_windows { - // Windows-specific settings + // MSVC-specific settings build.std("c++14"); // Define Boost exception handling for Windows build.define("BOOST_NO_EXCEPTIONS", None); @@ -207,18 +237,36 @@ fn configure_build( build.opt_level(2); // Maximize speed optimization (/O2) } else { build.flag_if_supported("-std=c++14"); - build.flag_if_supported("-O3"); - - // On macOS with ARM (Apple Silicon), -ffast-math causes issues with Eigen's NEON code - // which uses infinity constants. Use a more targeted optimization instead. - if target.contains("darwin") && target.contains("aarch64") { - // Enable fast math but allow infinity and NaN - build.flag_if_supported("-fno-math-errno"); - build.flag_if_supported("-fno-trapping-math"); - } else { - build.flag_if_supported("-ffast-math"); + + // Get build profile for optimization settings + let profile = get_build_profile(); + + match profile.as_str() { + "native" => { + // Native profile: release optimizations + CPU-specific optimizations + // Use -O3 with workarounds for GCC 11 ICE bugs. + build.flag_if_supported("-O3"); + build.flag_if_supported("-fno-tree-vectorize"); // Disable vectorization that triggers ICE + build.flag_if_supported("-march=native"); // CPU-specific optimizations + } + "release" => { + // Release profile: optimized build + // Use -O3 with workarounds for GCC 11 ICE bugs. + // The ICE occurs in tree-vect-loop.c during auto-vectorization of + // complex Boost/Eigen templates. Disabling vectorization prevents the crash. + build.flag_if_supported("-O3"); + build.flag_if_supported("-fno-tree-vectorize"); // Disable vectorization that triggers ICE + } + _ => { + // Dev profile: no optimization flags for fastest compile times + } } + // Safe math optimizations (don't cause ICEs, provide modest speedup) + // Applied to all profiles + build.flag_if_supported("-fno-math-errno"); + build.flag_if_supported("-fno-trapping-math"); + // Silence OpenMP pragma warnings since we intentionally don't use OpenMP // PECOS uses thread-level parallelism instead of OpenMP's internal parallelism build.flag_if_supported("-Wno-unknown-pragmas"); @@ -229,11 +277,12 @@ fn configure_build( build.flag_if_supported("-Wno-unqualified-std-cast-call"); // Qulacs move() warnings build.flag_if_supported("-Wno-inconsistent-missing-override"); // Qulacs override warnings - // On macOS, use the -stdlib=libc++ flag to ensure proper C++ standard library linkage + // On macOS, use libc++ (the system default and what PECOS clang expects) if target.contains("darwin") { build.flag("-stdlib=libc++"); // Note: Linker flags are passed via cargo:rustc-link-arg below, not here } + // On Linux, use system default (libstdc++) - no flag needed } // Define preprocessor macros diff --git a/crates/pecos/Cargo.toml b/crates/pecos/Cargo.toml index 2c9dc20ca..6f19cf16c 100644 --- a/crates/pecos/Cargo.toml +++ b/crates/pecos/Cargo.toml @@ -22,7 +22,7 @@ pecos-engines.workspace = true pecos-programs.workspace = true pecos-qasm.workspace = true pecos-phir-json.workspace = true -pecos-qis-ffi-types.workspace = true +#pecos-qis-ffi-types.workspace = true pecos-qis-core.workspace = true pecos-qis-selene = { workspace = true, optional = true } pecos-llvm = { workspace = true, optional = true } @@ -42,26 +42,36 @@ pecos-qulacs = { workspace = true, optional = true } # WebAssembly foreign object support (optional) pecos-wasm = { workspace = true, optional = true } +# Decoder backends (optional) +pecos-decoders = { workspace = true, optional = true } + [features] -default = ["qasm", "phir", "wasm", "all-simulators"] +default = ["qasm", "phir", "wasm"] + +# Program formats qasm = [] -llvm = ["pecos-qis-core/llvm", "pecos-llvm", "pecos-hugr-qis", "pecos-hugr-qis?/llvm"] phir = [] -selene = ["pecos-qis-selene"] -# WebAssembly support +# Heavy external dependencies +llvm = ["pecos-qis-core/llvm", "pecos-llvm", "pecos-hugr-qis", "pecos-hugr-qis?/llvm"] +selene = ["pecos-qis-selene"] wasm = ["pecos-wasm", "pecos-wasm/wasm"] -# Quantum simulator backends +# Quantum simulator backends (C++ wrappers) cppsparsesim = ["pecos-cppsparsesim"] quest = ["pecos-quest"] qulacs = ["pecos-qulacs"] +all-simulators = ["cppsparsesim", "quest", "qulacs"] -# Quest-specific features +# GPU support gpu = ["quest", "pecos-quest/gpu"] -# All simulator backends -all-simulators = ["cppsparsesim", "quest", "qulacs"] +# Decoder backends +ldpc = ["pecos-decoders", "pecos-decoders/ldpc"] +all-decoders = ["ldpc"] + +# Everything +full = ["all-simulators", "all-decoders", "llvm", "selene", "wasm"] [dev-dependencies] tempfile.workspace = true @@ -75,5 +85,9 @@ pecos-rng.workspace = true log.workspace = true serde_json.workspace = true +[[example]] +name = "quest_example" +required-features = ["quest"] + [lints] workspace = true diff --git a/crates/pecos/src/lib.rs b/crates/pecos/src/lib.rs index b157efb31..d00b0f587 100644 --- a/crates/pecos/src/lib.rs +++ b/crates/pecos/src/lib.rs @@ -504,6 +504,34 @@ pub mod graph { pub use pecos_num::graph::*; } +/// Quantum error correction decoders +/// +/// This module provides decoders for quantum error correction codes. +/// +/// # Available Decoders (feature-gated) +/// +/// With `ldpc` feature: +/// - **`BpOsdDecoder`** - Belief propagation with ordered statistics decoding +/// - **`BpLsdDecoder`** - Belief propagation with localized statistics decoding +/// - **`UnionFindDecoder`** - Union-find decoder +/// - **`BeliefFindDecoder`** - Belief-find decoder +/// - **`FlipDecoder`** - Flip decoder +/// - **`MbpDecoder`** - Modified belief propagation decoder +/// - **`SoftInfoBpDecoder`** - Soft information BP decoder +/// +/// # Example +/// +/// ```rust,no_run +/// # #[cfg(feature = "ldpc")] +/// # { +/// use pecos::decoders::{Decoder, BpOsdDecoder}; +/// # } +/// ``` +#[cfg(any(feature = "ldpc", feature = "all-decoders"))] +pub mod decoders { + pub use pecos_decoders::*; +} + /// Quantum simulation implementations /// /// This module provides low-level quantum simulation implementations and utilities diff --git a/crates/pecos/src/prelude.rs b/crates/pecos/src/prelude.rs index 2ff1afda2..67a4909af 100644 --- a/crates/pecos/src/prelude.rs +++ b/crates/pecos/src/prelude.rs @@ -137,3 +137,11 @@ pub use pecos_qulacs::QulacsStateVec; #[cfg(feature = "wasm")] pub use pecos_wasm::{ForeignObject, WasmForeignObject}; + +// ============================================================================ +// Decoder support +// ============================================================================ + +// Re-export core decoder traits (always available) +#[cfg(any(feature = "ldpc", feature = "all-decoders"))] +pub use pecos_decoders::{BatchDecoder, CssDecoder, Decoder, DecoderError, SoftDecoder}; diff --git a/docs/development/DEVELOPMENT.md b/docs/development/DEVELOPMENT.md index f2ad33d7c..a9a6cf5bc 100644 --- a/docs/development/DEVELOPMENT.md +++ b/docs/development/DEVELOPMENT.md @@ -42,9 +42,9 @@ For developers who want to contribute or modify PECOS: 6. Build the project in editable mode ```sh - make build + make build-dev ``` - See other build options in the `Makefile`. + Other build options: `make build-release` (optimized), `make build-native` (optimized for your CPU). 7. Run all Python and Rust tests: ```sh diff --git a/pyproject.toml b/pyproject.toml index dfb4d5b62..b349517b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pecos-workspace" -version = "0.7.0.dev4" +version = "0.8.0.dev0" dependencies = [ # Note: guppylang is an optional dependency in quantum-pecos # Don't include it here as a direct dependency diff --git a/python/pecos-rslib/Cargo.toml b/python/pecos-rslib/Cargo.toml index c28323810..b52c265a7 100644 --- a/python/pecos-rslib/Cargo.toml +++ b/python/pecos-rslib/Cargo.toml @@ -24,9 +24,8 @@ default = ["wasm"] wasm = ["pecos/wasm"] [dependencies] -# Use the pecos metacrate which includes all simulators and runtimes by default -# Enable llvm and wasm features for full Python functionality -pecos = { workspace = true, features = ["llvm", "wasm", "selene"] } +# Use the pecos metacrate with all features needed for Python bindings +pecos = { workspace = true, features = ["llvm", "wasm", "selene", "all-simulators"] } pyo3 = { workspace=true, features = ["extension-module", "abi3-py310", "generate-import-lib", "num-complex"] } ndarray.workspace = true diff --git a/python/pecos-rslib/pyproject.toml b/python/pecos-rslib/pyproject.toml index 95c924d09..f45da10f6 100644 --- a/python/pecos-rslib/pyproject.toml +++ b/python/pecos-rslib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pecos-rslib" -version = "0.7.0.dev4" +version = "0.8.0.dev0" description = "Rust libary extensions for Python PECOS." authors = [ {name = "The PECOS Developers"}, diff --git a/python/quantum-pecos/pyproject.toml b/python/quantum-pecos/pyproject.toml index c889fd1b9..33070a107 100644 --- a/python/quantum-pecos/pyproject.toml +++ b/python/quantum-pecos/pyproject.toml @@ -15,7 +15,7 @@ build-backend = "hatchling.build" [project] name = "quantum-pecos" -version = "0.7.0.dev4" +version = "0.8.0.dev0" authors = [ {name = "The PECOS Developers"}, ] @@ -28,7 +28,7 @@ requires-python = ">=3.10" license = { file = "LICENSE"} keywords = ["quantum", "QEC", "simulation", "PECOS"] dependencies = [ - "pecos-rslib==0.7.0.dev4", + "pecos-rslib==0.8.0.dev0", "phir>=0.3.3", "networkx>=2.1.0", ] diff --git a/uv.lock b/uv.lock index b67a318c6..80add44f1 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 2 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.14'", @@ -715,30 +715,30 @@ toml = [ [[package]] name = "cuda-bindings" -version = "13.1.0" +version = "13.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cuda-pathfinder", marker = "python_full_version >= '3.11'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/13/b0e2f65a2dc1e7ae9a0662e2de2382af92f944f896fa981e6fd4d865ddec/cuda_bindings-13.1.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dba661b641c4559ae28b3bd17620bdee469aec706feafcf666853c1b2df35eb", size = 12115816, upload-time = "2025-12-04T22:56:13.537Z" }, - { url = "https://files.pythonhosted.org/packages/b4/bf/ad971786911f91b73b82c56d17679d9068ffbedc55fcb485c5791f83801d/cuda_bindings-13.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:122d3f0dde611e84bb0448cb2a1760b3022da5a09b24cc27ec6403fe3d3ebcb5", size = 12515163, upload-time = "2025-12-04T22:56:15.657Z" }, - { url = "https://files.pythonhosted.org/packages/2e/2c/835ca2ca66328e2d8adde888dbc94b20e947d315f8a7b1aeb181aa956cf7/cuda_bindings-13.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:7949148190c0611b3eae87698a8778ab4d1c1f220a066c83de01251a6ce577ae", size = 11314923, upload-time = "2025-12-04T22:56:18.149Z" }, - { url = "https://files.pythonhosted.org/packages/75/69/a7ee82619cfaf5ed8409c9628825063a9d5b8a1589e2ddb4d164b065e818/cuda_bindings-13.1.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f099d5e7e952ddafc62a1abad1ae30f46fcd3ebe683bac628c927d8050779e3", size = 12118903, upload-time = "2025-12-04T22:56:20.973Z" }, - { url = "https://files.pythonhosted.org/packages/78/9f/6e563566a55990dc52f42968ab3a2b17897959459ad95f9df5aef170e2a1/cuda_bindings-13.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4e4e396ebb051bd268ec3f97c7cf350fbf2eee8ff5cf0b572218ea52fde0960", size = 12541331, upload-time = "2025-12-04T22:56:22.991Z" }, - { url = "https://files.pythonhosted.org/packages/e5/50/996454cddab45ed670d150f9cce4f4dbfaffdc2e833f27b0d29be066fe8b/cuda_bindings-13.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:556867e171ada3bd7716133f9b689a89c5486110757d44f0884e0f1c1cf5cb98", size = 11344306, upload-time = "2025-12-04T22:56:26.462Z" }, - { url = "https://files.pythonhosted.org/packages/11/8b/c30de01881ade1651ca71c6a111483e256b2064b53e9e29e04cd42a47ee6/cuda_bindings-13.1.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7a12d696987854b04a184c4e5e61f043b56bb94469d27c546a8aec55d9aa6be", size = 11833630, upload-time = "2025-12-04T22:56:28.401Z" }, - { url = "https://files.pythonhosted.org/packages/fa/9a/ca6cf7fb8a287c55596393eee05bd205f79a0270987447402d80f22db382/cuda_bindings-13.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f63214291d316e18152e277edc1f159083a931f9936e2e3d854da8155a5f0f7", size = 12272962, upload-time = "2025-12-04T22:56:30.465Z" }, - { url = "https://files.pythonhosted.org/packages/c2/b6/686b16cf2dddc3403b88a0396b2e411bfdd730a29ca24e1f17f5e982bc1f/cuda_bindings-13.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:61510bfda2d4cd6afb589d39806f82e184beced26a5d8a12db10770ccbc99754", size = 11449081, upload-time = "2025-12-04T22:56:32.762Z" }, - { url = "https://files.pythonhosted.org/packages/c8/a0/ca376832b8727f9b449f307755517c839d036695b330b821b1b6193e327c/cuda_bindings-13.1.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9d3bdbb1b860f37450b6280d6a4d27716b952f480ef0be6daa27d04d9c4825ac", size = 11836584, upload-time = "2025-12-04T22:56:34.573Z" }, - { url = "https://files.pythonhosted.org/packages/71/1a/97c4246984ea6c717b4eeb139b9abcf4831b7c3557ae28eccc9bce7e20a3/cuda_bindings-13.1.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:72b4236637ece577b0dc8528a6a60beecb19e64ca9c6818386f982200e461057", size = 12221797, upload-time = "2025-12-04T22:56:36.65Z" }, - { url = "https://files.pythonhosted.org/packages/dc/f8/50d0bed242ca79edf3fbf20f95aa0a11225b4b814fe56f67ccfa5511832e/cuda_bindings-13.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:34181796a768cd7bb6a2e7407db76eed42a0d7e48a4b24aed502e9b485fcb0d5", size = 11425811, upload-time = "2025-12-04T22:56:38.7Z" }, - { url = "https://files.pythonhosted.org/packages/56/a0/95bd9447d39dcfe61ef831471aef21eeb4685b34ca914cdc60baccaa8029/cuda_bindings-13.1.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:12106d5bb73fff4c25740ae1bd56af9630306a7fff6a700de54015083ba3831b", size = 11900651, upload-time = "2025-12-04T22:56:40.649Z" }, - { url = "https://files.pythonhosted.org/packages/75/27/440110cce146715d862c05e414e249bc9f57e450ba0d3f5052c7856ca0bc/cuda_bindings-13.1.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80cccf2ce884f70d7d41d34fe622b4a8e6cadcc11ce943c7c5bedfb9285ac61c", size = 12264562, upload-time = "2025-12-04T22:56:42.638Z" }, - { url = "https://files.pythonhosted.org/packages/57/52/619e37982f83c0c7515d8c2c0708d48ce1de16879ca3c63dc6f05a142913/cuda_bindings-13.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:2fa92fad8c21cdeaa2e58a733e5013a7377840e2fbc0239757409141b90704c2", size = 11547446, upload-time = "2025-12-04T22:56:44.795Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3e/23a7180f5eec1c914ce2a8f29a968de203047b31594db0828daf1f25fb03/cuda_bindings-13.1.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1a73affa8b33e677b876cd570120023497a43a1045303a3ebf152749d0c5a93", size = 11799779, upload-time = "2025-12-04T22:56:47.055Z" }, - { url = "https://files.pythonhosted.org/packages/a7/1f/1c08cd0db90d90c5b65acae80ac719b2c6aa145e260e6abece985978ab0a/cuda_bindings-13.1.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7803f0a2b9085eb44805c8226907b7091d3afba5453c1c1ef6710f0151521ddb", size = 12188089, upload-time = "2025-12-04T22:56:48.998Z" }, - { url = "https://files.pythonhosted.org/packages/d0/c6/b8345151fef3bb8dc48d09487c48c68c8aea7d68704cd6452e1cbc9c83c7/cuda_bindings-13.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2ac82549be8c9b4490f876caaeff5be95dd29147832982d2a4cccb906dab8373", size = 12036656, upload-time = "2025-12-04T22:56:51.444Z" }, + { url = "https://files.pythonhosted.org/packages/60/63/579402b642f5b9b8ceb79e456b39b5771f27e132a8af3b140e54d69790fc/cuda_bindings-13.1.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4400370a83f1538e25ed4c18c34a0e9d5fad39741e282e69ce24d1479a11017d", size = 15777291, upload-time = "2025-12-09T22:05:41.109Z" }, + { url = "https://files.pythonhosted.org/packages/df/6a/3a293cfb01cd4964444a0f75917b6edb1c31ea69d0230e329975da6991ba/cuda_bindings-13.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f92500e2f6aec2dac00a5a1ce77d5aa77ea77b606dc484d951f1f2cc3eaa13", size = 16311623, upload-time = "2025-12-09T22:05:43.897Z" }, + { url = "https://files.pythonhosted.org/packages/72/b8/a5860b9e70faa53658236dc61efc3ecc51846beff4a0b73de9151130ff98/cuda_bindings-13.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:3f5bb8190267216f96597235252087accac4cbccefd1b60756cced114b2d6754", size = 15185932, upload-time = "2025-12-09T22:05:46.089Z" }, + { url = "https://files.pythonhosted.org/packages/b0/58/b8d4c7c5fb29ba46088a7e78d1065484219f8fe41a08adc4a85b1ee56149/cuda_bindings-13.1.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5f5a6ade0ad45096568bc4dd1eb3377b65884d29124338fe9a4353130ef6631", size = 15771605, upload-time = "2025-12-09T22:05:48.266Z" }, + { url = "https://files.pythonhosted.org/packages/17/af/710403f76f2d608d483d87089465e1f666351641dbd73d19bd025e652bad/cuda_bindings-13.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9348f69b03b257f07159dd4c869615e139722c2bd81e96c66f6b8f77615efd82", size = 16338970, upload-time = "2025-12-09T22:05:50.598Z" }, + { url = "https://files.pythonhosted.org/packages/64/1c/e7ea27d4cb7d07331c88e3bbed3cacc947d2237471801086c7447b3e195d/cuda_bindings-13.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ec33b84f4bd65a86a734427f2b9cb8f221bedab2c4cfb681488cabc82f1d64ab", size = 15210672, upload-time = "2025-12-09T22:05:53.369Z" }, + { url = "https://files.pythonhosted.org/packages/53/3d/c8ed9d169843091f3f0d6b8218e826fd59520a37e0434c204feada597988/cuda_bindings-13.1.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e75ad0cb863330df784236d289612d71ca855c013d19ae00e5693574abd6915", size = 15530160, upload-time = "2025-12-09T22:05:55.386Z" }, + { url = "https://files.pythonhosted.org/packages/4a/8e/368295623ee43fba622909d780fbb6863efc1638dff55f67a0f04eac6470/cuda_bindings-13.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25785d1a3cdcd98f151240fd5efd025609319a6720a217dee2a929241749d488", size = 16110386, upload-time = "2025-12-09T22:05:57.71Z" }, + { url = "https://files.pythonhosted.org/packages/60/1f/ecc4701ade3e85f091c625a920574527b9daf7fb354189fbfbc5516af6cd/cuda_bindings-13.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:ccde9c95c0e953b31fe7731bb08da9d0a34b1770498df9a3c156fdfdbe3951ad", size = 15250028, upload-time = "2025-12-09T22:06:00.346Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c1/0ee8fd94bab7e23116e0e3da8c0902e299f3d9edc95f1d7d8ef894c897ed/cuda_bindings-13.1.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c9822a57c8f952dc367aacd7c32fe4cb17371104383606f455ea74635bff4c7", size = 15421116, upload-time = "2025-12-09T22:06:02.994Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c2/f272fad414b96299e010dcbe510cf17fc25deaf3443e0fdb55020a8298a3/cuda_bindings-13.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5837f5ea422c5653626dcfe22e9ab68142cd19af9e67a226100f224cc25a1b99", size = 15940152, upload-time = "2025-12-09T22:06:05.079Z" }, + { url = "https://files.pythonhosted.org/packages/2a/56/433093bec0121f031edb582ea3a72f71031e8fbebecaaf329809344da4c7/cuda_bindings-13.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:9e4f348cd7a779657d51e6f71aac3965fb1738f40ff3bbe75265a3242fd6f29f", size = 15216463, upload-time = "2025-12-09T22:06:07.296Z" }, + { url = "https://files.pythonhosted.org/packages/de/38/40416d037ed25db68f1dbd50e0232775a62d90c9f25af22b196c0a13b88c/cuda_bindings-13.1.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:86258fe1b0d3998bea7f57dc891569e4996705b8dd00366e44c722d0a29b2090", size = 15498927, upload-time = "2025-12-09T22:06:09.476Z" }, + { url = "https://files.pythonhosted.org/packages/ac/3f/f1f88b6cdb7d41ba076f8ff10edf6d3bd17e740da9a163544b43d6349653/cuda_bindings-13.1.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:daf8468fd603b2724c2d16cbd499348c64916ed72b1d04643f1660ce13cd12ae", size = 15984539, upload-time = "2025-12-09T22:06:11.882Z" }, + { url = "https://files.pythonhosted.org/packages/f6/33/7739cc5e9a3373df8e7dea9060528bee5f70cf6e28b9c14f765502816c71/cuda_bindings-13.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:f2e079182014dbc162562b46467815272c14c7afe5b988978fa968728b0ac726", size = 15373212, upload-time = "2025-12-09T22:06:13.989Z" }, + { url = "https://files.pythonhosted.org/packages/9e/0a/5c6d514e566ff86c4054bbbb6554bf49b9c55fefbc934eb456faecab53c9/cuda_bindings-13.1.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d0cd96a6ec00a78235947bff9462b2139bc5b83ce8e297d865802f0b52d1e23d", size = 15403944, upload-time = "2025-12-09T22:06:16.315Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5b/319cfa491a685d4d4757aa24223b6dbc0976954afac42f49fc47290ba6a3/cuda_bindings-13.1.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff465829c6c394c2b4047250324a19925cf8c44633345b2746a4741e07bf827", size = 15911462, upload-time = "2025-12-09T22:06:18.403Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5c/38b92080c5b6c4ddb09f0be2536123f81c7e9e1a89e4573f20cb00347ee3/cuda_bindings-13.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:8205eee6b8b458a2110c0384923ace206855d0f1b436fc1b145fcbaa1653b501", size = 16044390, upload-time = "2025-12-09T22:06:20.945Z" }, ] [[package]] @@ -891,31 +891,31 @@ wheels = [ [[package]] name = "debugpy" -version = "1.8.17" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/ad/71e708ff4ca377c4230530d6a7aa7992592648c122a2cd2b321cf8b35a76/debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e", size = 1644129, upload-time = "2025-09-17T16:33:20.633Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/36/b57c6e818d909f6e59c0182252921cf435e0951126a97e11de37e72ab5e1/debugpy-1.8.17-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542", size = 2098021, upload-time = "2025-09-17T16:33:22.556Z" }, - { url = "https://files.pythonhosted.org/packages/be/01/0363c7efdd1e9febd090bb13cee4fb1057215b157b2979a4ca5ccb678217/debugpy-1.8.17-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3", size = 3087399, upload-time = "2025-09-17T16:33:24.292Z" }, - { url = "https://files.pythonhosted.org/packages/79/bc/4a984729674aa9a84856650438b9665f9a1d5a748804ac6f37932ce0d4aa/debugpy-1.8.17-cp310-cp310-win32.whl", hash = "sha256:3a32c0af575749083d7492dc79f6ab69f21b2d2ad4cd977a958a07d5865316e4", size = 5230292, upload-time = "2025-09-17T16:33:26.137Z" }, - { url = "https://files.pythonhosted.org/packages/5d/19/2b9b3092d0cf81a5aa10c86271999453030af354d1a5a7d6e34c574515d7/debugpy-1.8.17-cp310-cp310-win_amd64.whl", hash = "sha256:a3aad0537cf4d9c1996434be68c6c9a6d233ac6f76c2a482c7803295b4e4f99a", size = 5261885, upload-time = "2025-09-17T16:33:27.592Z" }, - { url = "https://files.pythonhosted.org/packages/d8/53/3af72b5c159278c4a0cf4cffa518675a0e73bdb7d1cac0239b815502d2ce/debugpy-1.8.17-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840", size = 2207154, upload-time = "2025-09-17T16:33:29.457Z" }, - { url = "https://files.pythonhosted.org/packages/8f/6d/204f407df45600e2245b4a39860ed4ba32552330a0b3f5f160ae4cc30072/debugpy-1.8.17-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f", size = 3170322, upload-time = "2025-09-17T16:33:30.837Z" }, - { url = "https://files.pythonhosted.org/packages/f2/13/1b8f87d39cf83c6b713de2620c31205299e6065622e7dd37aff4808dd410/debugpy-1.8.17-cp311-cp311-win32.whl", hash = "sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da", size = 5155078, upload-time = "2025-09-17T16:33:33.331Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c5/c012c60a2922cc91caa9675d0ddfbb14ba59e1e36228355f41cab6483469/debugpy-1.8.17-cp311-cp311-win_amd64.whl", hash = "sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4", size = 5179011, upload-time = "2025-09-17T16:33:35.711Z" }, - { url = "https://files.pythonhosted.org/packages/08/2b/9d8e65beb2751876c82e1aceb32f328c43ec872711fa80257c7674f45650/debugpy-1.8.17-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d", size = 2549522, upload-time = "2025-09-17T16:33:38.466Z" }, - { url = "https://files.pythonhosted.org/packages/b4/78/eb0d77f02971c05fca0eb7465b18058ba84bd957062f5eec82f941ac792a/debugpy-1.8.17-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc", size = 4309417, upload-time = "2025-09-17T16:33:41.299Z" }, - { url = "https://files.pythonhosted.org/packages/37/42/c40f1d8cc1fed1e75ea54298a382395b8b937d923fcf41ab0797a554f555/debugpy-1.8.17-cp312-cp312-win32.whl", hash = "sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf", size = 5277130, upload-time = "2025-09-17T16:33:43.554Z" }, - { url = "https://files.pythonhosted.org/packages/72/22/84263b205baad32b81b36eac076de0cdbe09fe2d0637f5b32243dc7c925b/debugpy-1.8.17-cp312-cp312-win_amd64.whl", hash = "sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464", size = 5319053, upload-time = "2025-09-17T16:33:53.033Z" }, - { url = "https://files.pythonhosted.org/packages/50/76/597e5cb97d026274ba297af8d89138dfd9e695767ba0e0895edb20963f40/debugpy-1.8.17-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464", size = 2538386, upload-time = "2025-09-17T16:33:54.594Z" }, - { url = "https://files.pythonhosted.org/packages/5f/60/ce5c34fcdfec493701f9d1532dba95b21b2f6394147234dce21160bd923f/debugpy-1.8.17-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088", size = 4292100, upload-time = "2025-09-17T16:33:56.353Z" }, - { url = "https://files.pythonhosted.org/packages/e8/95/7873cf2146577ef71d2a20bf553f12df865922a6f87b9e8ee1df04f01785/debugpy-1.8.17-cp313-cp313-win32.whl", hash = "sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83", size = 5277002, upload-time = "2025-09-17T16:33:58.231Z" }, - { url = "https://files.pythonhosted.org/packages/46/11/18c79a1cee5ff539a94ec4aa290c1c069a5580fd5cfd2fb2e282f8e905da/debugpy-1.8.17-cp313-cp313-win_amd64.whl", hash = "sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420", size = 5319047, upload-time = "2025-09-17T16:34:00.586Z" }, - { url = "https://files.pythonhosted.org/packages/de/45/115d55b2a9da6de812696064ceb505c31e952c5d89c4ed1d9bb983deec34/debugpy-1.8.17-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1", size = 2536899, upload-time = "2025-09-17T16:34:02.657Z" }, - { url = "https://files.pythonhosted.org/packages/5a/73/2aa00c7f1f06e997ef57dc9b23d61a92120bec1437a012afb6d176585197/debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f", size = 4268254, upload-time = "2025-09-17T16:34:04.486Z" }, - { url = "https://files.pythonhosted.org/packages/86/b5/ed3e65c63c68a6634e3ba04bd10255c8e46ec16ebed7d1c79e4816d8a760/debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670", size = 5277203, upload-time = "2025-09-17T16:34:06.65Z" }, - { url = "https://files.pythonhosted.org/packages/b0/26/394276b71c7538445f29e792f589ab7379ae70fd26ff5577dfde71158e96/debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c", size = 5318493, upload-time = "2025-09-17T16:34:08.483Z" }, - { url = "https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef", size = 5283210, upload-time = "2025-09-17T16:34:25.835Z" }, +version = "1.8.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/62/1a/7cb5531840d7ba5d9329644109e62adee41f2f0083d9f8a4039f01de58cf/debugpy-1.8.18.tar.gz", hash = "sha256:02551b1b84a91faadd2db9bc4948873f2398190c95b3cc6f97dc706f43e8c433", size = 1644467, upload-time = "2025-12-10T19:48:07.236Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/38/0136815d2425fda176b30f0ec0b0f299d7316db46b36420e48399eca42e2/debugpy-1.8.18-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:d44e9c531f2519ec4b856ddde8f536615918f5b7886c658a81bf200c90315f77", size = 2098460, upload-time = "2025-12-10T19:48:08.924Z" }, + { url = "https://files.pythonhosted.org/packages/bc/d9/2f00867bea3e50fee298b37602ac7aec9915bdb7227756d4cef889671c4a/debugpy-1.8.18-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:a69ef7d6050e5d26cf8e0081c6b591a41383dc18db734c4acafdd49568bb7a6f", size = 3087841, upload-time = "2025-12-10T19:48:10.326Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c1/54e50f376d394e0d3d355149d3d85b575e861d57ec0d0ff409c4bd51f531/debugpy-1.8.18-cp310-cp310-win32.whl", hash = "sha256:971965e264faed48ae961ff1e1ad2ce32d8e0cc550a4baa7643a25f1782b7125", size = 5233663, upload-time = "2025-12-10T19:48:12.668Z" }, + { url = "https://files.pythonhosted.org/packages/14/84/1142d16ee87f9bf4db5857b0b38468af602815eb73a9927436c79619beed/debugpy-1.8.18-cp310-cp310-win_amd64.whl", hash = "sha256:0701d83c4c1a74ed2c9abdabce102b1daf24cf81e1802421980871c9ee41f371", size = 5265361, upload-time = "2025-12-10T19:48:14.071Z" }, + { url = "https://files.pythonhosted.org/packages/ac/72/93167809b44a8e6971a1ff0b3e956cca4832fd7e8e47ce7b2b16be95795a/debugpy-1.8.18-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:3dae1d65e581406a4d7c1bb44391f47e621b8c87c5639b6607e6007a5d823205", size = 2207588, upload-time = "2025-12-10T19:48:15.44Z" }, + { url = "https://files.pythonhosted.org/packages/05/8b/0f5a54b239dac880ccc16e0b29fdecfb444635f2495cc3705548e24938ab/debugpy-1.8.18-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:8804d1288e6006629a87d53eb44b7b66e695d428ac529ffd75bfc7d730a9c821", size = 3170762, upload-time = "2025-12-10T19:48:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/e6/e4/7631d0ecd102085aa1cf5eb38f50e00036dec2c4571f236d2189ed842ee3/debugpy-1.8.18-cp311-cp311-win32.whl", hash = "sha256:ded8a5a413bd0a249b3c0be9f43128f437755180ac431222a6354c7d76a76a54", size = 5158530, upload-time = "2025-12-10T19:48:18.701Z" }, + { url = "https://files.pythonhosted.org/packages/c0/51/97674a4af4dc960a4eb0882b6c41c111e6a0a79c6b275df202f392e751cb/debugpy-1.8.18-cp311-cp311-win_amd64.whl", hash = "sha256:df6c1243dedcb6bf9a5dc1c5668009e2b5508b8525f27d9821be91da57827743", size = 5182452, upload-time = "2025-12-10T19:48:20.328Z" }, + { url = "https://files.pythonhosted.org/packages/83/01/439626e3572a33ac543f25bc1dac1e80bc01c7ce83f3c24dc4441302ca13/debugpy-1.8.18-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:530c38114725505a7e4ea95328dbc24aabb9be708c6570623c8163412e6d1d6b", size = 2549961, upload-time = "2025-12-10T19:48:21.73Z" }, + { url = "https://files.pythonhosted.org/packages/cd/73/1eeaa15c20a2b627be57a65bc1ebf2edd8d896950eac323588b127d776f2/debugpy-1.8.18-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:a114865099283cbed4c9330cb0c9cb7a04cfa92e803577843657302d526141ec", size = 4309855, upload-time = "2025-12-10T19:48:23.41Z" }, + { url = "https://files.pythonhosted.org/packages/e4/6f/2da8ded21ae55df7067e57bd7f67ffed7e08b634f29bdba30c03d3f19918/debugpy-1.8.18-cp312-cp312-win32.whl", hash = "sha256:4d26736dfabf404e9f3032015ec7b0189e7396d0664e29e5bdbe7ac453043c95", size = 5280577, upload-time = "2025-12-10T19:48:25.386Z" }, + { url = "https://files.pythonhosted.org/packages/f5/8e/ebe887218c5b84f9421de7eb7bb7cdf196e84535c3f504a562219297d755/debugpy-1.8.18-cp312-cp312-win_amd64.whl", hash = "sha256:7e68ba950acbcf95ee862210133681f408cbb78d1c9badbb515230ec55ed6487", size = 5322458, upload-time = "2025-12-10T19:48:28.049Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3f/45af037e91e308274a092eb6a86282865fb1f11148cdb7616e811aae33d7/debugpy-1.8.18-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:75d14dd04b617ee38e46786394ec0dd5e1ac5e3d10ffb034fd6c7b72111174c2", size = 2538826, upload-time = "2025-12-10T19:48:29.434Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f4/2de6bf624de05134d1bbe0a8750d484363cd212c3ade3d04f5c77d47d0ce/debugpy-1.8.18-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:1b224887af5121fa702f9f542968170d104e3f9cac827d85fdefe89702dc235c", size = 4292542, upload-time = "2025-12-10T19:48:30.836Z" }, + { url = "https://files.pythonhosted.org/packages/93/54/89de7ef84d5ac39fc64a773feaedd902536cc5295814cd22d19c6d9dea35/debugpy-1.8.18-cp313-cp313-win32.whl", hash = "sha256:636a5445a3336e4aba323a3545ca2bb373b04b0bc14084a4eb20c989db44429f", size = 5280460, upload-time = "2025-12-10T19:48:32.696Z" }, + { url = "https://files.pythonhosted.org/packages/4f/59/651329e618406229edbef6508a5aa05e43cd027f042740c5b27e46854b23/debugpy-1.8.18-cp313-cp313-win_amd64.whl", hash = "sha256:6da217ac8c1152d698b9809484d50c75bef9cc02fd6886a893a6df81ec952ff8", size = 5322399, upload-time = "2025-12-10T19:48:35.057Z" }, + { url = "https://files.pythonhosted.org/packages/36/59/5e8bf46a66ca9dfcd0ce4f35c07085aeb60d99bf5c52135973a4e197ed41/debugpy-1.8.18-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:be7f622d250fe3429571e84572eb771023f1da22c754f28d2c60a10d74a4cc1b", size = 2537336, upload-time = "2025-12-10T19:48:36.463Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5a/3b37cc266a69da83a4febaa4267bb2062d4bec5287036e2f23d9a30a788c/debugpy-1.8.18-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:df8bf7cd78019d5d155213bf5a1818b36403d0c3758d669e76827d4db026b840", size = 4268696, upload-time = "2025-12-10T19:48:37.855Z" }, + { url = "https://files.pythonhosted.org/packages/de/4b/1e13586444440e5754b70055449b70afa187aaa167fa4c20c0c05d9c3b80/debugpy-1.8.18-cp314-cp314-win32.whl", hash = "sha256:32dd56d50fe15c47d0f930a7f0b9d3e5eb8ed04770bc6c313fba6d226f87e1e8", size = 5280624, upload-time = "2025-12-10T19:48:39.28Z" }, + { url = "https://files.pythonhosted.org/packages/7a/21/f8c12baa16212859269dc4c3e4b413778ec1154d332896d3c4cca96ac660/debugpy-1.8.18-cp314-cp314-win_amd64.whl", hash = "sha256:714b61d753cfe3ed5e7bf0aad131506d750e271726ac86e3e265fd7eeebbe765", size = 5321982, upload-time = "2025-12-10T19:48:41.086Z" }, + { url = "https://files.pythonhosted.org/packages/dc/0d/bf7ac329c132436c57124202b5b5ccd6366e5d8e75eeb184cf078c826e8d/debugpy-1.8.18-py2.py3-none-any.whl", hash = "sha256:ab8cf0abe0fe2dfe1f7e65abc04b1db8740f9be80c1274acb625855c5c3ece6e", size = 5286576, upload-time = "2025-12-10T19:48:56.071Z" }, ] [[package]] @@ -1502,7 +1502,7 @@ wheels = [ [[package]] name = "jupyter-client" -version = "8.6.3" +version = "8.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-core" }, @@ -1511,9 +1511,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/27/d10de45e8ad4ce872372c4a3a37b7b35b6b064f6f023a5c14ffcced4d59d/jupyter_client-8.7.0.tar.gz", hash = "sha256:3357212d9cbe01209e59190f67a3a7e1f387a4f4e88d1e0433ad84d7b262531d", size = 344691, upload-time = "2025-12-09T18:37:01.953Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, + { url = "https://files.pythonhosted.org/packages/bb/f5/fddaec430367be9d62a7ed125530e133bfd4a1c0350fe221149ee0f2b526/jupyter_client-8.7.0-py3-none-any.whl", hash = "sha256:3671a94fd25e62f5f2f554f5e95389c2294d89822378a5f2dd24353e1494a9e0", size = 106215, upload-time = "2025-12-09T18:37:00.024Z" }, ] [[package]] @@ -1986,7 +1986,7 @@ wheels = [ [[package]] name = "matplotlib" -version = "3.10.7" +version = "3.10.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, @@ -2001,62 +2001,62 @@ dependencies = [ { name = "pyparsing" }, { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/e2/d2d5295be2f44c678ebaf3544ba32d20c1f9ef08c49fe47f496180e1db15/matplotlib-3.10.7.tar.gz", hash = "sha256:a06ba7e2a2ef9131c79c49e63dad355d2d878413a0376c1727c8b9335ff731c7", size = 34804865, upload-time = "2025-10-09T00:28:00.669Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/87/3932d5778ab4c025db22710b61f49ccaed3956c5cf46ffb2ffa7492b06d9/matplotlib-3.10.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ac81eee3b7c266dd92cee1cd658407b16c57eed08c7421fa354ed68234de380", size = 8247141, upload-time = "2025-10-09T00:26:06.023Z" }, - { url = "https://files.pythonhosted.org/packages/45/a8/bfed45339160102bce21a44e38a358a1134a5f84c26166de03fb4a53208f/matplotlib-3.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:667ecd5d8d37813a845053d8f5bf110b534c3c9f30e69ebd25d4701385935a6d", size = 8107995, upload-time = "2025-10-09T00:26:08.669Z" }, - { url = "https://files.pythonhosted.org/packages/e2/3c/5692a2d9a5ba848fda3f48d2b607037df96460b941a59ef236404b39776b/matplotlib-3.10.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc1c51b846aca49a5a8b44fbba6a92d583a35c64590ad9e1e950dc88940a4297", size = 8680503, upload-time = "2025-10-09T00:26:10.607Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a0/86ace53c48b05d0e6e9c127b2ace097434901f3e7b93f050791c8243201a/matplotlib-3.10.7-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a11c2e9e72e7de09b7b72e62f3df23317c888299c875e2b778abf1eda8c0a42", size = 9514982, upload-time = "2025-10-09T00:26:12.594Z" }, - { url = "https://files.pythonhosted.org/packages/a6/81/ead71e2824da8f72640a64166d10e62300df4ae4db01a0bac56c5b39fa51/matplotlib-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f19410b486fdd139885ace124e57f938c1e6a3210ea13dd29cab58f5d4bc12c7", size = 9566429, upload-time = "2025-10-09T00:26:14.758Z" }, - { url = "https://files.pythonhosted.org/packages/65/7d/954b3067120456f472cce8fdcacaf4a5fcd522478db0c37bb243c7cb59dd/matplotlib-3.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:b498e9e4022f93de2d5a37615200ca01297ceebbb56fe4c833f46862a490f9e3", size = 8108174, upload-time = "2025-10-09T00:26:17.015Z" }, - { url = "https://files.pythonhosted.org/packages/fc/bc/0fb489005669127ec13f51be0c6adc074d7cf191075dab1da9fe3b7a3cfc/matplotlib-3.10.7-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:53b492410a6cd66c7a471de6c924f6ede976e963c0f3097a3b7abfadddc67d0a", size = 8257507, upload-time = "2025-10-09T00:26:19.073Z" }, - { url = "https://files.pythonhosted.org/packages/e2/6a/d42588ad895279ff6708924645b5d2ed54a7fb2dc045c8a804e955aeace1/matplotlib-3.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d9749313deb729f08207718d29c86246beb2ea3fdba753595b55901dee5d2fd6", size = 8119565, upload-time = "2025-10-09T00:26:21.023Z" }, - { url = "https://files.pythonhosted.org/packages/10/b7/4aa196155b4d846bd749cf82aa5a4c300cf55a8b5e0dfa5b722a63c0f8a0/matplotlib-3.10.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2222c7ba2cbde7fe63032769f6eb7e83ab3227f47d997a8453377709b7fe3a5a", size = 8692668, upload-time = "2025-10-09T00:26:22.967Z" }, - { url = "https://files.pythonhosted.org/packages/e6/e7/664d2b97016f46683a02d854d730cfcf54ff92c1dafa424beebef50f831d/matplotlib-3.10.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e91f61a064c92c307c5a9dc8c05dc9f8a68f0a3be199d9a002a0622e13f874a1", size = 9521051, upload-time = "2025-10-09T00:26:25.041Z" }, - { url = "https://files.pythonhosted.org/packages/a8/a3/37aef1404efa615f49b5758a5e0261c16dd88f389bc1861e722620e4a754/matplotlib-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f1851eab59ca082c95df5a500106bad73672645625e04538b3ad0f69471ffcc", size = 9576878, upload-time = "2025-10-09T00:26:27.478Z" }, - { url = "https://files.pythonhosted.org/packages/33/cd/b145f9797126f3f809d177ca378de57c45413c5099c5990de2658760594a/matplotlib-3.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:6516ce375109c60ceec579e699524e9d504cd7578506f01150f7a6bc174a775e", size = 8115142, upload-time = "2025-10-09T00:26:29.774Z" }, - { url = "https://files.pythonhosted.org/packages/2e/39/63bca9d2b78455ed497fcf51a9c71df200a11048f48249038f06447fa947/matplotlib-3.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:b172db79759f5f9bc13ef1c3ef8b9ee7b37b0247f987fbbbdaa15e4f87fd46a9", size = 7992439, upload-time = "2025-10-09T00:26:40.32Z" }, - { url = "https://files.pythonhosted.org/packages/be/b3/09eb0f7796932826ec20c25b517d568627754f6c6462fca19e12c02f2e12/matplotlib-3.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a0edb7209e21840e8361e91ea84ea676658aa93edd5f8762793dec77a4a6748", size = 8272389, upload-time = "2025-10-09T00:26:42.474Z" }, - { url = "https://files.pythonhosted.org/packages/11/0b/1ae80ddafb8652fd8046cb5c8460ecc8d4afccb89e2c6d6bec61e04e1eaf/matplotlib-3.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c380371d3c23e0eadf8ebff114445b9f970aff2010198d498d4ab4c3b41eea4f", size = 8128247, upload-time = "2025-10-09T00:26:44.77Z" }, - { url = "https://files.pythonhosted.org/packages/7d/18/95ae2e242d4a5c98bd6e90e36e128d71cf1c7e39b0874feaed3ef782e789/matplotlib-3.10.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d5f256d49fea31f40f166a5e3131235a5d2f4b7f44520b1cf0baf1ce568ccff0", size = 8696996, upload-time = "2025-10-09T00:26:46.792Z" }, - { url = "https://files.pythonhosted.org/packages/7e/3d/5b559efc800bd05cb2033aa85f7e13af51958136a48327f7c261801ff90a/matplotlib-3.10.7-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11ae579ac83cdf3fb72573bb89f70e0534de05266728740d478f0f818983c695", size = 9530153, upload-time = "2025-10-09T00:26:49.07Z" }, - { url = "https://files.pythonhosted.org/packages/88/57/eab4a719fd110312d3c220595d63a3c85ec2a39723f0f4e7fa7e6e3f74ba/matplotlib-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4c14b6acd16cddc3569a2d515cfdd81c7a68ac5639b76548cfc1a9e48b20eb65", size = 9593093, upload-time = "2025-10-09T00:26:51.067Z" }, - { url = "https://files.pythonhosted.org/packages/31/3c/80816f027b3a4a28cd2a0a6ef7f89a2db22310e945cd886ec25bfb399221/matplotlib-3.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:0d8c32b7ea6fb80b1aeff5a2ceb3fb9778e2759e899d9beff75584714afcc5ee", size = 8122771, upload-time = "2025-10-09T00:26:53.296Z" }, - { url = "https://files.pythonhosted.org/packages/de/77/ef1fc78bfe99999b2675435cc52120887191c566b25017d78beaabef7f2d/matplotlib-3.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:5f3f6d315dcc176ba7ca6e74c7768fb7e4cf566c49cb143f6bc257b62e634ed8", size = 7992812, upload-time = "2025-10-09T00:26:54.882Z" }, - { url = "https://files.pythonhosted.org/packages/02/9c/207547916a02c78f6bdd83448d9b21afbc42f6379ed887ecf610984f3b4e/matplotlib-3.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1d9d3713a237970569156cfb4de7533b7c4eacdd61789726f444f96a0d28f57f", size = 8273212, upload-time = "2025-10-09T00:26:56.752Z" }, - { url = "https://files.pythonhosted.org/packages/bc/d0/b3d3338d467d3fc937f0bb7f256711395cae6f78e22cef0656159950adf0/matplotlib-3.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37a1fea41153dd6ee061d21ab69c9cf2cf543160b1b85d89cd3d2e2a7902ca4c", size = 8128713, upload-time = "2025-10-09T00:26:59.001Z" }, - { url = "https://files.pythonhosted.org/packages/22/ff/6425bf5c20d79aa5b959d1ce9e65f599632345391381c9a104133fe0b171/matplotlib-3.10.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3c4ea4948d93c9c29dc01c0c23eef66f2101bf75158c291b88de6525c55c3d1", size = 8698527, upload-time = "2025-10-09T00:27:00.69Z" }, - { url = "https://files.pythonhosted.org/packages/d0/7f/ccdca06f4c2e6c7989270ed7829b8679466682f4cfc0f8c9986241c023b6/matplotlib-3.10.7-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22df30ffaa89f6643206cf13877191c63a50e8f800b038bc39bee9d2d4957632", size = 9529690, upload-time = "2025-10-09T00:27:02.664Z" }, - { url = "https://files.pythonhosted.org/packages/b8/95/b80fc2c1f269f21ff3d193ca697358e24408c33ce2b106a7438a45407b63/matplotlib-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b69676845a0a66f9da30e87f48be36734d6748024b525ec4710be40194282c84", size = 9593732, upload-time = "2025-10-09T00:27:04.653Z" }, - { url = "https://files.pythonhosted.org/packages/e1/b6/23064a96308b9aeceeffa65e96bcde459a2ea4934d311dee20afde7407a0/matplotlib-3.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:744991e0cc863dd669c8dc9136ca4e6e0082be2070b9d793cbd64bec872a6815", size = 8122727, upload-time = "2025-10-09T00:27:06.814Z" }, - { url = "https://files.pythonhosted.org/packages/b3/a6/2faaf48133b82cf3607759027f82b5c702aa99cdfcefb7f93d6ccf26a424/matplotlib-3.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:fba2974df0bf8ce3c995fa84b79cde38326e0f7b5409e7a3a481c1141340bcf7", size = 7992958, upload-time = "2025-10-09T00:27:08.567Z" }, - { url = "https://files.pythonhosted.org/packages/4a/f0/b018fed0b599bd48d84c08794cb242227fe3341952da102ee9d9682db574/matplotlib-3.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:932c55d1fa7af4423422cb6a492a31cbcbdbe68fd1a9a3f545aa5e7a143b5355", size = 8316849, upload-time = "2025-10-09T00:27:10.254Z" }, - { url = "https://files.pythonhosted.org/packages/b0/b7/bb4f23856197659f275e11a2a164e36e65e9b48ea3e93c4ec25b4f163198/matplotlib-3.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e38c2d581d62ee729a6e144c47a71b3f42fb4187508dbbf4fe71d5612c3433b", size = 8178225, upload-time = "2025-10-09T00:27:12.241Z" }, - { url = "https://files.pythonhosted.org/packages/62/56/0600609893ff277e6f3ab3c0cef4eafa6e61006c058e84286c467223d4d5/matplotlib-3.10.7-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:786656bb13c237bbcebcd402f65f44dd61ead60ee3deb045af429d889c8dbc67", size = 8711708, upload-time = "2025-10-09T00:27:13.879Z" }, - { url = "https://files.pythonhosted.org/packages/d8/1a/6bfecb0cafe94d6658f2f1af22c43b76cf7a1c2f0dc34ef84cbb6809617e/matplotlib-3.10.7-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09d7945a70ea43bf9248f4b6582734c2fe726723204a76eca233f24cffc7ef67", size = 9541409, upload-time = "2025-10-09T00:27:15.684Z" }, - { url = "https://files.pythonhosted.org/packages/08/50/95122a407d7f2e446fd865e2388a232a23f2b81934960ea802f3171518e4/matplotlib-3.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d0b181e9fa8daf1d9f2d4c547527b167cb8838fc587deabca7b5c01f97199e84", size = 9594054, upload-time = "2025-10-09T00:27:17.547Z" }, - { url = "https://files.pythonhosted.org/packages/13/76/75b194a43b81583478a81e78a07da8d9ca6ddf50dd0a2ccabf258059481d/matplotlib-3.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:31963603041634ce1a96053047b40961f7a29eb8f9a62e80cc2c0427aa1d22a2", size = 8200100, upload-time = "2025-10-09T00:27:20.039Z" }, - { url = "https://files.pythonhosted.org/packages/f5/9e/6aefebdc9f8235c12bdeeda44cc0383d89c1e41da2c400caf3ee2073a3ce/matplotlib-3.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:aebed7b50aa6ac698c90f60f854b47e48cd2252b30510e7a1feddaf5a3f72cbf", size = 8042131, upload-time = "2025-10-09T00:27:21.608Z" }, - { url = "https://files.pythonhosted.org/packages/0d/4b/e5bc2c321b6a7e3a75638d937d19ea267c34bd5a90e12bee76c4d7c7a0d9/matplotlib-3.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d883460c43e8c6b173fef244a2341f7f7c0e9725c7fe68306e8e44ed9c8fb100", size = 8273787, upload-time = "2025-10-09T00:27:23.27Z" }, - { url = "https://files.pythonhosted.org/packages/86/ad/6efae459c56c2fbc404da154e13e3a6039129f3c942b0152624f1c621f05/matplotlib-3.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07124afcf7a6504eafcb8ce94091c5898bbdd351519a1beb5c45f7a38c67e77f", size = 8131348, upload-time = "2025-10-09T00:27:24.926Z" }, - { url = "https://files.pythonhosted.org/packages/a6/5a/a4284d2958dee4116359cc05d7e19c057e64ece1b4ac986ab0f2f4d52d5a/matplotlib-3.10.7-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c17398b709a6cce3d9fdb1595c33e356d91c098cd9486cb2cc21ea2ea418e715", size = 9533949, upload-time = "2025-10-09T00:27:26.704Z" }, - { url = "https://files.pythonhosted.org/packages/de/ff/f3781b5057fa3786623ad8976fc9f7b0d02b2f28534751fd5a44240de4cf/matplotlib-3.10.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7146d64f561498764561e9cd0ed64fcf582e570fc519e6f521e2d0cfd43365e1", size = 9804247, upload-time = "2025-10-09T00:27:28.514Z" }, - { url = "https://files.pythonhosted.org/packages/47/5a/993a59facb8444efb0e197bf55f545ee449902dcee86a4dfc580c3b61314/matplotlib-3.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:90ad854c0a435da3104c01e2c6f0028d7e719b690998a2333d7218db80950722", size = 9595497, upload-time = "2025-10-09T00:27:30.418Z" }, - { url = "https://files.pythonhosted.org/packages/0d/a5/77c95aaa9bb32c345cbb49626ad8eb15550cba2e6d4c88081a6c2ac7b08d/matplotlib-3.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:4645fc5d9d20ffa3a39361fcdbcec731382763b623b72627806bf251b6388866", size = 8252732, upload-time = "2025-10-09T00:27:32.332Z" }, - { url = "https://files.pythonhosted.org/packages/74/04/45d269b4268d222390d7817dae77b159651909669a34ee9fdee336db5883/matplotlib-3.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:9257be2f2a03415f9105c486d304a321168e61ad450f6153d77c69504ad764bb", size = 8124240, upload-time = "2025-10-09T00:27:33.94Z" }, - { url = "https://files.pythonhosted.org/packages/4b/c7/ca01c607bb827158b439208c153d6f14ddb9fb640768f06f7ca3488ae67b/matplotlib-3.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1e4bbad66c177a8fdfa53972e5ef8be72a5f27e6a607cec0d8579abd0f3102b1", size = 8316938, upload-time = "2025-10-09T00:27:35.534Z" }, - { url = "https://files.pythonhosted.org/packages/84/d2/5539e66e9f56d2fdec94bb8436f5e449683b4e199bcc897c44fbe3c99e28/matplotlib-3.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d8eb7194b084b12feb19142262165832fc6ee879b945491d1c3d4660748020c4", size = 8178245, upload-time = "2025-10-09T00:27:37.334Z" }, - { url = "https://files.pythonhosted.org/packages/77/b5/e6ca22901fd3e4fe433a82e583436dd872f6c966fca7e63cf806b40356f8/matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d41379b05528091f00e1728004f9a8d7191260f3862178b88e8fd770206318", size = 9541411, upload-time = "2025-10-09T00:27:39.387Z" }, - { url = "https://files.pythonhosted.org/packages/9e/99/a4524db57cad8fee54b7237239a8f8360bfcfa3170d37c9e71c090c0f409/matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4a74f79fafb2e177f240579bc83f0b60f82cc47d2f1d260f422a0627207008ca", size = 9803664, upload-time = "2025-10-09T00:27:41.492Z" }, - { url = "https://files.pythonhosted.org/packages/e6/a5/85e2edf76ea0ad4288d174926d9454ea85f3ce5390cc4e6fab196cbf250b/matplotlib-3.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:702590829c30aada1e8cef0568ddbffa77ca747b4d6e36c6d173f66e301f89cc", size = 9594066, upload-time = "2025-10-09T00:27:43.694Z" }, - { url = "https://files.pythonhosted.org/packages/39/69/9684368a314f6d83fe5c5ad2a4121a3a8e03723d2e5c8ea17b66c1bad0e7/matplotlib-3.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:f79d5de970fc90cd5591f60053aecfce1fcd736e0303d9f0bf86be649fa68fb8", size = 8342832, upload-time = "2025-10-09T00:27:45.543Z" }, - { url = "https://files.pythonhosted.org/packages/04/5f/e22e08da14bc1a0894184640d47819d2338b792732e20d292bf86e5ab785/matplotlib-3.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:cb783436e47fcf82064baca52ce748af71725d0352e1d31564cbe9c95df92b9c", size = 8172585, upload-time = "2025-10-09T00:27:47.185Z" }, - { url = "https://files.pythonhosted.org/packages/1e/6c/a9bcf03e9afb2a873e0a5855f79bce476d1023f26f8212969f2b7504756c/matplotlib-3.10.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5c09cf8f2793f81368f49f118b6f9f937456362bee282eac575cca7f84cda537", size = 8241204, upload-time = "2025-10-09T00:27:48.806Z" }, - { url = "https://files.pythonhosted.org/packages/5b/fd/0e6f5aa762ed689d9fa8750b08f1932628ffa7ed30e76423c399d19407d2/matplotlib-3.10.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:de66744b2bb88d5cd27e80dfc2ec9f0517d0a46d204ff98fe9e5f2864eb67657", size = 8104607, upload-time = "2025-10-09T00:27:50.876Z" }, - { url = "https://files.pythonhosted.org/packages/b9/a9/21c9439d698fac5f0de8fc68b2405b738ed1f00e1279c76f2d9aa5521ead/matplotlib-3.10.7-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:53cc80662dd197ece414dd5b66e07370201515a3eaf52e7c518c68c16814773b", size = 8682257, upload-time = "2025-10-09T00:27:52.597Z" }, - { url = "https://files.pythonhosted.org/packages/58/8f/76d5dc21ac64a49e5498d7f0472c0781dae442dd266a67458baec38288ec/matplotlib-3.10.7-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:15112bcbaef211bd663fa935ec33313b948e214454d949b723998a43357b17b0", size = 8252283, upload-time = "2025-10-09T00:27:54.739Z" }, - { url = "https://files.pythonhosted.org/packages/27/0d/9c5d4c2317feb31d819e38c9f947c942f42ebd4eb935fc6fd3518a11eaa7/matplotlib-3.10.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d2a959c640cdeecdd2ec3136e8ea0441da59bcaf58d67e9c590740addba2cb68", size = 8116733, upload-time = "2025-10-09T00:27:56.406Z" }, - { url = "https://files.pythonhosted.org/packages/9a/cc/3fe688ff1355010937713164caacf9ed443675ac48a997bab6ed23b3f7c0/matplotlib-3.10.7-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3886e47f64611046bc1db523a09dd0a0a6bed6081e6f90e13806dd1d1d1b5e91", size = 8693919, upload-time = "2025-10-09T00:27:58.41Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/8a/76/d3c6e3a13fe484ebe7718d14e269c9569c4eb0020a968a327acb3b9a8fe6/matplotlib-3.10.8.tar.gz", hash = "sha256:2299372c19d56bcd35cf05a2738308758d32b9eaed2371898d8f5bd33f084aa3", size = 34806269, upload-time = "2025-12-10T22:56:51.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/be/a30bd917018ad220c400169fba298f2bb7003c8ccbc0c3e24ae2aacad1e8/matplotlib-3.10.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:00270d217d6b20d14b584c521f810d60c5c78406dc289859776550df837dcda7", size = 8239828, upload-time = "2025-12-10T22:55:02.313Z" }, + { url = "https://files.pythonhosted.org/packages/58/27/ca01e043c4841078e82cf6e80a6993dfecd315c3d79f5f3153afbb8e1ec6/matplotlib-3.10.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37b3c1cc42aa184b3f738cfa18c1c1d72fd496d85467a6cf7b807936d39aa656", size = 8128050, upload-time = "2025-12-10T22:55:04.997Z" }, + { url = "https://files.pythonhosted.org/packages/cb/aa/7ab67f2b729ae6a91bcf9dcac0affb95fb8c56f7fd2b2af894ae0b0cf6fa/matplotlib-3.10.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ee40c27c795bda6a5292e9cff9890189d32f7e3a0bf04e0e3c9430c4a00c37df", size = 8700452, upload-time = "2025-12-10T22:55:07.47Z" }, + { url = "https://files.pythonhosted.org/packages/73/ae/2d5817b0acee3c49b7e7ccfbf5b273f284957cc8e270adf36375db353190/matplotlib-3.10.8-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a48f2b74020919552ea25d222d5cc6af9ca3f4eb43a93e14d068457f545c2a17", size = 9534928, upload-time = "2025-12-10T22:55:10.566Z" }, + { url = "https://files.pythonhosted.org/packages/c9/5b/8e66653e9f7c39cb2e5cab25fce4810daffa2bff02cbf5f3077cea9e942c/matplotlib-3.10.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f254d118d14a7f99d616271d6c3c27922c092dac11112670b157798b89bf4933", size = 9586377, upload-time = "2025-12-10T22:55:12.362Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/fd0bbadf837f81edb0d208ba8f8cb552874c3b16e27cb91a31977d90875d/matplotlib-3.10.8-cp310-cp310-win_amd64.whl", hash = "sha256:f9b587c9c7274c1613a30afabf65a272114cd6cdbe67b3406f818c79d7ab2e2a", size = 8128127, upload-time = "2025-12-10T22:55:14.436Z" }, + { url = "https://files.pythonhosted.org/packages/f8/86/de7e3a1cdcfc941483af70609edc06b83e7c8a0e0dc9ac325200a3f4d220/matplotlib-3.10.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6be43b667360fef5c754dda5d25a32e6307a03c204f3c0fc5468b78fa87b4160", size = 8251215, upload-time = "2025-12-10T22:55:16.175Z" }, + { url = "https://files.pythonhosted.org/packages/fd/14/baad3222f424b19ce6ad243c71de1ad9ec6b2e4eb1e458a48fdc6d120401/matplotlib-3.10.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2b336e2d91a3d7006864e0990c83b216fcdca64b5a6484912902cef87313d78", size = 8139625, upload-time = "2025-12-10T22:55:17.712Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a0/7024215e95d456de5883e6732e708d8187d9753a21d32f8ddb3befc0c445/matplotlib-3.10.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:efb30e3baaea72ce5928e32bab719ab4770099079d66726a62b11b1ef7273be4", size = 8712614, upload-time = "2025-12-10T22:55:20.8Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f4/b8347351da9a5b3f41e26cf547252d861f685c6867d179a7c9d60ad50189/matplotlib-3.10.8-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d56a1efd5bfd61486c8bc968fa18734464556f0fb8e51690f4ac25d85cbbbbc2", size = 9540997, upload-time = "2025-12-10T22:55:23.258Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c0/c7b914e297efe0bc36917bf216b2acb91044b91e930e878ae12981e461e5/matplotlib-3.10.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238b7ce5717600615c895050239ec955d91f321c209dd110db988500558e70d6", size = 9596825, upload-time = "2025-12-10T22:55:25.217Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d3/a4bbc01c237ab710a1f22b4da72f4ff6d77eb4c7735ea9811a94ae239067/matplotlib-3.10.8-cp311-cp311-win_amd64.whl", hash = "sha256:18821ace09c763ec93aef5eeff087ee493a24051936d7b9ebcad9662f66501f9", size = 8135090, upload-time = "2025-12-10T22:55:27.162Z" }, + { url = "https://files.pythonhosted.org/packages/89/dd/a0b6588f102beab33ca6f5218b31725216577b2a24172f327eaf6417d5c9/matplotlib-3.10.8-cp311-cp311-win_arm64.whl", hash = "sha256:bab485bcf8b1c7d2060b4fcb6fc368a9e6f4cd754c9c2fea281f4be21df394a2", size = 8012377, upload-time = "2025-12-10T22:55:29.185Z" }, + { url = "https://files.pythonhosted.org/packages/9e/67/f997cdcbb514012eb0d10cd2b4b332667997fb5ebe26b8d41d04962fa0e6/matplotlib-3.10.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:64fcc24778ca0404ce0cb7b6b77ae1f4c7231cdd60e6778f999ee05cbd581b9a", size = 8260453, upload-time = "2025-12-10T22:55:30.709Z" }, + { url = "https://files.pythonhosted.org/packages/7e/65/07d5f5c7f7c994f12c768708bd2e17a4f01a2b0f44a1c9eccad872433e2e/matplotlib-3.10.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9a5ca4ac220a0cdd1ba6bcba3608547117d30468fefce49bb26f55c1a3d5c58", size = 8148321, upload-time = "2025-12-10T22:55:33.265Z" }, + { url = "https://files.pythonhosted.org/packages/3e/f3/c5195b1ae57ef85339fd7285dfb603b22c8b4e79114bae5f4f0fcf688677/matplotlib-3.10.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ab4aabc72de4ff77b3ec33a6d78a68227bf1123465887f9905ba79184a1cc04", size = 8716944, upload-time = "2025-12-10T22:55:34.922Z" }, + { url = "https://files.pythonhosted.org/packages/00/f9/7638f5cc82ec8a7aa005de48622eecc3ed7c9854b96ba15bd76b7fd27574/matplotlib-3.10.8-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24d50994d8c5816ddc35411e50a86ab05f575e2530c02752e02538122613371f", size = 9550099, upload-time = "2025-12-10T22:55:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/57/61/78cd5920d35b29fd2a0fe894de8adf672ff52939d2e9b43cb83cd5ce1bc7/matplotlib-3.10.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:99eefd13c0dc3b3c1b4d561c1169e65fe47aab7b8158754d7c084088e2329466", size = 9613040, upload-time = "2025-12-10T22:55:38.715Z" }, + { url = "https://files.pythonhosted.org/packages/30/4e/c10f171b6e2f44d9e3a2b96efa38b1677439d79c99357600a62cc1e9594e/matplotlib-3.10.8-cp312-cp312-win_amd64.whl", hash = "sha256:dd80ecb295460a5d9d260df63c43f4afbdd832d725a531f008dad1664f458adf", size = 8142717, upload-time = "2025-12-10T22:55:41.103Z" }, + { url = "https://files.pythonhosted.org/packages/f1/76/934db220026b5fef85f45d51a738b91dea7d70207581063cd9bd8fafcf74/matplotlib-3.10.8-cp312-cp312-win_arm64.whl", hash = "sha256:3c624e43ed56313651bc18a47f838b60d7b8032ed348911c54906b130b20071b", size = 8012751, upload-time = "2025-12-10T22:55:42.684Z" }, + { url = "https://files.pythonhosted.org/packages/3d/b9/15fd5541ef4f5b9a17eefd379356cf12175fe577424e7b1d80676516031a/matplotlib-3.10.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3f2e409836d7f5ac2f1c013110a4d50b9f7edc26328c108915f9075d7d7a91b6", size = 8261076, upload-time = "2025-12-10T22:55:44.648Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a0/2ba3473c1b66b9c74dc7107c67e9008cb1782edbe896d4c899d39ae9cf78/matplotlib-3.10.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56271f3dac49a88d7fca5060f004d9d22b865f743a12a23b1e937a0be4818ee1", size = 8148794, upload-time = "2025-12-10T22:55:46.252Z" }, + { url = "https://files.pythonhosted.org/packages/75/97/a471f1c3eb1fd6f6c24a31a5858f443891d5127e63a7788678d14e249aea/matplotlib-3.10.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a0a7f52498f72f13d4a25ea70f35f4cb60642b466cbb0a9be951b5bc3f45a486", size = 8718474, upload-time = "2025-12-10T22:55:47.864Z" }, + { url = "https://files.pythonhosted.org/packages/01/be/cd478f4b66f48256f42927d0acbcd63a26a893136456cd079c0cc24fbabf/matplotlib-3.10.8-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:646d95230efb9ca614a7a594d4fcacde0ac61d25e37dd51710b36477594963ce", size = 9549637, upload-time = "2025-12-10T22:55:50.048Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/8dc289776eae5109e268c4fb92baf870678dc048a25d4ac903683b86d5bf/matplotlib-3.10.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f89c151aab2e2e23cb3fe0acad1e8b82841fd265379c4cecd0f3fcb34c15e0f6", size = 9613678, upload-time = "2025-12-10T22:55:52.21Z" }, + { url = "https://files.pythonhosted.org/packages/64/40/37612487cc8a437d4dd261b32ca21fe2d79510fe74af74e1f42becb1bdb8/matplotlib-3.10.8-cp313-cp313-win_amd64.whl", hash = "sha256:e8ea3e2d4066083e264e75c829078f9e149fa119d27e19acd503de65e0b13149", size = 8142686, upload-time = "2025-12-10T22:55:54.253Z" }, + { url = "https://files.pythonhosted.org/packages/66/52/8d8a8730e968185514680c2a6625943f70269509c3dcfc0dcf7d75928cb8/matplotlib-3.10.8-cp313-cp313-win_arm64.whl", hash = "sha256:c108a1d6fa78a50646029cb6d49808ff0fc1330fda87fa6f6250c6b5369b6645", size = 8012917, upload-time = "2025-12-10T22:55:56.268Z" }, + { url = "https://files.pythonhosted.org/packages/b5/27/51fe26e1062f298af5ef66343d8ef460e090a27fea73036c76c35821df04/matplotlib-3.10.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ad3d9833a64cf48cc4300f2b406c3d0f4f4724a91c0bd5640678a6ba7c102077", size = 8305679, upload-time = "2025-12-10T22:55:57.856Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1e/4de865bc591ac8e3062e835f42dd7fe7a93168d519557837f0e37513f629/matplotlib-3.10.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:eb3823f11823deade26ce3b9f40dcb4a213da7a670013929f31d5f5ed1055b22", size = 8198336, upload-time = "2025-12-10T22:55:59.371Z" }, + { url = "https://files.pythonhosted.org/packages/c6/cb/2f7b6e75fb4dce87ef91f60cac4f6e34f4c145ab036a22318ec837971300/matplotlib-3.10.8-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d9050fee89a89ed57b4fb2c1bfac9a3d0c57a0d55aed95949eedbc42070fea39", size = 8731653, upload-time = "2025-12-10T22:56:01.032Z" }, + { url = "https://files.pythonhosted.org/packages/46/b3/bd9c57d6ba670a37ab31fb87ec3e8691b947134b201f881665b28cc039ff/matplotlib-3.10.8-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b44d07310e404ba95f8c25aa5536f154c0a8ec473303535949e52eb71d0a1565", size = 9561356, upload-time = "2025-12-10T22:56:02.95Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3d/8b94a481456dfc9dfe6e39e93b5ab376e50998cddfd23f4ae3b431708f16/matplotlib-3.10.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0a33deb84c15ede243aead39f77e990469fff93ad1521163305095b77b72ce4a", size = 9614000, upload-time = "2025-12-10T22:56:05.411Z" }, + { url = "https://files.pythonhosted.org/packages/bd/cd/bc06149fe5585ba800b189a6a654a75f1f127e8aab02fd2be10df7fa500c/matplotlib-3.10.8-cp313-cp313t-win_amd64.whl", hash = "sha256:3a48a78d2786784cc2413e57397981fb45c79e968d99656706018d6e62e57958", size = 8220043, upload-time = "2025-12-10T22:56:07.551Z" }, + { url = "https://files.pythonhosted.org/packages/e3/de/b22cf255abec916562cc04eef457c13e58a1990048de0c0c3604d082355e/matplotlib-3.10.8-cp313-cp313t-win_arm64.whl", hash = "sha256:15d30132718972c2c074cd14638c7f4592bd98719e2308bccea40e0538bc0cb5", size = 8062075, upload-time = "2025-12-10T22:56:09.178Z" }, + { url = "https://files.pythonhosted.org/packages/3c/43/9c0ff7a2f11615e516c3b058e1e6e8f9614ddeca53faca06da267c48345d/matplotlib-3.10.8-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b53285e65d4fa4c86399979e956235deb900be5baa7fc1218ea67fbfaeaadd6f", size = 8262481, upload-time = "2025-12-10T22:56:10.885Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32f8dce744be5569bebe789e46727946041199030db8aeb2954d26013a0eb26b", size = 8151473, upload-time = "2025-12-10T22:56:12.377Z" }, + { url = "https://files.pythonhosted.org/packages/f1/6f/009d129ae70b75e88cbe7e503a12a4c0670e08ed748a902c2568909e9eb5/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cf267add95b1c88300d96ca837833d4112756045364f5c734a2276038dae27d", size = 9553896, upload-time = "2025-12-10T22:56:14.432Z" }, + { url = "https://files.pythonhosted.org/packages/f5/26/4221a741eb97967bc1fd5e4c52b9aa5a91b2f4ec05b59f6def4d820f9df9/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2cf5bd12cecf46908f286d7838b2abc6c91cda506c0445b8223a7c19a00df008", size = 9824193, upload-time = "2025-12-10T22:56:16.29Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/3abf75f38605772cf48a9daf5821cd4f563472f38b4b828c6fba6fa6d06e/matplotlib-3.10.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:41703cc95688f2516b480f7f339d8851a6035f18e100ee6a32bc0b8536a12a9c", size = 9615444, upload-time = "2025-12-10T22:56:18.155Z" }, + { url = "https://files.pythonhosted.org/packages/93/a5/de89ac80f10b8dc615807ee1133cd99ac74082581196d4d9590bea10690d/matplotlib-3.10.8-cp314-cp314-win_amd64.whl", hash = "sha256:83d282364ea9f3e52363da262ce32a09dfe241e4080dcedda3c0db059d3c1f11", size = 8272719, upload-time = "2025-12-10T22:56:20.366Z" }, + { url = "https://files.pythonhosted.org/packages/69/ce/b006495c19ccc0a137b48083168a37bd056392dee02f87dba0472f2797fe/matplotlib-3.10.8-cp314-cp314-win_arm64.whl", hash = "sha256:2c1998e92cd5999e295a731bcb2911c75f597d937341f3030cc24ef2733d78a8", size = 8144205, upload-time = "2025-12-10T22:56:22.239Z" }, + { url = "https://files.pythonhosted.org/packages/68/d9/b31116a3a855bd313c6fcdb7226926d59b041f26061c6c5b1be66a08c826/matplotlib-3.10.8-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b5a2b97dbdc7d4f353ebf343744f1d1f1cca8aa8bfddb4262fcf4306c3761d50", size = 8305785, upload-time = "2025-12-10T22:56:24.218Z" }, + { url = "https://files.pythonhosted.org/packages/1e/90/6effe8103f0272685767ba5f094f453784057072f49b393e3ea178fe70a5/matplotlib-3.10.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3f5c3e4da343bba819f0234186b9004faba952cc420fbc522dc4e103c1985908", size = 8198361, upload-time = "2025-12-10T22:56:26.787Z" }, + { url = "https://files.pythonhosted.org/packages/d7/65/a73188711bea603615fc0baecca1061429ac16940e2385433cc778a9d8e7/matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f62550b9a30afde8c1c3ae450e5eb547d579dd69b25c2fc7a1c67f934c1717a", size = 9561357, upload-time = "2025-12-10T22:56:28.953Z" }, + { url = "https://files.pythonhosted.org/packages/f4/3d/b5c5d5d5be8ce63292567f0e2c43dde9953d3ed86ac2de0a72e93c8f07a1/matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:495672de149445ec1b772ff2c9ede9b769e3cb4f0d0aa7fa730d7f59e2d4e1c1", size = 9823610, upload-time = "2025-12-10T22:56:31.455Z" }, + { url = "https://files.pythonhosted.org/packages/4d/4b/e7beb6bbd49f6bae727a12b270a2654d13c397576d25bd6786e47033300f/matplotlib-3.10.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:595ba4d8fe983b88f0eec8c26a241e16d6376fe1979086232f481f8f3f67494c", size = 9614011, upload-time = "2025-12-10T22:56:33.85Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e6/76f2813d31f032e65f6f797e3f2f6e4aab95b65015924b1c51370395c28a/matplotlib-3.10.8-cp314-cp314t-win_amd64.whl", hash = "sha256:25d380fe8b1dc32cf8f0b1b448470a77afb195438bafdf1d858bfb876f3edf7b", size = 8362801, upload-time = "2025-12-10T22:56:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/5d/49/d651878698a0b67f23aa28e17f45a6d6dd3d3f933fa29087fa4ce5947b5a/matplotlib-3.10.8-cp314-cp314t-win_arm64.whl", hash = "sha256:113bb52413ea508ce954a02c10ffd0d565f9c3bc7f2eddc27dfe1731e71c7b5f", size = 8192560, upload-time = "2025-12-10T22:56:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/f5/43/31d59500bb950b0d188e149a2e552040528c13d6e3d6e84d0cccac593dcd/matplotlib-3.10.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f97aeb209c3d2511443f8797e3e5a569aebb040d4f8bc79aa3ee78a8fb9e3dd8", size = 8237252, upload-time = "2025-12-10T22:56:39.529Z" }, + { url = "https://files.pythonhosted.org/packages/0c/2c/615c09984f3c5f907f51c886538ad785cf72e0e11a3225de2c0f9442aecc/matplotlib-3.10.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fb061f596dad3a0f52b60dc6a5dec4a0c300dec41e058a7efe09256188d170b7", size = 8124693, upload-time = "2025-12-10T22:56:41.758Z" }, + { url = "https://files.pythonhosted.org/packages/91/e1/2757277a1c56041e1fc104b51a0f7b9a4afc8eb737865d63cababe30bc61/matplotlib-3.10.8-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:12d90df9183093fcd479f4172ac26b322b1248b15729cb57f42f71f24c7e37a3", size = 8702205, upload-time = "2025-12-10T22:56:43.415Z" }, + { url = "https://files.pythonhosted.org/packages/04/30/3afaa31c757f34b7725ab9d2ba8b48b5e89c2019c003e7d0ead143aabc5a/matplotlib-3.10.8-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6da7c2ce169267d0d066adcf63758f0604aa6c3eebf67458930f9d9b79ad1db1", size = 8249198, upload-time = "2025-12-10T22:56:45.584Z" }, + { url = "https://files.pythonhosted.org/packages/48/2f/6334aec331f57485a642a7c8be03cb286f29111ae71c46c38b363230063c/matplotlib-3.10.8-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9153c3292705be9f9c64498a8872118540c3f4123d1a1c840172edf262c8be4a", size = 8136817, upload-time = "2025-12-10T22:56:47.339Z" }, + { url = "https://files.pythonhosted.org/packages/73/e4/6d6f14b2a759c622f191b2d67e9075a3f56aaccb3be4bb9bb6890030d0a0/matplotlib-3.10.8-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ae029229a57cd1e8fe542485f27e7ca7b23aa9e8944ddb4985d0bc444f1eca2", size = 8713867, upload-time = "2025-12-10T22:56:48.954Z" }, ] [[package]] @@ -2637,7 +2637,7 @@ wheels = [ [[package]] name = "pecos-rslib" -version = "0.7.0.dev4" +version = "0.8.0.dev0" source = { editable = "python/pecos-rslib" } [package.dev-dependencies] @@ -2666,7 +2666,7 @@ test = [{ name = "pytest", specifier = ">=7.0" }] [[package]] name = "pecos-workspace" -version = "0.7.0.dev4" +version = "0.8.0.dev0" source = { virtual = "." } dependencies = [ { name = "stim" }, @@ -3557,7 +3557,7 @@ wheels = [ [[package]] name = "quantum-pecos" -version = "0.7.0.dev4" +version = "0.8.0.dev0" source = { editable = "python/quantum-pecos" } dependencies = [ { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, @@ -4245,21 +4245,21 @@ wheels = [ [[package]] name = "tornado" -version = "6.5.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821, upload-time = "2025-08-08T18:27:00.78Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563, upload-time = "2025-08-08T18:26:42.945Z" }, - { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729, upload-time = "2025-08-08T18:26:44.473Z" }, - { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295, upload-time = "2025-08-08T18:26:46.021Z" }, - { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644, upload-time = "2025-08-08T18:26:47.625Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878, upload-time = "2025-08-08T18:26:50.599Z" }, - { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549, upload-time = "2025-08-08T18:26:51.864Z" }, - { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973, upload-time = "2025-08-08T18:26:53.625Z" }, - { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954, upload-time = "2025-08-08T18:26:55.072Z" }, - { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023, upload-time = "2025-08-08T18:26:56.677Z" }, - { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427, upload-time = "2025-08-08T18:26:57.91Z" }, - { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456, upload-time = "2025-08-08T18:26:59.207Z" }, +version = "6.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7f/2e/3d22d478f27cb4b41edd4db7f10cd7846d0a28ea443342de3dba97035166/tornado-6.5.3.tar.gz", hash = "sha256:16abdeb0211796ffc73765bc0a20119712d68afeeaf93d1a3f2edf6b3aee8d5a", size = 513348, upload-time = "2025-12-11T04:16:42.225Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/e9/bf22f66e1d5d112c0617974b5ce86666683b32c09b355dfcd59f8d5c8ef6/tornado-6.5.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2dd7d7e8d3e4635447a8afd4987951e3d4e8d1fb9ad1908c54c4002aabab0520", size = 443860, upload-time = "2025-12-11T04:16:26.638Z" }, + { url = "https://files.pythonhosted.org/packages/ca/9c/594b631f0b8dc5977080c7093d1e96f1377c10552577d2c31bb0208c9362/tornado-6.5.3-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5977a396f83496657779f59a48c38096ef01edfe4f42f1c0634b791dde8165d0", size = 442118, upload-time = "2025-12-11T04:16:28.32Z" }, + { url = "https://files.pythonhosted.org/packages/78/f6/685b869f5b5b9d9547571be838c6106172082751696355b60fc32a4988ed/tornado-6.5.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f72ac800be2ac73ddc1504f7aa21069a4137e8d70c387172c063d363d04f2208", size = 445700, upload-time = "2025-12-11T04:16:29.64Z" }, + { url = "https://files.pythonhosted.org/packages/91/4c/f0d19edf24912b7f21ae5e941f7798d132ad4d9b71441c1e70917a297265/tornado-6.5.3-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43c4fc4f5419c6561cfb8b884a8f6db7b142787d47821e1a0e1296253458265", size = 445041, upload-time = "2025-12-11T04:16:30.799Z" }, + { url = "https://files.pythonhosted.org/packages/eb/2b/e02da94f4a4aef2bb3b923c838ef284a77548a5f06bac2a8682b36b4eead/tornado-6.5.3-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de8b3fed4b3afb65d542d7702ac8767b567e240f6a43020be8eaef59328f117b", size = 445270, upload-time = "2025-12-11T04:16:32.316Z" }, + { url = "https://files.pythonhosted.org/packages/58/e2/7a7535d23133443552719dba526dacbb7415f980157da9f14950ddb88ad6/tornado-6.5.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:dbc4b4c32245b952566e17a20d5c1648fbed0e16aec3fc7e19f3974b36e0e47c", size = 445957, upload-time = "2025-12-11T04:16:33.913Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1f/9ff92eca81ff17a86286ec440dcd5eab0400326eb81761aa9a4eecb1ffb9/tornado-6.5.3-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:db238e8a174b4bfd0d0238b8cfcff1c14aebb4e2fcdafbf0ea5da3b81caceb4c", size = 445371, upload-time = "2025-12-11T04:16:35.093Z" }, + { url = "https://files.pythonhosted.org/packages/70/b1/1d03ae4526a393b0b839472a844397337f03c7f3a1e6b5c82241f0e18281/tornado-6.5.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:892595c100cd9b53a768cbfc109dfc55dec884afe2de5290611a566078d9692d", size = 445348, upload-time = "2025-12-11T04:16:36.679Z" }, + { url = "https://files.pythonhosted.org/packages/4b/7d/7c181feadc8941f418d0d26c3790ee34ffa4bd0a294bc5201d44ebd19c1e/tornado-6.5.3-cp39-abi3-win32.whl", hash = "sha256:88141456525fe291e47bbe1ba3ffb7982549329f09b4299a56813923af2bd197", size = 446433, upload-time = "2025-12-11T04:16:38.332Z" }, + { url = "https://files.pythonhosted.org/packages/34/98/4f7f938606e21d0baea8c6c39a7c8e95bdf8e50b0595b1bb6f0de2af7a6e/tornado-6.5.3-cp39-abi3-win_amd64.whl", hash = "sha256:ba4b513d221cc7f795a532c1e296f36bcf6a60e54b15efd3f092889458c69af1", size = 446842, upload-time = "2025-12-11T04:16:39.867Z" }, + { url = "https://files.pythonhosted.org/packages/7a/27/0e3fca4c4edf33fb6ee079e784c63961cd816971a45e5e4cacebe794158d/tornado-6.5.3-cp39-abi3-win_arm64.whl", hash = "sha256:278c54d262911365075dd45e0b6314308c74badd6ff9a54490e7daccdd5ed0ea", size = 445863, upload-time = "2025-12-11T04:16:41.099Z" }, ] [[package]]